2012-05-06 14 views
5

多くのソースコードを使用して無数の時間をかけて検索して読んだ後、私は死んでしまいました。あなたの助けが必要です。 タイトルが示すように、私はJavaで音楽プレーヤーを(さらに別の)構築しようとしています。私はJavazoom projectにつまずいたが、それはちょっとうまくいくが、ちょっとでもない。私の目標はmp3とoggファイルを再生できることです。私はすべての情報(ID3タグと一般的なオーディオファイル情報)を得ることができ、必要なすべてのアクション(再生、一時停止、再開、シークなど)を実行できます。しかし、私がoggファイルを再生しようとすると、私は2つのうちの1つだけを得ることができます。ファイルを再生できますが、ファイル情報を取得できないか、すべての情報を取得できます。私のコードは基本的にBasicPlayerクラスの改良版ですが、jlGuiプレーヤーを調べてどのようにすべてのフォーマットと互換性があるのか​​見てみましたが、そのコードでは完全に失われています。Javaのmp3とoggを再生

My MediaPlayer code

ここで私はプログラムをコンパイルするために使用するコマンドです:

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ファイルが再生されますが、情報は表示されません。

だから私はかなり困惑していて、本当に助けを得ることができます。

答えて

0

問題は、プレーヤーの実装でもストリームのメタデータが提供されるという前提に基づいています。残念なことに、多くの実装は、メタデータを提供するつもりはありませんでした。

私は再生からメタデータを取得することを別にして、異なるライブラリを使用してメタデータにアクセスすることができます。 library specialized in metadata manipluationを使用すると、ファイルの再生とは別にこれを解決できます。

0

残念ながら、joggのjavax.sound.sampled実装は、欠点のカップルを持っています。 おそらくFFsampledSPをショットにしたいと考えています。それはjavax.sound.sampledインターフェイスも実装しているWinとOSX用のFFmpegベースの実装です。

関連する問題