2012年4月26日 星期四

因應播放MP3所寫的multiprocess進程

因為播放MP3時,主程式會無法動作產生"沒有回應"的訊息,
所以想出解決方法是使用multiprocess多進程的方式,產生子進程來播放,
學習到原來使用子進程把它變成全域副程式:
def PlayStart(mp3):
    mp3.play()
    time.sleep(10)
    mp3.stop()
主呼叫程序:

def OnPlay(self, event):
    '''Play MP3'''
    global mp3
    plfileid = self.playlist.GetItem(event.m_itemIndex,0).GetText() # Download file ID
    filename = r'F:/Test/' + plfileid
    mp3 = mp3play.load(filename)
    try:
        p = Process(target=PlayStart, args=(mp3,))
        p.start()
        p.join
    except:
        print 'error!!'

結果發生了Error:

   File "F:\Python27\lib\pickle.py", line 880, in load_eof
    raise EOFError
EOFError
Exception AttributeError: "'AudioClip' object has no attribute '_mci'" in <bound method AudioClip.__del__ of <mp3play.windows.AudioClip object at 0x0321F290>> ignored
解決辦法尋找中...

因為太少人使用mp3play這個套件,所以上網找不到相關資訊,
看來只好重回pymedia的懷抱,看了一長串官方範例及他人範例後
http://pymedia.org/tut/dump_wav.html
http://www.cnblogs.com/myqiao/archive/2011/08/07/2129777.html
寫出了利用子進程播放的成功程式,但播放出來後,即使關掉主程式也無法停止音樂,
看來還有下一步要忙...

沒有留言:

張貼留言