2009-11-24 2 views
2

오디오 파일에서 재생 시간을 추출하려고합니다.

이 오디오 파일은 U-LAW (G.711/MONO 8.000Hz)입니다. Java를 사용하는 U-LAW 오디오 파일의 추출 시간

static AudioFormat ULAW_FORMAT = new AudioFormat(AudioFormat.Encoding.ULAW, 8000, 8, 1, 1, 8000, false); 

그리고 모든 시간

이 나는 ​​예외를 수신하고 있습니다 :
javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file

나는 예외를 수신하고있어 내 소스의

작은 부분 :

AudioInputStream inputFileStream = AudioSystem.getAudioInputStream(file); 

또는

AudioInputStream inputFileStream = AudioSystem.getAudioInputStream(ULAW_FORMAT, inputFileStream); 

질문
내가 잘못하고있는 것이 있습니까?
Java에서이 유형의 오디오 파일을 읽을 수 없습니까?
소스가 실패 했습니까?

팁 주셔서 감사합니다! 나는이 더미 소스와 노력

지터 코멘트와

UPDATING


:

public static void main(String[] args) { 
    String selectFile = "\\audio\\543288"; 
    AudioInputStream source; 
    try { 
     source = AudioSystem.getAudioInputStream(new File(selectFile)); 
     AudioSystem.getAudioInputStream(AudioFormat.Encoding.ULAW, source); 
    } catch (UnsupportedAudioFileException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

그리고 항상 시도의 첫 번째 행에 실패!

답변

1

μ-law는 파일 형식이 아닌 샘플 값 인코딩이므로 "μ-law 파일"(해당되는 경우)에 적합한 AudioReader를 찾기 위해 AudioSystem을 사용하면 오류가 발생합니다. 내가 잘못 본 것이 아니라면 Sun의 VM에는 AIFF, AU 및 WAV 파일에 대한 지원이 내장되어 있습니다.

I 해요 이제 추측하지만 파일이 어떤 파일 형식 헤더없이 원시 μ-법 데이터를 포함하는 경우, 당신은 단순히의 AudioSystem의 유틸리티 메소드를 거치지 않고, 직접 AudioInputStream를을 만들 수 있습니다

int length = ... // file length in number of samples 
FileInputStream fis = new FileInputStream("..."); 

AudioInputStream ais = new AudioInputStream(
    fis, new AudioFormat(AudioFormat.Encoding.ULAW, 8000, 8, 1, 1, 8000, false), length); 

마지막으로, 첫 번째 질문이 정말로 정확하다면 (파일의 지속 시간을 얻으려고 만하는 경우), AudioInputStream으로 싸울 필요가 없습니다. 파일에 실제로 8000 샘플/초의 원시 μ 법칙 데이터가 포함되어 있고 각 샘플이 1 바이트 인 경우 해당 데이터가 표시됩니다.

+0

도와주세요! 감사! –

0

오디오 파일의 형식이 올바른지 확인하십시오. 예외는 일반적으로 java가 파일로부터 읽은 데이터를 유효한 오디오 데이터로 해석 할 수 없다는 것을 의미합니다.

ULAW_FORMAT과 함께 제공하는 설정이 올바른가요?

저는 μ-law 인코딩에 익숙하지 않지만 frameSizeframeRate의 값이 맞습니까? 그 역시 작동하지 않습니다 중 파일이 유효하지 않은 오디오 데이터를 가지고 또는 자바 일부 파싱 버그가있는 경우

또한

AudioSystem.getAudioInputStream(AudioFormat.Encoding.ULAW, inputFileStream); 

을 시도 할 수 있습니다.

+0

내 업데이트 지터를 확인하십시오. (답해 주셔서 감사합니다) –

+0

오디오 파일인지 궁금하신가요? 예, GoldWave (www.goldwave.com/)에서이 파일을 열 수 있기 때문에 확신합니다. 파일을 열려면 옵션을 사용하십시오 (파일 형식 : raw, 속성 μ-law MONO, Rate 8000 Hz) –

관련 문제