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

import pygame

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

sounda.play()

我也试过使用通道,但结果是一样的

#1楼 票数:23

对我来说(在 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)

#2楼 票数:10

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

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

#3楼 票数:8

播放mixer.Sound时我没有声音,但是在我创建窗口后它开始工作,这是一个最小的例子,只需更改您的文件名,运行并按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()

#4楼 票数:5

你需要做的是这样的:

 import pygame
 import time

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

 sounda.play()
 time.sleep (20)

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

如果您希望程序实际执行某些操作,只需键入所有必要的代码,但要确保它能够持续足够长的时间以完全播放声音。

#5楼 票数:4

import pygame, time


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

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

sounda.play()

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

#6楼 票数:3

我认为你需要的是 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"

#7楼 票数:3

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

#8楼 票数:2 已采纳

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

#9楼 票数:1

你试一试:

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楼 票数:1

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

如果你想播放单个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()

#11楼 票数:0

只需尝试重新保存您的 wav 文件以确保其频率信息。 或者你可以录制一个声音来确定它的频率、位数、大小和频道。(我用这个方法来解决这个问题)

#12楼 票数:0

我曾经发生过这样的事情。 也许你有同样的问题? 尝试使用绝对路径:

import pygame

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

sounda.play()

其中abslute_path显然已替换为您的实际绝对路径;)

祝你好运。

#13楼 票数:0

import pygame

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

这将适用于python 3

#14楼 票数:0

迟到了 5 年才回答,但我希望我能帮助别人.. :-)

首先,您不需要“pygame.init()”行。 其次,循环播放里面的声音,否则 pygame.mixer 将启动,并立即停止播放。

我让这段代码在我的 Raspberry pi 和 Raspbian OS 上正常工作。 请注意,我使用了一个持续循环播放声音的 while 循环。

import pygame.mixer

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

while True:
    sounda.play()

#15楼 票数:0

做这个:

import pygame

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

我认为您的问题是该文件是 WAV 文件。 它用 MP3 对我有用。 这可能适用于 python 3.6。

  ask by Gabriele Cirulli translate from so

未解决问题?本站智能推荐:

2回复

为什么PyGame没有播放声音

我正在PyGame制作游戏并开始为它添加一些声音。 我添加的一个声音会播放正确,但我添加的另一个声音只会播放几毫秒(我假设,看到我听到的是短暂的咔嗒声)。 我尝试在它之后调用time.sleep(),但我仍然得到那个短暂的点击。 我做了一个测试程序,声音仍然没有播放。 我会感谢任何帮助/
1回复

声音不会持续播放! -Pygame,Python

我正在尝试在Python中使用Pygame库来播放一些钢琴声音。 我有.wav格式的音符,并且我想使用while循环来连续播放一些音符,但是结果与我不同。 我确实尝试了其他可能的解决方案,但没有找到能解决我问题的方法。 我希望这三个音符(声音)同时播放,并每0.4秒重复一次。 c
1回复

pygame 音乐播放但声音对象不播放 [重复]

这个问题在这里已经有了答案: 如何在python中播放wav文件? (4 个回答) 如何使用 pygame 播放
1回复

Python:使用pygame播放声音

因此,我正在尝试运行for循环,以便在声音持续的同时将声音与图像一起播放。 我可以看到图像显示的时间很短,而且听到声音在播放。 但随后一切都停止了,我无法在0.85秒内在窗口中输入内容(我应该输入“ j”或“ f”)。 在此之后,应该开始新的试验,但是没有。 不知道那是否是因为我得到的这
2回复

声音文件无法在pygame中播放

要在pygame上播放声音,我遇到很多麻烦。 这是我一直在玩的代码,我无法使声音文件在Windows 7 64位桌面上运行2.7.5的Portable python上工作。 我也在我的Linux笔记本电脑上尝试过此操作,播放声音文件时,我只是听到一声短促,而不是实际的声音文件。
1回复

为什么Pygame只播放最后一个声音?

我得到了这段代码: 当我想用以下方式播放声音d (that emans d.mp3)时: 它只会播放列表中的最后一个声音,这意味着e.mp3而不是d.mp3 。 我在这里做错了什么?
1回复

为什么我的pygame声音文件无法播放? [关闭]

我的pygame游戏没有播放声音,我尝试过几种不同的播放方式。 我可以帮忙吗? 那是我的全部代码集,这是应该播放声音的部分。 你能帮忙的话,我会很高兴。
2回复

Pygame - 同时播放声音

我正在使用Pygame制作一个游戏,而我正在尝试做的是为每个关卡设置一个主音,并在收集点时听到一些默认声音(例如) 所以,我使用以下方法加载主级音乐: 现在,我想做的是每当玩家收集一个点时播放特定的声音。 我不能停止使用音乐: 因为关卡的音乐会停止播放。 所以,我尝