我正在编写一个应用程序,当我录制一部电影(.m4v)时,我试图改变音频的音高。或者修改电影的音高。我想最终的结果是一部电影(.m4v),它有最初的长度(即与原版相同的视觉),但有修改的音高,例如“花栗鼠的声音”。如果可能的话,可以选择实时转换。
我读过很多关于在iOS中改变音频音高的文章,但是大多数的例子都集中在回放上,即用不同的音高播放声音。
在我的应用程序中,我正在录制一部电影(.m4v / AVFileTypeQuickTimeMovie),并使用标准AVAssetWriter保存它。在保存电影时,我可以访问我试图操作音频的下列元素(例如,修改音高):
我试着连接到上面的对象来修改音频音高,但是没有成功。
我也尝试过狄拉克,如下所述:用狄拉克实现iPhone中的实时基音变化
和OpenAL与AL_PITCH的关系,如下所述:从OpenAL输出到缓冲区的管道
和un4seen:实时改变音高/节奏的“低音”库
我还没有找到上述任何一个库的成功,很可能是因为我不知道如何使用它们,也不知道如何将它们连接到音频保存代码中。
似乎有很多图书馆有类似的效果,但重点是回放或自定义记录代码。我想要操作我已经拥有的音频流(AVAssetWriterAudioInput)或修改保存的电影剪辑(.m4v)。我希望视频是不可修改的视觉,即以同样的速度播放。但是我想让声音飞得更快(像花栗鼠一样)或者慢一点(就像.怪物?
你有什么建议,我如何可以修改音高在实时(当录制电影)或之后通过转换整个电影(.m4v文件)?我应该进一步看看狄拉克,OpenAL,SoundTouch,贝斯还是其他图书馆?
我希望能够与其他人分享修改后的音频,这也是我不能仅仅依靠修改音高来播放的原因。
发布于 2012-08-27 16:18:06
好吧,我可以肯定地说,狄拉克一定会成功的。我用过它,它确实有用。
我没有太多的视频处理经验,但如果在某一点上,你可以隔离音频轨道,这是小菜一碟。
此外,如果您可以转换为PCM,在此阶段,您可以将狄拉克应用于未压缩音频,或者使用音频单元图,或者使用它们的示例代码,而不是使用EAFReader dirac使用,只需将缓冲数据传递到它用来执行音高偏移的缓冲区。您可能需要在那里做一点魔法,但不像编写您自己的DSP实现音高转换那样引人注目。
总之,如果您可以要求AVFoundation处理视频,那么您就可以进行音频单元的实时处理和设置回调,因此每次处理它时,您都可以将处理过的数据传递给文件,或者可能传递给您avassetwriter,我不太确定这最后一段是否可能。如果这是不可能的,那么解决方案是同步和单独保存视频和音频,尽管我可以想象这是一个巨大的问题,因为他们将尝试同时写入磁盘。请告诉我事情进展如何,我现在很感兴趣。
发布于 2013-03-21 20:55:11
您将失去一些音频质量在过程中,因为解码-编码。你的视频会保持原样。
https://stackoverflow.com/questions/10988435
复制相似问题