Media Playerを実装し、NAudioを使用してファイルを再生しています。再生中に(2Xまたは4X)再生速度を上げる方法はありますか?コードサンプルは高く評価されます。NAudioを使用して再生速度を変更する方法C#
ありがとうございました 乾杯。
Media Playerを実装し、NAudioを使用してファイルを再生しています。再生中に(2Xまたは4X)再生速度を上げる方法はありますか?コードサンプルは高く評価されます。NAudioを使用して再生速度を変更する方法C#
ありがとうございました 乾杯。
NAudioには、オーディオ再生の速度を変更する既成のコンポーネントは含まれていません。ただし、独自の派生WaveStream/IWaveProviderを作成し、自分でスピードアップアルゴリズムを実装することは可能です。 2倍または4倍の速度向上を得る最も簡単な方法は、サンプルを捨てることです。しかし、品質は良くありません(アーティファクトが導入される)ので、あなたがそのオプションを使用できるかどうかは、あなたのニーズに依存します。
私はNAudioで可変再生速度を一度実装しましたが、残念ながらオープンソースではないので、ここでコードを共有することはできません。 Yuval NavehはNAudioを使用しているPracticeSharpアプリケーションの一部として可変再生速度を実装していますので、彼がどのようにしたのかチェックしたいかもしれません(SoundTouchをラップして実現していると思います)。
私はPracticeSharpを経て、Fly on Fly(オーディオ再生中)を実装しています。私の要件は一致しませんでした。 Speed on Flyで作業する簡単な解決策があれば、VolumeSampleProviderにボリュームのサンプルを提供してください。これにはSpeedの変更に関するクラスがあります。
私は最近、再生用にnaudioを使用するispyに可変速再生を追加しました。 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を変更するコンバータストリームを通過する)が、元の再生速度を維持しながらオーディオ品質を低下させます。 –
おかげで –