我有一个.NET音频应用程序,允许用户独立调整播放音频的速度和音调。我目前正在使用NAudio。
要启用速度和音调调整,我正在使用以下代码。
class NativeAudioPlayer
{
readonly NAudio.Wave.AudioFileReader _audioFileReader;
readonly WaveOutEvent _waveOutEvent;
readonly SoundTouchWaveStream _tempoControl;
readonly SmbPitchShiftingSampleProvider _pitchControl;
public NativeAudioPlayer(string filePath)
{
_audioFileReader = new NAudio.Wave.AudioFileReader(filePath);
var stream16 = new Wave32To16Stream(_audioFileReader);
_tempoControl = new SoundTouchWaveStream(stream16);
var sampleProvider = NAudioConverter.ConvertWaveProviderIntoSampleProvider(_tempoControl);
_pitchControl = new SmbPitchShiftingSampleProvider(sampleProvider);
_waveOutEvent = new WaveOutEvent { DesiredLatency = 150, NumberOfBuffers = 3 };
_waveOutEvent.Init(_pitchControl);
}
}
在我的一台计算机上(Windows 10 x64 i7-6820HQ CPU @ 2.70GHz,2701 Mhz,4核,8逻辑处理器),在CPU使用率约为7%的情况下似乎可以正常工作。
但是,在另一台较低规格的计算机上(Windows 10 x64 i3-3120M CPU @ 2.50GHz,2500 Mhz,2个核心,4个逻辑处理器),播放音频时会出现明显的故障。在这台机器上,播放不佳与大约20%的CPU使用率有关。删除速度和音调后,播放效果很好,CPU约为2.5%。
将延迟时间增加到300 ms确实可以改善播放效果,但会增加监视当前播放位置的问题。
在某些时候,我将要添加其他音频处理组件,例如情商。如何在每次添加新的处理组件时最大化回放性能而又不增加延迟?