1

MuseScore を使用して生成された midi ファイルがあります。Windows Media Player では問題なく再生されますが、MIDI 読み取りプログラムがクラッシュします。私は次のリンクを参考にしてきました: MIDI 仕様Mobilefish MIDI ガイド、主に 2 番目のリンク。

4d 54 68 64 = MThd
00 00 00 06 = Header length of 6
00 01 = Track format 1
00 02 = two tracks
01 e0 = 480 delta-ticks per quarter note

4d 54 72 6b = MTrk
00 00 00 86 = length of 0x86
00 ff 58 04 04 02 18 08 = time signature
00 ff 59 02 00 00 = key signature
00 c0 00 = program change (channel 1)
02 b0 07 64 = control mode change (channel 1)
02 0a = running status
40 02 = running status
5b 1e = running status
02 5d = running status
1e ac 78 90 = Aftertouch event (channel 13, not really applicable in this context)
3e 50 = running status
83 5f 3e = delta time (83 5f) and 3e, which is not a status byte
(more bytes for context): 00 01 40 50

ここで見落としていた MIDI 規格には何がありますか?

4

2 に答える 2

1

私が書いたこの質問には完全な欠陥があり、私を助けようとした人々には申し訳ありません。Notepad++ からの出力を間違ってコピーしたに違いありません。ただし、私と同じ問題に遭遇する可能性がある人のために、この質問に対する回答を書きます。

実行ステータスが使用されるときは常に、常にデルタ時間が先行します。http://www.blitter.com/~russtopia/MIDI/~jglatt/tech/midispec/run.htmのような別の方法で説明されているガイドを目にする可能性がある人は、これらの情報が完全に誤解を招くものであることを知っておいてください。 .

例えば:

00 90 7F 7F
7F 00
50 7F
50 00

これは間違っています。

ただし、これは正しいバージョンです。

00 90 7F 7F
81 00 7F 00
00 50 7F
81 00 50 00

これには明らかにデルタ時間が先行します。

于 2013-08-12T14:28:09.873 に答える
0

私が間違っていなければ、実行中のステータスには依然として可変時間デルタを指定する必要があるため、2 つのイベントが同時に発生した場合でも00、実行中のステータスに先行するバイトが存在します。ただし、それを念頭に置いて、上記のダンプのアフタータッチ イベントにはタイム オフセットがないため、困惑しています。

于 2013-08-12T08:39:35.287 に答える