3

インターネットから音楽をストリーミングするプログラムを開発しています。曲をストリーミングするとき、その URL にアクセスできません。入力ストリームと、バイト単位の長さなどの情報のみを取得します。YouTube などに似たシークバーを実装したいと思います。これまで、シークバーを JSlider として表示することができました。最大値はストリームの長さ (バイト単位) で、値は曲の現在の位置 (バイト単位) に応じて変化します。 .

現在、BasicPlayer には seek(long bytesToSkip) という関数があり、ユーザー入力によってスライダーが移動および解放されたときに、それを呼び出してみました。ただし、 seek() は何もしません。ログメッセージも何もありません。そこで、BasicPlayer のソースをダウンロードしたところ、seek(long bytesToSkip) が skipBytes(long bytesToSkip) を呼び出して、再生するデータがファイルかどうかをチェックすることがわかりました。そうでない場合は、何もしません。

だから私はそれが私をどこに連れて行くかを見るためにそのif句を削除しました。今、私は行で例外を取得しています

initAudioInputStream();

これにより、処理しているデータの種類がチェックされ、そのデータの種類に適したメソッドが呼び出されます。私の場合

initAudioInputStream(InputStream inputStream) {
    m_audioInputStream = AudioSystem.getAudioInputStream(inputStream);
    m_audioFileFormat = AudioSystem.getAudioFileFormat(inputStream);
}

そして、これらの2行の最初の行で例外が発生します。これは EOFException であるため、ストリームが audioInputStream を取得するのに十分なほど「バッファリング」されていないと考えます。その方法がファイル全体を必要とする場合、私は運が悪いと思います。

誰かが私がこの仕事をするのを手伝ってくれることを本当に願っています. 私はこれに長い間取り組んできました..

4

0 に答える 0