Joh*_*hnK 6 iphone synchronization core-audio audio-converter remoteio
我使用基于Matt Gallagher 经典示例的 AudioUnits在iPhone上生成音调.为了避免开始/结束时的唧唧声和咔嗒声,我在回调中淡入/淡出幅度RenderTone.我希望在淡出结束时摧毁ToneUnit,也就是说,在振幅达到零之后.我能想到的唯一方法就是从回调中调用实例方法:
if (PlayerState == FADING_OUT) {
amplitude -= stepsize;
if (amplitude <= 0) {
amplitude = 0;
PlayerState = OFF;
[viewController destroyToneUnit];
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这比我想象的更具挑战性.首先,我仍然得到了fadeout应该消除的最后点击.另一方面,我收到此日志通知:
<AURemoteIO::IOThread> Someone is deleting an AudioConverter while it is in use.
Run Code Online (Sandbox Code Playgroud)
这条消息意味着什么,为什么我得到它?
如何应我杀ToneUnit?我怀疑发生了点击,因为RenderTone它destroyToneUnit在不同的线程上运行.如何让这些同步?
如果它有用,这是我的destroyToneUnit实例方法:
- (void) destroyToneUnit {
AudioOutputUnitStop(toneUnit);
AudioUnitUninitialize(toneUnit);
AudioComponentInstanceDispose(toneUnit);
toneUnit = nil;
}
Run Code Online (Sandbox Code Playgroud)
如果我在之前和之后的NSLog消息AudioUnitUninitialize(toneUnit);,通知出现在它们之间.
我也遇到了同样的问题.当我从主线程调用destroyToneUnit时,警告就消失了.
[viewController performSelectorOnMainThread:@selector(destroyToneUnit) withObject:nil waitUntilDone:NO];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
760 次 |
| 最近记录: |