DAW悪戦苦闘記

DAWやMIDIを通じてちまちまとDTMを楽しむ記録+MIDI検定1級到達記

譜面入力にMuseScoreを使う

MIDI検定1級課題曲のスコアは、残念ながら紙の印刷物のみでPDFファイルでは提供されないため*1、本ブログで譜例を作成する際には別途スコア入力ソフトを使って再現している。ここで私が愛用しているのは、オープンソースでフリーの MuseScore である。

musescore.org

2015年にバージョン2に上がってから大きく機能強化が図られ、洗練されたUIで使いやすくなった。本年5月にさらに2.1へ上がり、譜面作成用途では定番の有償ソフトである FinaleSibelius と比べても、もはや遜色ないレベルではないか。よほど特殊なニーズでもない限りはプロの使用にも耐えうると思う。現在、次期バージョン3の開発が鋭意進行中で、将来的には Finale などよりも MuseScore が主流になる可能性も秘めている。

もっとも、最近の主たるDAWでは上位バージョンでスコア編集機能を備えているものが多いので*2、わざわざ別個のスコア入力ソフトを導入するインセンティブは小さいかもしれないが。

*1:2級2次試験実技の本番課題曲は試験当日の紙配布のみで、2次筆記含めて過去問は一切公開されていない。その代わりに本番直前の練習曲のみPDFで無償ダウンロード可(過去3年分)。

*2:Studio One は、Artist版またはProfessional版のオプションで楽譜作成(+α)ソフトの Notion をバンドルすることもできる。Cubase や Logic Pro X なども譜面作成機能がある。

譜面解釈とMIDI表現 (3) トレモロ

2016年のMIDI検定1級課題曲では、バイオリン・パートでトレモロ (tremolo) が2箇所出現する。譜面上は、下図のように、基音に対して斜線を何本か追記することで音符の刻み方(速さ)が指定される。下例の場合、追記斜線2本含めて旗が合計3本ということになるので、32分音符で刻みながら半音ずつ下がっていくというフレーズ、という解釈になる*1

f:id:daw_jones:20170705200547p:plain

したがって、ノートの打ち込み例としては、以下のような感じになる(縦グリッド線は32分音符単位)。

f:id:daw_jones:20170706103631p:plain

 

基本は上例のようにMIDI表現のみで対応できると思うが、音源によりトレモロ用の音色が別途用意されている場合はそれを使う(または重ねる)方がよいこともある。通常音色で刻むと機械的で不自然に聞こえる場合は特にそうである。

Studio One の内蔵音源 Presence XT で備えている弦楽器系音色は結構クオリティが高く、たとえば "15 Violins Legato" で上述のようにトレモロを刻んでもそれほど不自然には聞こえない。なお、トレモロ用に "Tremolo Strings" も用意されているので、トレモロ箇所についてはこちらを鳴らしてもいい(あるいは通常レガート音色に重ねて発音させる)。

音源によっては、トレモロその他アーティキュレーション用のスイッチを音域外のキーに割り当ててオン・オフできるものも少なくない。この種の機能は積極的に併用すると効果が出ると思われる。

その他、トレモロ効果を出すプラグインエフェクターも数多く存在するが*2、すべての楽器音色でしっくり当てはまるかどうかは聴いてみないとわからない。下手な使い方をすると、かえって機械的で滑稽な印象を与える可能性もある。

*1:詳しくは、楽典.comの記事などを参照。

*2:どちらかというとパッド系シンセ音に適用するためのEDM用主体なので、生楽器音色にはふさわしくないかもしれない。

PythonでSMFを操作する (1) 下準備と読み込み

今回より、少々マニアックにはなるが、PythonによるSMFの加工編集処理について何度かに分けて(五月雨式に)書いていく。なんでそんなことするの?、という根拠については以下に記す。なお最初に断っておくが、以下の話はあくまでMIDI検定実技対策上の要請であり、自主制作では一切必要ない。

今回は、使用するパッケージの紹介と、それを使ったSMFの中身の確認までをやってみる。

Pythonで自動処理する目的

Studio One から書き出したSMFは、そのままではSysExメッセージとセットアップ・データが書かれていないので*1、DominoなどのMIDI専用エディター兼シーケンサーなどを使って追加編集する必要がある。もちろん、ここまで機能対応しているDAWであれば、わざわざDominoに取り込まずとも自己完結することは言うまでもない。

