如何用mpg321通过Python播放音乐?

时间:2013-05-01 20:18:00

标签: python

我想使用Python使用另一个事件作为触发器,使用mpg321播放音乐文件。然后,当我输入一个特定的字符串时,我希望音乐停止播放。

如何使用Python执行此操作?

1 个答案:

答案 0 :(得分:8)

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

您可以执行以下操作,而不是使用子流程:

music = os.popen('mpg321 /home/Torxed/test.mp3', 'w')

只是做

music.close()

我仍然认为这是一个可怕的解决方案,因为如果你是程序员,你不应该依赖外部资源来完成你的任务......它应该在你的应用程序中处理,而不是在操作系统上或一些3:党的申请。

替代

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)

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()

Python原生替代

Winsound 是Windows唯一替代

import winsound
winsound.PlaySound('C:\\users\\Torxed\\Desktop\\test.mp3')

OSSaudio 这是其他Linux的原生Linux替代品,OSS是Linux / Unix系统上最默认的音频播放之一,所以对于大多数人来说它不应该是一个奇怪的选择那里。 (由@orestis在Stackoverflow上提供)

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解决方案的一些谷歌搜索给了我这个(一定要归功于那些人,很好的例子):Play a Sound with Python