- ベストアンサー
SMFの仕組み
SMFをバイナリで直接いじってるんですけど、トラックを複数作って、違うメロディーを同時に流したいんですけど、そういうことってできるんでしょうか? まあ、ソフトを使ってやればできるのだから可能であることは分かってるんですけど、ソフトを介さず、直接いじった場合のことを知りたいです。 どなたか、ごぞんじありませんか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
先ず、各トラック毎にトラックエンドは必要です。 データの大まかな構成としては、 ヘッダーチャンク トラックチャンク[トラックヘッダー,トラックデータ(トラックエンド)] ・ ・ ・ トラックチャンク[トラックヘッダー,トラックデータ(トラックエンド)] と言う感じになります。 デルタタイムの計算ですが、デルタタイムだけは各トラック毎に独立してます。 但し、コマンドの順序だけの問題ですので、 例えば、トラック1でチャネル1のノートオンをして、トラック2で同じ音のノートオフとしても、結果的に、シングルトラックのノートオン・オフと同じ動作となります。 >後、デルタタイムがトラック間に跨ってますので、注意して下さいね。 書き方が悪かったですね。 コマンドが、トラック間に跨ると書くべきでした...。 (日本語が変で、すんません。) >普通やりませんよね・・・・(笑) うっ。グサッ。(笑) 私の場合は、コンバーターやツールを作ったりする過程で、適当なMIDIデータを作る際にバイナリで作っちゃいます。(←と言いながら、ボレロを入力した奴) 後は、かなり特殊なMIDIデータを作る場合とか...。
その他の回答 (1)
- quenista
- ベストアンサー率28% (122/425)
私も、バイナリでMIDIデータを作る人です。(笑) 結論は、出来るで良いのですが、 マルチトラック対応なので、フォーマット1以上にする必要が有ります。 後、デルタタイムがトラック間に跨ってますので、注意して下さいね。 何処で詰ってるか補足頂ければ、何かアドバイスが出来るかもしれません。
補足
ご回答ありがとうございます。 一応、フォーマットは1にして、4D546864 00000006 0001 0002 01E0をヘッダにして、トラックチャンクの1個目を 4D54726B(SIZE)(Data) 二個目を 4D54726B(SIZE)(Data) として、さいごFF2F00 としたら、なんか、ものすごく変になっちゃいました。 これではだめなんでようか?ただ単に、トラックを増やしてくっつけるだけじゃ ダメってことなんですか? あと、デルタタイムがトラックにまたがるというのはどういうことなんですか? 質問量がおおくてすみません・・・・。 ところで、バイナリからMIDIデータ作ってる人ってまわりにはまったくいないので、なんかすごくうれしいです。 普通やりませんよね・・・・(笑)
お礼
なるほど・・・・・。 コマンドがまたがるんですか・・・・。 早速、やってみたいと思います。ちょっと、また質問したいことが できるかもしれないので、またお答えいただけたらうれしいです!!! ちょっと、図々しいかな・・・・・(笑) どうもありがとうございました。