111

在 Python 中播放声音文件(.wav)的最简单方法是什么?最简单的意思是最独立的平台和需要最少的依赖项。pygame 当然是一种选择,但对于声音来说似乎有点过分了。

4

10 回答 10

119

对于 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

于 2008-11-22T18:43:24.250 回答
31

Snack Sound Toolkit可以播放 wav、au 和 mp3 文件。

s = Sound() 
s.read('sound.wav') 
s.play()
于 2008-11-21T01:11:05.450 回答
30

这看起来很荒谬且牵强,但您始终可以使用 Windows(或您喜欢的任何操作系统)为您管理声音!

import os
os.system("start C:/thepathyouwant/file")

简单,没有扩展,有点慢和垃圾,但工作。

于 2013-07-31T18:53:10.837 回答
18

绝对为此使用Pyglet 。这是一个大包,但它是纯python,没有扩展模块。这肯定是最容易部署的。它也有很好的格式和编解码器支持。

import pyglet

music = pyglet.resource.media('music.mp3')
music.play()

pyglet.app.run()
于 2008-11-21T22:13:55.777 回答
8

在 play() 命令添加 10 秒左右的延迟后,它会起作用

import pygame

import time

pygame.init()

pygame.mixer.music.load("test.wav")

pygame.mixer.music.play()

time.sleep(10)

这也播放 .mp3 文件。

于 2011-09-29T05:42:59.457 回答
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 )
于 2008-11-20T23:45:33.937 回答
3

我喜欢 pygame,下面的命令应该可以工作:

pygame.init()
pygame.mixer.Sound('sound.wav').play()

但它不在我的任何一台计算机上,并且在该主题上的帮助有限。编辑:我知道为什么 pygame 声音对我不起作用,它没有正确加载大多数声音,当我加载它们时,“长度”属性为 ~0.0002。也许使用 mygame 以外的其他东西加载它们会让它更普遍。

使用 pyglet 我得到一个资源未找到错误使用上面的示例,文件的相对路径和完整路径。

使用pyglet.media.load()而不是pyglet.resource.media()让我加载文件。

sound.play()只播放文件的第一部分,除非我运行pyglet.app.run()它会阻止其他所有内容......

于 2009-12-05T12:52:49.377 回答
2

wxPython 支持在 Windows 和 Unix 上播放 wav 文件——我不确定这是否包括 Mac。然而,据我所知,它只支持 wav 文件 - 它不支持其他常见格式,如 mp3 或 ogg。

于 2009-12-05T14:53:21.387 回答
2

我刚刚发布了一个简单的围绕 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)    
于 2013-03-10T14:35:44.150 回答
1

对于 Linux 用户,如果需要低级 pcm 数据操作,请尝试alsaaudio模块。包内也有一个 playwav.py 示例。

于 2013-04-02T15:46:35.533 回答