問題は、1級の場合、トラック(楽器パート)の数が多いので、Domino上での手動によるコピーや編集が非常に面倒くさい、ということである。また繰り返し作業が多いということは、ミスを誘発する可能性もそれだけ高まる懸念がある。

なので、セットアップ・データの追加部分については、Pythonによる定型バッチ処理で対応して効率化を図りたい。そうすると、Dominoでの追加編集はボリュームやパンの微調整ぐらいで済む。

使用するパッケージ

PythonMIDIデータを読み書きするためのパッケージとしては、今現在は pretty_midi が主流であり、また一番使いやすいAPIだと思われる(3系対応)。

実はpretty_midiのベースはmidoパッケージらしく、SysExメッセージの追加挿入といったpretty_midiでは扱えない一部特殊な処理に関してはmidoを直接使わないと対応できない。

実際に試してみるとわかるが、midoパッケージ自体シンプルなデータ構造とAPIなので、MIDI検定3級以上の知識があれば難なく使いこなせる。なので、ここではすべてmidoパッケージを直接使ってみることにする。

さしあたりは、以下の2つのクラスしか使わないため、midoパッケージよりインポートしておく。

from mido import MidiFile, Message

SMFの中身を覗いてみる

試しにサンプルとして2級2次試験の2017年2月期練習曲No.1で制作したSMFを俎上に乗せる。

Studio One から書き出した直後のSMF

何度か繰り返し使うことになるので、各トラック内の全メッセージ内訳表示と、SMF全体の中身の表示させる関数を定義する。

# 各トラック毎の全メッセージを表示する
def dump_track(track_obj):
    for msg in track_obj:
        print(msg)

# 全トラックの全メッセージをトラック毎に表示する
def dump_smf(midi_obj):
    for i, track in enumerate(midi_obj.tracks):
        print(f"Track {i}: {track.name}")
        dump_track(track)

トラック・オブジェクトは、実態としてはMIDIメッセージのリスト構造になっているので、Pythonの通常のリスト操作をそのまま使うことで簡単に編集加工できる。

上記の定義関数を呼び出して、まずは Studio One から書き出したSMFの中身を見てみるとする。

# Studio One から書き出したSMFを mid に読み込む
mid = MidiFile('smf_studio1.mid')
dump_smf(mid)

これを実行すると、以下のような感じに表示される(jupyter notebook  上での実行結果):

f:id:daw_jones:20170704144229p:plain

ほとんど自明で逐一説明を要しないと思うが、上図はメタイベント・トラックと、オーボエの楽器パートを割り当てているトラック1の冒頭9行までを表示した。注目すべき点としては、

  • メタイベント*2のテンポ値は1拍の長さ(本例では4分音符一つ)をμs(マイクロ秒)単位で表示している。BPMに変換すると、60s/(638298μs/1000000) = 94 となり、BPM = 94 であることがわかる(実際にはこれとは逆方向に変換している)。
  • メタイベントには拍子データ(Time Signature)も書かれている。本例では4/4である。曲中で何度か拍子を変えると、変化するタイミング(Time値)とともにそのデータもすべてここに書かれる*3
  • メタイベント以外の各トラック冒頭2行目には Studio One 固有のメタメッセージ1件が書かれているが、これは特に必要というわけではなく、Dominoに取り込む前に消去してしまっても構わない。
  • トラックの冒頭部分には、SysExメッセージやコントロール・チェンジといったセットアップ・データがまだ何も付け足されていないことがわかる。
  • ノートオン/オフの各メッセージ末尾に書かれているTime値はいわゆるデルタタイムであり、直前メッセージからの送信間隔を示す。実はここではティック単位になっている(ので確認しやすい)。MIDIメッセージが小節の概念を持っていないことがわかると思う。

Dominoで編集後に書き出したSMF

同様に、Dominoで編集した最終成果物としてのSMFの中身を確認してみる。

# Dominoから書き出したSMFを mid2 に読み込む
mid2 = MidiFile('etude_2017-1.mid')
dump_smf(mid2)

これを実行すると、以下のような感じに表示される(メタイベントは上とほぼ同じなので省略):

f:id:daw_jones:20170704153536p:plain

