2013-08-04 148 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]) 

这将使在背景音乐播放。