音量文件(声音)在哪里?

音量文件(声音)在哪里?

我有一个打印我的笔记本电脑音量的脚本,它确实很复杂而且很慢:

/bin/sh -c \"amixer get Master "
                                       "| tail -n1 "
                                       "| grep -Po '\\[\\K[^%]*' "
                                       "| head -n1\""

在 Unix 中(我假设 Linux 也是如此),一切都是文件。那么保存卷的文件在哪里,所以我可以直接 cat 吗?就像

/sys/class/backlight/acpi_video0/brightness

答案1

已经有一个适用于该目的的工具,并且它在所有 Ubuntu 上都可用。您可以像这样使用命令:

amixer sget Master | awk -F"[][]" '/Left:/ { print $2 }'

对于具有立体声的系统,探测左扬声器。其他选项是“右”和“单声道”,它将以百分比 (100%) 显示音量。只需将该结果放入变量中即可。


修复 guiverc 的评论:

amixer get Master | egrep -o '[0-9]{1,3}%'

将显示所有线条的所有百分比(如果百分比为 1,则为单声道,否则按左、右顺序显示)


要解决“文件”方法:

据我所知,源代码/dev/dsp是使用读写控制

#包括 <sys/ioctl.h>

 int ioctl(int fd, unsigned long request, ...);

ioctl() 系统调用可操作特殊文件的底层设备参数。具体来说,字符特殊文件(例如终端)的许多操作特性都可以通过 ioctl() 请求来控制。参数 fd 必须是打开的文件描述符。

第二个参数是与设备相关的请求代码。第三个参数是指向内存的无类型指针。它传统上是 char *argp(来自 void * 成为有效 C 之前的时代),并且在本次讨论中将如此命名。

ioctl() 请求已编码参数是输入参数还是输出参数,以及参数 argp 的大小(以字节为单位)。用于指定 ioctl() 请求的宏和定义位于文件 <sys/ioctl.h> 中。请参阅注释。

但是我的 C 语言知识非常有限 ;)

相关内容