저는 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은 충돌하는 것으로 보입니다. 이 충돌을 어떻게 해결할 수 있습니까?
하나의 API를 사용하십시오. 'jLayer'는'MP3'를 재생할 수 있어야하지만'mp4'에 대해서는 확실하지 않습니다 – MadProgrammer
나는 이미 JLayer를 사용해 보았습니다. 문제는 일시 중지, 다시 시작, 전달 등의 고급 기능에서는 매우 유연하지 않다는 것입니다. MP3SPI를 사용하면 스트림을 직접 처리하여 모든 것을 쉽게 처리 할 수 있습니다. 그래서 나는 오히려 Javasound를 계속 사용하고 있습니다. – amb110395
후자의 API가 MP4 용 SPI를 제공하는지 확인하십시오. 그렇다면 단순히 런타임 클래스 경로에 추가하고 Java Sound를 사용할 수 있어야합니다. –