怎样用脚本控制音量

wen 实用脚本 1

本文目录导读:

怎样用脚本控制音量

  1. Windows (PowerShell)
  2. Linux (Bash)
  3. Python 跨平台
  4. macOS (AppleScript)
  5. 使用建议

Windows (PowerShell)

基础音量控制

# 音量控制脚本 (volume.ps1)
param(
    [Parameter(Mandatory=$true)]
    [ValidateSet("up", "down", "mute", "set")]
    [string]$Action,
    [int]$Value = 10
)
Add-Type -TypeDefinition @"
using System.Runtime.InteropServices;
public class VolumeHelper {
    [DllImport("user32.dll")]
    public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
}
"@
switch ($Action) {
    "up" {
        # 音量增加 (模拟音量键)
        [VolumeHelper]::keybd_event(0xAF, 0, 0, [UIntPtr]::Zero)
        [VolumeHelper]::keybd_event(0xAF, 0, 2, [UIntPtr]::Zero)
        Write-Host "音量增加"
    }
    "down" {
        # 音量减少
        [VolumeHelper]::keybd_event(0xAE, 0, 0, [UIntPtr]::Zero)
        [VolumeHelper]::keybd_event(0xAE, 0, 2, [UIntPtr]::Zero)
        Write-Host "音量减少"
    }
    "mute" {
        # 静音
        [VolumeHelper]::keybd_event(0xAD, 0, 0, [UIntPtr]::Zero)
        [VolumeHelper]::keybd_event(0xAD, 0, 2, [UIntPtr]::Zero)
        Write-Host "切换静音"
    }
}

使用第三方库 (更精确控制)

# 需要安装模块: Install-Module -Name AudioDeviceCmdlets
Import-Module AudioDeviceCmdlets
# 设置音量为50%
Set-AudioDevice -Volume 50
# 获取当前音量
Get-AudioDevice -Volume
# 增加音量百分比
$current = Get-AudioDevice -Volume
Set-AudioDevice -Volume ($current + 10)

Linux (Bash)

使用 PulseAudio

#!/bin/bash
# volume.sh
case "$1" in
    up)
        pactl set-sink-volume @DEFAULT_SINK@ +10%
        ;;
    down)
        pactl set-sink-volume @DEFAULT_SINK@ -10%
        ;;
    mute)
        pactl set-sink-mute @DEFAULT_SINK@ toggle
        ;;
    set)
        pactl set-sink-volume @DEFAULT_SINK@ $2%
        ;;
    get)
        pactl get-sink-volume @DEFAULT_SINK@
        ;;
    *)
        echo "用法: $0 {up|down|mute|set <音量>|get}"
        exit 1
        ;;
esac

使用 ALSA

#!/bin/bash
# alsa-volume.sh
case "$1" in
    up)
        amixer set Master 5%+
        ;;
    down)
        amixer set Master 5%-
        ;;
    mute)
        amixer set Master toggle
        ;;
    *)
        echo "用法: $0 {up|down|mute}"
        ;;
esac

Python 跨平台

# volume.py
import sys
import subprocess
import platform
class VolumeController:
    def __init__(self):
        self.system = platform.system()
    def set_volume(self, percent):
        """设置音量百分比"""
        if self.system == "Windows":
            self._set_windows_volume(percent)
        elif self.system == "Linux":
            self._set_linux_volume(percent)
        elif self.system == "Darwin":  # macOS
            self._set_mac_volume(percent)
    def _set_windows_volume(self, percent):
        # 使用 nircmd 或 PowerShell
        subprocess.run(f'cmd /c "nircmd setvolume {percent}"', shell=True)
    def _set_linux_volume(self, percent):
        subprocess.run(f'pactl set-sink-volume @DEFAULT_SINK@ {percent}%', shell=True)
    def _set_mac_volume(self, percent):
        subprocess.run(f'osascript -e "set volume output volume {percent}"', shell=True)
# 使用示例
if __name__ == "__main__":
    vc = VolumeController()
    if len(sys.argv) > 1:
        if sys.argv[1] == "set" and len(sys.argv) > 2:
            vc.set_volume(int(sys.argv[2]))
        elif sys.argv[1] == "mute":
            vc.set_volume(0)
        elif sys.argv[1] == "unmute":
            vc.set_volume(50)
    else:
        print("用法: python volume.py set <音量>")

macOS (AppleScript)

-- volume.applescript
on run argv
    set volValue to item 1 of argv as integer
    set volume output volume volValue
end run

或使用 Bash:

#!/bin/bash
# mac-volume.sh
case "$1" in
    up)
        osascript -e "set volume output volume (output volume of (get volume settings) + 10)"
        ;;
    down)
        osascript -e "set volume output volume (output volume of (get volume settings) - 10)"
        ;;
    set)
        osascript -e "set volume output volume $2"
        ;;
    mute)
        osascript -e "set volume output muted true"
        ;;
    unmute)
        osascript -e "set volume output muted false"
        ;;
    *)
        echo "用法: $0 {up|down|set <音量>|mute|unmute}"
        ;;
esac

使用建议

  1. Windows 用户:推荐安装 AudioDeviceCmdlets 模块获取更精确控制
  2. Linux 用户:根据系统音频服务选择 PulseAudio 或 ALSA
  3. 跨平台需求:使用 Python 脚本便于统一管理
  4. 定时控制:可以结合 cron 或 Windows 任务计划程序实现定时调节音量

如果你有特定需求(比如定时调节、根据时间自动调整等),我可以提供更针对性的方案。

抱歉,评论功能暂时关闭!