2016-12-20 5 views
0

오디오 파일을 표준 형식으로 변환하고 바이트를 읽으려고합니다. 내가 할동일한 오디오 파일에서 다른 바이트 가져 오기

우선은 다음과 같습니다

static void main(String [] args) 
{ 
    File file = new File("/path/to/my/file.mp3"); 
    AudioInputStream source = AudioSystem.getAudioInputStream(file); 
    AudioFormat sourceFormat = source.getFormat(); 

    AudioFormat convertFormat = new AudioFormat(
       AudioFormat.Encoding.PCM_SIGNED, 
       sourceFormat.getSampleRate(), 
       16, 
       sourceFormat.getChannels(), 
       sourceFormat.getChannels() * 2, 
       sourceFormat.getSampleRate(), 
       false); 
    AudioInputStream convert1AIS = AudioSystem.getAudioInputStream(convertFormat, source); 

    AudioFormat targetFormat = new AudioFormat(
      44100, 
      8, 
      1, 
      true, 
      true); 

    AudioInputStream target = AudioSystem.getAudioInputStream(targetFormat, convert1AIS); 

    byte[] buffer = new byte[4096]; 


    //Here come strange things 
    target.read(buffer,0, buffer.length); 


} 

내가 프로그램을 시작할 때마다, 버퍼 내가 같은 결코 디버거에서 볼 즉 서로 다른 바이트, 처음 10 바이트를 포함한다. 뭐가 잘못 되었 니? jl1.0.1.jar, jtransform-2.4.jar, mp3spi1.9.5.jar, tritonus_remaining-0.3.6.jar, tritonus_share.jar

OS :

나는 다음과 같은 라이브러리를 추가 한 . 우분투 14.04

자바 버전 "1.8.0_111" 자바 (TM) SE 런타임 환경 (빌드 1.8.0_111-B14) 자바 핫스팟 (TM) 64 비트 서버 VM (25.111-B14, 혼합 모드를 구축)

+0

필자는이 API를 사용하지 않았지만 MP3를 PCM으로 읽으려는 것처럼 보입니다. 단지 작동하지 않을 것입니다. MP3 코덱을 사용하여 다른 것을하기 전에 MP3를 PCM으로 디코딩해야합니다. – Brad

+0

모든 라이브러리를 추가했지만 어디에서 사용합니까? mp3는 특별히 audioinputstream을 읽지 않아도됩니다. 왜 isnt로 시작하는 라이브러리를 추가했는지 그 이유는 무엇입니까? 이 라이브러리를 사용하여 mp3를 읽는 다른 예제를 보거나 나중에 다시 올 것이다. – gpasch

답변

0

핵심 내용은 이 아니고이 아니며 을 읽으면을 입력하면 항상 입력 한 것과 정확히 동일한 바이트가 읽히게됩니다.

그 반대로, read 메서드는 읽은 바이트 수를 반환합니다. 따라서 항상 루프이 필요합니다. 까지 계속 읽으십시오. 예상 바이트를 실제로 읽었습니다!

편집 : 주어진 의견 : 당신은 오디오를하고 있습니다 변환 여기에; 그래서 내 같아입니다 :이 프로세스는 단순히 결정적이지 않습니다. 다시 말해, MP3 파일의 실제 입력 바이트는 항상 동일합니다. 그러나 당신의 코드는 그것에 대한 변환을 실행합니다; 그리고 말했다. 이러한 변환은 비 결정적입니다. 따라서 각 실행마다 약간 다른 결과가 생성됩니다.

+0

처음 10 바이트는 항상 다릅니다. 원래 게시물을 수정했습니다. – Vahagn

+0

나는 이해하고 있는지 잘 모르겠다. 처음 10 바이트는 항상 같아야합니다. 아니? – Vahagn

+0

'read'함수는 항상 1152를 반환합니다. – Vahagn