2007/07/05

[Linux] Sound Device Programming

先丟參考網址:
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;
}

沒有留言:

[Windows] git-bash 底下的工具

因為工作轉到 Windows 平台上的關係,所以很多工具改到 Windows 上面運作,跟著在 TortoiseGit 底下使用 git-bash 來維護自己的專案原始碼。結果就是裝了前面提過的 auto-hotkey 使用熱鍵來提昇自己的平台操作速度; 但除了 hotkey...