我已經搜索並已經完成了可以播放MIDI音符的OS X應用程序,但是當我在iOS中嘗試時,沒有任何事情發生。這裏是核心代碼:iOS如何播放midi音符?
AUGraph graph;
AudioUnit synthUnit;
AUNode synthNode, outNode;
NewAUGraph(&graph);
AudioComponentDescription cd;
cd.componentManufacturer = kAudioUnitManufacturer_Apple;
cd.componentType = kAudioUnitType_MusicDevice;
cd.componentSubType = kAudioUnitSubType_MIDISynth;
AUGraphAddNode(graph, &cd, &synthNode);
cd.componentType = kAudioUnitType_Output;
cd.componentSubType = kAudioUnitSubType_GenericOutput;
AUGraphAddNode(graph, &cd, &outNode), "AUGraphAddNode");
CheckError(AUGraphOpen(graph), "AUGraphOpen");
AUGraphConnectNodeInput(graph, synthNode, 0, outNode, 0);
AUGraphNodeInfo(graph, synthNode, 0, &synthUnit);
AUGraphInitialize(graph);
CAShow(graph);
AUGraphStart(graph);
CFURLRef bankURL = ... //gs_instruments.dls
AudioUnitSetProperty(synthUnit,
kMusicDeviceProperty_SoundBankURL,
kAudioUnitScope_Global,
0,
&bankURL,
sizeof(bankURL));
static UInt32 kChannelMessage_NoteOn = 0x90;
UInt8 channel = 0;
UInt8 note = 60;
UInt32 velocity = 127;
MusicDeviceMIDIEvent(synthUnit,
kChannelMessage_NoteOn | channel,
note,
velocity,
0);
AUGraphStop(graph);
DisposeAUGraph(graph);
我知道cd.componentType
和cd.componentSubType
設置可能不正確,因爲iOS應用和OS X應用程序之間的區別只是它。在OS X:
AudioComponentDescription cd;
cd.componentManufacturer = kAudioUnitManufacturer_Apple;
cd.componentType = kAudioUnitType_MusicDevice;
cd.componentSubType = kAudioUnitSubType_DLSSynth;
AUGraphAddNode(graph, &cd, &synthNode);
cd.componentType = kAudioUnitType_Output;
cd.componentSubType = kAudioUnitSubType_DefaultOutput;
AUGraphAddNode(graph, &cd, &outNode);
如何設置cd
和iOS的正常播放MIDI音符?我沒有明確或Audio Unit
/AUGraph
更深刻的瞭解...
更新:使用cd.componentSubType = kAudioUnitSubType_RemoteIO;
當添加outNode
將是正確的和打軟MIDI成功地指出。
這是一篇關於如何在MID MusicSequence中使用AUGraph的博客文章。還有一個github回購與一個工作的例子。 http://www.rockhoppertech.com/blog/swift-augraph-and-musicsequence/ –
@GeneDeLisa這是一個關於AUGraph的好教程,謝謝 –