2017-02-17 25 views
0

alsaライブラリを使用している私のLinux(debian)組み込みデバイスにサウンドを記録しようとしています。私の組み込みハードウェアはこの[1]であり、そのデータシートのページ33 [2]に従って、Alsa Libハードウェアパラメータの設定

アナログオーディオ信号は、オンSOM TLV320AIC3106オーディオコーデックによって特徴付けられます。

このテキサス・インスツルメンツオーディオコーデックのデータシート[3]、

は8kHzでから96 kHzまで空

は、私は、ALSAのLIBのためのサンプルアプリケーションコードを使用サポート最初の仕事私はコードを変更しませんでした。サンプルコードでは、サンプリングレートは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); 

しかし、このメソッドを呼び出した後は、

snd_pcm_hw_params_get_period_time(params, &(record_params->rate), &dir); 

これは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_frames_to_bytesを呼び出して(期間中のフレーム数を返します)snd_pcm_get_period_sizeとを使用することがより直感的になりますバイト数に対するPCMのフレーム数。

+0

私はalsaライブラリの用語について、フレームと期間について特に混乱しています。私は(1チャンネル[モノ]、8ビットPCMと8000Hzのレート)のパラメータでサウンドを録音したいです。このパラメータを使用すると、私のバッファは1(チャンネル)* 8(サンプルあたりのビット)* 8000(レート)= 64000ビット、1秒間8000バイト、すべきではありませんか?私は正確にフレームと期間のパラメータを理解していない。 –

+0

@BlackGlixあなたのバッファサイズの計算は正しいでしょう。 ALSAでは、2チャンネルオーディオバッファのフレームは2サンプル、3チャンネルオーディオバッファの場合は3チャンネルです。期間サイズは、コンピュータとオーディオデバイス間で転送されるオーディオバッファのサイズです。 – tay10r

関連する問題