Ios 如何向AUGraph动态添加新仪器

Ios 如何向AUGraph动态添加新仪器,ios,objective-c,core-audio,audiounit,audio-player,Ios,Objective C,Core Audio,Audiounit,Audio Player,我目前正在制作一个音乐应用程序,你可以将新乐器作为曲目添加到音乐序列中 以下是我在添加新曲目时所做的准备: MusicPlayerStop(_musicPlayer); status = MusicSequenceNewTrack(sequence, &tracks[tracksCount]); timeDiff = 32.f/_tempo; [self setLoopDuration:currentLoopDuration forPattern:tracks[tracksCoun

我目前正在制作一个音乐应用程序,你可以将新乐器作为曲目添加到音乐序列中

以下是我在添加新曲目时所做的准备:

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;
下面的内容根本不产生音频,我能在这里做些什么


非常感谢

您需要调用
AUGraphUpdate(graph,nil)
;或者,如果希望图形在添加之前一直处于阻塞状态,则为其提供一个指向布尔值的指针,调用线程将等待音频线程添加音频单元

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

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

你能让音乐播放器工作吗?@dave我已经把它添加到我的代码中,但仍然不能让它工作!:(@dave我们是否应该继续聊天,当我开始聊天时,我会发布答案?我只是不确定我是否理解你的问题。你在播放音乐序列时有困难吗?或者你只是需要帮助添加曲目吗?@dave,我在播放新添加的曲目时遇到问题!我有一位指挥,这是duri添加的第一首曲目正在初始化曲线图,如果我使用初始化过程中添加的示例节点作为新添加轨迹的dest节点,它将播放ie
MusicTrackSetDestNode(轨迹[TrackScont],sampleNode)
。但是我无法让
MusicTrackSetDestNode(轨迹[TrackScont],auNodes[TrackScont])
正常工作。希望您现在理解?