2017-02-17 22 views
0

alsa 라이브러리가있는 내 Linux (debian) 임베디드 장치에 사운드를 녹음하려고합니다. 내 임베디드 하드웨어는이 [1]이며 데이터 시트 페이지 33 [2]에 따라Alsa Lib 하드웨어 매개 변수 설정

아날로그 오디오 신호는 on-SOM TLV320AIC3106 오디오 코덱에서 제공됩니다.

이 텍사스 인스트루먼트 오디오 코덱 [3]의 데이터 시트

를 들면

내가 ALSA lib에 대한 예시적인 애플리케이션 코드를 사용하여 8 kHz 내지 96까지 속도를 지원 초기 작업 코드를 변경하지 않았습니다. 예제 코드에서 샘플링 속도는 44100Hz로 설정되었습니다. 나는 성공적으로 소리를 녹음하고 연주했다. 지금은 데이터 쉬트에 기반한 8000Hz의 샘플링 레이트로 alsa-lib로 사운드를 녹음 할 수 있다고 생각합니다. 샘플링 속도를 8000Hz로 설정했지만 alsa 구성에서는 16000Hz로 변경됩니다. 샘플링 속도를 8000Hz로 설정했습니다.

snd_pcm_hw_params_set_rate_near(handle, params, &(record_params->rate), &dir); 
snd_pcm_hw_params_set_channels(handle, params, record_params->channel); 
rc = snd_pcm_hw_params(handle, params); 

그러나이 메소드를 호출 한 후;

16000으로 변경됩니다. 위의 다른 메소드 호출은 없습니다. 내 설정이 잘못되었거나 코덱이 8kHz를 지원하지 않을 수 있습니까?

업데이트 : 속도를 16000으로 설정하면 8000으로 변경됩니다. 더 많이 혼란 스럽습니다.

[1] = http://www.variscite.com/products/system-on-module-som/cortex-a9/dart-mx6-cpu-freescale-imx6

[2] =

http://www.variscite.com/images/stories/DataSheets/DART-MX6/DART-MX6_v1_2_datasheet_v2_1.pdf [3] = http://www.ti.com/lit/ds/symlink/tlv320aic3106.pdf

+0

항상 오류 코드를 확인해야합니다. 왜 시간을 물어 보는거야? 그리고 통화 전후의'rate'와'dir'의 값은 무엇입니까? –

+0

'dir'은 0이고'rate'는 내가 원하는대로 8000입니다. 내가 말했듯이, 기간을 물어 본 후에 16000으로 바뀝니다. 기간을 물어 보는 이유는 버퍼의 크기를 결정하기 위해서입니다. 내 호출의 오류 코드를 확인하고 잘못된 것이 있으면 게시물을 업데이트합니다. –

+0

호출 전 * 값 * 통화 후 * 또는 둘 다 값은 *입니까? 그리고 그 비율이 기간과 관련이 있다고 가정하는 이유는 무엇입니까? –

답변

0

개시 시간 및 속도가 다른 두 가지이다.

PCM의주기는 기본적으로 장치 인터럽트간에 전송되는 프레임의 양입니다. 이것은 프레임 단위로 장치로 데이터를 전송하는 것이 극도로 비효율적이기 때문에 이런 방식으로 수행됩니다.

ALSA 라이브러리는 마침표 크기를 마이크로 초 (snd_pcm_get_period_time 사용) 또는 프레임 수 (snd_pcm_get_period_size 사용)로 지정하도록 허용합니다.

PCM에 대한 읽기 또는 쓰기에 할당 할 크기 버퍼를 계산하려는 경우 snd_pcm_get_period_size (마침표의 프레임 수를 반환)을 사용하는 것이 더 직관적이며 snd_pcm_frames_to_bytes으로 전화를 걸면 바이트 수에 대한 PCM의 프레임 수.

+0

특히 프레임과 기간에 관한 alsa 라이브러리 용어에 대해 혼란스러워합니다. 나는 (1 채널 [모노], 8 비트 PCM 및 8000Hz의 속도) 매개 변수로 사운드를 녹음하고 싶습니다. 이 매개 변수를 사용하면 버퍼가 1 (채널) * 8 (샘플 당 비트) * 8000 (속도) = 64000 비트, 1 초 동안 8000 바이트 여야합니다. 프레임과 기간 매개 변수를 정확히 이해하지 못합니다. –

+0

@BlackGlix 버퍼 크기 계산이 정확합니다. ALSA에서, 2 채널 오디오 버퍼의 프레임은 2 샘플이며, 3 채널 오디오 버퍼의 경우 3 채널입니다. 기간 크기는 컴퓨터와 오디오 장치간에 전송되는 오디오 버퍼의 크기입니다. – tay10r