我正在实施媒体播放器并使用NAudio播放我的文件。有没有办法在播放声音时增加播放速度,如(2X或4X)。代码示例将不胜感激。
先谢谢 欢呼声。
答案 0 :(得分:5)
NAudio不包含用于改变音频播放速度的现成组件。但是,如果您创建自己的派生WaveStream / IWaveProvider并自己实现加速算法,则可以。获得2倍速或4倍速的最简单方法就是扔掉样品。但是,质量不会很好(将引入人工制品),所以这取决于您是否可以选择该选项。
我已经在NAudio中实现了变量播放速度,但不幸的是我不能在这里共享代码,因为它不是开源的。然而,Yuval Naveh已经实现了变量播放速度作为他使用NAudio的PracticeSharp应用程序的一部分,所以你可能想看看他是如何做到的(我认为他通过包裹SoundTouch来实现它)
答案 1 :(得分: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);
}
}
答案 2 :(得分:0)
我已经通过PracticeSharp他们正在实施Speed on Fly(同时播放音频)。但我的要求不符合。 如果有任何关于Speed on Fly工作的简单解决方案请提供,例如对于音量,VolumeSampleProvider就像这样有速度变化的类。