我想mpg321
使用 Python 使用另一个事件作为触发器来播放音乐文件。然后,当我输入特定的字符串时,我希望音乐停止播放。
如何使用 Python 做到这一点?
import os
from subprocess import Popen, PIPE
music = None
while 1:
cmd = raw_input('> ')
if cmd.lower() == 'play':
music = Popen('mpg321 /home/Torxed/test.mp3'.split(' ',1), stdout=PIPE, stderr=STDOUT, close_fds=True)
elif cmd.lower() == 'stop':
try:
music.stdout.close()
music.stdin.close()
except:
pass
music = None
而不是使用 subprocess 你可以这样做:
music = os.popen('mpg321 /home/Torxed/test.mp3', 'w')
然后做
music.close()
我仍然认为这是一个可怕的解决方案,因为如果你是一名程序员,你不应该依赖外部资源来完成你的任务。它应该在你的应用程序中处理,而不是在操作系统或一些 3 上处理: d 方申请。
Pygame:例如 Pygame,它会为你完成工作,然后是一些。
import pygame, time
pygame.init()
pygame.mixer.music.load('/home/Torxed/test.mp3')
pygame.mixer.music.play()
time.sleep(5)
pygame.mixer.music.fadeout(5)
The Snack Sound Toolkit:它是一个纯 Python 音频库,具有很大的灵活性!
s = Sound()
s.read('/home/Torxed/test.mp3')
s.play()
Pyglet:我最喜欢的一个跨平台图形 OpenGL 库,可以访问音乐:
import pyglet
music = pyglet.resource.media('/home/Torxed/test.mp3')
music.play()
pyglet.app.run()
Winsound是 Windows 唯一的选择
import winsound
winsound.PlaySound('C:\\users\\Torxed\\Desktop\\test.mp3')
OSSaudio这是其他 Linux 的原生替代方案,OSS 是 Linux/Unix 系统上最默认的音频播放之一,因此对于大多数人来说,它不应该是一个奇怪的选择。(由 Stackoverflow 上的@orestis 提供)
from wave import open as waveOpen
from ossaudiodev import open as ossOpen
s = waveOpen('/home/Torxed/test.wav','rb')
(nc,sw,fr,nf,comptype, compname) = s.getparams( )
dsp = ossOpen('/dev/dsp','w')
try:
from ossaudiodev import AFMT_S16_NE
except ImportError:
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()
一些导致我找到 OSS 解决方案的谷歌搜索给了我这个(一定要归功于那些人,很好的例子):用 Python 播放声音