Pygame, звуки не играют
Я пытаюсь воспроизвести звуковые файлы (.wav) с pygame, но когда я начинаю его, я никогда ничего не слышу.
Это код:
import pygame
pygame.init()
pygame.mixer.init()
sounda= pygame.mixer.Sound("desert_rustle.wav")
sounda.play()
Я также пытался использовать каналы, но результат тот же
13 ответов:
Ваш код прекрасно воспроизводится на моей машине (Mac OSX 10.5, Python 2.6.4, pygame 1.9.1). Какие версии ОС, Python и pygame вы используете? Можете ли вы услышать
.wavOK другими способами (например,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