我正在编写一个应用程序,我在录制电影(.m4v)时试图改变音频的音高。或者通过之后修改电影的音频音高。我希望最终结果是一部电影(.m4v),它具有原始长度(即与原始视觉相同)但具有修改的音高,例如“花栗鼠声音”。如果可能的话,最好选择实时转换。
我已经阅读了很多关于在 iOS 中更改音频音高的文章,但大多数示例都侧重于播放,即以不同的音高播放声音。
在我的应用程序中,我正在录制电影 (.m4v / AVFileTypeQuickTimeMovie) 并使用标准 AVAssetWriter 保存它。保存电影时,我可以访问以下我试图操纵音频的元素(例如修改音高):
- 音频缓冲区 (CMSampleBufferRef)
- 音频输入编写器 (AVAssetWriterAudioInput)
- 音频输入写入器选项(例如 AVNumberOfChannelsKey、AVSampleRateKey、AVChannelLayoutKey)
- 资产编写器 (AVAssetWriter)
我试图挂钩上述对象来修改音频音高,但没有成功。
我也尝试过使用 Dirac,如下所述:Real Time Pitch Change In iPhone Using Dirac
And OpenAL with AL_PITCH as described here:将OpenAL 的输出管道传输到缓冲区
和 un4seen 的“BASS”库:实时更改音高/速度
我没有发现上述任何库的成功,很可能是因为我真的不知道如何使用它们,也不知道在哪里将它们连接到音频保存代码中。
似乎有很多库具有类似的效果,但侧重于播放或自定义录制代码。我想操作已有的音频流 (AVAssetWriterAudioInput) 或修改保存的影片剪辑 (.m4v)。我希望视频在视觉上保持不变,即以相同的速度播放。但我希望音频更快(如花栗鼠)或更慢(如......怪物?
您对我如何实时(录制电影时)或之后通过转换整个电影(.m4v 文件)修改音高有什么建议吗?我应该进一步研究 Dirac、OpenAL、SoundTouch、BASS 还是其他一些库?
我希望能够通过修改过的音频与其他人分享电影,这就是我不能仅仅依靠修改音高来播放的原因。