TIPS4[PCM同期再生]PV[1117410]PCM同期再生DualMusikではMIDIシーケンスにPCMを加えることができます。SMFにエクスポートすると無効となりますので、再生には専用のプレイヤが必要となります。WAVEミクシング再生DirectSoundをMIDIライクに扱い、PCMをMIDIノート代わりに再生するものです。使えるPCMは短いものに限られ、ループさせる場合は全体のみという制限がありますが、リアルタイム性が維持されるという特徴があります。ドラムのような単純な音を何回も使うような場合に適しています。WAVEミクシング再生を使うための設定として真っ先に必要なことは、MIDIディヴァイスを乗っ取らせることです。コマンドでトラックにMIDIディヴァイスを関連付けた後、セッティングレジスタ#100に1を書き込んで実現します。WAVEで扱う音色の設定を行う必要があります。将来的にはDWP(音色定義用のファイル)を指定して一発設定できるようにする予定ですが、現在は未実装なので一つ一つ設定しなくてはなりません。WAVEで同時に扱う波形数をセッティングレジスタ#101に設定します。ここでいう"扱う"とは、音色に波形を割り当てることを指します。実際に再生されていなくても、割り当て済である間は波形を占有することになります。(DirectSoundの仕様なのねん)つまり、使いたい波形それぞれについて同時に鳴らしたい数を決め、それらの総和が設定すべき値ということになります。WAVEではMIDIのドラムセットのようにプログラム番号とノート番号の組み合わせで音色を指定します。その中から設定したい位置を選び、プログラム番号(0~127)の128倍にノート番号を加算した数をセッティングレジスタ#102へ書き込んでから任意の設定を行います。音色が複数ある場合はセッティングレジスタ#102を書き換えながら同様に設定していきます。音色設定には以下の要素があります。音量エンヴェロープ音階を伴なうような音色を使う場合、それぞれのノートに個別のPCMを割り当てていくのは非効率極まりなさげ。この対策として、別のノートで波形を共有することができます。このとき音色設定もコピーされますが、波形以外の設定は後で個別に再設定できます。再生するときはMIDIと同じように書いていくだけでOKです。一部、コントロールチェンジにも対応しています。(というか、音量を明示的に設定しないと鳴らない)有効なものは、#6(データエントリー(ベンドレンジ設定のみ)),#7(ヴォリウム),#10(パンポット),#11(エクスプレッション),#72(リリースレイト),#73(アタックレイト),#75(ディケイレイト),#100~#101(RPN)です。#7,10,11については、MMLのV,P,Xコマンドがそのまま使えます。#72,73,75は音色設定でエンヴェロープが有効なときだけ反映されます。127にすると16倍の変化時間でエンヴェロープが進行します。WAVEミクシングとは別に、PCMをストリームで流すことができます。WAVEでは扱えないような長いPCMやループしたPCMも扱えますが、ハードウェアに依存した動作を伴なうため、安定したタイミングが期待できなくなります。この欠点を緩和するため、ストリームをバックグラウンドで動作させてシーケンス中で同期をとるという方法を取り入れています。?137{01}1行目はシーケンスのトラックとストリームのコンテクストを関連付けています。複数のストリームを同時に扱うときは、セッティングレジスタ#130に別の値を設定してコンテクストを切り替えることで並行化できます。2行目ではPCMを指定し、再生準備を始めます。拡張コマンド#132のパラメータはファイル名なので一目瞭然とは思います。セッティングレジスタ#115はPCM番号の設定です。WAVでは無意味ですが、ファイル形式によっては1つのファイル中に複数のPCMがあるケースがあります。そのときは事前にこのレジスタを設定することで再生対象のPCMを切り替えることができます。3行目は準備完了待ちです。普通は再生の直前に置きます。この時点では再生準備が完了していることが前提です。準備完了を待たずに再生を開始した場合、正常に再生されなくなります。5行目は再生完了待ち。ストリームはシーケンスの最後に来ると勝手に止まってしまうので、それを防ぎたいときに使います。