上の Studio One から吐き出したSMFと見比べてみると色々と興味深い。上図で示したように、2級実技用のテンプレでお馴染みのセットアップ・データが付加されている。また、トラック1については冒頭にSysExメッセージも付く(データは10進表記)。目標としては、これら定型の付加データを全トラックについてPythonで追加処理したい、ということである。

ヘッダー情報はどこに

以上はすべてトラック・チャンクに関わるデータであるが、ヘッダー・チャンクの主要データを確認したい場合は、SMFを取り込んだオブジェクトの属性一覧を見ればよい。

# SMFオブジェクトの属性には何が含まれるか確認する
mid.__dict__

すると、以下のように辞書形式で属性一覧が表示される:

f:id:daw_jones:20170704162943p:plain

上図で明らかなように、Studio One から書き出したSMFの分解能は TPQN = 480 であることがわかる。

次は何をやるか

初回なので思ってた以上に長くなってしまったが、次回からはワンポイント・メモのような形でもう少し手短にまとめていきたい。

次はまず一番簡単なところから着手するとして、SysExメッセージの追記をやってみるとする。

*1:私が知らないだけであって、セットアップ・データ等を付加する方法はあるのかもしれない。しかし、たとえ書けたとしても、Studio One はMIDIのイベントリスト表示機能がないため、検証チェックと確認が難しいと思う。

*2:詳しくは、メタイベント一覧表などを参照。

*3:変拍子については、次の過去記事参照: 譜面解釈とMIDI表現 (2) 変拍子の対応 (Studio One)

譜面解釈とMIDI表現 (2) 変拍子の対応 (Studio One)

MIDI検定1級課題曲では変拍子は当たり前のように頻出しており、たとえば昨年の2016年課題曲では、43小節目の1小節だけ4/4から6/4に拍子が変わっている*1

因みに2級実技では、転調は2016年2月期の練習曲で1曲盛り込まれているが、変拍子については私が知る限りまだ出題されていないようである(下記の過去記事参照)。

daw-jones.hatenablog.com

 

Studio One で打ち込む場合の変拍子対応法はいたって簡単で、タイムライン上で拍子を変更したい小節の開始位置にカーソルを移動させ、右クリックでコンテキスト・メニューから Insert Time Signature を選ぶ。

f:id:daw_jones:20170702132034p:plain

その後に下図のような拍子入力ウィンドウで分子分母の値を修正入力すれば、指定の変拍子が挿入され、それにしたがって1小節あたりの拍子グリッド(縦線)の数も変わる。

f:id:daw_jones:20170702132146p:plain

f:id:daw_jones:20170702132450p:plain

 

変拍子は当然ながら書き出したSMFにも反映され、Dominoで取り込むと下例のようにメタイベント(Conductorトラック)で確認できる。なお、譜面のリハーサルマークやページ記録のために Studio One 内で付記したマーカーもこのメタイベントの中に書き出されるようであるが、MIDI検定では審査対象外なのでそのままの状態で問題ない。

f:id:daw_jones:20170702165406p:plain

*1:これは全然大したことない部類。変拍子については、2012年課題曲が非常に大掛かりな応用作品となっているようである。

譜面解釈とMIDI表現 (1) ハープのアルペジオ

今回から何度かに分けて(一気連続せずに五月雨式になるが)、MIDI検定1級課題曲における上級レベルの譜面解釈とそのMIDIデータによる再現方法に関し、1回1トピック限定で備忘録というか事典みたいな感じでまとめていきたいと思う。当然ながら、今までにやった2級実技演習ではまだ遭遇していないものを中心に取り上げて行く。

今回は、ハープのアルペジオ奏法について。

譜面上は、下例のように和音構成音の左側に波線が追記される。アルペジオ自体はハープに限った奏法ではなく、例えばピアノやギターなどでもほぼ同様の対応となるが、ギターについては譜面の書き方が下例と異なる場合がある(和音形式ではなく発音順に音をバラして記譜することが多いようだ)。詳しくは、公式ガイドブックの p.228 を参照。

f:id:daw_jones:20170629192046p:plain

 

