Java で最初の GUI 音楽プレーヤーを作成しようとしています。これまでのところ、Javasound と MP3SPI で MP3 を再生できました。今、私は .m4a の曲をサポートしたいと考えています。調査した結果、これを行うのに最適なライブラリは JAAD です。ダウンロードしてプロジェクトに追加したところ、.m4a の曲を再生しようとすると完璧に動作しました。JAAD ライブラリを追加した後に .mp3 を再生しようとすると、問題が発生します。曲を再生するための私のコードは次のとおりです。
File file = new File(pathToSong);
AudioInputStream audioStream= AudioSystem.getAudioInputStream(file); // Obtains an audio input stream of the song
AudioFormat baseFormat = audioStream.getFormat(); //Obtains the audio format of the song in the audio input stream.
decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, //The type of encoding for the audio stream
baseFormat.getSampleRate(), //Sample rate of the audio stream
16, //Number of bits in each sample of a sound that has this format.
baseFormat.getChannels(), //Number of audio channels in this audio stream
baseFormat.getChannels() * 2, //Number of bytes in each frame of the audiostream
baseFormat.getSampleRate(), //Number of frames played or recorded per second, for the sound in the audio stream
false); //Data stored in little-endian order
decodedAudioStream = AudioSystem.getAudioInputStream(decodedFormat, audioStream); //Obtains an audio input stream of the indicated encoding by converting the provided audio input stream.
playSong(); //Play the song
(playSong() は単純にストリームを読み取り、そのバイトを SourceDataLine に書き込みます)
JAAD ライブラリを追加した後に .mp3 を再生しようとすると、次のエラーが表示されます。
java.io.IOException: Resetting to invalid mark
at java.io.BufferedInputStream.reset(BufferedInputStream.java:416)
at net.sourceforge.jaad.spi.javasound.AACAudioFileReader.getAudioInputStream(AACAudioFileReader.java:118)
at net.sourceforge.jaad.spi.javasound.AACAudioFileReader.getAudioInputStream(AACAudioFileReader.java:143)
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1162)
at Song.run(Song.java:38)
私の理解では、Javasound と JAAD の getAudioInputStream が競合しているようです。この競合を解決するにはどうすればよいですか?