在 iOS 上实时录制、修改音高和回放音频

Posted

技术标签:

【中文标题】在 iOS 上实时录制、修改音高和回放音频【英文标题】:Record, modify pitch and play back audio in real time on iOS 【发布时间】:2010-12-08 23:32:57 【问题描述】:

我只是想知道是否有人可以向我解释我将如何录制音频、修改它(音高?)并在 iPhone 上播放给用户。

我不是要求有人为我做这件事,只是一些关于我应该如何去做的提示。浏览文档似乎我应该使用AVAudiosessionAVAudioRecorderAVAudioPlayer (AVFoundation.Framework) 来录制播放部分。还是我应该使用CoreAudio.Framework?然后是关于修改音频的问题。

【问题讨论】:

【参考方案1】:

AVAudioUnitTimePitch 应该可以解决问题。

来自udacity.com Intro to iOS App Development with Swift的示例代码:

func playAudioWithVariablePitch(pitch: Float) 
    audioEngine.stop()
    audioEngine.reset()

    let audioPlayerNode = AVAudioPlayerNode()
    audioEngine.attachNode(audioPlayerNode)

    let changePitchEffect = AVAudioUnitTimePitch()
    changePitchEffect.pitch = pitch
    audioEngine.attachNode(changePitchEffect)

    audioEngine.connect(audioPlayerNode, to:changePitchEffect, format:nil)
    audioEngine.connect(changePitchEffect, to:audioEngine.outputNode, format:nil)

    audioPlayerNode.scheduleFile(audioFile, atTime:nil, completionHandler: nil)
    try! audioEngine.start()

    audioPlayerNode.play()

【讨论】:

【参考方案2】:

OpenAL 是一个库,它支持您正在搜索的内容。它在 iPhone 上非常受欢迎,所以也许你应该看看这个。 即,只需一个命令即可轻松更改样本的音高:

alSourcef(source, AL_PITCH, pitch);

但我不确定,AVFoundation 或 CoreAudio 类是否也可以改变音高 - 从未使用过它们。

【讨论】:

非常感谢@Constantin 我确实最终使用了openAL。更多细节可以在这个其他问题上看到:***.com/questions/5137853/…【参考方案3】:

这可能会有所帮助。 DIRAC-mobile,用于实时处理和弦音频信号的速度和音高的库。他们还提供示例代码,您可以在下载库后查看。

【讨论】:

感谢金儒的链接。恐怕使用商业图书馆对我来说不是一个选择:(

以上是关于在 iOS 上实时录制、修改音高和回放音频的主要内容,如果未能解决你的问题,请参考以下文章

使用音频队列框架录制的数据格式

如何更改录制音频的音高并在后台保存?

录制时通过 Swift OSX 音频

如何通过改变音高和速度 iOS 保存音频?

如何在 iPhone 上使用音频单元

音频时标音高修改 - 开源示例?