Воспроизведение миди на Pygame

Хорошо, вот что я получил:

import pygame
import sys

from pygame.locals import *

bif="bg.jpg"
mif="pkmn.png"
sif="bubble.png"
song_1="testaudio.mid"

pygame.init()

FPS = 30  # FPS
FPSCLOCK = pygame.time.Clock()  # FPS

screen = pygame.display.set_mode ((600,375),0,32)

intro=pygame.mixer.Sound(song_1)
intro.play()

background = pygame.image.load(bif).convert()

pygame.mouse.set_visible(0)

char = pygame.image.load(mif).convert_alpha()
x = screen.get_width()/2 - char.get_width()/2
y = screen.get_height() - char.get_height()

bubble = pygame.image.load(sif).convert_alpha()
shoot_y = 0

move_speed = 15  # FPS

while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    pressed = pygame.key.get_pressed()
    if pressed[K_LEFT]:
        x -= move_speed
    if pressed[K_RIGHT]:
        x += move_speed
    if pressed[K_UP]:
        y -= move_speed
    if pressed[K_DOWN]:
        y += move_speed

    if event.type==KEYDOWN:
        if event.key==K_SPACE:
            shoot_y = y
            shoot_x = x

    screen.blit(background,(0,0))

    if shoot_y > 0:
        screen.blit(bubble,(shoot_x, shoot_y))
        shoot_y -= 10


    screen.blit(char,(x,y))

    pygame.display.update()
    FPSCLOCK.tick(FPS)  # FPS

Итак, у меня есть несколько миди-файлов, которые я создал, однако я продолжаю получать «Невозможно открыть файл« testaudio.mid », я немного пробовал, но я действительно запутался, я новичок в pygame, но не могу понять это, Я искал везде, но все еще не могу заставить его работать, даже на этом же сайте, но все еще не мог понять.

Я действительно надеюсь, что кто-то может помочь мне, изменив мой код или показав мне путь к более ясному примеру, потому что я не смог понять тот, который нашел.

Спасибо (:


person Bob Lozano    schedule 04.06.2013    source источник
comment
Ваши аудиофайлы находятся в том же каталоге, что и файл python?   -  person Haz    schedule 04.06.2013


Ответы (3)


Следующий код будет воспроизводить файл music.mid, расположенный в текущем каталоге.

import pygame
pygame.init()

pygame.mixer.music.load("music.mid")
pygame.mixer.music.play()
person Adrian G    schedule 04.06.2013

Если у вас есть простая программа, которая завершает работу после команды воспроизведения, воспроизведение музыки останавливается.

вы должны добавить следующие две строки:

while pygame.mixer.music.get_busy():
    pygame.time.wait(1000)

чтобы предотвратить выход из программы до того, как музыка закончила играть.

person RufusVS    schedule 23.12.2014

Следуя приведенному выше ответу, вместо того, чтобы ждать 1000, вы можете найти длину миди-файла, используя

length = pygame.time.get_ticks()

а затем установите время ожидания на длину

person staplegun    schedule 29.12.2019
comment
Я думаю, вы говорите о моем ответе, который в настоящее время ниже, а не выше вашего. И я проверил документы, и pygame.time.get_tics() получает только количество тиков, прошедших с момента запуска pygame, а не длину миди-файла. - person RufusVS; 14.07.2021