【问题标题】:How to Change Playback Speed using NAudio C#如何使用 NAudio C# 更改播放速度
【发布时间】:2011-07-07 05:15:21
【问题描述】:

我正在实现一个媒体播放器并使用 NAudio 来播放我的文件。有什么方法可以在播放声音时提高播放速度,例如(2X 或 4X)。代码示例将不胜感激。

提前致谢 干杯。

【问题讨论】:

    标签: c# media-player naudio


    【解决方案1】:

    NAudio 不包含用于更改音频播放速度的现成组件。但是,如果您创建自己的派生 WaveStream / IWaveProvider 并自己实现加速算法,这是可能的。获得 2 倍或 4 倍速度提升的最简单方法就是丢弃样本。但是,质量不会很好(将引入人工制品),因此是否可以使用该选项取决于您的需求。

    我曾经自己在 NAudio 中实现了可变播放速度,但不幸的是我不能在这里分享代码,因为它不是开源的。然而,Yuval Naveh 在他的 PracticeSharp 应用程序中实现了可变播放速度,该应用程序使用 NAudio,因此您可能想看看他是如何做到的(我认为他通过包装 SoundTouch 来实现它)。

    【讨论】:

    • 感谢您的帮助将尝试并发布我的结果
    【解决方案2】:

    我最近向 ispy 添加了变速播放 - 它使用 naudio 进行播放。 PlaybackRate 是双重的 - 将其设置为减慢或加快音频:

    if (WaveOutProvider != null)
    {
        if (Math.Abs(PlaybackRate - 1) > double.Epsilon)
        {
        //resample audio if playback speed changed
        var newRate = Convert.ToInt32(_waveProvider.WaveFormat.SampleRate/PlaybackRate);
        var wf = new WaveFormat(newRate, 16, _waveProvider.WaveFormat.Channels);
        var resampleInputMemoryStream = new MemoryStream(data) {Position = 0};
    
        WaveStream ws = new RawSourceWaveStream(resampleInputMemoryStream, _waveProvider.WaveFormat);
        var wfcs = new WaveFormatConversionStream(wf,ws) {Position = 0};
        var b = new byte[ws.WaveFormat.AverageBytesPerSecond];
    
        int bo = wfcs.Read(b, 0, ws.WaveFormat.AverageBytesPerSecond);
        while (bo > 0)
        {
            WaveOutProvider.AddSamples(b, 0, bo);
            bo = wfcs.Read(b, 0, ws.WaveFormat.AverageBytesPerSecond);
        }
        wfcs.Dispose();
        ws.Dispose();
    
        }
        else
        {
        WaveOutProvider.AddSamples(data, 0, data.Length);    
        }
    
    }
    

    【讨论】:

    • 肖恩,我试过你的(通过一个改变 SampleRate 的转换器流),但它所做的是在保持原始播放速度的同时降低了音频质量。
    【解决方案3】:

    我已经完成了他们正在实现 Speed on Fly(音频播放时)的 PracticeSharp。但我的要求不匹配。 如果有任何简单的 Speed on Fly 解决方案,请提供,例如 VolumeSampleProvider 这样的 VolumeSampleProvider 是否有任何用于 Speed 更改的类。

    【讨论】:

      猜你喜欢
      • 2018-12-28
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多