gpt4 book ai didi

ios - AVAudioEngine schedule sample 准确的参数变化

转载 作者:行者123 更新时间:2023-12-05 07:48:54 24 4
gpt4 key购买 nike

我正在尝试使用 AVAudioPlayerNode 实例和其他 AUAudioUnits 的组合来创建应用程序以进行 EQ 和压缩等。一切都很好地连接起来,使用 API 的 V3 版本肯定会使配置更容易将节点连接在一起。然而,在播放期间,我希望能够自动更改参数,例如调音台的增益,以便变化呈斜坡状(例如淡出或淡入),并确信这些变化是准确的样本。
我考虑过的一种解决方案是在节点(可能是引擎的混频器节点)上安装一个抽头,并在其中调整给定单元的增益,但由于抽头位于单元的输出端,因此总是为时已晚。所需的效果(我认为)无需进行偏移计算,然后延迟我的源音频播放以匹配参数更改。我还查看了 AUAudioUnit 上的 scheduleParameterBlock 属性,但似乎我需要实现自己的自定义单元才能使用它,而不是使用内置单元,即使在

WWDC session 508: " ...So the first argument to do schedule is a sample time, the parameter value can ramp over time if the Audio Unit has advertised it as being rampable. For example, the Apple Mixer does this. And the last two parameters, of course, are function parameters are the address of the parameter to be changed and the new parameter value.... "

也许这意味着 Apple Mixer 在内部使用它,而不是我们可以利用任何可扩展的功能。除了实现自定义音频单元(如本次演讲所附的 Apple 示例)之外,我找不到很多文档或示例。

我见过的其他可能的解决方案包括使用 NSTimerCADisplayLinkdispatchAfter...,但这些解决方案感觉更糟糕,样本准确度也低于从单元输出端安装的分接 block 偏移。

我觉得我错过了一些非常明显的东西,因为新的 AVAudioEngine API 的其他部分很有意义,而旧的 AUGraph API 允许更多地访问样本准确排序和参数更改。

最佳答案

这并不像您希望的那样明显。不幸的是,在我的测试中,scheduleParameterBlock 上的斜坡参数(甚至是底层的 AudioUnitScheduleParameters)根本不执行任何操作。如此成熟的 API 非常奇怪。

最重要的是,您只能在单个 缓冲区中设置参数值,而不能在样本级别设置。在采样时间设置参数值,将自动从当前值斜坡到包含缓冲区末尾的新值。似乎没有办法禁用此自动斜坡。

较长的淡入淡出必须通过在多个缓冲区中设置分数值并跟踪淡入淡出的相对进度来分段完成。实际上,对于正常持续时间的衰落,这种时间差异不太可能成为问题,因为采样精度会过高。

所以综上所述,sample-level的参数更改似乎是不可能的,但是buffer-level的参数更改很容易。如果您需要进行非常短的淡入淡出(在单个缓冲区内或跨多个缓冲区),则可以通过 AURenderCallback 操纵各个样本在样本级别完成。

关于ios - AVAudioEngine schedule sample 准确的参数变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38021068/

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