AVMIDIPlayer有这个初始化:
initWithData:soundBankURL:error:
这是除了一个初始化从标准MIDI文件读取。
这些数据是NSData的,我认为是一个标准的MIDI文件格式。 那么,如何获得这些数据? 那么,创建一个MIDI音序电流的方法是AudioToolbox MusicSequence。 (AVAudioEngine甚至有这种类型的一个成员)。
MusicSequence有这个转换器:
MusicSequenceFileCreateData (
MusicSequence inSequence,
MusicSequenceFileTypeID inFileType,
MusicSequenceFileFlags inFlags,
SInt16 inResolution,
CFDataRef *outData
);
因此,让我们试试。
var status = OSStatus(noErr)
var data:Unmanaged<CFData>?
status = MusicSequenceFileCreateData (musicSequence,
MusicSequenceFileTypeID(kMusicSequenceFile_MIDIType),
MusicSequenceFileFlags(kMusicSequenceFileFlags_EraseFile),
480, &data)
var ns:NSData = data!.takeRetainedValue()
var error:NSError?
self.mp = AVMIDIPlayer(data: ns, soundBankURL: soundbank, error: &error)
(我以前加载音库)。 好消息:那请问播放MIDI数据。 坏消息:在到达序列的末尾,它崩溃。
queue = 'CallbackQueue', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
两种猜测。 有一个在平台代码中的错误,或者(更可能),我的代码。
文艺青年最爱的我收到的数据是否有误?