【问题标题】:Modify audio pitch of recorded clip (m4v)修改录制剪辑的音频音高 (m4v)
【发布时间】:2012-06-14 20:23:46
【问题描述】:

我正在编写一个应用程序,我在录制电影 (.m4v) 时尝试改变音频的音高。或者通过之后修改电影的音频音高。我希望最终结果是具有原始长度(即与原始视觉相同)但具有修改的音高的电影(.m4v),例如“花栗鼠的声音”。如果可能,最好使用实时转换。

我已经阅读了很多关于在 iOS 中更改音频音高的文章,但大多数示例都侧重于播放,即以不同的音高播放声音。

在我的应用程序中,我正在录制电影 (.m4v / AVFileTypeQuickTimeMovie) 并使用标准 AVAssetWriter 保存它。保存电影时,我可以访问以下我尝试操纵音频的元素(例如修改音高):

  • 音频缓冲区 (CMSampleBufferRef)
  • 音频输入写入器 (AVAssetWriterAudioInput)
  • 音频输入写入器选项(例如 AVNumberOfChannelsKey、AVSampleRateKey、AVChannelLayoutKey)
  • 资产写入器 (AVAssetWriter)

我已尝试使用上述对象来修改音频音高,但没有成功。

我也尝试过使用 Dirac,如下所述:Real Time Pitch Change In iPhone Using Dirac
以及带有 AL_PITCH 的 OpenAL,如下所述:Piping output from OpenAL into a buffer
还有来自 un4seen 的“BASS”库:Change Pitch/Tempo In Realtime

以上任何库我都没有找到成功,很可能是因为我真的不知道如何使用它们,也不知道在哪里将它们挂接到音频保存代码中。

似乎有很多库具有类似的效果,但侧重于播放或自定义录制代码。我想操作已有的音频流 (AVAssetWriterAudioInput) 或修改保存的影片剪辑 (.m4v)。我希望视频在视觉上保持不变,即以相同的速度播放。但我希望音频更快(如花栗鼠)或更慢(如...怪物?

您对我如何实时(录制电影时)或之后通过转换整个电影(.m4v 文件)修改音高有什么建议吗?我应该进一步研究 Dirac、OpenAL、SoundTouch、BASS 还是其他一些库?

我希望能够通过修改后的音频将电影分享给其他人,这就是我不能仅仅依靠修改音高来播放的原因。

【问题讨论】:

    标签: objective-c ios audio pitch


    【解决方案1】:

    好的,我可以肯定地说,狄拉克绝对会成功。我用过它,它确实有效。

    我在视频处理方面没有太多经验,但如果在某个时候您可以隔离音轨,那就小菜一碟了。

    1. 如果你能做到这一点,那么只需将它保存到一个文件中,并使用 dirac 的时间拉伸示例代码,它没有说它,但它也会进行音高转换,你设置三个参数来转换你的音频(时间拉伸因子,音分/音调*的音高偏移以及共振峰偏移)。

    2. 如果您不想将其保存到文件中,那么只需将其转换为 PCM 并在音频单元上执行一些 DSP。老实说,您需要一些关于数学和音频处理的严肃知识才能做到这一点,但是那里有很多很好的示例项目(github(Tom Zic 的 AudioGraph))可以为您提供所需的东西,不要忘记在您的工作中提及所有这些开发人员代码。

    此外,如果您可以转换为 PCM,则在此阶段您可以选择将 dirac 应用于未压缩的音频,既可以在音频单元图上实时显示,也可以使用它们的示例代码,而不是使用 EAFReader Dirac 使用,只是通过您的缓冲区数据到它用来执行音调移位的缓冲区。您可能需要在那里做一些魔术,但不如编写自己的音高转换 DSP 实现那么戏剧化。

    底线,如果您只能要求 AVFoundation 处理视频,那么您可以进行音频单元实时处理并设置回调,以便每次处理它时,您都可以将处理后的数据传递给文件,或者可能传递给您的 avassetwriter ,我不太确定这最后一块是否可行。如果不可能,那么解决方案是分别同步和保存视频和音频,尽管我可以想象这是一个巨大的问题,因为它们都会尝试同时写入磁盘。请让我知道它是怎么回事,我现在很感兴趣。

    【讨论】:

      【解决方案2】:
      • 您需要做的第一件事是 demux 来自 mp4 流的音频。您将需要一个解复用器(简称解复用器)来实现此目的。看看MainConcept SDKs,他们支持一堆格式。
      • 其次,您需要将压缩音频从任何格式解码为原始 PCM。
      • 然后使用一些库来移调原始音频。
      • 接下来,您需要将音高偏移的音频编码回压缩格式。
      • 然后 mux 回到 mp4。

      由于解码-编码,您会在此过程中损失一些音频质量。您的视频将保持不变。

      【讨论】:

        猜你喜欢
        • 2015-08-15
        • 2013-09-30
        • 1970-01-01
        • 1970-01-01
        • 2015-07-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        相关资源
        最近更新 更多