2013-04-02 107 views
0

我想用Python播放一些聲音,但我遇到了問題。在python上播放pyglet聲音

這是我的(很簡單,只爲學習)代碼:

def parse(fd): 
    for line in fd: 
     for word in line.split(): 
      if(word == "word"): 
       s1 = pyglet.resource.media("lines.mp3"); 
       s1.play() 
       s2 = pyglet.resource.media("rain.mp3") 
       s2.play() 

       # Tried to quit playing after the duration, got a 
       # TypeError: exit() takes no arguments (1 given) have no idea why 
       # And without this line, im getting stuck in the next line 
       pyglet.clock.schedule_once(pyglet.app.exit, s1.duration) 

       # getting stuck here 
       pyglet.app.run() 

def filehandle(filename): 
    while(True): 
     print "parsing" 
     fd = open(filename,'r+') 
     parse(fd) 
     fd.close() 

if __name__ == '__main__': 
    print "Please enter file name: " 
    filename = raw_input() 
    filehandle(filename) 

    sys.exit() 

爲什麼我不能開始播放聲音,並可以選擇停止呢?

有沒有其他的庫可以做到這一點?

回答

2

pyglet.app.exit不接受任何參數,因此pyglet.clock.schedule_once自動發送一個參數到回調:the amount of time that has passed since the last callback。爲了解決這個問題,你需要通過它,當它被稱爲與dt說法,不會打破的函數:

def exit_callback(dt): 
    pyglet.app.exit() 

pyglet.clock.schedule_once(exit_callback, s1.duration) 

關於你的第二個問題,這似乎是「我怎麼阻止一個軌道而仍然在做其他事情?「,你應該使用明確的Player objects,而不是用exit()殺死整個應用程序。但是我不知道你在那個方面實際上遇到了什麼困難,因爲「卡在這裏」並不能告訴我任何事情。

+0

謝謝!這確實有幫助...但我仍然不能讓它在後臺播放並繼續播放。即時通訊仍然陷入'pyglet.app.run()'。有沒有辦法等待它結束,但在添加更多聲音的同時在後臺播放? – Itzik984

+0

@ Itzik984這樣的聲音屬於另一個問題,更詳細地描述你如何「陷入困境」。 'pyglet.app.run()'是實際啓動pyglet應用程序並啓動時鐘等的行。 –

+0

亨利,這兩條線是在問題的底部: 爲什麼我不能開始播放聲音,讓它有選擇停止它? 有沒有其他的圖書館可以做到這一點? 如果這是我將會得到的唯一一個,我會接受你的答案,但爲了讓別人再看一個人,我會保持現在運行狀態 – Itzik984