Пигаме, звуки не играют

Я пытаюсь воспроизводить звуковые файлы (.wav) с pygame, но когда я его начинаю, я ничего не слышу.
Это код:

import pygame

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

sounda.play()

Я также пытался использовать каналы, но результат тот же

Ответы

Ответ 1

Ваш код воспроизводит desert_rustle.wav вполне нормально на моей машине (Mac OSX 10.5, Python 2.6.4, pygame 1.9.1). Какие версии ОС и Python и pygame вы используете? Вы можете слышать .wav OK другими способами (например, open на терминале Mac или start на консоли Windows, за которым следует имя файла/путь к файлу .wav), чтобы гарантировать, что файл не поврежден? Трудно отладить вашу конкретную проблему (которая не с кодом, который вы даете), не имея возможности воспроизвести ее и не имея всех этих важных деталей.

Ответ 2

Для меня (в 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)

Ответ 3

sounda.play() возвращает объект, необходимый для воспроизведения звука. С его помощью вы также можете узнать, продолжает ли звучать звук:

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

Ответ 4

У меня не было звука от воспроизведения mixer.Sound, но он начал работать после того, как я создал окно, это минимальный пример, просто измените имя файла, запустите и нажмите клавишу ВВЕРХ для воспроизведения:

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()

Ответ 5

У меня была такая же проблема в Windows 7. В моем случае я не запускал код в качестве администратора. Не спрашивайте меня, почему, но открыв командную строку, как администратор, исправил ее для меня.

Ответ 6

Что вам нужно сделать, это примерно так:

 import pygame
 import time

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

 sounda.play()
 time.sleep (20)

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

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

Ответ 7

Я думаю, что вам нужно 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"

Ответ 8

Просто попробуйте:

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 "", и звук будет успел загрузить свое "я".

Ответ 9

5 лет назад ответ, но я надеюсь, что смогу помочь кому-то..: -)

Во-первых, вам не нужна строка "pygame.init()". Во-вторых, сделайте петлю и воспроизведите звук внутри нее, иначе pygame.mixer запустится и немедленно перестанет воспроизводиться.

Я получил этот код, чтобы нормально работать на моем малине pi с ОС Raspbian. Обратите внимание, что я использовал цикл while, который продолжает зацикливать звук.

import pygame.mixer

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

while True:
    sounda.play()

Ответ 10

Просто попробуйте повторно сохранить ваш wav файл, чтобы убедиться в его частотной информации. Или вы можете записать звук, чтобы убедиться в его частоте, битах, размере и каналах. (Я использую этот метод для решения этой проблемы)

Ответ 11

У меня было что-то подобное. Может быть, у вас такая же проблема? Попробуйте использовать абсолютный путь:

import pygame

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

sounda.play()

Если abslute_path явно заменен вашим фактическим абсолютным путем;)

удачи.

Ответ 12

import pygame

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

Это будет работать на python 3