Почему питон играет странные звуки, когда я "играю" музыку? - PullRequest
1 голос
/ 11 апреля 2019

Итак, я пытался воспроизводить музыку на 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 Ответ

1 голос
/ 12 апреля 2019

Этот фрагмент кода выглядит так, как будто вы постоянно возобновляете воспроизведение 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 импорт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...