須通り
Sudo Masaaki official site
For the reinstatement of
population ecology.

ホーム | 雑記トップ | 特集「LilyPondで吹奏楽」 | LilyPondを用いた音楽制作の基本ワークフローとデータの入出力

はじめに

音楽に限らず創作活動の効率を上げるために最も重要な原則のひとつは、既存のデータを最大限利用することである。データの入出力を極めれば、非芸術的な単純作業を繰り返す労苦から人は解放され、より一時の享楽に身を任せるに至るのだ。

LilyPondを用いた音楽制作の基本ワークフロー

説明してきた通りLilyPondは単一のアプリケーションというよりも、むしろプログラミング言語に近い。言語仕様に関しては、ここで小手先の解説をするよりも公式サイトのマニュアルを読んだ方が分かりやすい。問題は、LilyPond用編集手段の選び方と、それを用いて作業を進める際の基本的な流れである。

がむしゃらに使い始める前に、まず以下の一連の質問に答えてみてほしい。

  • 既にある紙楽譜を元にスコア/パート譜を打ち込む作業か、それとも新規楽曲の楽譜を作るのか?
  • (前の質問で後者の場合)作曲ないしアレンジの環境は紙面ベースか、MIDIベースか?
  • MusicXML形式でのデータ出力が可能なDAW、具体的にはCubaseやLogic Pro Xを持っているか?
  • プレイバック音源は徹底的に作り込みたいか?

一方、LilyPondを用いた制作ワークフローは主として以下の4つに分けられる。

  1. LilyPond文法に従ってテキストエディタで打込み+LilyPondでコンパイル
  2. DAW→(MusicXML形式でデータ受け渡し)→レイアウトを修正→LilyPondでコンパイル
  3. DAWないしMIDIシーケンサ→(General MIDI形式でデータ受け渡し)→midi2lyモジュールでlilypond形式に変換→アーティキュレーション等を手動で追加→LilyPondでコンパイル
  4. MuseScore等の一部ノーテーションソフト→(LilyPond形式でデータ書き出し)→レイアウトを修正→LilyPondでコンパイル

既存の紙楽譜の打込み、および紙面ベースで進めてきたアレンジの浄書作業については、迷わず1の方法をお勧めする。テキスト入力は最初は取っ付きにくいが、慣れればGUIよりも遥かに高速かつ正確に打込めるからである。作曲ないしアレンジ作業そのものをPC上で進める場合は、2〜4のうち、各自の所有するソフトウェア環境に基づいたものを選べば良いだろう。DAW自体にスコアエディタがついているならば、アレンジ段階から積極的に使用しておくと、LilyPond上での整形の手間が若干省ける。とはいえ、プレイバック音源の作り込みを考えると(ノート長やvelocity等が画一化されてしまうので)スコアエディタを好まない人もいるだろう。一応の解決方法として、DAWのプロジェクトファイルをコピーし、片方はスコア出力用、片方は音源用に作り込むこともできる。

MusicXML形式で譜面データをエクスポートできないDAWや、MIDIシーケンサーを用いてアレンジ作業を進めてきた場合は、midi2lyというモジュールを用い、MIDIデータをlilypond形式に変換して取り込む。midi2lyの使い方は次項で紹介するが、出来ることと出来ないことの区別ははっきりしているので、あくまで次善の策と捉えてほしい。

midi2lyでMIDIデータをlilypond形式に変換する

midi2lyの正体は、Python(インタプリタ形プログラミング言語の一種)で書かれた関数である。LilyPond本体をインストールすると、lilypondのバイナリと同じ場所へmidi2lyもコピーされる。基本的にはコマンドラインから

midi2ly hogehoge.mid

などとして、カレントディレクトリにあるMIDIファイルを指定する。これにより、同名の.lyデータがカレントディレクトリに作成される。

    midi2lyのコマンド実行に関する注意点
  • もちろんmidi2lyへのパスが通っている必要がある。Windowsの場合は
    [既存の Path];C:¥Program Files¥LilyPond¥usr¥bin
    などとして、LilyPondのバイナリを置いている場所を環境変数PATHに追加。
  • Macの場合は
    /Applications/LilyPond.app/Contents/Resources/bin/lilypond
    が格納場所である場合が多い
  • MacにプレインストールされているPythonのバージョン次第では正常に実行できないことがある。再現条件がよく分からないため、筆者から詳細なコメントは控えたい。

なお、実行後は以下の点に気をつけて作業する必要がある。

    midi2lyが吐き出す.lyファイルに関する注意点
  • 文字エンコード方式がUTF-8ではなく、SHIFT-JISになっている場合がある。このままLilyPondに読み込むと叱られるので、まずソースファイルを何らかのテキストエディタで開き、「別名で保存」として文字エンコードをUTF-8(BOMなし)に変更してから保存。
  • MIDIデータが含まない情報、たとえば発想記号は後から手動で足す必要がある。
  • 休符の長さもMIDIでは明示しにくい概念なので、しばしば音楽的にアリエナイ表現になる。たとえば4分の4拍子で3小節と1拍半だけ休みの箇所は、{ R1*3 r4. } ではなく { r8*27 } になってしまう。これらはLilyPond用のエディタ上で手動修正する必要がある。

midi2lyに食べさせるMIDIデータの作り方