上例記譜法の場合、特に指定がない限りは、下の音から順番に上の音を重ねる。重ねて行く速さは任意だが、32分音符で重ねれば問題ないだろうと思う。上例のように、低音部と高音部にまたがって波線が引かれている場合は、両者一体のコードとみなし、低域のアルペジオと高域のそれを切らないで連結して弾く。下図は、Studio One での打ち込み例である(縦線グリッドは32分音符単位)。

f:id:daw_jones:20170630192411p:plain

 

なお、アルペジオの一般的な記譜法とその演奏展開法については、下記サイトの「アルペッジョ」の項を参照(楽典.comは他装飾音などについても今後何回か参照する)。

楽典:装飾音

オーケストラと定位設定

MIDI検定1級の2016年課題曲のようなオーケストラ曲を制作する場合、各楽器パートの定位(パンポット)をどう設定するか、は一つの大きな課題となる。

常識的には、オーケストラの通例の配置パターン*1に合わせるのが無難だろうと思う。ちょっと聴いた感じでは、これだけでも割と本物っぽい印象を与える*2。たとえばコンサート・ホールで聴いているような効果を狙うのであればこれでよいと思う。

ただ、実際はどうもそう単純でもないらしく、クラシック曲レコーディングのミックスダウンでは必ずしもオーケストラの編成配置通りにパンを振っているわけではないそうである。要は配置通りにした場合、一部楽器同士で音色や周波数領域が被って音が埋没してしまう懸念があるということ。これについては下記記事を参照:

musicmaterial.jpn.org

 

正直このあたりは正解が特にあるわけでもないため、最後は自分の耳を頼りに確認調整するしかない。各楽曲に合わせて表現者の解釈は様々あってしかるべきなので、あくまで参考基準として知っておけばよいということだろう。

自分なりの結論としては、一応はオーケストラの配置パターンを出発点として、聴いた印象で違和感がある部分については微調整してズラす、という方策でいいと思う。

蛇足。オーケストラ曲は、本来は音楽科の専門課程でお作法をみっちり勉強しないと品質が担保されないであろうが、趣味のDTMでそこまで要求するのは荷が重過ぎるので、たとえば下記教本で最低限の常識レベルを養うのも一法かと。MIDI検定1級対策にも使えそうである。

www.stylenote.co.jp

*1:米国式(第1と第2バイオリンを左側に隣接配置)と欧州式(第1と第2バイオリンを左右両翼配置)の2種類あり、現代では前者が主流らしい。詳しくはWikipediaの記事などを参照。

*2:Studio One 3.5 Prime の内蔵音源 Presence XT を使った場合。MIDI検定1級程度の編成であれば、Prime版の音源だけでも十分間に合う。

MIDIイベントの複製共有 (Studio One)

Studio One の操作で、知ってるようで案外知らないかもしれない小技について。

編集画面では、Dキー押下で単純な複製 (Duplicate) が可能で、これはよく知られているし、私も頻繁に使う。他DAWのようにCtrlキー/Commandキーと組み合わせる必要がないため、作業効率が大きく向上し、非常に重宝する機能である。

ここでShiftキーも同時に押すと、Shift + D 押下で複製共有 (Duplicate Shared) となり、相互にMIDIデータを共有する依存関係となる。この時、共有関係となった各イベントの左下には共有マークが付く(下例参照)。

f:id:daw_jones:20170627143737p:plain

共有中のイベントをどれか一つ修正すると、同じ共有関係にある別のイベントもすべて同様に変化する。つまり親子関係にはなく、すべて対等に同期する。上例のように、イベントの配置は隣同士に連続していなくてもよい(離れた小節やトラックにまたがっていても構わない)。また、ベロシティやピッチベンド、コントロール・チェンジなどもすべて共有・同期する。

これは、同一パターン要素で構成されることが多いポピュラー曲の制作にはありがたい機能であり、頻繁な試行錯誤を繰り返す上で大変便利である。同様の機能を備える他DAWも少なくないとは思うが詳細は不明*1

ただし、複数の異なる共有関係が存在する場合、各イベント同士がどの共有依存関係で結びついているのか一瞥しただけではわからない。したがって、イベントの色分けで対応するなどの工夫が必要となり、そこだけ要注意である。

*1:Tracktion 5 の場合は、MIDIクリップをループ指定(クリップ上部の"L"アイコンを押下)して右に引き伸ばすと同期コピーできる。ただし、元のクリップと隣り合わせで連続する効果に限られる。