pymediaでMP3を再生する

def play_sound(fileobject,volume=0x7FFF,decoder="mp3"):
    import pymedia.muxer as muxer, pymedia.audio.acodec as acodec, pymedia.audio.sound as sound
    if fileobject == None:
        return None

    dm= muxer.Demuxer(decoder)
    dec= None
    snd = None
    buff = ' '
    while len(buff):
        buff=fileobject.read(32000)
        if len(buff):
            frames= dm.parse(buff)
            for fr in frames:
                if dec== None:
                    dec= acodec.Decoder( dm.streams[0] )
                r= dec.decode( fr[1] )
                if r and r.data:
                    """
                    AFMT_S16_LE  	符号つき 16 ビットオーディオ、リトルエンディアンバイトオーダ (Intelプロセッサで使われている形式)
                    AFMT_S16_BE 	符号つき16ビットオーディオ、ビッグエンディアンバイトオーダ (68k、PowerPC、Sparcで使われている形式)
                    ほとんどのシステムは、上記の形式のサブセットしかサポートしていません。また、多くのデバイスが AFMT_U8 だけしかサポートしていません。
                    現在使われている最も一般的な形式はAFMT_S16_LEです。
                    <http://www.python.jp/doc/2.4/lib/ossaudio-device-objects.html>
                    """
                    if snd== None:
                        snd= sound.Output(r.sample_rate,r.channels,sound.AFMT_S16_LE)
                        snd.setVolume(volume)
                    snd.play( r.data )
    fileobject.close()
    return snd

使い方

鳴らしたければ

snd = play_sound(open("sample.mp3","rb"))


止めたければ

snd.stop()


鳴り終わるまで待ちたければ

import time
while snd.isPlaying():time.sleep(0.05)