2012-05-06 1 views
5

무수한 시간 동안 검색하고 소스 코드를 많이 읽은 후 막 다른 골목에 빠지면 도움이 필요합니다. 제목에서 알 수 있듯이 (나는 또 다른) 뮤직 플레이어를 Java로 제작하려고합니다. 나는 Javazoom project을 우연히 만났고 다소 효과가있다. 그러나 그것은 또한 다소 도움이되지 않는다. 내 목표는 mp3 및 ogg 파일을 재생할 수있게하는 것입니다. mp3를 재생하는 것은 문제없이 작동합니다. 모든 정보 (ID3 태그 및 일반 오디오 파일 정보)를 얻을 수 있으며 필요한 모든 작업 (재생, 일시 중지, 다시 시작, 찾기 등)을 수행 할 수 있습니다. 그러나 오그 파일을 재생하려고 할 때 두 파일 중 하나만 가져올 수 있습니다. 파일을 재생할 수는 있지만 파일 정보가 없거나 모든 정보를 얻을 수는 있지만 파일을 재생할 수는 없습니다. 내 코드는 기본적으로 BasicPlayer 클래스의 개정 된 버전입니다. jlGui 플레이어를 통해 모든 형식과 호환되는 방법을 살펴 보았지만 그 코드에서 완전히 손실되었습니다. 여기 Java 재생 mp3 및 ogg

My MediaPlayer code

내가 프로그램을 컴파일하는 데 사용하는 명령입니다 : 내가

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 

그것을 실행하면이 정보를 표시

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 

을하고 잘 파일을 재생하지만, 내가 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) 

를 throw 할 때와 때 다음 lib \ tritonus_jorbis-0.3.6.jar를 classpath에 추가하면 ogg 파일이 재생되지만 정보는 표시되지 않습니다.

그래 ... 나는 꽤 난리를 치고 실제로 도움을받을 수 있습니다.

답변

0

문제는 플레이어 구현이 스트림에 메타 데이터를 제공한다는 가정에서 비롯됩니다. 불행하게도 메타 데이터를 제공하지 않는 많은 구현 사례가 있습니다.

메타 데이터를 재생하는 것과는 별도로 별도의 라이브러리를 사용하여 메타 데이터에 액세스 할 수 있습니다. 그런 다음 library specialized in metadata manipluation을 사용하여 파일 재생과 독립적으로이를 해결할 수 있습니다.

0

불행하게도, jogg의 javax.sound.sampled 구현은 단점 몇 가지가 있습니다. 아마도 FFsampledSP을주고 싶을 것입니다. javax.sound.sampled 인터페이스를 구현하는 Win 및 OSX 용 FFmpeg 기반 구현입니다.