web-dev-qa-db-ja.com

pygameでmp3を再生するにはどうすればよいですか?

import pygame
file = 'some.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()

これは、「プロセスは終了コード0で終了しました」を出力しますが、何も再生しません。この問題を解決するにはどうすればよいですか?

21
Ashot

再生機能は音楽の再生を開始しますが、すぐに戻ります。その後、プログラムは終了し、pygameオブジェクトは自動的に破棄され、音楽が停止します。

コメントしたように、終了する前に待機すると音楽が再生されます。なぜなら、pygameオブジェクトはwhileループが終了するまで破壊されないからです。

while pygame.mixer.music.get_busy(): 
    pygame.time.Clock().tick(10)
19
Ichigo Jam

非同期イベントであるため、音楽は停止します。つまり、スクリプトを続行します。その後、スクリプトは即座に停止し、音楽に開始の機会を与えません。前に述べたように、使用できます

_while pygame.mixer.music.get_busy(): 
  pygame.time.Clock().tick(10)
_

ただし、すべての非同期イベントが終了するまで待機するため、pygame.event.wait()の方がより適切です。

13
Cinder

これは非常に簡単な方法です。

import pygame
file = 'some.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
pygame.event.wait()
8
Ray Hu

thepythongamebook.com から良い解決策を見つけました。

pygame.mixer.pre_init(44100, -16, 2, 2048) # setup mixer to avoid sound lag

pygame.init()

pygame.mixer.init()

pygame.mixer.music.load('music_01.mp3')

pygame.mixer.music.play(-1)
3
Eric Menu

これを試して、

#!/usr/bin/env python
import pygame
from Tkinter import *
file = 'Your MP3 here'
root = Tk()
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
root.mainloop()

tkinterをインストールする必要がありますが、うまくいけばうまくいき、時間を手動で設定する必要はありません。これがうまくいったなら、私に教えてください、私は自分のコンピューターでこれをテストしましたが、時にはうまくいかないことがあります。できればお手伝いします。

1
DGxInfinitY

これを試してください。

import pygame

def pmusic(file):
    pygame.init()
    pygame.mixer.init()
    clock = pygame.time.Clock()
    pygame.mixer.music.load(file)
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy():
        print("Playing...")
        clock.tick(1000)

def stopmusic():
    pygame.mixer.music.stop()


def getmixerargs():
    pygame.mixer.init()
    freq, size, chan = pygame.mixer.get_init()
    return freq, size, chan


def initMixer():
    BUFFER = 3072  # audio buffer size, number of samples since pygame 1.8.
    FREQ, SIZE, CHAN = getmixerargs()
    pygame.mixer.init(FREQ, SIZE, CHAN, BUFFER)

try:
    initMixer()
    file = 'C:\\data\\03.mp3'
    pmusic(file)
except KeyboardInterrupt:  # to stop playing, press "ctrl-c"
    stopmusic()
    print("\nPlay Stopped by user")
except Exception:
    print("unknown error")

print("Done")
1
Alfred George

インポートした方法が原因で、オーディオが再生されないようです。次のコードは、期待どおりにサウンドを再生します。ここでは、import pygameではなくfrom pygame import mixerを使用することを除いて、何も変更されていません。これは、Pygameがパッケージであるという事実による可能性がありますが、よくわかりません。

from pygame import mixer

file = 'some.mp3'
mixer.init()
mixer.music.load(file)
mixer.music.play()
0
Simon