Pygame,声音不播放

时间:2010-05-29 23:12:58

标签: python audio pygame

我正在尝试使用pygame播放声音文件(.wav),但是当我启动它时,我从未听到任何声音。
这是代码:

import pygame

pygame.init()
pygame.mixer.init()
sounda= pygame.mixer.Sound("desert_rustle.wav")

sounda.play()

我也试过使用频道但结果是相同的

15 个答案:

答案 0 :(得分:15)

对于我(在Windows 7上,Python 2.7,PyGame 1.9)我实际上必须删除pygame.init()调用以使其工作或者如果pygame.init()保持在pygame中创建至少一个屏幕。

我的例子:

import time, sys
from pygame import mixer

# pygame.init()
mixer.init()

sound = mixer.Sound(sys.argv[1])
sound.play()

time.sleep(5)

答案 1 :(得分:8)

我没有播放混音器声音。但是它在我创建窗口后开始工作,这是一个最小的例子,只需更改文件名,运行并按UP键播放:

WAVFILE = 'tom14.wav'
import pygame
from pygame import *
import sys

mixer.pre_init(frequency=44100, size=-16, channels=2, buffer=4096)
pygame.init()
print pygame.mixer.get_init() 
screen=pygame.display.set_mode((400,400),0,32) 

while True:
    for event in pygame.event.get():
        if event.type == QUIT:                                                    
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key==K_ESCAPE:
                 pygame.quit()
                 sys.exit()
            elif event.key==K_UP:
                s = pygame.mixer.Sound(WAVFILE)
                ch = s.play()
                while ch.get_busy():
                    pygame.time.delay(100)
    pygame.display.update()

答案 2 :(得分:7)

sounda.play()返回播放声音所需的对象。有了它,您还可以查看声音是否仍在播放:

channela = sounda.play()
while channela.get_busy():
   pygame.time.delay(100)

答案 3 :(得分:3)

我在Windows 7下遇到了同样的问题。在我的情况下,我没有以管理员身份运行代码。不要问我为什么,但是打开一个命令行,管理员会为我修复它。

答案 4 :(得分:3)

你需要做的是这样的事情:

 import pygame
 import time

 pygame.init()
 pygame.mixer.init()
 sounda= pygame.mixer.Sound("desert_rustle.wav")

 sounda.play()
 time.sleep (20)

我告诉程序睡眠的原因是因为我想要一种方法来保持它运行而不需要输入大量代码。我遇到了同样的问题并且声音没有播放,因为程序在尝试播放音乐后立即关闭。

如果您希望程序实际执行某些操作,只需键入所有必需的代码,但要确保它的持续时间足以让声音充分发挥。

答案 5 :(得分:1)

我认为你需要的是pygame.mixer.music:

import pygame.mixer
from time import sleep
pygame.mixer.init()
pygame.mixer.music.load(open("\windows\media\chimes.wav","rb"))
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
    sleep(1)
print "done"

答案 6 :(得分:1)

import pygame, time


pygame.mixer.init()
pygame.init()

sounda= pygame.mixer.Sound("beep.wav")

sounda.play()

pygame.init()mixer.init()之后。它对我有用。

答案 7 :(得分:0)

您的代码在我的计算机上播放desert_rustle.wav(Mac OSX 10.5,Python 2.6.4,pygame 1.9.1)。您使用的是什么操作系统和Python以及pygame版本?你能否通过其他方式听到.wav OK(例如Mac终端上的open或Windows控制台上的start后跟.wav文件的文件名/路径)保证文件没有损坏?如果没有能够重现它并且没有所有这些关键细节,很难调试你的具体问题(这不是你提供的代码)。

答案 8 :(得分:0)

尝试重新保存您的wav文件以确保其频率信息。或者您可以录制声音以确保其频率,位,大小和通道。(我使用此方法来解决此问题)

答案 9 :(得分:0)

试试吧:

import pygame.mixer
from time import sleep
pygame.mixer.init()
pygame.mixer.music.load(open("\windows\media\chimes.wav","rb"))
print ""
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
sleep(1)
print "done"

这应该有效。你只需要添加print "",声音就会有 有时间加载自己。

答案 10 :(得分:0)

我发生了类似的事情。也许你有同样的问题?尝试使用绝对路径:

type oneD is array (0 to 3) of integer range 0 to 15;
constant table: oneD := (3, 9, 13, 6);

其中 abslute_path 显然被您的实际绝对路径所取代;)

祝你好运。

答案 11 :(得分:0)

import pygame

pygame.init()
sound = pygame.mixer.Sound("desert_rustle.wav")
pygame.mixer.Sound.play(sound)

This will work on python 3

答案 12 :(得分:0)

5年后回答,但我希望我可以帮助某人......: - )

首先,你不需要“pygame.init()” - 行。 其次,制作一个循环并在其中播放声音,否则pygame.mixer将启动,并立即停止播放。

我使用Raspbian OS在Raspberry pi上运行此代码。 请注意,我使用了一个while循环,继续循环播放声音。

import pygame.mixer

pygame.mixer.init()
sounda = pygame.mixer.Sound("desert_rustle.wav")

while True:
    sounda.play()

答案 13 :(得分:0)

执行此操作:

import pygame

pygame.mixer.init()
pygame.mixer.music.load("desert_rustle.wav")
pygame.mixer.music.play(0)

我认为您的问题是该文件是WAV文件。 它为我提供了MP3。这可能会在python 3.6上起作用。

答案 14 :(得分:0)

您错过了等待声音结束的机会。您的应用程序将开始播放声音,但将立即退出。

如果要播放单个 wav 文件,则必须初始化模块并从该文件中创建一个pygame.mixer.Sound()对象。调用play()开始播放文件。最后,您必须等待文件播放。

使用get_length()来获取声音的长度(以秒为单位),然后等待声音结束: (pygame.time.wait()的参数以毫秒为单位)

import pygame

pygame.mixer.init()
sounda = pygame.mixer.Sound('desert_rustle.wav')
sounda.play()
pygame.time.wait(int(sounda.get_length() * 1000))

或者,您可以使用pygame.mixer.get_busy测试声音是否混合。连续循环查询调音台的状态。
在循环中,您需要将时间延迟pygame.time.delaypygame.time.Clock.tick。另外,您需要处理应用程序循环中的事件。分别参见pygame.event.get() pygame.event.pump()

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

import pygame
pygame.init()

pygame.mixer.init()
sounda = pygame.mixer.Sound('desert_rustle.wav')
sounda.play()

while pygame.mixer.get_busy():
    pygame.time.delay(10)
    pygame.event.poll()