ALSA 難しい

BeagleBoard の内蔵サウンド機能では、alsamixier で信号キャプチャの設定をするとカーネルの動作がおかしくなることが分かったので、Raspberry Pi + Behringer UCA202 でやり直しです。(カーネルやドライバを追いかけたい気持ちもなくはないが、本筋からどんどん離れてしまうので諦める。)
相変わらず ALSA はよく分からなくて、ネットで情報探しても錯綜していてよく分かりません。最初に知りたかったのは、使うサウンドカードのデフォルト設定です。というのは、なぜか、サウンドカードで hw:1,0 とか指定すると、サンプリングレート 8000Hz が指定できなくて、default 設定だとうまくいくのです。ようやく、ホームディレクトリに .asoundrc というファイルを置いて、

defaults.ctl.card 1
defaults.pcm.card 1
defaults.timer.card 1

とか書けば良いことが分かりました。ここで 1 というのは、aplay や arecord に -l オプションを与えて出てくるカード番号です。なお余談ですが、setuid(0) すると root のホームディレクトリを見に行きますので、注意です。(ま、それはしょうがないか)
次に、snd_pcm_open() の第 2引数でデフォルトカードを指定する方法が分かりません。ようやく arecord のソースコード(aplay.c)を読んで、"default" と書けば良いことが分かりました。うーん、ALSA 嫌い。。。
ま、これでとりあえず 8000Hz で取り込めるようになりました。今日はこの辺にしておくか。