我想知道是否可以减慢 xcode 中的声音。我的意思是我将在 xcode 的支持文件中添加一些 .mp3 文件,然后我将创建能够加快或减慢速度的应用程序。例如使用滑块。甚至可能吗?如果是,任何人都可以帮助我一些想法吗?谢谢
2 回答
AVAudioPlayer 有一个 rate 属性,它应该能够帮助您实现目标。 http://developer.apple.com/library/IOS/#documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html
音频播放器的播放速率。@property 浮动利率
讨论
此属性的默认值 1.0 提供正常播放速率。可用范围从 0.5(半速播放)到 2.0(双速播放)。
要设置音频播放器的播放速率,您必须首先启用速率调整,如 enableRate 属性描述中所述。
我还发现了一个关于 AVAudioPlayer 费率的好帖子: AVAudioPlayer rate
似乎就像您提到的那样,您可以设置一个值从 0.5 到 2.0 的滑块,并在 valuechanged 上通过使用修改音频播放器速率
- (IBAction)changeValue:(UISlider *)sender
{
//made up assumed ivar names
if ([_audioPlayer respondsToSelector:@selector(setEnableRate:)])
_audioPlayer.enableRate = YES;
if ([_audioPlayer respondsToSelector:@selector(setRate:)])
_audioPlayer.rate = [NSNumber numberWithFloat:slideValue];
}
以比采样率更快或更慢的速率播放 PCM 音频会改变其音调,并且还会引入大量伪影。如果您对此感到满意,您将使用的方法是将 MP3 解码为 PCM 音频,然后使用直接数字合成振荡器来控制播放速率。
如果你想保持音高但改变速度,你需要一个音频时间拉伸算法。
来自DSP Dimension的Dirac3是可以做到这一点的商业产品,并且可以在 iOS 应用程序中获得使用许可。存在其他商业解决方案。
DSP Dimension 的博客提供了一个有用的教程,介绍了如何使用 FFT 实现音高变换的基础知识。时间拉伸本质上是相同的过程。但是,他们没有告诉您的 DIRAC 插件中有相当多的秘诀。
请注意,除非您是电子工程、物理或数学专业的毕业生,否则您可能很难填补空白。