实时改变声音的音高(Swift)

Posted

技术标签:

【中文标题】实时改变声音的音高(Swift)【英文标题】:Changing the pitch of a sound in realtime (Swift) 【发布时间】:2017-06-29 19:13:45 【问题描述】:

在过去的几周里,我一直在尝试找到一种简单的方法来在 swift 中实时控制音频频率(即更改音频文件的音高)。 我试过用 AVAudioPlayer.rate 但这只会改变速度。 我什至尝试将 AVAudioUnitTimePitch 连接到音频引擎,但没有成功。 AVAudioUnitTimePitch 只是给我一个错误,并且速率会改变播放速度,这不是我需要的。 我想做的是,将声音调高或调低,例如从 -1.0 到 2.0(audio source.duration/2,这样它的播放速度就会提高一倍。

即使我必须使用外部库或类,你们知道有什么方法可以做到这一点吗?

谢谢你,我不知道如何继续。

【问题讨论】:

【参考方案1】:

如果您使用音频单元 API,ios 内置的 kAudioUnitSubType_NewTimePitch 音频单元组件可用于在以相同速度播放音频的同时改变音高。例如kNewTimePitchParam_Rate 和 kNewTimePitchParam_Pitch 参数是独立的。

Audio Unit 框架有一个(目前未弃用的)C API,但可以从 Swift 代码调用 C API 函数。

【讨论】:

非常感谢您的回答。所以我可以以某种方式将其附加到 AVAudioNode 或..?我对如何应用它感到困惑,更因为它是一个 C API。有什么提示吗? 好吧,我让 AVAudioUnitTimePitch 开始工作,但 htis 并不是我真正想要的,这会延长时间并进行不必要的处理,我想要做的是下采样,以便音频播放降低速度。 您可以尝试研究 MIDI 采样器合成引擎,看看它是否符合您的要求。

以上是关于实时改变声音的音高(Swift)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 使用 AVAudioEngine 实时进行音高转换

Python 的实时程序声音?

如何在Java声音中连续改变音高?

在android中播放时录制声音并改变音高?

使用狄拉克在iphone中实时改变音高[重复]

Python改变wav文件的音高[关闭]