使用 Python 播放声音[重复]
- 2025-01-20 09:07:00
- admin 原创
- 98
问题描述:
在 Python 中播放声音文件 (.wav) 的最简单方法是什么?最简单是指最独立于平台且需要的依赖最少。pygame 当然是一个选择,但对于声音来说它似乎有点过了。
解决方案 1:
对于 Windows,您可以使用 winsound。它是内置的
import winsound
winsound.PlaySound('sound.wav', winsound.SND_FILENAME)
您应该能够在 Linux 上使用 ossaudiodev:
from wave import open as waveOpen
from ossaudiodev import open as ossOpen
s = waveOpen('tada.wav','rb')
(nc,sw,fr,nf,comptype, compname) = s.getparams( )
dsp = ossOpen('/dev/dsp','w')
try:
from ossaudiodev import AFMT_S16_NE
except ImportError:
from sys import byteorder
if byteorder == "little":
AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
else:
AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
dsp.setparameters(AFMT_S16_NE, nc, fr)
data = s.readframes(nf)
s.close()
dsp.write(data)
dsp.close()
(ossaudiodev 鸣谢:Bill Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html)
解决方案 2:
这看起来很荒谬和牵强,但您始终可以使用 Windows(或任何您喜欢的操作系统)来管理声音!
import os
os.system("start C:/thepathyouwant/file")
简单,没有扩展,有点慢和破旧,但可以工作。
解决方案 3:
Snack Sound Toolkit可以播放 wav、au 和 mp3 文件。
s = Sound()
s.read('sound.wav')
s.play()
解决方案 4:
绝对要使用Pyglet。它是一种大型软件包,但它是纯 Python 的,没有扩展模块。这绝对是最容易部署的。它还具有出色的格式和编解码器支持。
import pyglet
music = pyglet.resource.media('music.mp3')
music.play()
pyglet.app.run()
解决方案 5:
在 play() 命令之后添加大约 10 秒的延迟,它就可以工作了
import pygame
import time
pygame.init()
pygame.mixer.music.load("test.wav")
pygame.mixer.music.play()
time.sleep(10)
这也可以播放 .mp3 文件。
解决方案 6:
pyMedia 的声音示例就是这样的。这应该是您所需要的全部。
import time, wave, pymedia.audio.sound as sound
f= wave.open( 'YOUR FILE NAME', 'rb' )
sampleRate= f.getframerate()
channels= f.getnchannels()
format= sound.AFMT_S16_LE
snd= sound.Output( sampleRate, channels, format )
s= f.readframes( 300000 )
snd.play( s )
解决方案 7:
我喜欢 pygame,下面的命令应该可以工作:
pygame.init()
pygame.mixer.Sound('sound.wav').play()
但是在我的两台电脑上都无法运行,而且关于这个问题的帮助也很有限。 编辑:我弄清楚了为什么 pygame 声音对我来说不起作用,它无法正确加载大多数声音,当我加载它们时,“length”属性是~0.0002。 也许使用 mygame 以外的东西来加载它们会让它更普遍地起作用。
使用 pyglet 时我收到资源未找到错误使用上述示例,同时考虑文件的相对路径和完整路径。
使用pyglet.media.load()
而不是pyglet.resource.media()
让我加载文件。
但sound.play()
只播放文件的第一秒的一部分,除非我运行pyglet.app.run()
阻止其他所有内容...
解决方案 8:
wxPython 支持在 Windows 和 Unix 上播放 wav 文件 - 我不确定这是否包括 Mac。但据我所知,它仅支持 wav 文件 - 它不支持其他常见格式,例如 mp3 或 ogg。
解决方案 9:
我刚刚发布了一个围绕 sox 的简单 Python 包装器,它将使用 Python 播放声音。它非常容易安装,因为您需要 Python 2.6 或更高版本、sox(易于获取大多数架构的二进制文件)和包装器(https://github.com/standarddeviant/sound4python)。如果您没有 sox,请访问:http: //sourceforge.net/projects/sox/files/sox/
您可以通过以下方式播放音频:
from sound4python import sound
import random
a = []
for idx in xrange(1*16000):
a.append(random.randint(-16384,16384))
sound(a)
请记住,播放音频实际涉及的部分只有这些:
from sound4python import sound
...
sound(a)
解决方案 10:
对于 Linux 用户,如果需要低级 pcm 数据操作,请尝试alsaaudio模块。包中还有一个 playwav.py 示例。