本文目录导读:

Linux 环境
Shell 脚本实现
#!/bin/bash
# 声卡状态检测脚本
echo "====== 声卡状态检测 ======"
# 1. 检查声卡硬件
echo "1. 声卡硬件信息:"
lspci | grep -i audio || echo " 未检测到PCI声卡"
lsusb | grep -i audio || echo " 未检测到USB声卡"
# 2. 检查声卡驱动
echo "2. 声卡驱动信息:"
lsmod | grep -E '^snd|^sound' || echo " 未加载声卡驱动"
# 3. 检查ALSA声卡列表
echo "3. ALSA声卡列表:"
aplay -l 2>/dev/null || echo " 未找到ALSA声卡"
# 4. 检查声卡状态(更详细)
echo "4. 声卡设备状态:"
cat /proc/asound/cards 2>/dev/null || echo " 无法读取声卡信息"
# 5. 检查音频设备节点
echo "5. 音频设备节点:"
ls -la /dev/snd/ 2>/dev/null || echo " 未找到音频设备节点"
# 6. 检查正在使用的音频进程
echo "6. 使用音频的进程:"
fuser -v /dev/snd/* 2>/dev/null || echo " 无音频进程"
# 7. 测试音频输出
echo "7. 音频输出测试:"
if command -v speaker-test &> /dev/null; then
echo " 执行 speaker-test (按Ctrl+C取消)..."
speaker-test -l 1 -t sine -f 440 2>/dev/null && echo " 音频测试成功" || echo " 音频测试失败"
else
echo " 未安装speaker-test工具"
fi
# 8. PulseAudio检查(如果使用)
echo "8. PulseAudio状态:"
if command -v pactl &> /dev/null; then
pactl info 2>/dev/null | head -3
echo " 音频设备:"
pactl list short sinks 2>/dev/null || echo " 无PulseAudio输出设备"
else
echo " 未安装PulseAudio"
fi
echo "====== 检测完成 ======"
Python 脚本实现
#!/usr/bin/env python3
import subprocess
import os
import sys
def check_sound_card():
print("====== 声卡状态检测 (Python) ======")
# 1. 检查/proc/asound目录
print("\n1. 声卡设备信息:")
try:
result = subprocess.run(['cat', '/proc/asound/cards'],
capture_output=True, text=True)
print(result.stdout if result.stdout else " 未找到声卡信息")
except:
print(" 无法访问/proc/asound")
# 2. 检查ALSA设备
print("\n2. ALSA音频设备:")
try:
result = subprocess.run(['aplay', '-l'],
capture_output=True, text=True)
print(result.stdout if result.stdout else " 无ALSA设备")
except:
print(" 未安装ALSA")
# 3. 检查驱动加载
print("\n3. 声卡驱动模块:")
try:
result = subprocess.run(['lsmod'], capture_output=True, text=True)
sound_modules = [line for line in result.stdout.split('\n')
if line.startswith('snd')]
if sound_modules:
for module in sound_modules:
print(f" {module}")
else:
print(" 未加载声卡驱动")
except:
print(" 无法检查驱动")
# 4. 检查设备节点
print("\n4. 音频设备节点:")
if os.path.exists('/dev/snd'):
for item in os.listdir('/dev/snd'):
print(f" /dev/snd/{item}")
else:
print(" 未找到音频设备节点")
# 5. PulseAudio检查
print("\n5. PulseAudio状态:")
try:
result = subprocess.run(['pactl', 'info'],
capture_output=True, text=True)
if result.stdout:
for line in result.stdout.split('\n')[:3]:
print(f" {line}")
else:
print(" PulseAudio 未运行")
except:
print(" 未安装PulseAudio")
if __name__ == "__main__":
check_sound_card()
Windows 环境
PowerShell 脚本
# 声卡状态检测脚本 (Windows)
Write-Host "====== 声卡状态检测 (Windows) ======" -ForegroundColor Cyan
# 1. 获取音频设备信息
Write-Host "`n1. 音频设备信息:"
$devices = Get-WmiObject Win32_SoundDevice
if ($devices) {
foreach ($device in $devices) {
Write-Host " 设备名: $($device.Name)"
Write-Host " 状态: $($device.Status)"
Write-Host " PNP设备ID: $($device.PNPDeviceID)"
Write-Host " ----------"
}
} else {
Write-Host " 未找到音频设备" -ForegroundColor Red
}
# 2. 检查音频服务状态
Write-Host "`n2. 音频服务状态:"
$services = @("Audiosrv", "AudioEndpointBuilder")
foreach ($svc in $services) {
$service = Get-Service -Name $svc -ErrorAction SilentlyContinue
if ($service) {
Write-Host " $($service.DisplayName): $($service.Status)"
} else {
Write-Host " $svc: 未安装"
}
}
# 3. 检查音频设备状态
Write-Host "`n3. 音频设备状态 (MMDevice API):"
Add-Type -TypeDefinition @"
using System.Runtime.InteropServices;
public class AudioHelper {
[DllImport("winmm.dll", SetLastError = true)]
public static extern int waveOutGetNumDevs();
[DllImport("winmm.dll", SetLastError = true)]
public static extern int waveInGetNumDevs();
}
"@
try {
$outputDevices = [AudioHelper]::waveOutGetNumDevs()
$inputDevices = [AudioHelper]::waveInGetNumDevs()
Write-Host " 输出设备数: $outputDevices"
Write-Host " 输入设备数: $inputDevices"
} catch {
Write-Host " 无法获取设备数量"
}
# 4. 使用 .NET 获取更详细信息
Write-Host "`n4. 音频渲染设备 (DirectSound):"
$ds = New-Object System.DirectoryServices.DirectorySearcher
try {
$devices = [System.Media.SystemSounds].GetProperties()
foreach ($device in $devices) {
Write-Host " $($device.Name)"
}
} catch {
Write-Host " 无法获取DirectSound设备"
}
# 5. 检查音频设备驱动程序
Write-Host "`n5. 音频驱动程序:"
$drivers = Get-WmiObject Win32_PnPSignedDriver | Where-Object {$_.DeviceName -match "audio|sound"}
if ($drivers) {
foreach ($driver in $drivers) {
Write-Host " 设备: $($driver.DeviceName)"
Write-Host " 驱动版本: $($driver.DriverVersion)"
Write-Host " 驱动日期: $($driver.DriverDate)"
Write-Host " ----------"
}
} else {
Write-Host " 未找到音频驱动信息"
}
Write-Host "`n====== 检测完成 ======" -ForegroundColor Cyan
VBScript 实现
' 声卡状态检测脚本 (VBScript)
Set WshShell = CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
WScript.Echo "====== 声卡状态检测 (VBScript) ======"
' 1. 获取声卡信息
WScript.Echo vbCrLf & "1. 声卡设备信息:"
Set soundDevices = objWMIService.ExecQuery("SELECT * FROM Win32_SoundDevice")
If soundDevices.Count > 0 Then
For Each device In soundDevices
WScript.Echo " 设备名: " & device.Name
WScript.Echo " 状态: " & device.Status
WScript.Echo " MPN: " & device.Manufacturer
WScript.Echo " ----------"
Next
Else
WScript.Echo " 未找到音频设备"
End If
' 2. 检查音频服务
WScript.Echo vbCrLf & "2. 音频服务状态:"
services = Array("Audiosrv", "AudioEndpointBuilder")
For Each svc In services
Set service = objWMIService.Get("Win32_Service.Name='" & svc & "'")
If Not IsNull(service) Then
WScript.Echo " " & service.DisplayName & ": " & service.State
Else
WScript.Echo " " & svc & ": 未安装"
End If
Next
' 3. 检查音频设备状态
WScript.Echo vbCrLf & "3. 音频设备驱动程序:"
Set drivers = objWMIService.ExecQuery("SELECT * FROM Win32_PnPSignedDriver WHERE DeviceName LIKE '%audio%' OR DeviceName LIKE '%sound%'")
If drivers.Count > 0 Then
For Each driver In drivers
WScript.Echo " 设备: " & driver.DeviceName
WScript.Echo " 驱动版本: " & driver.DriverVersion
WScript.Echo " ----------"
Next
Else
WScript.Echo " 未找到音频驱动信息"
End If
WScript.Echo vbCrLf & "====== 检测完成 ======"
macOS 环境
Shell 脚本
#!/bin/bash
echo "====== 声卡状态检测 (macOS) ======"
# 1. 检查音频硬件
echo "1. 音频硬件信息:"
system_profiler SPAudioDataType 2>/dev/null || echo " 无法获取音频信息"
# 2. 检查CoreAudio设备
echo "2. CoreAudio设备:"
if command -v system_profiler &> /dev/null; then
system_profiler SPAudioDataType | grep -A 5 "Audio Device" || echo " 无音频设备"
fi
# 3. 检查音频进程
echo "3. 使用音频的进程:"
lsof -c coreaudiod 2>/dev/null | head -5 || echo " coreaudiod 未运行"
# 4. 检查音频输入/输出设备
echo "4. 音频输入/输出设备:"
python3 -c "
import CoreAudio
import struct
# 获取默认输出设备
output_devices = CoreAudio.AudioObjectGetPropertyData(
CoreAudio.kAudioObjectSystemObject,
CoreAudio.kAudioHardwarePropertyDefaultOutputDevice,
None,
None
)
print(f'默认输出设备: {output_devices}')
" 2>/dev/null || echo " 无法获取默认音频设备"
echo "====== 检测完成 ======"
使用说明
Linux 使用:
# 保存脚本为 check_sound.sh chmod +x check_sound.sh ./check_sound.sh
Windows 使用:
# PowerShell 脚本 .\check_sound.ps1 # VBScript 脚本(保存为 .vbs 文件) check_sound.vbs
安装依赖(Linux):
# Ubuntu/Debian sudo apt-get install alsa-utils pulseaudio-utils # CentOS/RHEL sudo yum install alsa-utils pulseaudio-utils # Python依赖 pip install pyalsaaudio # 可选,用于更详细的ALSA控制
这些脚本会检测声卡的硬件信息、驱动状态、设备节点、音频服务状态等,你可以根据实际需求选择适合的脚本来检查声卡状态。