本文目录导读:

Windows 系统
使用 PowerShell(推荐)
# 添加 Windows Audio API
Add-Type -TypeDefinition @"
using System.Runtime.InteropServices;
public class VolumeHelper {
[DllImport("winmm.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
}
"@
# 设置音量为 50% (左右声道平衡)
$volume = 50
$volumeValue = [uint32]($volume * 655.35)
VolumeHelper::waveOutSetVolume([IntPtr]::Zero, $volumeValue)
使用 Python + pycaw
# 安装: pip install pycaw comtypes
from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
def set_volume(percent):
devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(
IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
volume = cast(interface, POINTER(IAudioEndpointVolume))
# percent: 0-100
volume.SetMasterVolumeLevelScalar(percent/100, None)
set_volume(50) # 设置为50%
批处理脚本(通过 exe 工具)
@echo off
:: 使用 NirCmd 工具(需下载)
:: nircmd setvolume 0 65535
:: 或使用简单的 VBS 脚本
echo Set Volume = CreateObject("WScript.Shell") > %temp%\volume.vbs
echo Volume.SendKeys ^>^> >> %temp%\volume.vbs
echo Volume.Run "cmd /c " & Volume.SendKeys >> %temp%\volume.vbs
macOS 系统
使用 AppleScript
-- 设置音量为 50% set volume output volume 50 -- 或使用 osascript 命令行 osascript -e "set volume output volume 50"
使用 Swift 脚本
#!/usr/bin/env swift import AppKit let volume: Float = 0.5 // 0.0-1.0 NSSound.setVolume(volume)
Linux 系统
PulseAudio 命令行
#!/bin/bash # 设置音量为 50% amixer set Master 50% # 或使用 pactl pactl set-sink-volume @DEFAULT_SINK@ 50%
ALSA 方案
#!/bin/bash # 设置指定声卡的音量 amixer -c 0 set Master 50% amixer -c 0 set PCM 50%
跨平台脚本示例
Python 跨平台方案
import platform
import subprocess
import ctypes
def set_volume(percent):
system = platform.system()
if system == "Windows":
try:
from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(
IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
volume = cast(interface, POINTER(IAudioEndpointVolume))
volume.SetMasterVolumeLevelScalar(percent/100, None)
except:
# 备用方案
ctypes.windll.winmm.waveOutSetVolume(0, int(percent * 655.35))
elif system == "Darwin": # macOS
subprocess.run(["osascript", "-e", f"set volume output volume {percent}"])
elif system == "Linux":
subprocess.run(["amixer", "set", "Master", f"{percent}%"])
else:
raise NotImplementedError(f"Unsupported OS: {system}")
set_volume(50) # 设置音量为 50%
使用提示
- 权限问题:部分方法可能需要管理员/root权限
- 音量范围:确保传入的参数在有效范围内(通常0-100)
- 兼容性:不同版本的API可能有所差异
- 测试环境:建议先在本地环境测试脚本
选择哪种方法取决于你的:
- 操作系统类型
- 编程语言偏好
- 是否需要持久化设置
- 是否需要实时监控音量
最常用的方法是在命令行直接执行相应命令,如 Linux 的 amixer、macOS 的 osascript、Windows 的 PowerShell 脚本。