基本的に、midi2lyは融通の利かないモジュールである。予めMIDIシーケンサ上でデータを整形しないと、生成されるlilypondデータが汚かったり、モジュールそのものが異常終了したりする。この際の注意点は以下の通り。

  • 記譜したいノートだけを、正確な開始位置から、正確な音符の長さで入力してください。
  • MIDIキーボード等からリアルタイム入力したデータは、クォンタイズしないと思い通りの変換結果を得られません。
  • ノートとノートの間に音のない部分があれば、その空白の長さ分だけ糞真面目に休符が挿入されます。
  • 前後のノート間に重なりがあれば、その部分が多声部として処理されてしまいます。
  • アーティキュレーションはどのみち反映されないので、MIDIデータ内には含めないでください。たとえば「スタッカート付き四分音符+スタッカート付き四分音符」を表現したいときの正しいlilypondソースは { c4\staccato c4\staccato } です。これをMIDIシーケンサ上で律儀に□_□_のような形に打込んでしまうと、変換結果が {c8 r8 c8 r8 } のようになり、手動で修正する必要が生じます。
  • MIDIシーケンス冒頭のExclusiveは除いてください。最悪midi2lyが停止します。
  • MIDIファイル内で拍子と調はなるべく指定しておきましょう。さもないと同音異名を正しく処理できません。
  • 必ずシーケンス冒頭から1音目を鳴らすようにしましょう。
  • 付点1つまでで表現できないような、中途半端な長さのノートをなるべく書かないように。しばしば珍妙な変換結果になってしまい、どのみち手で修正しないと使い物になりません。

さらに打楽器のノート長の扱いには、特別な配慮が必要。

  • MIDIデータでは通常、チャンネル10(打楽器)が指定されたトラックにおけるノートの長さが、極端に短い値(1ティックとか10ティックとか)として保持されます。たとえばDomino(Windows用の代表的なMIDIシーケンサ)で入力した打楽器の音は、全て1ティックの長さです。
  • これをlilypondデータに変換すると、たとえば本来 { c1 c1 }(全音符2回)でなければならないデータが { c1/480 r479/480 c1/480 r479/480 } などと、極端に短い音符(480分の1音符!)と残りを埋める休符に分けられてしまいます。
  • ドラムセットの譜面には休符を書く必要がないパートもありますが、多くの打楽器では音符の長さを正確に表現する必要があり、上記のままでは困ります。なので、midi2lyに通す予定の打楽器トラックについては、MIDIシーケンサ上で(チャンネル10を使わないなどして)ノート長が正確に保存されるよう対策を講じてください。

LilyPondからMIDIデータを出力する方法と一般的注意

LilyPondのソースファイルから、コンパイル時にPDFに加えて、MIDIファイルも出力できる。あるいはMIDIファイルの出力を抑制したり、スコアのPDFを描画せずにMIDIだけを生成することも可能だ。以下にその方法と、一般的な注意点を述べる。

MIDI/PDFの出力(抑制)方法

公式記譜法リファレンス 3.5.1「MIDIファイルを作り出す」に説明がある。まずは実例を示す。

ソースファイル PDF MIDI

% 以下のソースは楽譜のPDFとMIDIデータの双方を作ります。
¥version "2.16.0"
¥score {
  ¥relative c' { c4 d4 ees4 f4 }
  ¥layout {}
  ¥midi {}
}

ソースファイル

% 以下のソースは楽譜のPDFのみを作ります。
¥version "2.16.0"
¥score {
  ¥relative c' { c4 d4 ees4 f4 }
  ¥layout {}
%  ¥midi {}
}

ソースファイル

% 以下のソースはMIDIデータのみを作ります。
¥version "2.16.0"
¥score {
  ¥relative c' { c4 d4 ees4 f4 }
%  ¥layout {}
  ¥midi {}
}

それぞれコメントアウトされている箇所に注意。最初の例は \score ブロック内に \layout ブロックと \midi ブロックの双方を含み、これがPDFとMIDIの双方を作る。次の例は \layout ブロックのみを含み、PDFのみを生成する。3番目の例は \midi ブロックのみを含み、MIDIのみを生成する。

% 両方とも指定しなかった場合、以下のソースはPDFのみを作ります。
¥version "2.16.0"
¥relative c' { c4 d4 ees4 f4 }

さて、わざわざMIDIだけ作ることに利点はあるのだろうか。実は、lilypondが楽譜を譜刻する際の演算時間の大部分が、オタマジャクシ間の衝突回避を考慮したレイアウトの決定に費やされる。そのため、音の確認やプレイバック用データの出力など、PDFが要らない場合は故意に指定を外すことにより、コンパイル所要時間を大幅に節約できるのだ。

LilyPondが出力するMIDIのデータ構造に関する一般的注意

  • MIDIリージョンの名前はStaffの名称がそのまま利用され、つまりトラック名になります。
  • MIDIチャンネルはMIDIリージョン(つまりLilyPondソース内のStaff)毎に、冒頭から順に1〜9,11〜16が割り振られます。使い切るとまた1から順に割り振られます。
  • DrumStaff は MIDIチャンネル10 に割り振られます。
  • MIDI楽器はStaffに指定した midiInstrument が反映されます。無指定ないし無効な指定の場合、Grand Piano になります。
  • LilyPondが生成するMIDIの時間分解能は384です。これは多くの既存MIDIデータと整合性が取れません。
  • たとえばDominoに読み込んで作業する場合、Dominoメニューの「ファイル」「曲のプロパティ」から分解能を480に変更しましょう。
  • アーティキュレーションは初期状態ではMIDI出力において無視されます。「奏法スクリプト」を用いることで音の長さ(スタッカート等)や強弱(フォルテやピアノ)を反映させられますが、必ずしも良好な結果を得られるとは限りません。