Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用pygame播放mp3?_Python_Pygame - Fatal编程技术网

Python 如何使用pygame播放mp3?

Python 如何使用pygame播放mp3?,python,pygame,Python,Pygame,这会输出“进程已完成,退出代码为0”,但不会播放任何内容。如何解决此问题?播放功能启动音乐播放,但立即返回。然后程序结束,pygame对象将自动销毁,从而导致音乐停止 正如您所评论的,如果您在退出之前等待它,它会播放音乐,因为在while循环完成之前,pygame对象不会被销毁 import pygame file = 'some.mp3' pygame.init() pygame.mixer.init() pygame.mixer.music.load(file) pygame.mixer.m

这会输出“进程已完成,退出代码为0”,但不会播放任何内容。如何解决此问题?

播放功能启动音乐播放,但立即返回。然后程序结束,pygame对象将自动销毁,从而导致音乐停止

正如您所评论的,如果您在退出之前等待它,它会播放音乐,因为在while循环完成之前,pygame对象不会被销毁

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

音乐停止是因为它是一个异步事件,这意味着它将继续与脚本同步。然后,脚本立即停止,没有给音乐一个开始的机会。 如前所述,您可以使用

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

但是,更好的方法是
pygame.event.wait()
,因为它将等待所有异步事件结束。

我从以下方面找到了一个很好的解决方案:


由于您导入音频的方式,音频似乎无法播放。下面的代码按预期播放声音。除了使用pygame导入混合器中的
而不是
导入pygame
之外,此处没有任何更改。这可能是因为Pygame是一个软件包,但我不确定

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)
试试这个

from pygame import mixer

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

这里有一个超级简单的方法

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")
有两个不同的模块用于播放声音和音乐,分别为模块和模块。此模块包含用于加载声音对象和控制播放的类。文件中解释了差异:

音乐播放和常规声音播放的区别在于,音乐是流式播放的,而不是一次实际加载的。混音系统一次只支持一个音乐流

如果要播放mp3文件,需要初始化模块。使用加载文件。调用以开始播放音乐流。最后,您必须等待文件播放。
用于测试是否混音。在循环中连续查询混合器的状态。
在循环中,您需要将时间延迟或。此外,还需要处理应用程序循环中的事件。分别见:

对于游戏的每一帧,您都需要对事件队列进行某种调用。这确保了您的程序可以在内部与操作系统的其余部分交互

导入pygame
pygame.init()
pygame.mixer.music.load('my_music.mp3'))
pygame.mixer.music.play()
clock=pygame.time.clock()
而pygame.mixer.music.get_busy():
时钟滴答(60)
pygame.event.poll()

您是否尝试过pygame.mixer.music.play(循环=-1)??是的,我尝试过更改循环、设置音量、更改频道。pygame.mixer.music.get_busy():pygame.time.Clock()。勾选(10)
这样做可以解决我的问题。我不知道为什么,但是音乐GON很忙。从“知道MP3支持是有限的。”…………考虑使用OGG。“是的,但是它发生在我尝试播放声音<代码> PyGAME。混音。声音(文件名)声音。播放< /代码>欢迎到StAdvOp溢出。只有代码的答案往往会被标记为删除,因为它们是“低质量的”。请阅读回答问题的帮助部分,然后考虑给你的答案添加一些评论。
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")
import pygame
file = 'some.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
pygame.event.wait()