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



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

Это код:



import pygame

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

sounda.play()


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

759   13  

13 ответов:

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

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

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

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

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

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

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

Вам нужно сделать примерно следующее:

 import pygame
 import time

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

 sounda.play()
 time.sleep (20)
Причина, по которой я сказал программе спать, заключается в том, что я хотел, чтобы она продолжала работать, не набирая много кода. У меня была та же проблема, и звук не воспроизводился, потому что программа закрывалась сразу после попытки воспроизвести музыку.

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

Я думаю, что вам нужна pygame.смеситель.музыка:

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"

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

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

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

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

import pygame

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

sounda.play()

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

Удачи.

import pygame

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

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

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

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

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

import pygame.mixer

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

while True:
    sounda.play()
import pygame, time


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

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

sounda.play()

pygame.init() идет после mixer.init(). Это сработало для меня.

Comments

    Ничего не найдено.