【问题标题】:How do you dynamically add new instruments to AUGraph您如何动态地将新工具添加到 AUGraph
【发布时间】:2015-06-20 19:02:58
【问题描述】:

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

这是我添加新曲目后的内容:

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;

以下根本不产生音频,请问我可以在这里做什么。

非常感谢!

【问题讨论】:

  • 你能让音乐播放器正常工作吗?
  • @dave 我已将其添加到我的代码中,但仍然无法使其正常工作! :(
  • @dave 我们应该继续聊天,当我开始聊天时我会发布答案?
  • 我只是不确定我是否理解您的问题。您在播放音乐序列时遇到困难吗?还是您只是需要帮助添加曲目?
  • @Dave,我无法播放新添加的曲目!我有一个导体,它是在 augraph 初始化期间添加的第一条轨道,如果我使用在初始化期间添加的示例节点作为新添加轨道的目标节点,它会播放即 MusicTrackSetDestNode(tracks[tracksCount], sampleNode) 。但是我无法让MusicTrackSetDestNode(tracks[tracksCount], auNodes[tracksCount]) 工作。希望你现在明白了吗?

标签: ios objective-c core-audio audiounit audio-player


【解决方案1】:

您需要拨打AUGraphUpdate(graph, nil);或者,如果您希望图形在添加之前一直阻塞,您可以向它提供一个指向布尔值的指针,然后调用线程将等待音频线程添加音频单元。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2020-01-13
    相关资源
    最近更新 更多