用AVAudioPlayer简单改变音高?

时间:2013-10-01 22:04:51

标签: ios audio signal-processing avaudioplayer avaudiorecorder

我想用AVAudioRecorder录制声音,AVAudioPlayer用不同的音高播放它。

我尝试更改音频播放器的速率属性,它可以更快或更慢地播放声音,但不会改变音高。还有另一种方法来实现这一目标吗?例如,我可以在22kHz录制并以44kHz播放吗?我尝试更改播放器的音频设置,但它们是只读的。我错过了一些简单的事吗?

我看过不同的声音库,但如果有的话,我只想要一个简单的黑客。

谢谢!

2 个答案:

答案 0 :(得分:0)

Audio Tap Processor是来自Apple的示例代码,似乎可以更改频率。试试示例应用程序,如果它对您有所帮助,您可以使用一些代码将您的应用程序组合在一起。

答案 1 :(得分:0)

您可以使用dsp维度中的 dirac-2 进行iphone上的音高变换。引用: -

“DIRAC2既可作为商业对象库提供无限采样率和锁相多通道支持,也可作为免费单通道,44.1 / 48kHz LE版本。”

否则为AVAudioPlayer

使用setEnableRate:和setRate:仅适用于iOS 5.0及更高版本。所以我使用respondsToSelector:在设备上测试设备是否接受请求:

_noticeAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Rooster-mono" ofType:@"wav"]]
                                                      error:nil];;
if ([_noticeAudio respondsToSelector:@selector(setEnableRate:)])
    _noticeAudio.enableRate = YES;
if ([_noticeAudio respondsToSelector:@selector(setRate:)])
    _noticeAudio.rate = 2.0;