🎧 Python 实现语音提示的几种常用方案
下面列出 5 种 在不同平台、不同需求下常用的实现方式,并给出最简代码示例。每种方案后面都有对应的来源标注,方便你进一步查阅原文。
| 方案 | 适用平台 | 关键特点 | 示例代码 |
|---|---|---|---|
| 1️⃣ winsound(内置) | Windows | 标准库,无需额外安装;支持 Beep(频率+时长)和 PlaySound(播放 WAV 文件) | python\nimport winsound\n# 蜂鸣声(频率 1000Hz,持续 500ms)\nwinsound.Beep(1000, 500)\n# 播放 wav 文件\nwinsound.PlaySound('alert.wav', winsound.SND_FILENAME)\n |
| 2️⃣ pygame | 跨平台 | 游戏开发库,音频功能强大,支持 MP3/WAV 等多种格式;可控制音量、循环等 | python\nimport pygame\npygame.mixer.init()\nsound = pygame.mixer.Sound('alert.wav')\nsound.play()\npygame.time.wait(int(sound.get_length()*1000))# 等待播放结束\n |
| 3️⃣ playsound | 跨平台(简洁) | 单函数调用即可播放,依赖少;仅支持 .wav(Linux/macOS 需要 ffmpeg) | python\nfrom playsound import playsound\nplaysound('alert.mp3')# 自动识别文件格式\n |
| 4️⃣ sounddevice + NumPy | 跨平台(实时生成) | 基于 PortAudio,适合 合成音调 或 实时音频流,返回 NumPy 数组,代码简洁 | python\nimport sounddevice as sd\nimport numpy as np\nfs = 44100\nduration = 0.5\nfreq = 1000\nt = np.linspace(0, duration, int(fs*duration), False)\naudio = np.sin(2*np.pi*freq*t)\nsd.play(audio, samplerate=fs)\nsd.wait()\n |
| 5️⃣ pydub + simpleaudio | 跨平台(高级编辑) | 支持音频切片、淡入淡出等高级操作;需要 ffmpeg 作为后端 | python\nfrom pydub import AudioSegment\nfrom pydub.playback import play\nsound = AudioSegment.from_file('alert.wav')\nplay(sound)\n |
使用小贴士
- Windows 推荐直接使用
winsound,免去第三方依赖。 - 若项目已经使用 pygame(如做游戏或可视化),直接复用其音频模块即可。
- 想要 一行代码 快速实现,
playsound是最简方案。 - 需要 生成自定义音调(如提示音频率随情境变化),
sounddevice+ NumPy 更灵活。 - 若要 编辑音频(加淡入淡出、拼接多段提示),
pydub提供丰富的 API。
如果你已经有具体的使用场景(比如在脚本结束时提醒、或在检测到异常时发声),可以告诉我,我会帮你进一步细化代码并加入异常处理或跨平台兼容的实现。😊