5

数え切れないほど多くのソース コードを検索して読んだ後、私は行き詰まっており、あなたの助けが必要です。タイトルが示すように、Java で (さらに別の) 音楽プレーヤーを構築しようとしています。私はJavazoomプロジェクトに出くわしましたそれはちょっとうまくいきますが、ちょっとうまくいきません。私の目標は、mp3 と ogg ファイルを再生できるようにすることです。mp3 の再生は問題なく動作します。すべての情報 (ID3 タグと一般的なオーディオ ファイル情報) を取得でき、必要なすべてのアクション (再生、一時停止、再開、シークなど) を実行できます。しかし、ogg ファイルを再生しようとすると、ファイルを再生できるがファイル情報を取得できないか、すべての情報を取得できるがファイルを再生できないかのいずれかしか取得できません。私のコードは基本的に BasicPlayer クラスの改訂版です。jlGui プレーヤーを調べて、すべてのフォーマットと互換性があるかどうかを確認しようとしましたが、そのコードで完全に失われました。

私の MediaPlayer コード

プログラムをコンパイルするために使用するコマンドは次のとおりです。

javac -cp lib\jl1.0.1.jar;lib\jogg-0.0.7.jar;lib\jorbis-0.0.15.jar;liblog4j-1.2.16.jar;lib\mp3spi1.9.5.jar;lib\tritonus_share-0.3.6.jar;libvorbisspi1.0.3.jar MediaPlayer.java

で実行すると

java -cp .;lib\jl1.0.1.jar;lib\jogg-0.0.7.jar;lib\jorbis-0.0.15.jar;liblog4j-1.2.16.jar;lib\mp3spi1.9.5.jar;libtritonus_jorbis-0.3.6.jar;libtritonus_share-0.3.6.jar;libvorbisspi1.0.3.jar MediaPlayer d:/foo.mp3

情報が表示され、ファイルが正常に再生されますが、d:/foo.ogg に対して同じことを試みると、例外が発生します。

167 [main] DEBUG MediaPlayer  - Target format: PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
Exception in thread "main" java.lang.RuntimeException: Error initializing stream: java.lang.IllegalArgumentException: Unsupported conversion: PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian from VORBISENC 48000.0 Hz, unknown bits per sample, stereo, 1 bytes/frame, 16000.0 frames/second,
    at MediaPlayer.initAudioStream(MediaPlayer.java:302)
    at MediaPlayer.open(MediaPlayer.java:663)
    at MediaPlayer.main(MediaPlayer.java:772)

しかし、262 行目 (initAudioStream() の createLine() 呼び出し) にコメントを付けて同じコマンドで実行すると、すべてのファイル情報が表示されますが、同様の例外がスローされます。

170 [main] DEBUG MediaPlayer  - Target format: PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
Exception in thread "main" java.lang.IllegalArgumentException: Unsupported conversion: PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian from VORBISENC 48000.0 Hz, unknown bits per sample, stereo, 1 bytes/frame, 16000.0 frames/second,
    at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
    at MediaPlayer.createLine(MediaPlayer.java:362)
    at MediaPlayer.initLine(MediaPlayer.java:392)
    at MediaPlayer.startPlayback(MediaPlayer.java:483)
    at MediaPlayer.play(MediaPlayer.java:672)
    at MediaPlayer.main(MediaPlayer.java:773)

そして、 lib\tritonus_jorbis-0.3.6.jar をクラスパスに追加すると、ogg ファイルは再生されますが、情報は表示されません。

そうそう...私はかなり困惑しており、本当に助けが必要です。

4

4 に答える 4

0

あなたの問題は、プレーヤーの実装がストリームのメタデータも提供するという仮定から生じています。残念ながら、多くの実装では、メタデータを提供するという目標を達成することはできませんでした。

再生からメタデータの取得を分離すると、さまざまなライブラリを使用してメタデータにアクセスできます。次に、メタデータ操作に特化したライブラリを使用して、ファイルの再生とは別にこれを解決できます。

于 2012-08-02T12:44:42.450 に答える
0

easyOggを試してみてください:

http://cokeandcode.com/index.html?page=libs

于 2012-10-08T00:13:13.710 に答える
0

残念ながら、javax.sound.sampledjogg の実装にはいくつかの欠点があります。おそらく、 FFsampledSPを試してみたいと思うでしょう。javax.sound.sampledこれは、インターフェイスも実装する Win および OSX 用の FFmpeg ベースの実装です。

于 2013-11-10T17:52:08.007 に答える
0

mp3spi 1.9.5-1 と vorbisspi 1.0.3-1 を使用して、同様の問題が発生しました。0.3.7-1 ではなく tritonus-share 0.3.7-2 をクラスパスに入れる必要がありました。そうしないと、vorbisspi が機能しません。

Maven の依存関係を使用しました。完全に機能するソリューションは次のとおり です。

于 2013-12-20T03:12:52.810 に答える