gpt4 book ai didi

linux - 如何在 ALSA 中获取 PCM 设备路径?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:20 25 4
gpt4 key购买 nike

ALSA 库中从 pcm 句柄或名称获取物理播放设备文件名的最简单方法是什么?

例如,对于 pcm 设备 hw:0,0,我想获取 /dev/snd/pcmC0D0p。这相当简单(只需传输索引),但对于“默认”或任何其他别名,它并不那么明显。

最佳答案

回答我自己。有一种间接的方法可以通过从 snd_pcm_info 获取卡和设备号来执行此操作。

    int err;
const char *device_name = "default";
snd_pcm_t *pcm;

err = snd_pcm_open(&pcm, device_name, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK);
if (err < 0) {
fprintf(stderr, "Failed to open audio device '%s': %s\n", device_name, snd_strerror(err));
return false;
}

snd_pcm_info_t *info;
err = snd_pcm_info_malloc(&info);
if (err < 0) {
fprintf(stderr, "Failed to allocate PCM info: %s\n", snd_strerror(err));
goto fail;
}
err = snd_pcm_info(pcm, info);
if (err < 0) {
fprintf(stderr, "Failed to get PCM device info: %s\n", snd_strerror(err));
snd_pcm_info_free(info);
goto fail;
}

int card_no = snd_pcm_info_get_card(info);
if (card_no < 0) {
fprintf(stderr, "Failed to get PCM card number: %s\n", snd_strerror(card_no));
snd_pcm_info_free(info);
goto fail;
}

unsigned dev_no = snd_pcm_info_get_device(info);

printf("The ALSA path is: /dev/snd/pcmC%dD%up\n", card_no, dev_no);
snd_pcm_info_free(info);
fail:
snd_pcm_close(pcm);

关于linux - 如何在 ALSA 中获取 PCM 设备路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45916745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com