7

C#アプリケーションでNAudioライブラリを使用しています。希望の位置にオーディオ(* .mp3ファイル)を探しています。しかし、私はそれを行う方法を理解していませんでした。

//Play the file starting from 16th second
waveStream.Seek(16, SeekOrigin.Begin);

そして...それはほとんど最初から始まりましたが、16秒からではありませんでした。私はまた、私が真実だと思った解決策を見つけました:

waveStream.Seek(waveStream.WaveFormat.AverageBytesPerSecond * 16, SeekOrigin.Begin);

真実に近いようです。私の解決は本当ですか?そうでない場合はどうすればよいですか?

4

3 に答える 3

9

Positionに直接設定できますWaveStream。これはバイトオフセットに変換する必要があります。そのため、1秒あたりの平均バイト数に秒数を掛けると、適切な場所に移動できます(少なくとも通常のPCM WAVファイルでは)。また、を使用できるようにするWaveStreamというヘルパープロパティがあり、同じ計算を実行します。CurrentTimeTimeSpan

于 2012-04-30T09:25:45.570 に答える
9

誰かがまだこの問題を抱えていて、それを理解できない場合。次に、例を示します。

myWaveStream.CurrentTime = myWaveStream.CurrentTime.Add(new TimeSpan(0, hours, minutes, seconds, milliseconds));

myWaveStream.CurrentTime = myWaveStream.CurrentTime.Subtract(new TimeSpan(0, hours, minutes, seconds, milliseconds));
于 2013-06-17T16:21:08.577 に答える
1

毎秒4ティック(250msで1ティック)のtrackBarを使用してナビゲーションを作成しました。

trackBar1.Maximum = (int)stream.TotalTime.TotalSeconds * 4;

250msごとに呼び出されるタイマーティックハンドラーでは、トラックバーの更新は次のように行われます。

double ms = stream.Position * 1000.0 / output.OutputWaveFormat.BitsPerSample / output.OutputWaveFormat.Channels * 8.0 / output.OutputWaveFormat.SampleRate;
trackBar1.Value = (int) (4 * ms / 1000);

(スクロール後の)位置を設定するために、この式は機能しました:

double ms = trackBar1.Value * 1000.0 / 4.0;
stream.Position = (long)(ms * output.OutputWaveFormat.SampleRate * output.OutputWaveFormat.BitsPerSample * output.OutputWaveFormat.Channels / 8000.0) & ~1;
于 2020-07-04T20:19:42.900 に答える