2013-02-13 21 views
4
import pygame, time 
from pygame.locals import * 

soundObj = pygame.mixer.Sound('beeps.wav') 
soundObj.play() 

time.sleep(1) # wait and let the sound play for 1 second 
soundObj.stop() 

и выдает эту ошибку:.Pygame не может открыть звуковой файл

Traceback (most recent call last): 
    File "C:/Users/Jauhar/Desktop/Python/sounds.py", line 4, in <module> 
    soundObj = pygame.mixer.Sound('beeps.wav') 
pygame.error: Unable to open file 'beeps.wav' 

Файл beeps.wav сохраняется в том же каталоге, что и файл питона код находится в

я могу Не понимаю, почему это не сработает!

ответ

4

Вы не можете использовать библиотеку pygames, если вы не инициализируете модули, которые вы используете, или все pygame.

pygame.mixer.pre_init(44100, 16, 2, 4096) #frequency, size, channels, buffersize 
    pygame.init() #turn all of pygame on. 

сделайте это, прежде чем делать что-либо в pygame. Я рекомендую это.

+0

не решает проблему для меня по какой-то причине – Alex

+0

Это может быть формат или функция в формат, который он не поддерживает. Гибкость Pygames довольно ограничена и определяет, какие работы могут быть действительно сдерживающими. Я использую pygame только для событий и окна OpenGL. Если я снова сделаю звук, я, вероятно, буду использовать OpenAL. – Kaliber64

+1

Оказалось, что частота пиков слишком высока для pygame, поэтому я использовал один из бесплатных инструментов, чтобы уменьшить частоту дискретизации (до 128 бит/с), и это сработало. – Alex

0

Попробуйте ввести эту информацию, и может возникнуть проблема.

import os 
os.getcwd() # Log this line. 
soundObj = pygame.mixer.Sound('beeps.wav') 

Это должно сообщить вам, в каком каталоге ваше приложение просматривается при попытке получить доступ к вашему звуковому файлу. Вероятно, вы найдете его в базе вашего каталога игр.

+0

Эй, спасибо вам за помощь. Я изменил код для этого: 'импорта Pygame, время, Os из pygame.locals импорта * печати (os.getcwd()) # Log эта линия soundObj = pygame.mixer.Sound ('гудка .wav ') soundObj.play() time.sleep (1) # ожидания и пусть звук игра в течение 1 секунды soundObj.stop() ' Вы правы в том, что он смотрит на место на базы моего каталога игр. Я еще не уверен, как исправить мою проблему, хотя все, кажется, работает по назначению. – user2066880

+0

Вам нужно запустить pygame. См. Ответ Калибера. Если вам нужно использовать subdir, используйте 'filename = os.path.join (« звуки »,« beeps.wav »)' – ninMonkey

0

Имея аналогичную проблему, я обнаружил, что размер файла .wav имеет отношение к проблеме. Уменьшение размера файла .wav позволило ему работать без существенных изменений в проблеме.

0

Эта же программа работает для меня, если я создаю поверхность дисплея перед воспроизведением звука.

#! Python 3 
''' 
Making games with python chapter 2 program 5 
''' 
import pygame, sys, time 
from pygame.locals import* 

pygame.init() 
DISPLAYSURF = pygame.display.set_mode((400, 300)) 
pygame.display.set_caption("Sound!!") 

soundObj = pygame.mixer.Sound('badswap.wav') 
soundObj.play() 
time.sleep(1) #wait and let the sound play for X second 
soundObj.stop() 

while True: 
     for event in pygame.event.get(): 
      if event.type == QUIT: 
       pygame.quit() 
       sys.exit() 
     pygame.display.update() 
3

Pygame (по крайней мере, версия 2.9) не поддерживает 32-битные WAP-файлы с плавающей точкой. Перекодируйте его на подписанный 16-разрядный WAV (например, с помощью Audacity).

0

Имейте звуковой файл после pygame.init(). У меня была эта проблема, но после размещения звукового файла после этого она работала отлично.

+0

Некоторые примеры кода, чтобы согласиться с вашим заявлением было бы очень полезно. –

Смежные вопросы