我想使用 AVAudioRecorder 录制声音,并使用 AVAudioPlayer 以不同的音高播放它。
我试过改变音频播放器的 rate 属性,它播放声音的速度更快或更慢,但不会改变音高。还有另一种方法可以做到这一点吗?例如,我可以以 22kHz 录制并以 44kHz 播放吗?我尝试更改播放器的音频设置,但它们是只读的。我错过了一些简单的东西吗?
我查看了不同的声音库,但如果有的话,我只想要一个简单的 hack。
谢谢!
我想使用 AVAudioRecorder 录制声音,并使用 AVAudioPlayer 以不同的音高播放它。
我试过改变音频播放器的 rate 属性,它播放声音的速度更快或更慢,但不会改变音高。还有另一种方法可以做到这一点吗?例如,我可以以 22kHz 录制并以 44kHz 播放吗?我尝试更改播放器的音频设置,但它们是只读的。我错过了一些简单的东西吗?
我查看了不同的声音库,但如果有的话,我只想要一个简单的 hack。
谢谢!
Audio Tap Processor是来自 Apple 的示例代码,它似乎改变了频率。尝试示例应用程序,如果它对您有帮助,您可以使用一些代码来组合您的应用程序。
您可以使用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;