文章目录
背景介绍
本人使用ArchLinux有一段时间了,在一开始使用的时候有个比较大的问题就是系统没声音,经过查看官方wiki知道是需要alsa,但是即便是安装了alsa还是需要自己写配置文件来指定声卡。这样使用了一段时间后,我觉得还是不方便,因为除了外放,我还有一张USB声卡,我的键盘是带旋钮的,旋钮按下被驱动映射成了音频静音键,所以我就想配置一个CTRL+旋钮,这样的组合键来快速切换声卡。
怎么查看自己的声卡信息
我们在终端中输入aplay -l
即可输出我们电脑中的声卡信息,下面是我执行命令的结果
card 0: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 9: HDMI 3 [HDMI 3]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 0: ALC287 Analog [ALC287 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
上面包含NVidia
字段的不用参考,我们的外放声卡是最下面的带有Generic
字段的声卡。
创建并写入配置文件
在自己家目录创建一个.asoundrc
文件。然后使用文本编辑器打开。然后按照下面的格式写入
defaults.pcm.card 1 //这里为刚才查询声卡中的 card 字段
defaults.pcm.device 0 //这里为刚才查询声卡中的 device 字段
defaults.ctl.card 1 //这里为刚才查询声卡中的 card 字段
tips:
然后我们可以试着播放一段音频,个人推荐播放本地音乐文件,可以使用vlc
这样的播放器,如果尝试使用浏览器播放视频,那么你应该重启浏览器,否则配置文件不生效,这很重要。
配置文件切换代码
知道了如何写配置文件之后,那么我们的代码逻辑也就明朗了,其实就是往我们的配置文件中写入我们应有的配置。
#include <iostream>
#include <string>
#include <fstream>
#include <unistd.h>
#include <fcntl.h>
using namespace std;
int main()
{
//执行命令并将执行结果写进管道
int fds[2];
pipe(fds);
dup2(fds[1],1);
dup2(fds[0],0);
string command = "aplay -l | grep Generic; aplay -l | grep USB";
system(command.c_str());
//创建基准字符串
string s = R"(defaults.pcm.card 0
defaults.pcm.device 0
defaults.ctl.card 0)";
//设置O_NONBLOCK,否则getline会阻塞