2016-04-06 31 views
0

我开了一个MIDI文件:我怎么能读MIDI文件,并得到跟踪预设的信息在OS X

MusicSequence sequence; 
NewMusicSequence(&sequence); 
MusicSequenceFileLoad(sequence, (__bridge CFURLRef _Nonnull)(midiFile), kMusicSequenceFile_MIDIType, 0); 

,并通过使用MusicTrack & MusicEventIterator阅读MIDI音符消息。 我怎样才能得到仪器预置信息?诸如此类piano(id:0)或别人..

+0

这些设置由事件组成。它们不一定是预设;他们可以随时更改。 –

回答

0

轨道的预设信息或仪器预设信息不属于MIDI标准,据我所知的概念。为了找出是否有计划数设置程序号改变,里面你的MIDI读回调你应该检测类型的二进制消息:

1100nnnn 0ppppppp 

其中[nnnn = 0-15 (MIDI channel number 1-16)][ppppppp = program number]

然而,这些只是事件生成的程序编号,可能是指任何声音。原始的MIDI规范没有“通用MIDI系统”中指定的“声音设置到程序更改号码”映射。因此,地方在你的代码应该有GeneralMIDI系统消息,例如搜索:

通用MIDI系统(十六进制):

F0 7E <device-ID> 09 01 F7 

通用MIDI系统OFF(十六进制):

F0 7E <device-ID> 09 02 F7 

完整规格可以从:MIDI Manufacturers Association