如何从Python脚本播放音频(它可能就像1秒声音)?
如果它与平台无关,那将是最好的,但首先它需要在Mac上运行.
我知道我可以afplay file.mp3
从Python中执行命令,但是可以在原始Python中执行吗?如果它不依赖外部库我也会更好.
你最好的选择可能是使用pygame/SDL.它是一个外部库,但它跨平台提供了很好的支持.
pygame.mixer.init() pygame.mixer.music.load("file.mp3") pygame.mixer.music.play()
您可以在pygame.mixer.music文档中找到有关音频混音器支持的更多特定文档
您可以在此处找到有关Python音频的信息:http://wiki.python.org/moin/Audio/
看起来它不能播放没有外部库的.mp3文件.您可以将.mp3文件转换为.wav或其他格式,或使用PyMedia等库.
看看Simpleaudio,它是一个相对较新且轻量级的库,用于此目的:
> pip install simpleaudio
然后:
import simpleaudio as sa wave_obj = sa.WaveObject.from_wave_file("path/to/file.wav") play_obj = wave_obj.play() play_obj.wait_done()
确保使用未压缩的16位PCM文件.
尝试playound,这是一个纯Python,跨平台,单一功能模块,没有依赖播放声音.
通过pip安装:
$ pip install playsound
安装完成后,您可以像这样使用它:
from playsound import playsound playsound('/path/to/a/sound/file/you/want/to/play.mp3')
在pydub中,我们最近选择使用ffmpeg工具套件中的ffplay (通过子进程),这些工具在内部使用SDL.
它适用于我们的目的 - 主要是让它更容易在交互模式下测试pydub代码的结果 - 但它有它的缺点,比如导致新程序出现在mac上的dock中.
我已经将上面的实现链接起来,但是简化版本如下:
import subprocess def play(audio_file_path): subprocess.call(["ffplay", "-nodisp", "-autoexit", audio_file_path])
该-nodisp
标志使ffplay停止显示新窗口,该-autoexit
标志导致ffplay退出并在音频文件播放完毕后返回状态代码.
编辑:pydub现在使用pyaudio进行播放,然后回到ffplay以避免我提到的缺点.上面的链接也显示了实现.
很抱歉迟到的回复,但我认为这是宣传我的图书馆的好地方...
AFAIK,标准库只有一个用于播放音频的模块:ossaudiodev.遗憾的是,这只适用于Linux和FreeBSD.
更新:还有胜利,但显然这也是特定于平台的.
对于更独立于平台的东西,您需要使用外部库.
我的建议是声音设备模块(但要注意,我是作者).
该软件包包括用于Mac OS X和Windows 的预编译PortAudio库,可以通过以下方式轻松安装:
pip install sounddevice --user
它可以播放来自NumPy数组的声音,但它也可以使用普通的Python缓冲区(如果NumPy不可用).
要播放NumPy阵列,这就是您所需要的(假设音频数据的采样频率为44100 Hz):
import sounddevice as sd sd.play(myarray, 44100)
有关更多详细信息,请查看文档.
它不能读/写声音文件,你需要一个单独的库.
你可以看到这个:http://www.speech.kth.se/snack/
s = Sound() s.read('sound.wav') s.play()