#!/usr/bin/env python3 """ 音频播放测试脚本 用于测试树莓派的音频播放功能 """ import subprocess import time import sys import os def test_audio_playback(): """测试音频播放功能""" print("=== 音频播放测试 ===") # 检查音频设备 print("\n1. 检查音频设备...") try: result = subprocess.run(['aplay', '-l'], capture_output=True, text=True) if result.returncode == 0: print("音频设备列表:") print(result.stdout) else: print("错误: 无法获取音频设备列表") return False except FileNotFoundError: print("错误: aplay 命令未找到,请安装 alsa-utils") return False # 测试播放系统声音 print("\n2. 测试播放系统提示音...") try: # 使用系统内置的测试声音 result = subprocess.run(['speaker-test', '-t', 'sine', '-f', '440', '-l', '1'], capture_output=True, text=True, timeout=5) if result.returncode == 0: print("✓ 系统提示音播放成功") else: print("✗ 系统提示音播放失败") return False except (subprocess.TimeoutExpired, FileNotFoundError): print("提示: speaker-test 测试跳过,尝试直接播放音频文件") # 创建测试音频文件并播放 print("\n3. 创建并播放测试音频文件...") test_audio_file = "/tmp/test_audio.wav" # 使用sox生成测试音频(如果可用) if os.path.exists("/usr/bin/sox"): try: subprocess.run(['sox', '-n', '-r', '44100', '-c', '2', test_audio_file, 'synth', '3', 'sine', '440'], check=True) print("✓ 测试音频文件创建成功") except (subprocess.CalledProcessError, FileNotFoundError): print("无法创建测试音频文件,跳过文件播放测试") return True else: print("sox 未安装,跳过文件播放测试") return True # 播放测试音频文件 try: result = subprocess.run(['aplay', test_audio_file], capture_output=True, text=True) if result.returncode == 0: print("✓ 音频文件播放成功") return True else: print("✗ 音频文件播放失败") print(f"错误信息: {result.stderr}") return False except FileNotFoundError: print("错误: aplay 命令未找到") return False finally: # 清理测试文件 if os.path.exists(test_audio_file): os.remove(test_audio_file) def check_volume(): """检查并设置音量""" print("\n4. 检查音量设置...") try: result = subprocess.run(['amixer', 'sget', 'Master'], capture_output=True, text=True) if result.returncode == 0: print("当前音量设置:") print(result.stdout) # 设置音量到80% subprocess.run(['amixer', 'sset', 'Master', '80%'], check=True) print("✓ 音量已设置为80%") return True else: print("无法获取音量信息") return False except (subprocess.CalledProcessError, FileNotFoundError): print("amixer 命令未找到或执行失败") return False if __name__ == "__main__": print("树莓派音频播放功能测试") print("=" * 40) success = True # 检查音量 if not check_volume(): success = False # 测试音频播放 if not test_audio_playback(): success = False print("\n" + "=" * 40) if success: print("✓ 所有音频播放测试通过") sys.exit(0) else: print("✗ 部分音频播放测试失败") sys.exit(1)