【发布时间】:2020-12-31 07:30:08
【问题描述】:
我想播放一个 mp3 声音,只需设置一次声像、音高/采样率和音量控制(不会实时更改)。 我目前正在使用 AVAudioPlayer,它可以工作,但是速率设置执行时间拉伸而不是执行采样率更改,其中较低的值会导致声音变得更慢和更低音调,而更高的值会导致声音变得更快和更高的音调(有点像磁带速度)。 例如,当您的声音实际为 44100 时,将采样率设置为 88200 HZ 将导致它以 200% 的速度/音高播放。 使用 AVAudioPlayer 是否可以实现类似的操作,或者是否有其他方法可以做到这一点? 到目前为止,这是我所拥有的:
player=[[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath: @"sound.mp3"] error: nil];
player.volume=0.4f;
player.pan=-1f;
player.enableRate=YES;
player.rate=2.0f;
[player play];
注意:我不是指结合使用时间拉伸以保持声音长度大致相同的音高方法,或任何“高级”算法。
【问题讨论】:
-
AvAudioPlayer 好像没有提供那种功能developer.apple.com/documentation/avfoundation/avaudioplayer
-
改变播放速度不一定像改变采样率那么简单。支持一定数量的采样率,因此您可能必须采取不同的方法。我能想到的最明显的方法是使用音频单元在样本值之间进行插值,相应地降低或增加值
-
@fdcpp 那我还有其他方法吗?也许另一堂课?另一个框架?
-
如果是非实时的,你可以摄取音频文件,获取样本,应用插值保存一个新的音频文件并回放。
-
对于框架:JUCE 可能是笨手笨脚的。 OpenAL 可以做到,但是已经过时了。 AudioUnits 似乎确实是最有可能的竞争者
标签: objective-c macos cocoa audio avfoundation