如何在python 3中播放声音?

2024-05-23 15:58:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个python脚本来播放声音(使用windows录制器录制)!

我读了pygame可以做的工作,并安装了pygame!但我不知道如何编写一个代码,从一个特定的路径播放声音!我必须播放位于C:\Users\Asdf\Documents\Audio.wav的音频文件

我试过这里的脚本http://pythonprogramming.net/adding-sounds-music-pygame/

import pygame
crash_sound = pygame.mixer.Sound("crash.wav")

但随后我收到一条错误消息:

Traceback (most recent call last): File "", line 1, in crash_sound = pygame.mixer.Sound("crash.wav") AttributeError: 'module' object has no attribute 'mixer'

那么如何编写脚本来使用pygame播放Audio.wav文件呢?

我正在使用Python3.4 64位版本!


Tags: 代码路径脚本声音windowscrashpygameaudio
3条回答

Add python to windows 7 PATH

  1. 按住Win并按Pause
  2. 单击高级系统设置。
  3. 单击“环境变量”。
  4. 在“用户变量”中,如果没有路径,请单击“新建”,否则请选择路径变量并单击“编辑”
  5. ;C:\python34附加到Path变量。
  6. 重新启动命令提示符。

enter image description here

安装pygame

首先要安装pygame。你可以用很多方法来做。 但要从源安装

  1. 下载并解压缩pygame-1.9.1release.zip
  2. 打开终端
  3. 将cd放入刚才提取的pygame-1.9.1文件夹
  4. 运行python setup.py

或者,如果python与windows安装中的.py文件关联(这是默认设置),请打开提取的文件夹并双击setup.py

运行pygame

你得跑了

pygame.init()

在调用pygame模块之前!

希望能帮你解决问题

示例

import pygame
pygame.init()
s = pygame.mixer.Sound("C:\\Users\\Asdf\\Documents\\Audio.wav")

# Start playback
s.play()

# Stop playback
s.stop()

在windows上播放声音(不使用pygame)

import winsound

fname = "C:\\Users\\Asdf\\Documents\\Audio.wav"
winsound.PlaySound(fname, winsound.SND_FILENAME)

为此,我有效地使用了pydub。模块可以安装为

pip install pydub

pydub不需要安装FFMPEG。给定@https://github.com/jiaaro/pydub的pydub和ffmpeg安装的详细信息

一旦安装了上述依赖项,库就以相当简单的方式提供了跨不同平台(windows、Linux、Mac)的各种音频格式的全面操作。

下面是一个例子

from pydub import AudioSegment
from pydub.playback import play

fname = "C:\\Users\\Asdf\\Documents\\Audio.wav"
mysong = AudioSegment.from_wav(fname)
play(mysong)

这里有一个简单的解决方案,它可以在所有平台上工作,除了一个Python文件之外没有任何依赖关系。

首先用pip安装playsound

pip install playsound

然后从模块中导入同名函数并运行它。很简单,不是吗?

from playsound import playsound
# wav works on all platforms. mp3 works on OS X. Other filetype/OS combos may work but have not been tested.
playsound('/path/to/file/you/want/to/play.wav')

免责声明:我写了playsound。它接受一个可选的第二个参数block = False,这将使函数调用不被阻塞。默认情况下它会阻塞。

相关问题 更多 >