2010-05-29 119 views
13

Tôi đang cố phát các tệp âm thanh (.wav) bằng pygame nhưng khi tôi bắt đầu, tôi chưa bao giờ nghe thấy bất kỳ điều gì.
Đây là mã:Pygame, âm thanh không phát

import pygame 

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

sounda.play() 

Tôi cũng đã cố gắng sử dụng các kênh nhưng kết quả là như nhau

Trả lời

0

Mã của bạn đóng desert_rustle.wav khá tốt trên máy tính của tôi (Mac OSX 10.5, Python 2.6.4, Pygame 1.9 .1). Bạn đang sử dụng các bản phát hành hệ điều hành và Python và pygame nào? Bạn có thể nghe thấy .wav OK bằng các phương tiện khác không (ví dụ: open trên thiết bị đầu cuối của máy Mac hoặc start trên bảng điều khiển Windows theo sau tên tệp/đường dẫn đến tệp .wav) để đảm bảo tệp không bị hỏng? Thật khó để gỡ lỗi vấn đề cụ thể của bạn (mà không phải với mã bạn đưa ra) mà không thể tái tạo nó và không có tất cả các chi tiết quan trọng này.

3

Tôi đã gặp sự cố tương tự trong cửa sổ 7. Trong trường hợp của tôi, tôi không chạy mã với tư cách Quản trị viên. Đừng hỏi tôi tại sao, nhưng mở một dòng lệnh như quản trị viên đã sửa nó cho tôi.

+0

Đã thử và không hoạt động. Tuy nhiên tôi nghĩ rằng đó là một vấn đề cửa sổ. –

6

sounda.play() trả về một đối tượng cần thiết để phát âm thanh. Với nó, bạn cũng có thể tìm hiểu xem âm thanh vẫn đang phát:

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

Chỉ cần cố gắng lưu lại tệp wav của bạn để đảm bảo thông tin tần suất của nó. Hoặc bạn có thể ghi lại một âm thanh để đảm bảo tần số của nó, bit, kích thước và các kênh truyền hình (tôi sử dụng phương pháp này để giải quyết vấn đề này)

3

Những gì bạn cần làm là một cái gì đó như thế này:.

import pygame 
import time 

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

sounda.play() 
time.sleep (20) 

Các lý do tôi nói với chương trình ngủ là vì tôi muốn một cách để giữ cho nó chạy mà không cần gõ nhiều mã. Tôi đã có cùng một vấn đề và âm thanh không phát bởi vì chương trình đã đóng ngay lập tức sau khi cố gắng phát nhạc.

Trong trường hợp bạn muốn chương trình thực sự làm điều gì đó, chỉ cần nhập tất cả mã cần thiết nhưng đảm bảo mã sẽ đủ dài để phát âm thanh hoàn toàn.

5

tôi không có âm thanh từ chơi mixer.Sound, nhưng nó bắt đầu làm việc sau khi tôi tạo ra cửa sổ, đây là một ví dụ rất nhỏ, chỉ cần thay đổi tên tập tin của bạn, chạy và nhấn UP chìa khóa để chơi:

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

Đối với tôi (trên Windows 7, Python 2.7, PyGame 1.9), tôi thực sự phải loại bỏ lệnh pygame.init() để làm cho nó hoạt động hoặc nếu pygame.init() vẫn tạo ít nhất một màn hình trong pygame.

dụ của tôi:

import time, sys 
from pygame import mixer 

# pygame.init() 
mixer.init() 

sound = mixer.Sound(sys.argv[1]) 
sound.play() 

time.sleep(5) 
+0

'time.sleep (5)' là giải pháp (như được trả lời bởi VagosLabrou). – erik

+0

Wow, cho phép pygame.init() đi giải quyết nó cho tôi. Đáng kinh ngạc! –

1

Tôi nghĩ rằng những gì bạn cần là 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" 
1

Chỉ cần cố gắng:

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" 

này nên làm việc. Bạn chỉ cần thêm print "" và âm thanh sẽ có có thời gian để tải bản thân.

0

Tôi đã có một cái gì đó như thế này xảy ra. Có lẽ bạn có cùng một vấn đề? Hãy thử sử dụng một đường dẫn tuyệt đối:

import pygame 

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

sounda.play() 

đâu abslute_path rõ ràng thay thế bằng đường dẫn tuyệt đối thực tế của bạn;)

chúc may mắn.

0
import pygame 

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

này sẽ làm việc trên python 3

1

5 năm câu trả lời cuối nhưng tôi hy vọng tôi có thể giúp một người nào đó .. :-)

Thứ nhất, bạn không cần phải là "pygame.init()" -hàng. Thứ hai, tạo một vòng lặp và phát âm thanh bên trong đó, nếu không pygame.mixer sẽ bắt đầu và ngừng phát lại ngay lập tức.

Tôi nhận được mã này để hoạt động tốt trên pi Raspberry của tôi với hệ điều hành Raspbian. Lưu ý rằng tôi đã sử dụng vòng lặp trong khi tiếp tục lặp lại thiết bị âm thanh.

import pygame.mixer 

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

while True: 
    sounda.play()