与NAudio一起使用SoundTouchWaveStream和SmbPitchShiftingSampleProvider时出现故障

时间:2019-05-16 14:04:50

标签: .net audio naudio

我有一个.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%。

Performance figures

将延迟时间增加到300 ms确实可以改善播放效果,但会增加监视当前播放位置的问题。

在某些时候,我将要添加其他音频处理组件,例如情商。如何在每次添加新的处理组件时最大化回放性能而又不增加延迟?

0 个答案:

没有答案