2017-11-07 19 views
0

Android에서 오디오를 녹음하려고합니다. 나는 다른 예를 발견했지만, 내가 이해하지 못했던 한 가지.PCM 16 비트 녹음 바이트 대 짧은

어떤 사람들은 shorts, 기타 bytes을 작성합니다.

다음은 shortbytes으로 변환하는 예입니다.

private byte[] short2byte(short[] sData) { 
     int shortArrsize = sData.length; 
     byte[] bytes = new byte[shortArrsize * 2]; 
     for (int i = 0; i < shortArrsize; i++) { 
      bytes[i * 2] = (byte) (sData[i] & 0x00FF); 
      bytes[(i * 2) + 1] = (byte) (sData[i] >> 8); 
      sData[i] = 0; 
     } 
     return bytes; 

    } 

그 목적은 무엇입니까? PCM 16bit을 사용하는 한 shorts을 파일에 직접 쓰지 않는 것이 좋습니다.

오디오 관점에서이 문제를 설명하십시오.

덕분에 짧은 배열을하고 파일에 씁니다 어떤 API가없는 당신이 "직접 반바지를 작성할 수 없습니다"자바에서는

답변

1

. 바이너리 파일에만 바이트 배열을 쓸 수 있습니다. 가장 중요한 문제는 엔디안 방식 (LSB 우선 또는 MSB 우선)입니다. 표준 엔디안이 없습니다.

따라서 당신은 두 가지 선택이있다 : 자신을 바이트로

  • 단지 인 팬티를 인코딩 짧은 배열을 인코딩하는

    • 사용하십시오 ByteBuffer의 지원을받습니다 리틀 엔디안 ShortBuffer를 어떤 코드 당신 게시하지 않습니다.