LilyPond 記譜法リファレンス: 3.5.7 MIDI のチャンネル マッピング

### 3.5.7 MIDI のチャンネル マッピング

楽譜から MIDI ファイルを生成する場合、LilyPond は自動的に全ての音符を、MIDI デバイスに転送された時に再生されるべき MIDI チャンネルに割り当てます。MIDI チャンネル毎に設定できるパラメータがあり、例えば、そのチャンネルで音符が演奏される時に用いられる楽器を選択したり、そのチャンネルで演奏された音にいくつかのエフェクトを加えるように、MIDI デバイスに指示をしたりすることができます。常に、それぞれのパラメータはチャンネル毎に 1 つの値しか持つことができません (しかし途中で変更することは可能で、例えば楽譜の途中で楽器を変更することができます)。

MIDI は標準で 1 デバイスにつき 16 チャンネルのみを持つことができます。このチャンネル数の制限は、一度に演奏できる異なる楽器の数の制限にもなっています。

LilyPond は譜ごと、Lyrics コンテキスト毎に異なる MIDI トラックを生成します。 (`Score.midiChannelMapping` の値によっては、異なる楽器やボイス毎にトラックが生成される場合があります。) トラックの数には制限はありません。

MIDI のチャンネル数が制限されていることに対処するために、LilyPond には MIDI のチャンネル配置にいくつかの異なるモードが存在します。これは `Score.midiChannelMapping` コンテキスト プロパティで設定します。どの場合でも、制限よりも多い MIDI チャンネルが必要になった場合、割り当てられるチャンネル番号は 0 に戻ってきます。そのため、楽器の割り当てが間違っている音符ができるかもしれません。このコンテキスト プロパティは次のうちのどれかに設定することができます:

`'staff`

  楽譜に存在する譜ごとに異なる MIDI チャンネルを割り当てます (これがデフォルトです)。それぞれの譜に含まれる全てのボイスの全ての音符は同じ MIDI チャンネルを共有し、同じ MIDI トラックにエンコードされます。

  MIDI の歌詞は MIDI チャンネルを占有しませんが、譜と Lyrics コンテキストの合計数が 16 チャンネルの制限の対象となります。

`'instrument`

  楽譜に指定された MIDI 楽器ごとに異なる MIDI チャンネルを割り当てます。つまり、同じ MIDI 楽器を持つ音符は、譜やボイスが異なっていても、同じ MIDI チャンネル (やトラック) を共有するということです。

  この場合、歌詞コンテキストは (MIDI 楽器が指定されないため) MIDI チャンネルの 16 個という制限に数えられません。そのためこの設定は、楽譜に存在する譜や歌詞が 16 を超える場合には、MIDI チャンネルの割り当てがより良くなるかもしれません。

`'voice`

  譜の中で異なる名前を持つボイスごとに、異なる MIDI チャンネルを割り当てます。異なる譜に属するボイスは必ず異なる MIDI チャンネルに割り当てられますが、同じ譜に属するボイスが同じ名前を持つ場合、それらは同じ MIDI チャンネルに割り当てられます。`midiInstrument` や、いくつかのエフェクトを操作する プロパティは Staff コンテキストに属するため、ボイスごとに異なる値を持つことはできません。1 番目のボイスが、譜に設定された楽器やエフェクトで演奏され、1 番目のボイスと異なる名前を持つ他のボイスは、デフォルトの楽器やエフェクトで演奏されます。

  注: `Staff_performer` を `Staff` から `Voice` コンテキストへ移動し、`midiChannelMapping` をデフォルトの `'staff` か `'instrument` にすることで、同じ譜にあるボイスによって異なる楽器やエフェクトを指定することができます。下のコード断片を参照してください。

下の例では、デフォルトの MIDI チャンネルの割り当て方法を `'instrument` に変更しています:

>     \score {
>       ...music...
>       \midi {
>         \context {
>           \Score
>           midiChannelMapping = #'instrument
>         }
>       }
>     }

#### Selected Snippets

MIDI チャンネルをボイスごとに割り当てる

MIDI を出力する際、デフォルトの挙動では譜ごとに MIDI チャンネルが作られ、譜の中にある全てのボイスは統合されます。これは、トラックごとに 16 しか存在しない MIDI チャンネルが足りなくなる恐れを減らします。

しかしながら、次の例のように `Staff_performer` を `Voice` コンテキストに移動することで、ボイスごとに独自の MIDI チャンネルを持つようになります: 同じ譜にあるにもかかわらず、2 つの MIDI チャンネルが作られ、異なる `midiInstrument` が割り当てられます。

>     \score {
>       \new Staff <<
>         \new Voice \relative c''' {
>           \set midiInstrument = #"flute"
>           \voiceOne
>           \key g \major
>           \time 2/2
>           r2 g-"Flute" ~
>           g fis ~
>           fis4 g8 fis e2 ~
>           e4 d8 cis d2
>         }
>         \new Voice \relative c'' {
>           \set midiInstrument = #"clarinet"
>           \voiceTwo
>           b1-"Clarinet"
>           a2. b8 a
>           g2. fis8 e
>           fis2 r
>         }
>       >>
>       \layout { }
>       \midi {
>         \context {
>           \Staff
>           \remove "Staff_performer"
>         }
>         \context {
>           \Voice
>           \consists "Staff_performer"
>         }
>         \tempo 2 = 72
>       }
>     }

#### LilyPond — 記譜法リファレンス v2.22.2 (安定版).

- 2. 専門的な記譜法
- 3. 入出力全般
- 4. スペースの問題
- 5. デフォルトを変更する
- A. 付表
- B. カンニング ペーパー
- C. GNU Free Documentation License
- D. LilyPond コマンド インデックス
- E. LilyPond インデックス