- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我正在编写一个应用程序,我试图在录制电影 (.m4v) 时更改音频的音调。或者通过修改电影的音频音高。我希望最终结果是一部电影 (.m4v),它具有原始长度(即与原始视觉效果相同)但音高经过修改,例如一个“花栗鼠的声音”。如果可能,实时转换是首选。
我读过很多有关在 iOS 中更改音频音调的内容,但大多数示例都侧重于播放,即以不同的音调播放声音。
在我的应用程序中,我正在录制电影 (.m4v/AVFileTypeQuickTimeMovie) 并使用标准 AVAssetWriter 保存它。保存电影时,我可以访问以下我试图操纵音频的元素(例如修改音调):
我试图挂接到上述对象来修改音频音高,但没有成功。
我也尝试过狄拉克,如下所述: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 还是其他一些库?
我希望能够将经过修改的音频的电影分享给其他人,这就是我不能仅仅依靠修改音调来播放的原因。
最佳答案
好吧,我可以肯定地说狄拉克一定会成功。我用过它,它确实有效。
我在视频处理方面没有太多经验,但如果在某个时候您可以隔离音轨,那就小菜一碟了。
如果你能做到这一点,那么只需将它保存到一个文件中并使用狄拉克的时间拉伸(stretch)示例代码,它没有说明但它也可以进行音高转换,你可以设置三个参数来转换你的音频(时间拉伸(stretch)因子、以音分/音调表示的音高偏移*以及共振峰偏移)。
如果您不想将其保存到文件中,那么只需将其转换为 PCM 并在音频单元上做一些 DSP。老实说,你需要一些关于数学和音频处理的严肃知识才能做到这一点,但是那里有很多好的示例项目(github(Tom Zic 的 AudioGraph))将为你提供你所需要的,不要忘记在您的工作中提及所有这些开发人员代码。
此外,如果你可以转换为 PCM,在这个阶段你可以选择将狄拉克应用于未压缩的音频,要么在音频单元图上直播,要么使用他们的示例代码,而不是使用狄拉克使用的 EAFReader,只是通过你的缓冲区数据到它用来执行音高变换的缓冲区。您可能需要在那里做一些魔术,但不像编写您自己的音高转换 DSP 实现那样戏剧化。
最重要的是,如果你可以让 AVFoundation 只处理视频,那么你就可以实时处理音频单元并设置回调,这样每次它处理它时你都可以将处理后的数据传递给一个文件,或者可能传递给你的 avassetwriter ,我不太确定这最后一 block 是否可行。如果不可能,那么解决方案是分别同步和保存视频和音频,尽管我可以想象这是一个大问题,因为它们都会同时尝试写入磁盘。请让我知道进展如何,我现在很感兴趣。
关于objective-c - 修改录制剪辑的音频音高 (m4v),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10988435/
在过去的几个月里,我一直在研究 Haskell,我遇到了一个我不太确定如何处理的单子(monad)的情况。 我有一个 a -> m a 类型的值第二个类型为 m (a -> a)我需要对它们进行组合,
仿函数有 (a -> b) -> m a -> m b 应用程序有 f (a -> b) -> f a -> f b Monad 有 m a -> (a -> m b) -> m b 但是,是否有扩展
我是 Haskell 的新手,我想知道是否有比 Hoogle 更好的方法来确定一个库功能是否重复? 举个例子:我有很多函数f :: Monad a => a -> m a我想链接在一起,比如 f123
将存储在一系列列表中的 m、m、n 维数组组合成一个 m、m、n 维数组的方法是什么? 示例: 这是三个包含 m,m,n 维数组的列表: list1 <- array (1, dim = c(5, 5
有没有办法写一个函数f::(a -> b -> ... -> t) -> (Monad m => m a -> m b -> ... -> m t ),基本上是 liftMn 对于任何 n? (编辑:
我有一个像这样的 pandas 数据框: df = pd.DataFrame({'A':[1,3,2,9],'B':[2,1,2,7],'C':[7,2,4,6],'D':[8,1,6,4]},ind
这个问题来自文章“Trivial Monad”,地址:http://blog.sigfpe.com/2007/04/trivial-monad.html 。提供的答案是 h x y = x >>= (
所以>>= :: m a -> (a -> m b) -> m b和>> :: m a -> m b -> m b . 而 f b -> f a . 但我想要一些能m a -> (a -> m b)
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 3 年前。 Improve
当我安装 rakudo来源: $ git clone git@github.com:rakudo/rakudo.git $ cd rakudo $ perl Configure.pl --gen-mo
我正在尝试通过查看一些练习来提高我的 Idris 技能 Software Foundations (最初是为 Coq 设计的,但我希望对 Idris 的翻译不会太糟糕)。我在使用 "Exercise:
我想知道以下是否可行。 与服务器交换密码时,应保护密码。因此,用户可以使用生成的 key kUser 来加密密码。 Encrypt(m, kUser) 生成加密消息 eU(m)。现在用户将此信息发送到
这两个表之间存在什么样的关系(1:1、1:m、m:m,等等)? CREATE TABLE IF NOT EXISTS `my_product` ( `id` int(11) NOT NULL au
有人可以解释类型的含义以及如何实现吗? class Foldable f where foldMap :: (Monoid m) => (a -> m) -> f a -> m 基于 https:
例如,在 MVC 应用程序中,我可以使用 Html 助手来创建这样的标签: @Html.LabelFor(m => m.ProductName) 我没有在任何地方声明变量“m”,但 IDE 会自动找出
更新:澄清、更明确的重点和缩短的示例: 我可以避免 M op+(M&&,M&&) 过载吗?假设,我想很好地处理 RValues?我想其他三个重载是必需的。 我首先使用 (&&,&&) 重载的原因: 通
假设我有一个函数,它接受两个向量并返回一个整数,例如一个向量中也存在另一个向量中的元素数量。喜欢: f m [,1] [,2] [,3] [1,] "c" "i" "c" [2,] "
我想将字符串(字幕)转换为: 585 00:59:59,237 --> 01:00:01,105 - It's all right. - He saw us! 586 01:00:01,139 -->
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
是否可以将 Linux 中的大文件将 d.m.Y h:m:s 转换为 Y-d-m h:m:s? 示例数据 "30.07.2016 00:00:00",DN123,PAPN,PAPN,TEST,9189
我是一名优秀的程序员,十分优秀!