核心音频的newTimePitch音频单元失真

时间:2013-04-26 16:13:36

标签: core-audio

我正在尝试将newTimePitch音频单元合并到我的iOS应用中。我构建了一个带有filePlayer单元的AUGraph - > subType_NewTimePitch Unit - > remoteIO单元。我发现newTimePitch单元的输出失真了。即使在默认速率(1.0)和音调(0)参数下,这种失真也是持久的。

我已经进行了一个简单的测试确认:在我的auGraph上,我将subType_NewTimePitch交换为subType_Varispeed,保持所有其他参数相同,并且失真消失。我还尝试在newTimePitch的上游放置一个混音器单元,以减少newTimePitch单元的输入增益。当然,这降低了单元的总输出,但没有改善失真。我发现,尽管iOS模拟器中的失真并不是特别明显,但它实际上存在于实际设备(iPad2)上。

我会对其他人的经验和/或解决方案非常感兴趣。

4 个答案:

答案 0 :(得分:0)

我也发现了这一点,只是回到旧时间单位。

答案 1 :(得分:0)

格雷格,我也在我的应用程序中使用newTimePitch音频单元。我没有在模拟器上发现任何失真或噪音。设备怎么样:不幸的是,NewTimePitch节点(iOS Sounds with AudioUnit works on simulator, not on real device iPad)根本没有声音。如果我使用AUConverter节点而不是NewTimePitch,则声音播放效果良好。我也试过Varispeed,但也没有成功。你知道在iPad上错过声音的可能原因吗?

我对你的问题有几点建议:
1)您的NewTimePitch是图表中的第一个节点?和输入渲染回调是否相关联?如果是,那么您是否尝试添加例如Mixer节点作为第一个节点和之后的NewTimePitch?如果问题与流格式有关,那就有意义了。

2)您是否尝试在NewTimePitch节点和remoteIO节点之间添加AUConverter节点?如果问题与流格式有关,那就有意义了。

3)您是否尝试在设备上启动已编译的应用程序而非XCode?如果您有渲染回调日志(大量日志信息根本没有声音或声音不好),这是有意义的。

答案 2 :(得分:0)

如果您不希望它以默认音高和速率(无变化)影响声音,可以在NewTimePitch转换器音频单元上设置BypassEffect属性。

我只在iOS 6设备上测试了这个,但NewTimePitch和旁路似乎都在那里工作。

答案 3 :(得分:0)

我使用渲染回调遇到了这个问题 - >混合器单元 - > NewTimePitch单位 - >混合器单元 - > RemoteIO单元。我找到了两个解决方法:

1)使用Varispeed单元并在其上设置kNewTimePitchParam_Pitch属性(未记录,但有效)。

2)使用AUFilePlayer而不是渲染回调。

结果:播放器单元 - > NewTimePitch单位 - >混合器单元 - > RemoteIO单元

关于变通方法2的注意事项:我需要从音高单位获取kAudioUnitProperty_StreamFormat并将播放器单元的输出格式设置为它,以及混音器单元的输入格式。