2016-09-17 13 views
2

URLからmp3をストリームするコードがあります。私はUIのmp3プレーヤーの現在の時間を表示したい。私はWaveOut.GetPositionを使って試しましたが、それは私のために働くことができませんでした。 どうすればいいですか?NAudioを使ってmp3をストリーミングする際の現在の時間を取得するには?

マイコード:

do 
{ 
    //..codes to get url stream,to create BufferedWaveProvider 

    int decompressed = decompressor.DecompressFrame(frame, buffer, 0); 
    provider.AddSamples(buffer, 0, decompressed); 
    if (provider.BufferedDuration.Seconds > 2 && waveOut == null) 
    { 
     waveOut = new WaveOut(); 
     waveOut.Init(provider); 
     waveOut.Play(); 
    } 
    if (waveOut != null) 
    { 
     currentTime = (int)(waveOut.GetPosition() * 1d/AvgBytesPerSec); 
    } 
} 
while (bytesRead > 0 || waveOut.PlaybackState == PlaybackState.Playing); 
+0

どのようなタイプの 'provider'ですか? –

+0

'provider'はBufferedWaveProvider、' waveOut'はWaveOutです。必要ならば、コード全体を記述することができます。 –

+0

どうしてうまくいかないのですか?オーディオをまったく再生していますか? – ioctlLR

答えて

1

を助ける

希望だと思う必要なものを与える必要がありますあなたが現在使用しているプロパティ。 IWavePositionインターフェイス(実際にここで使用しているインターフェイス)はハードウェア用語で「考える」ため、ハードウェアで使用できるように変換する必要がある形式を使用している場合、ハードウェアのバイトレートはソースバイトとは異なりますレート。

GetPosition()によって返される位置は、再生が最後に開始された後であることに注意してください。 waveOut.Stop()が呼び出された場合、再生を再開すると、位置は0にリセットされます。位置をソースにマッピングすることは、呼び出し元(これは本当にシンプルですが、ソース上で最後に再生を開始した場所を追跡し、返された位置に追加することです)。バッファリングは複雑ですが、完全に実行可能です。

NAudioのオリジナルのIWavePositionインターフェイス&の実装を記述しました。それは私がそれを構築したプロジェクトで素晴らしい作品です。 :)

+0

それはうまく動作します。私の値 'AvgBytesPerSec'は' Mp3Frame'プロパティを使って構築した 'Mp3WaveFormat.AverageBytesPerSecond'でした。違いはフレームを伸張していると思う。フレームが解凍されるときにバイトの長さが増えるためです。助けてくれてありがとう@ioctILR。 –

1

、プロパティ、現在の時刻とプロパティの位置を試してみたのですか?

mp3Reader = new Mp3FileReader("example.mp3"); 

waveOut.Init(mp3Reader); 

waveOut.Play(); 

// reposition to five seconds in 
mp3Reader.CurrentTime = TimeSpan.FromSeconds(5.0); 

のでmp3Reader.CurrentTimeは、あなたが、私はこれは私があなたのコードに加える必要がある唯一の変更は、AvgBytesPerSecの代わりにwaveOut.OutputWaveFormat.AverageBytesPerSecondを使用することだと思うあなた

+0

しかし、私はそれをURLソースからストリームする必要があります。私はMp3FileReaderが保存されたファイルに対してのみ動作することを知っています。ストリーミングのソリューションはありますか? –

+1

from codeplex 'BufferedWaveProvider.BufferedDuration'、https://github.com/naudio/NAudio/blob/master/NAudio/Wave/WaveProviders/BufferedWaveProvider.cs、コードをブラウズすることで、方法を見つけることもできますし、編集することもできますソースコード – Monah

+0

ソースコードには多くの依存クラスがありますが、試してみます。提案していただきありがとうございます。 –

関連する問題