为什么当我“播放”音乐时python会播放奇怪的声音?

时间:2019-04-11 01:10:34

标签: python python-3.x pygame

所以我一直在尝试在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()

我希望输出的声音是在背景中平稳正常播放,但相反,我会在背景中听到这些奇怪的咔嗒声,就像有人在敲鼓一样。

1 个答案:

答案 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()

编辑:我忘记了pygameenum的导入。