16.3.2 调整系统音量

16.3.2 调整系统音量 Linux系统使用通用的音频接口OSS(Open Sound System)管理声卡,该接口建立在声卡驱动程序之上,可操作任何类型的声卡。选择“系统”|“首选项”|“硬件”|“音效”命令,可打开相关配置窗口,如图16.1所示。 调整系统音量可通过调用OSS实现,在C语言程序中使用该接口首选需要安装相关函数库。下载源代码可访问其官方网站,地址为http://www.opensound.com。或者在终端中输入下列命令: yum install oss-devel 安装后,头文件的路径位于“/usr/include/oss”目录中,编译使用OSS的程序需要加入编译指令“`pkg-config --cflags --libs oss`”。 图16.1 查看声卡 1.调节音量 媒体播放器调节音量的操作是向核心控制模块发送GENERAL_VOLUME指令,核心控制模块调用general_volume()函数进行操作。首先在main_core.c文件中加入下列头文件: #include // 提供I/O操作相关控制函数 #include // 标准函数库 #include // 提供文件操作相关控制函数 #include // 提供声卡配置相关系统调用 #include // OSS函数库 然后实现general_volume()函数细节,代码如下: int general_volume(*((int*) data)) // 设置音量 { int mixer_fd; // 用于调音器标识符 mixer_fd = oss_get_mixer(); // 获得调音器的标识符 if (*data < 0 || *data > 100) { // 判断输入的数值是否有误 printf("输入的音量调节值有误/n"); return 0; } if (ioctl(mixer_fd, SOUND_MIXER_WRITE(SOUND_MIXER_WAV), data) == -1) { // 打开声卡设备文件,设置音量 printf("无法打开指定声卡/n"); return 0; } return 1; } 代码中首先使用oss_get_mixer()函数获得调音器的标识符,该标识符与文件标识符类似,是一个整型数字。然后使用宏定义SOUND_MIXER_WRITE()将常量SOUND_ MIXER_WAV所代表波形音量置入调整的范围内,然后用参数data的值作为波形音量的值。调节后,可选择“系统”|“首选项”|“硬件”|“音量控制”命令打开音量控制窗口查看相关数值的变化,如图16.2所示。 2.查询音量 媒体播放器查询音量是通过向核心控制模块发送REQUEST_VOLUME指令实现的,核心控制模块调用request_volume()函数通过OSS查询音量的值。程序代码如下: int request_volume(void) // 查询音量函数 { int mixer_fd; // 用于设备文件的标识符 int data; // 用于保存音量的数值 mixer_fd = oss_get_mixer(); // 打开设备文件 if (ioctl(mixer_fd, SOUND_MIXER_READ(SOUND_MIXER_WAV), &data) == -1) { // 读取混音器中音量数值 printf("无法打开指定声卡/n"); return -1; } return data; // 返回音量的数值 } 该代码与调节音量非常类似,宏SOUND_MIXER_READ()的作用是从系统中查询音量,并且将当前值保存到data变量中。音量是一个0至100间的整数值,如果无法获取音量,返回–1表示操作错误。

你可能感兴趣的:(Linux环境C程序设计,system,linux,终端,语言,c)