JavaとMIDI:音色を変更する(1)

スポンサーリンク

一般のシンセサイザーは色々な音色をMIDIメッセージによって切り替えられるように作られています。音色のことはプログラムと呼ばれ音色変更のことはプログラムチェンジ program changeと言います。

MIDIメッセージの作り方

プログラムチェンジメッセージは以下のようなノートオンと同じようなショートメッセージと呼ばれるメッセージです。一つのステータスバイトと二つのデータバイトから作られます。

ステータスバイトは16進数2桁のうち2桁目がC固定、1桁目がチャンネル0-Fになります。チャンネルをnとすると0xCnの形式になります。

一つ目のデータバイトはプログラム番号0x00から0x7F、10進数で0から127までの値になり、二つ目は使いませんので0固定にします。

ショートメッセージは以下のように作ります。チャンネル0にプログラム番号10の音色を呼び出させるメッセージです。

ShortMessage message = new ShortMessage(ShortMessage.PROGRAM_CHANGE, 0, 10, 0)

トラックに設定するには以下のような流れになるでしょう。

まずシーケンスを取得しコンダクタートラックにテンポを設定します。

int resolution = 480;
Sequence sequence = new Sequence(Sequence.PPQ, resolution);
Track track;
track = sequence.createTrack();
double tempo = 120;
track.add(new MidiEvent(getTempoMessage(tempo), 0));

演奏用のトラックを作りそこに音色の設定をします。初期設定のためtickは0にしています。

track = sequence.createTrack();
track.add(new MidiEvent(new ShortMessage(ShortMessage.PROGRAM_CHANGE, 0, 10, 0), 0));

GMについて

プログラム番号と音色の関係はシンセサイザーによって異なりますがGM、General MIDIという規格ではこの関連が決められています。JavaのデフォルトのシンセサイザーもこのGMの規格に沿っているようです。音色を選ぶときにはGMの音色リストを参考にすれば目的の音色を設定する事ができるでしょう。

以下に英語版のwikipediaから一覧を転記しました。ただし音色名の左に記載されているプログラム番号は1ベースとなっています。Javaのプログラム番号は0ベースであるためコードに記述する際は1を引いた値を設定してください。上のコードではプログラム番号10を設定しましたがこれは下の表で言うところの「11 Music Box」に相当します。

数の数え方:0ベースと1ベース

グループ 音色名
Piano 1 Acoustic Grand Piano
2 Bright Acoustic Piano
3 Electric Grand Piano
4 Honky-tonk Piano
5 Electric Piano 1
6 Electric Piano 2
7 Harpsichord
8 Clavinet
Chromatic Percussion 9 Celesta
10 Glockenspiel
11 Music Box
12 Vibraphone
13 Marimba
14 Xylophone
15 Tubular Bells
16 Dulcimer
Organ 17 Drawbar Organ
18 Percussive Organ
19 Rock Organ
20 Church Organ
21 Reed Organ
22 Accordion
23 Harmonica
24 Tango Accordion
Guitar 25 Acoustic Guitar (nylon)
26 Acoustic Guitar (steel)
27 Electric Guitar (jazz)
28 Electric Guitar (clean)
29 Electric Guitar (muted)
30 Overdriven Guitar
31 Distortion Guitar
32 Guitar Harmonics
Bass 33 Acoustic Bass
34 Electric Bass (finger)
35 Electric Bass (pick)
36 Fretless Bass
37 Slap Bass 1
38 Slap Bass 2
39 Synth Bass 1
40 Synth Bass 2
Strings 41 Violin
42 Viola
43 Cello
44 Contrabass
45 Tremolo Strings
46 Pizzicato Strings
47 Orchestral Harp
48 Timpani
Ensemble 49 String Ensemble 1
50 String Ensemble 2
51 Synth Strings 1
52 Synth Strings 2
53 Choir Aahs
54 Voice Oohs
55 Synth Choir
56 Orchestra Hit
Brass 57 Trumpet
58 Trombone
59 Tuba
60 Muted Trumpet
61 French Horn
62 Brass Section
63 Synth Brass 1
64 Synth Brass 2
Reed 65 Soprano Sax
66 Alto Sax
67 Tenor Sax
68 Baritone Sax
69 Oboe
70 English Horn
71 Bassoon
72 Clarinet
Pipe 73 Piccolo
74 Flute
75 Recorder
76 Pan Flute
77 Blown bottle
78 Shakuhachi
79 Whistle
80 Ocarina
Synth Lead 81 Lead 1 (square)
82 Lead 2 (sawtooth)
83 Lead 3 (calliope)
84 Lead 4 (chiff)
85 Lead 5 (charang)
86 Lead 6 (voice)
87 Lead 7 (fifths)
88 Lead 8 (bass + lead)
Synth Pad 89 Pad 1 (new age)
90 Pad 2 (warm)
91 Pad 3 (polysynth)
92 Pad 4 (choir)
93 Pad 5 (bowed)
94 Pad 6 (metallic)
95 Pad 7 (halo)
96 Pad 8 (sweep)
Synth Effects 97 FX 1 (rain)
98 FX 2 (soundtrack)
99 FX 3 (crystal)
100 FX 4 (atmosphere)
101 FX 5 (brightness)
102 FX 6 (goblins)
103 FX 7 (echoes)
104 FX 8 (sci-fi)
Ethnic 105 Sitar
106 Banjo
107 Shamisen
108 Koto
109 Kalimba
110 Bagpipe
111 Fiddle
112 Shanai
Percussive 113 Tinkle Bell
114 Agogo
115 Steel Drums
116 Woodblock
117 Taiko Drum
118 Melodic Tom
119 Synth Drum
120 Reverse Cymbal
Sound effects 121 Guitar Fret Noise
122 Breath Noise
123 Seashore
124 Bird Tweet
125 Telephone Ring
126 Helicopter
127 Applause
128 Gunshot

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

%d人のブロガーが「いいね」をつけました。