用Python播放声音

Cla*_*diu 102 python audio platform-independent

在Python中播放声音文件(.wav)的最简单方法是什么?最简单的我指的是大多数平台独立且需要最少的依赖关系.pygame当然是一个选择,但它似乎只是声音矫枉过正.

ore*_*tis 103

对于Windows,您可以使用winsound.它是内置的

import winsound

winsound.PlaySound('sound.wav', winsound.SND_FILENAME)
Run Code Online (Sandbox Code Playgroud)

你应该可以使用ossaudiodev for linux:

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()
Run Code Online (Sandbox Code Playgroud)

(ossaudiodev的信用:Bill Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html)

  • OSS并不老.只是因为与政治和自我有关的原因而不是软件开发,Linux人员选择用ALSA取而代之.无论如何,OSS仍然是唯一的跨平台UNIX声音系统,并且可能在可预见的未来仍然存在. (8认同)
  • 我从这个答案开始,添加了一个也适用于OS X的变体,并将其作为纯python,跨平台,单个功能模块上传到pypi,称为[playsound](https://pypi.python.org/pypi /playsound/1.0.0).`pip install playsound`.请享用! (4认同)
  • 避免oss,它已经老了.我不认为我已经安装了它. (2认同)
  • 我收到 FileNotFoundError: [Errno 2] 没有这样的文件或目录:'/dev/dsp',这个答案是否应该在 /dev 上打开另一个文件? (2认同)

cse*_*ton 30

Snack Sound Toolkit可以播放wav,au和mp3文件.

s = Sound() 
s.read('sound.wav') 
s.play()
Run Code Online (Sandbox Code Playgroud)

  • 小吃似乎已经死了(2005年的最新更新 - 十年前). (26认同)
  • 它也不适用于Pypi :-( (4认同)

小智 28

这看起来很荒谬,但你可以随时使用Windows(或任何你喜欢的操作系统)为你管理声音!

import os
os.system("start C:/thepathyouwant/file")
Run Code Online (Sandbox Code Playgroud)

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

  • 跨平台:`import sys``来自子进程导入调用``if sys.platform =='linux2':``call(["xdg-open","sound.mp3"])``elif sys.platform == 'darwin':``call(["afplay","sound.mp3"])`在所有这些故障声音库中浪费时间是多么昂贵tbh.用'xdg-open`代替`mpg123`将在Linux上提供`afplay`功能 (16认同)
  • 这不是python的一个特性,它是对OS中进程的调用.它不是跨平台的,而且非常昂贵 (13认同)
  • 这真的很糟糕,因为(在Windows下)我可以在音频编辑器中打开音频文件的默认操作.声音永远不会播放,出于某种奇怪的原因,我的音频编辑器会一直打开...... (8认同)
  • 尼斯.打开很多可能知道python有这个功能 (2认同)
  • 是的,不工作 osx:`sh:启动:找不到命令` (2认同)

Pet*_*ers 16

绝对使用Pyglet.这是一个大包,但它是纯python没有扩展模块.这肯定是最容易部署的.它还具有出色的格式和编解码器支持.

import pyglet

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

pyglet.app.run()
Run Code Online (Sandbox Code Playgroud)

  • 这个例子只有一个问题:媒体文件需要在(python-)路径上 (2认同)
  • 这很好 - 只要你不介意pyglet接管python进程. (2认同)

小智 7

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

import pygame

import time

pygame.init()

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

pygame.mixer.music.play()

time.sleep(10)
Run Code Online (Sandbox Code Playgroud)

这也会播放.mp3文件.


Riz*_*sim 5

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 )
Run Code Online (Sandbox Code Playgroud)