2014-12-07 57 views
0

我试图写一小段代码来播放游戏背景中的音乐文件。我遇到的问题是,尽管所有的代码正在布局和措辞正确,没有声音文件将播放。我在代码中放了几个打印语句,它似乎暗示声音文件不是加载,或者一旦加载就不会播放?什么是防止在这个pygame调音台中播放声音文件?

import pygame 
def musicPlayer(): 
    print "Playing music now" 
    pygame.init() 
    pygame.mixer.music.load('01ANightOfDizzySpells.mp3') 
    print "load song1" 
    pygame.mixer.music.play(loops=0, start=0.0) 
    print "play song1" 
    pygame.mixer.music.queue('01HHavok-intro.mp3') 
    pygame.mixer.music.queue('02HHavok-main.mp3') 
    pygame.mixer.music.queue('02Underclockedunderunderclockedmix.mp3') 
    pygame.mixer.music.queue('03ChibiNinja.mp3') 
    pygame.mixer.music.queue('04AllofUs.mp3') 
    pygame.mixer.music.queue('05ComeandFindMe.mp3') 
    pygame.mixer.music.queue('06Searching.mp3') 
    pygame.mixer.music.queue('07WeretheResistors.mp3') 
    pygame.mixer.music.queue('08Ascending.mp3') 
    pygame.mixer.music.queue('09ComeandFindMe-Bmix.mp3') 
    pygame.mixer.music.queue('10Arpanauts.mp3') 
    pygame.mixer.music.queue('DigitalNative.mp3') 
    pygame.mixer.music.set_endevent() 
    #musicPlayer() 
musicPlayer() 

我是否缺少一些基本的东西?或者它可能需要我的电脑而不是代码?

编辑:这是从运行代码

Playing music now 
load song1 
play song1 

正如你可以看到它不引发错误的输出。

+1

也许该文件。你试过用另一个文件吗? – 2014-12-07 22:38:19

+0

是的,我试过。相同的输出。我认为所说的代码听起来很正确吗? – 2014-12-07 22:48:10

回答

0

我对pygame及其方法不是很熟悉,但我的猜测是要么无法正确找到文件,要么无法正确处理找到的文件。

我会建议把音频文件的完整路径,看看是否有帮助。这将排除它没有正确查找文件的问题(,虽然硬编码显然不是一个好主意长期,因为您对程序的组织结构所做的任何更改都可能会破坏这些路径)。

并根据他们的文件,他们的MP3支持是有限的。您可以尝试使用.ogg文件(http://www.pygame.org/docs/ref/music.html),因为这可能只是编码不完全受支持的问题。

+0

我试着换成ogg,但它没有什么区别。然而f.rodrigues给了我一些帮助。 mp3确实是一个问题。 – 2014-12-07 23:36:00

+0

很高兴你能够得到它的工作! – Nwilson 2014-12-09 00:45:38

2

我想你的代码中间文件,它工作正常,但有一些调整:

import pygame 

def musicPlayer(): 
    pygame.init() 
    pygame.mixer.music.load('test.mid') 
    print "load song1" 
    pygame.mixer.music.play() 
    print "play song1" 
    pygame.mixer.music.queue('test_2.mid') 

musicPlayer() 
while pygame.mixer.music.get_busy(): 
    pygame.time.Clock().tick(10) 
print "DONE" 

如果脚本结束比赛不会happend,对于需要get_busy()在while循环。

pygame.music的文档中声明:请注意,MP3支持是有限的[...]请考虑使用OGG代替。


我在Sound类中玩过一点。

这里就是我想出了:

import pygame 

def musicPlayer(): 
    pygame.mixer.init() 
    channel = pygame.mixer.Channel(1) 
    sound = pygame.mixer.Sound('test.ogg') 
    channel.play(sound) 

musicPlayer() 
while pygame.mixer.get_busy(): 
    pygame.time.Clock().tick(10) 
print "DONE" 
+0

谢谢!我试过你的编辑,它运行良好。从输出结果来看,它似乎代码运行良好。但是,仍然没有声音作为输出!仍然拒绝使用mp3,但ogg转换确实有点奏效。代码运行但没有声音。但我可以告诉输出的东西是否正在工作可能是ogg? – 2014-12-07 23:34:44

+0

我不能说,只能用我可以测试自己的文件。我尝试了几个mp3文件,只有几个工作,ogg文件也有一些问题,我不知道如何解决。 MIDI文件似乎总是工作。 – 2014-12-07 23:39:25

+0

你有没有尝试过mixer.Sound类? http://www.pygame.org/docs/ref/mixer.html#pygame.mixer。声音 – 2014-12-07 23:50:06