2015-06-20 14 views
0

我目前正在製作音樂應用程序,您可以添加新樂器作爲音樂序列的曲目。如何動態地添加新樂器AUGraph

這裏是我有當一個新的軌道已添加:

MusicPlayerStop(_musicPlayer); 

status = MusicSequenceNewTrack(sequence, &tracks[tracksCount]); 

timeDiff = 32.f/_tempo; 

[self setLoopDuration:currentLoopDuration forPattern:tracks[tracksCount]]; 

AudioComponentDescription samplerNodeDesc; 
samplerNodeDesc.componentManufacturer = (OSType)kAudioUnitManufacturer_Apple; 
samplerNodeDesc.componentType = (OSType)kAudioUnitType_MusicDevice; 
samplerNodeDesc.componentSubType = (OSType)kAudioUnitSubType_Sampler; 
samplerNodeDesc.componentFlags = 0; 
samplerNodeDesc.componentFlagsMask = 0; 


status = AUGraphAddNode(graph, &samplerNodeDesc, &auNodes[tracksCount]); 
status = AUGraphNodeInfo(graph, auNodes[tracksCount], 0, &audioUnits[tracksCount]); 


status = AUGraphConnectNodeInput(graph, auNodes[tracksCount], 0, filterNode, 0); 
status = MusicTrackSetDestNode(tracks[tracksCount], auNodes[tracksCount]); 

int trackId = tracksCount; 

tracksCount++; 

MusicPlayerStart(_musicPlayer); 


return trackId; 

下不產生音頻可言,我能做些什麼在這裏吧。

非常感謝!

+0

你能夠讓音樂播放器工作嗎? – dave234

+0

@dave我已經添加到我的代碼,仍然不能得到它的工作! :( – ipalibowhyte

+0

@dave我們應該繼續聊天,當我得到它的工作我發佈答案? – ipalibowhyte

回答

0

您需要撥打AUGraphUpdate(graph, nil);或者,如果您希望圖形阻塞,直到它添加完爲止,則爲其提供一個指向布爾值的指針,並且調用線程將等待音頻線程添加音頻單元。

Boolean updated; 
AUGraphUpdate(graph, &updated); //will block until end of next audio cycle 

if (updated){ 
    printf("hooray\n"); 
}