You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何编写脚本实现主音量(Master sound level)的获取、设置与恢复

如何编写脚本实现主音量(Master sound level)的获取、设置与恢复

嘿,这个需求我之前也碰到过,用shell脚本搭配amixer就能完美解决,我给你梳理一个清晰的实现方案,从获取原始音量、调整音量、执行任务到恢复音量一步到位:

1. 先获取并保存当前主音量

首先我们需要把当前的主音量值提取出来保存到变量里,方便后续恢复。amixer get Master会输出当前音量的详细信息,我们可以用文本处理工具提取出具体的百分比数值:

# 提取当前主音量并保存(去掉百分号存为数字)
original_volume=$(amixer get Master | grep -oP '\d+%' | head -n1 | tr -d '%')

简单解释下这条命令:

  • amixer get Master:输出主音量的状态信息
  • grep -oP '\d+%':匹配并提取所有带百分号的数字
  • head -n1:取第一个结果(对应主声道的音量值,避免左右声道分开的情况)
  • tr -d '%':去掉百分号,把数值存成纯数字变量

2. 调整音量(支持渐变效果)

如果需要平滑渐变到目标音量(比如你说的背景音淡出),可以用amixerfade参数,指定渐变时长(单位是秒)。比如5秒内渐变到20%:

# 5秒内将主音量渐变到20%,你可以自行修改目标音量和时长
amixer sset Master 20% fade 5

如果不需要渐变,直接设置音量的话,去掉fade 5即可:

amixer set Master 20%

3. 执行你的自定义程序

这一步就放你需要运行的核心任务就行,比如启动某个程序、执行脚本等,这里用sleep模拟任务运行时长:

echo "正在执行自定义任务..."
# 替换成你实际要运行的命令,比如:
# /home/yourname/scripts/your-procedure.sh
sleep 10  # 模拟任务运行10秒

4. 恢复原始音量

任务完成后,直接调用保存的原始音量值恢复即可,同样可以加渐变效果让恢复更平滑:

# 3秒内恢复到原始音量
amixer sset Master "${original_volume}%" fade 3

完整脚本示例

把上面的步骤整合起来,就是一个可以直接用的脚本了,记得给脚本加执行权限(chmod +x volume-control.sh):

#!/bin/bash

# 关闭amixer的冗余输出,让脚本运行更清爽
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>/dev/null 2>&1

# 1. 获取并保存当前主音量
original_volume=$(amixer get Master | grep -oP '\d+%' | head -n1 | tr -d '%')
echo "已保存当前音量: ${original_volume}%" >&3

# 2. 渐变音量到目标值(示例:20%,5秒完成)
echo "正在渐变音量到20%..." >&3
amixer sset Master 20% fade 5

# 3. 执行自定义任务
echo "开始执行自定义程序..." >&3
# 替换成你的实际任务命令
sleep 10

# 4. 恢复原始音量
echo "正在恢复原始音量..." >&3
amixer sset Master "${original_volume}%" fade 3

echo "音量恢复完成!" >&3

一些注意事项

  • 如果你系统的主音频通道不是Master,可以用amixer scontrols命令查看所有可用的混音器控件,替换成对应的名称即可。
  • 脚本里的exec 1>/dev/null 2>&1是把amixer的输出重定向到空设备,避免运行时输出一堆无关信息,同时用文件描述符把我们自己的提示信息输出到终端。
  • 少数系统可能需要sudo权限才能调整音量,但大部分普通用户账户直接运行就行。

备注:内容来源于stack exchange,提问作者Pansmanser

火山引擎 最新活动