【发布时间】:2014-10-22 10:09:55
【问题描述】:
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)
两个猜测。平台代码或(更有可能)我的代码中存在错误。
tl;dr 我获取的数据有误吗?
【问题讨论】:
标签: swift core-audio avaudioplayer core