Yggdrasil Seeds : Software Works : DualMusik : TIPS4[PCM同期再生]
PV[992601]

PCM同期再生

DualMusikではMIDIシーケンスにPCMを加えることができます。
もちろんSMFにエクスポートすると無効となりますので、再生には専用のプレイヤが必要となります。
とりあえず、DUMFE.EXE を使っといてください。あとは有志に期待(ぉ

DS WAVEミクシング再生

DirectSoundをMIDIライクに扱い、PCMをMIDIノート代わりに再生するものです。
使えるPCMは短いものに限られ、ループさせる場合は全体のみという制限がありますが、リアルタイム性が維持されるという特徴があります。
ドラムのような単純な音を何回も使うような場合に適しています。

DS WAVEミクシング再生を使うための設定として真っ先に必要なことは、MIDIディヴァイスを乗っ取らせることです。これは: コマンドでトラックにMIDIディヴァイスを関連付けた後、セッティングレジスタ#100に1を書き込んで実現します。


#1 :1,0 =100,1    / ディヴァイス1をDS WAVEとして扱う

次に、DS WAVEで扱う音色の設定を行う必要があります。
将来的にはDWP(音色定義用のファイル)を指定して一発設定できるようにする予定ですが、現在は未実装なので一つ一つ設定しなくてはなりません。

まず、DS WAVEで同時に扱う波形数をセッティングレジスタ#101に設定します。ここでいう"扱う"とは、音色に波形を割り当てることを指します。実際に再生されていなくても、割り当て済である間は波形を占有することになります。(DirectSoundの仕様なのねん)
つまり、使いたい波形それぞれについて同時に鳴らしたい数を決め、それらの総和が設定すべき値ということになります。

そして個々の音色設定。DS WAVEではMIDIのドラムセットのようにプログラム番号とノート番号の組み合わせで音色を指定します。その中から設定したい位置を選び、プログラム番号(0~127)の128倍にノート番号を加算した数をセッティングレジスタ#102へ書き込んでから任意の設定を行います。音色が複数ある場合はセッティングレジスタ#102を書き換えながら同様に設定していきます。
音色設定には以下の要素があります。
拡張コマンド#128波形のロード
#129ロードした波形の複製(多重に鳴らしたい場合)
#144音量エンヴェロープ
#145定位エンヴェロープ
#146音程エンヴェロープ
セッティングレジスタ#109音量(0~16384)
#110定位(-16384(左)~0(中央)~+16384(右))
#111音程(+256で半音上がる)
#115PCMファイルチャネル(次回ロードする波形番号)
#116~117PCMファイルフラグ(次回ロードする波形のフラグ)
#121フラグ(4=ループ再生, 8=エンヴェロープ有効化, 12=両方)


#1 =101,10                         / 同時に扱える波形数
   =102,60                         / @0o4c を設定対象にする 
   =115,0 =116,0 =117,0            / 次にロードする波形のオプション(0なら本当は設定不要)
   ?128"hogehoge.wav" ?129{02}     / 波形をロードし、3音同時に使えるように複製
   =109,12345 =110,0 =111,-3072    / 音量,定位,音程
   =121,12                         / ループ再生&エンヴェロープ有効化
   ?144{a0a00000 40404040 48645838 38481800 20308000 50202000} / 音量エンヴェロープ

音階を伴なうような音色を使う場合、それぞれのノートに個別のPCMを割り当てていくのは非効率極まりなさげ。
この対策として、別のノートで波形を共有することができます。このとき音色設定もコピーされますが、波形以外の設定は後で個別に再設定できます。
セッティングレジスタ#118同プログラム連続ノート
#119同プログラム連続ノート,音程を自動的にずらす
#120別プログラム単一ノート


#1 =102,&3c      / コピー元(@0o4c)
   =118,&303b    / @0o3c~bに同じ設定でコピー
   =119,&3d48    / @0o4c+~o5cに音程をずらしながらコピー
   =120,&013c    / @1o4cに同じ設定でコピー

再生するときはMIDIと同じように書いていくだけでOKです。
一部、コントロールチェンジにも対応しています。
(というか、音量を明示的に設定しないと鳴らない)
有効なものは、#6(データエントリー(ベンドレンジ設定のみ)),#7(ヴォリウム),#10(パンポット),#11(エクスプレッション),#72(リリースレイト),#73(アタックレイト),#75(ディケイレイト),#100~#101(RPN)です。
#7,10,11については、MMLのV,P,Xコマンドがそのまま使えます。
#72,73,75は音色設定でエンヴェロープが有効なときだけ反映されます。何れも64が標準値で、0にすると元設定の1/16, 127にすると16倍の変化時間でエンヴェロープが進行します。


#1 `+6 @0 v127u100o4l2 cdefgab<c

ストリーム再生

DS WAVEミクシングとは別に、PCMをストリームで流すことができます。
DS WAVEでは扱えないような長いPCMやループしたPCMも扱えますが、ハードウェアに依存した動作を伴なうため、安定したタイミングが期待できなくなります。
この欠点を緩和するため、ストリームをバックグラウンドで動作させてシーケンス中で同期をとるという方法を取り入れています。

#1 =130,0
 =115,0 ?132"stream.wav"
 ?137{00}
 ?134
 ?137{01}

1行目はシーケンスのトラックとストリームのコンテクストを関連付けています。複数のストリームを同時に扱うときは、セッティングレジスタ#130に別の値を設定してコンテクストを切り替えることで並行化できます。
2行目ではPCMを指定し、再生準備を始めます。拡張コマンド#132のパラメータはファイル名なので一目瞭然とは思います。セッティングレジスタ#115はPCM番号の設定です。WAVでは無意味ですが、ファイル形式によっては1つのファイル中に複数のPCMがあるケースがあります。そのときは事前にこのレジスタを設定することで再生対象のPCMを切り替えることができます。
3行目は準備完了待ちです。普通は再生の直前に置きます。
4行目は再生開始。この時点では再生準備が完了していることが前提です。準備完了を待たずに再生を開始した場合、正常に再生されなくなります。
5行目は再生完了待ち。ストリームはシーケンスの最後に来ると勝手に止まってしまうので、それを防ぎたいときに使います。


[表紙] [前] [次]