Простой миди файловый писатель в Objective C

Я пишу программу на Objective C для создания файла MIDI. В качестве теста я прошу написать файл, который воспроизводит одну ноту и затем останавливает ее как дельта-тик.

Но я пытаюсь открыть его с помощью Logic и Sibelius, и они оба говорят, что файл поврежден.

Вот шестнадцатеричное считывание файла

4D 54 68 64   00 00 00 06   00 01 00 01   00 40   - MThd header

4D 54 72 6B   00 00 00 0D      - MTrk - with length of 13 as 32bit hex [00 00 00 0D]


81 00   90 48 64   82 00    80 48 64  - the track
delta    noteOn    delta    noteOff 


FF 2F 00                       - end of file

И вот мои процедуры, чтобы написать время дельты и написать примечание -

- (void) appendNote:(int)note state:(BOOL)on isMelody:(BOOL)melodyNote{           // generate a MIDI note and add it to the 'track' NSData object
char c[3];

if( on ){
    c[0] = 0x90;
    c[2] = volume;
} else {
    c[0] = 0x80;
    c[2] = lastVolume;
}
c[1] = note;

[track appendBytes:&c length:3];

}

- (void) writeVarTime:(int)value{                       // generate a MIDI delta time and add it to the 'track' NSData object
char c[2];
if( value < 128 ){
    c[0] = value;
    [track appendBytes:&c length:1];
} else {
    c[0] = value/128 | 0x80;
    c[1] = value % 128;
    [track appendBytes:&c length:2];
}

}

Есть ли какие-нибудь умные гуру MIDI, которые могут сказать, что не так с этим файлом MIDI?

1 ответ

Решение

Дельта-время события EOF отсутствует.

Другие вопросы по тегам