2012-08-25 3 views
2

나는 .wav 파일을 가지고 있습니다. 사운드 파일에서 PCM 데이터를 가져와 개별 사운드 데이터를 가져 와서 처리 할 수 ​​있습니다.wav 파일에서 PCM 데이터를 가져 오는 방법은 무엇입니까?

하지만 어떻게해야할지 모르겠다. 아무도 그것을 어떻게 할 수 말해 줄래? 지금까지 이런 짓을했는지 :

public class test 
{ 

    static int frameSample; 
    static int timeofFrame; 
    static int N; 
    static int runTimes; 
    static int bps; 
    static int channels; 
    static double times; 
    static int bufSize; 
    static int frameSize; 
    static int frameRate; 
    static long length; 

    public static void main(String[] args) 
    { 
     try 
     { 
      AudioInputStream ais = AudioSystem.getAudioInputStream(new File("music/audio.wav")); 
      AudioInputStream a; 
      int numBytes = ais.available(); 
      System.out.println("numbytes: "+numBytes); 
      byte[] buffer = new byte[numBytes]; 
      byte[] buffer1=new byte[numBytes] ; 
      int k=0; 
      int count=0; 
      while(count!=-1){ 
       count=ais.read(buffer, 0, numBytes); 
      } 
      long value = 0; 

      for (int i = 0; i < buffer.length; i++) 
      { 
       value = ((long) buffer[i] & 0xffL) << (8 * i); 
       System.out.println("value: "+value); 
      } 
     } catch(Exception e) { 

     } 
    } 
} 
+0

Java 또는 J를 사용하여 이것을 수행 하시겠습니까? 나는 당신의 질문 앞에 'J'에 대해 들어 본 적이 없으며 당신이 자바를 의미한다고 의심한다. –

+0

죄송합니다. 나는 j를 의미하지 않았다. 나는 자바에서 그것을하고 싶다. 다시 미안해. – Pallab

답변

5

이이 Java Sound API를 사용하여 수행 할 수 있습니다.

  • 파일에서 AudioInputStream을 얻으려면 AudioSystem을 사용하십시오.
  • 스트림에 AudioFormat을 쿼리하십시오.
  • 형식에 맞게 byte[]을 만듭니다. E.G. 8 비트 모노는 byte[1]입니다. 16 비트 스테레오는 byte[4]입니다.
  • byte[]의 청크로 스트림을 읽으면 프레임별로 사운드가 포함됩니다.
  • 계속 진행하십시오.
+1

나는 이것을 지금까지 해왔다. 이 올바른지? 바이트에서 정수 값을 수집하고 싶습니다. 코드는 질문과 함께합니다. – Pallab

+0

코드 블록에 일관되고 논리적 인 들여 쓰기를 사용하십시오. 프레임이 '개별 데이터 청크'이므로 질문에 대한 답변을 얻었습니다. 프레임을 int (모노) 또는 int (스테레오) 쌍으로 변환하는 방법에 관해서는 별도의 질문을해야합니다. –

+0

wav에서 헤더를 어떻게 분리 할 수 ​​있습니까? 저에게 알려주세요. – Pallab