2012-05-14 3 views
1

내 실험은 다음과 같습니다. 먼저 matlab을 사용하여 44100의 비율로 지정된 웨이브 파일을 만들었습니다. 즉, 1의 지속성 조각에는 44100 개의 요소가 포함되어 있으며 이러한 요소가 표시됩니다 두 배로. 그런 다음 스마트 폰의 마이크를 사용하여 웨이브를 검색합니다. 그리고 웨이브를 복원하기 위해 샘플링 속도는 44100입니다. 그러나 audioRecord는 데이터를 바이트로 저장하지만 원하는 것은 double입니다. 합리적인 바이트에서 더블 사운드로 변환, 난 아직도 그 샘플링 속도 44100 1 또는 44100 * 4 바이트 4400 바이트를 기록해야합니다 audioRecord 의미합니다 혼란, 이중 4 바이트 포함되어 있기 때문에? 다른 실험을했습니다. 웨이브를 검색하고 .wav에 저장하는 레코딩 소프트웨어를 사용합니다. matlab의 wavread 및 java에서 각각 .wav를 읽습니다. 1 초에 , 우리는 44100 개 요소 및 아래 목록 수 : -0.00164794921875
1.52587890625E-4
2.74658203125E-4
을 -0.003326416015625
0.001373291015625
-4.2724609375E-4
0.00445556640625
9.1552734375E- 5
-9.1552734375E -4-
7.62939453125E -4-
-0.003997802734375
9.46044921875E -4- 0,123,800, -0.00103759765625
0.002471923828125
0.001922607421875
-0.00250244140625
8.85009765625E-4
-0.0032958984375
8.23974609375E-4
8.23974609375E-4
사람이 가지 audiorecord과 함께 1 초에 검색 얼마나 많은 요소를 알고 샘플링 속도는 44100입니까?audioRecord가 지정된 샘플링 속도로 데이터를 검색하는 방법

답변

3

AudioRecord의 기본값은 각 샘플 (ENCODING_PCM_16BIT)에 대해 채널당 16 비트를 반환하는 것입니다.

이제 짧은 [] (16 비트) 또는 바이트 [] (8 비트) 버퍼를 지정할 수있는 두 가지 읽기 오버로드가 있습니다.

int read(short[] audioData, int offsetInShorts, int sizeInShorts) 
int read(byte[] audioData, int offsetInBytes, int sizeInBytes) 

그래서 1 초 모노 완충액 (1 개 채널) I는 byte[] 버퍼를 사용하지 않는 것 88200을 가질 것이다 길이 44100. 스테레오 (2 개 채널)의 short[] 버퍼 등 ..

있어야 어떤 이유로 AudioRecord 형식을 ENCODING_PCM_8BIT으로 설정하지 않은 한 (모든 장치에서 지원할 수있는 것은 아닙니다). 이제 당신은 당신이 MATLAB에 기록한다 double 값이 short 값은 당신이 작성해야하므로 [-32768 to 32767]에서 될 것 동안 [-1 to 1]에서 정규화 double-precision normalized samples을 깨닫게해야 복식에 그 짧은 값을 변환 할 경우

short에서 double로 숫자를 캐스팅하는 대신 변환 함수.

+0

정말 고마워요 ~ 많이 도와주세요 ~ – jiayan

관련 문제