gpt4 book ai didi

ios - Objective C 中的简单 MIDI 文件编写器

转载 作者:行者123 更新时间:2023-11-29 03:21:57 26 4
gpt4 key购买 nike

我正在用 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 文件出了什么问题吗?

最佳答案

缺少 EOF 事件的增量时间。

关于ios - Objective C 中的简单 MIDI 文件编写器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com