所以我一直在尝试在Python上播放音乐,我所做的就是在函数内部定义变量并在循环内调用该函数。
我尝试更改参数并更改变量的位置,但尝试得不太好。 我确实尝试过从其他位置播放音乐文件,但它确实起作用,只是不知道我的功能出了什么问题。
def main_menu():
DS.blit(mainmenu, (0, 0))
pygame.display.update()
MenuMusic = pygame.mixer.music.load("MainMenu.mp3")
MenuMusic = pygame.mixer.music.set_volume(0.45)
MenuMusic = pygame.mixer.music.play()
while loop:
main_menu()
我希望输出的声音是在背景中平稳正常播放,但相反,我会在背景中听到这些奇怪的咔嗒声,就像有人在敲鼓一样。
答案 0 :(得分:1)
此代码段看起来像您是在不断重新开始播放MP3。
它需要开始播放声音,然后在停止播放时重新开始播放。可以用pygame.mixer.get_busy()检查混音器的输出状态,如果没有声音输出,则返回False。
因此,对于循环声音,只需测试它是否已停止,然后重新启动:
import pygame
import enum
pygame.mixer.init()
pygame.mixer.music.set_volume(0.45)
class GameState( enum.Enum ):
PLAYING = 1
MENU = 2
GAMEOVER = 3
# Set the game state initially. Start on the menu screen/music
game_state = GameState.MENU
def main_menu():
DS.blit(mainmenu, (0, 0))
pygame.display.update()
...
while loop:
# If the sound has not started (or has finished), play it (again)
if ( pygame.mixer.get_busy() == False ):
if ( game_state == GameState.MENU ):
pygame.mixer.music.load( "elevator_music.mp3" )
elif ( game_state == GameState.PLAYING ):
pygame.mixer.music.load( "battle_music.mp3" )
elif ( game_state == GameState.GAMEOVER ):
pygame.mixer.music.load( "other_music.mp3" )
pygame.mixer.music.play()
main_menu()
编辑:我忘记了pygame
和enum
的导入。