2013-08-04 96 views
0

我一直在努力定製桌面一段時間了(謝謝所有誰一直在幫助),我: 正試圖編寫一個「控制」桌面對於用戶而言,顧名思義主要是對他們的計算機進行良好的控制。 這與pygame有什麼關係? 控制桌面的功能之一就是播放音樂。除了播放聲音之外,我已經把所有東西都放下 它總是決定做一個「流行」而不是播放實際的歌曲。任何幫助都會非常感激,因爲在夏天結束之前我急於獲得「測試版」。pygame聲音只是彈出 - 不是真正的歌曲/聲音

代碼:

class control(): 

    def ctr(self): 
     print("Going to control Desktop for Jupee...") 

     midnightbg = pygame.image.load("MidNightUI.jpg").convert_alpha() 
     midnightbg = pygame.transform.scale(midnightbg, (winx, winy)) 
     screen.blit(midnightbg, (0, 0)) 

     pygame.display.update() 

     songlist = [] 

     songlist = os.listdir("/Users/"+getpass.getuser()+"/Desktop/JupeeMusic") 

     pygame.time.wait(500) 

     a = 0 
     songsinlist = 0 

     for things in songlist: 
      songsinlist = songsinlist + 1 
     songlist.remove(".DS_Store") 
     songsinlist = songsinlist - 1 

     pygame.mixer.init() 

     for items in songlist: 
      print("Song found : "+items) 

     while 1: 

      mx, my = pygame.mouse.get_pos() 
      if a > songsinlist-1: 
       a = 0 

      for event in pygame.event.get(): 
       if event.type == MOUSEBUTTONDOWN: 
        print(mx, my, "is the location that the mouse button was pressed.") 

       elif event.type == QUIT: 
        pygame.quit() 
        raise SystemExit 
       elif event.type == KEYDOWN: 
        if event.key == K_LMETA: 
         print("Going to main desktop again...") 
         setup().setdesk() 
        elif event.key == K_RMETA: 
         print("Going to main desktop again...") 
         setup().setdesk() 
        elif event.key == ord("p"): 
         song = pygame.mixer.Sound(songlist[a]) 
         song.play(0) 
         pygame.time.wait(600) 
         a = a + 1 
       elif event.type == MOUSEBUTTONDOWN: 
        if mx <= 50 and my <= 50: 
         song = pygame.mixer.Sound(songlist[a]) 
         song.play(0) 
         pygame.time.wait(600) 
         a = a + 1 

這是在Mac上。

回答

1

如果您的意思是使用Python 3,請檢查以確保您沒有使用Python 2運行它。您的print s被編寫爲Python 3函數而不是Python 2語句,但它們仍然是在Python 2中有效。括號只是作爲括號而不是函數調用。我沒有看到你發佈的任何代碼都是無效的Python 2.在Python 3中編寫項目當然是不可能的,不會做任何會讓Python 2解釋器不安的東西,但是會給出奇怪的錯誤,特別是當你發生時爲這兩個版本的Python安裝了幾乎相同的庫。 (我已經完成了它,但沒有一個大項目。)

在Python 2中,pygame.mixer.Sound不知道字符串對象是緩衝區還是文件名,所以您應該使用'file'關鍵字來告訴它你已經傳入了一個文件名。 (或者,將文件名轉換爲unicode。)在Python 3中,在任何地方使用unicode編碼都可以避免這種模糊性。 (但pygame.mixer.Sound現在會將字節對象爲不明確的。)


編輯:無關你的問題,但只是以爲我會指出來。

您有以下四行代碼:

for things in songlist: 
    songsinlist = songsinlist + 1 
songlist.remove(".DS_Store") 
songsinlist = songsinlist - 1 

他們應該成爲:

songlist.remove(".DS_Store") 
songsinlist = len(songlist) 
+0

謝謝,我目前正在研究它,並感謝指出可以縮短的4行代碼。我應該使用__file__嗎? – MezuCobalt

+0

謝謝!這是我需要的文件關鍵字。多年來一直在爲此而戰 – Spidy

0

我已經採取了很好看,我可以看到什麼是錯的。在pygame的,用音樂的時候,你不應該作爲米爾聲音加載你的文件,但作爲音樂:

pygame.mixer.music.load(songlist[a]) 

這將使在背景音樂播放。