gpt4 book ai didi

iphone - 音调消失后如何正确销毁ToneUnit?

转载 作者:行者123 更新时间:2023-12-03 18:44:36 25 4
gpt4 key购买 nike

我正在使用基于 Matt Gallagher 的 AudioUnits 在 iPhone 上生成音调 classic example 。为了避免开始/结束时的吱吱声和咔哒声,我是 fading the amplitude in/out在 RenderTone 回调中。我想在淡出结束时(即幅度达到零后)销毁 ToneUnit。我能想到的唯一方法是从回调中调用实例方法:

    if (PlayerState == FADING_OUT) {
amplitude -= stepsize;
if (amplitude <= 0) {
amplitude = 0;
PlayerState = OFF;
[viewController destroyToneUnit];
}
}

不幸的是,这比我想象的更具挑战性。一方面,我仍然在最后听到淡出应该消除的咔嗒声。另一方面,我收到此日志通知:

<AURemoteIO::IOThread> Someone is deleting an AudioConverter while it is in use.

这条消息是什么意思以及为什么我会收到它?

我应该如何终止 ToneUnit?我怀疑发生点击是因为 RenderTonedestroyToneUnit 在不同的线程上运行。我怎样才能使这些同步?

<小时/>

如果它有帮助,这是我的 destroyToneUnit 实例方法:

- (void) destroyToneUnit {
AudioOutputUnitStop(toneUnit);
AudioUnitUninitialize(toneUnit);
AudioComponentInstanceDispose(toneUnit);
toneUnit = nil;
}

如果我在 AudioUnitUninitialize(toneUnit); 之前和之后发送 NSLog 消息,则通知会出现在它们之间。

最佳答案

我也遇到了同样的问题。当我从主线程调用 destroyToneUnit 时,警告消失了。

[viewController performSelectorOnMainThread:@selector(destroyToneUnit) withObject:nil waitUntilDone:NO];

关于iphone - 音调消失后如何正确销毁ToneUnit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16326485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com