http://www.oreilly.de/catalog/multilinux/excerpt/ch14-01.htm
oreilly 線上書籍。
http://www.linuxjournal.com/article/6735
linux journal libasound
http://www.linux.com/articles/113775
幾乎所有的 api/ lib 都介紹到了
Win32
http://www.codeguru.com/cpp/g-m/multimedia/article.php/c1575/
上面的參考資料什麼都好,就是少了 mute 的說明。
mute 以前在 OSS 底下的時候可方便了, 三行解決:
int mute;
ioctl (mixer_fd, SOUND_MIXER_READ_MUTE, &mute);
return mute;
不過現在到了改用 asound ,哇勒真的是麻煩到一整個不行:
// 以下是怕我自已忘掉怎麼做的 sample code ,parse_sample_id 的部份可以參考 amixer.c
// 那段更是長到不行
int
main() {
snd_mixer_selem_channel_id_t chn;
int err;
int psw;
static snd_mixer_t *handle = NULL;
snd_mixer_elem_t *elem;
snd_mixer_selem_id_t *sid;
snd_mixer_selem_id_alloca(&sid);
if (parse_simple_id("PCM", sid)) {
printf("error\n");
return 1;
}
snd_mixer_open(&handle, 0);
if (err = snd_mixer_attach(handle, card) < 0) {
error("Mixer attach %s error: %s", card, snd_strerror(err));
snd_mixer_close(handle);
handle = NULL; return err;
}
if ((err = snd_mixer_selem_register(handle, smixer_level > 0 ? &smixer_options : NULL, NULL)) < 0) {
error("Mixer register error: %s", snd_strerror(err));
snd_mixer_close(handle);
handle = NULL;
return err;
}
snd_mixer_load(handle);
elem = snd_mixer_find_selem(handle, sid);
if (!elem) { printf("No ELEM!!!!sid='%d'\n",sid); return err; }
printf("Simple mixer control '%s',%i\n",
snd_mixer_selem_id_get_name(sid),
snd_mixer_selem_id_get_index(sid)
);
chn = 0;
snd_mixer_selem_get_playback_switch(elem, chn, &psw);
printf(" [%s]\n", psw ? "on" : "off");
snd_mixer_close(handle);
return 0;
}
沒有留言:
張貼留言