2012-12-06 4 views
3

안녕하세요 저는 파형으로 플롯 할 수 있도록 wav 파일의 데이터를 읽으려고합니다.Android : wav 파일 읽기 및 값 표시

try { 
     RandomAccessFile file = new RandomAccessFile(myFile,"r"); 
     while(file.read()>-1){ 
     byte b1 = (byte) file.read(); 
     byte b2 = (byte) file.read(); 
     Log.d(TAG,"DATA:"+ (double) (b2 << 8 | b1 & 0xFF)/32767.0); 
     } 
     file.close(); 

    } catch (FileNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

내 출력 처음 -1과 +1 사이의 범위의 값이지만, 나중에 데이터 만이 제공 : 0은 무한 루프처럼 보이고 힘이 확대가 나는 시도 코드는 다음 . 나에 따르면 루프는 파일 끝에 도달하면 종료되어야한다. 누구 pls 루프에 대한 종료 조건을 제안 할 수 있습니다.

답변

1

... 감사 사전입니다 .... 제발 도와주세요이 코드 다음과 같은 문제가 있습니다

1) 당신은 여전히 ​​바이트를 읽기 때문에이 코드는 모든 반복에 3 바이트를 읽어 while 루프에서 file.read()>-1 사용을 .

2) WAV 파일은 WAV 블록이 포함 된 RIFF 컨테이너 일 수 있습니다. 또한 값이 정수로 인코딩되지 않을 수도 있습니다 (WAV에서 float 인코딩을 보았습니다). 바이트 순서는 괜찮은 것처럼 보이지만 컨테이너의 메타 정보도 인쇄됩니다.

나는 자바 전문가가 아니지만, 바이트 표현식 실행 (-1 것은, -1) 바이트의이 있는지 확인, 파일의 종료를 확인하기 위해 0

매우 가까운 값을 제공 -1 : while ((b1 != -1) && (b2 != -1))

또한, int에서 byte로의 전환은 wrong 것 같다 : 당신은 당신이 (0..255)을 원하는하지 않은, -128에서 127까지의 값을 얻을 것이다, 그래서 바이트, 서명됩니다.

+0

대단히 감사합니다 ... –