mik*_*uth 9 audio objective-c pitch ios
我正在编写一个应用程序,我正在尝试在录制电影(.m4v)时更改音频的音高.或者之后修改电影的音频音调.我希望最终结果是具有原始长度(即与原始视觉相同)但具有修改的声音音调的电影(.m4v),例如"花栗鼠声音".如果可能,实时转换是首选.
我已经阅读了很多关于改变iOS中音频音调的内容,但大多数例子都集中在播放上,即播放不同音高的声音.
在我的应用程序中,我正在录制一部电影(.m4v/AVFileTypeQuickTimeMovie)并使用标准AVAssetWriter保存它.保存电影时,我可以访问以下元素,我试图操纵音频(例如修改音高):
我试图勾住上面的对象来修改音频音调,但没有成功.
我也尝试过使用Dirac,如下所述:使用Dirac进行实时间距更改
和使用AL_PITCH进行OpenAL,如下所述:将OpenAL的输出管道输入到缓冲区
和un4seen中的"BASS"库:实时更改音高/速度
我没有找到任何上述库的成功,很可能是因为我真的不知道如何使用它们,以及将它们挂钩到音频保存代码的位置.
似乎有很多图书馆具有类似的效果,但专注于播放或自定义录制代码.我想操纵我已经获得的音频流(AVAssetWriterAudioInput)或修改保存的影片剪辑(.m4v).我想让视频在视觉上不被修改,即以相同的速度播放.但我希望音频更快(如花栗鼠)或更慢(如...怪物?
您有什么建议我可以实时修改音高(录制电影时)或之后通过转换整个电影(.m4v文件)?我应该进一步了解Dirac,OpenAL,SoundTouch,BASS还是其他一些图书馆?
我希望能够通过修改后的音频将电影分享给其他人,这就是我不能仅仅依赖修改音高进行播放的原因.
好吧,我可以有把握地说狄拉克一定会成功。我已经使用过它并且确实有效。
我在视频处理方面没有太多经验,但如果在某个时候你可以隔离音轨,那就小菜一碟了。
如果你能做到这一点,那么只需将其保存到文件中并使用狄拉克关于时间拉伸的示例代码,它没有说,但它也可以进行音调变换,您设置三个参数来转换您的音频(时间拉伸因子,音调变换)音分/音调*以及共振峰偏移)。
如果您不想将其保存到文件中,那么只需将其转换为 PCM 并在音频单元上进行一些 DSP 操作即可。老实说,你需要一些关于数学和音频处理的严肃知识才能做到这一点,但是有很多很好的示例项目(github(Tom Zic 的 AudioGraph))可以为你提供你需要的东西,不要忘记提及您工作中的所有开发人员代码。
此外,如果您可以转换为 PCM,在此阶段您可以选择将 dirac 应用于未压缩的音频,无论是在音频单元图上实时显示还是通过使用它们的示例代码,而不是使用 EAFReader Dirac 使用,只需将缓冲区数据传递到它用于执行音调转换的缓冲区。您可能需要在那里施展一点魔法,但不像编写您自己的音高转换 DSP 实现那么戏剧化。
最重要的是,如果您可以要求 AVFoundation 处理视频,那么您就可以进行音频单元实时处理并设置回调,以便每次处理它时您都可以将处理后的数据传递到文件或可能传递给您的 avassetwriter,我是不太确定这最后一块是否可能。如果不可能,那么解决方案是分别同步和保存视频和音频,尽管我可以想象这是一个大问题,因为它们都会尝试同时写入磁盘。请让我知道进展如何,我现在很感兴趣。
| 归档时间: |
|
| 查看次数: |
2523 次 |
| 最近记录: |