2010-01-29 54 views
5

câu hỏi nhanh.Tốc độ phát lại âm thanh pygame

Tôi đang chạy pygame dưới linux chỉ để phát một số tệp âm thanh. Tôi có một số tệp .wav và tôi đang gặp sự cố khi phát lại chúng ở tốc độ phù hợp.

import pygame.mixer, sys, time 

#plays too fast 
pygame.mixer.init(44100) 
pygame.mixer.music.load(sys.argv[1]) 
pygame.mixer.music.play() 
time.sleep(5) 
pygame.mixer.quit() 

#plays too slow 
pygame.mixer.init(22100) 
pygame.mixer.music.load(sys.argv[1]) 
pygame.mixer.music.play() 
time.sleep(5) 
pygame.mixer.quit() 

Tôi đã tìm kiếm mã ggogle nhưng có vẻ mọi người đều gọi hàm init với các tham số mặc định của nó. Những người khác có thể thử chạy tập lệnh này và xem liệu họ có nhận được cùng một hành vi hay không? Có ai biết làm thế nào để tăng tốc độ nó? Hoặc điều chỉnh tốc độ cho mỗi tập tin?

Cảm ơn.

Trả lời

2

Mở tệp âm thanh của bạn bằng công cụ âm thanh miễn phí như Audacity. Nó sẽ cho bạn biết tỷ lệ lấy mẫu của phương tiện truyền thông của bạn. Nó cũng sẽ cho phép bạn chuyển đổi thành tỷ lệ lấy mẫu khác nhau để tất cả âm thanh của bạn có thể giống nhau.

+0

nhưng đó là cách duy nhất? –

+0

Không cần thiết. Tôi chắc rằng bạn có thể tìm ra cách nào đó để tính toán tốc độ lấy mẫu của phương tiện đầu vào bằng Python và sau đó định lại mẫu phương tiện thích hợp. Điều này sẽ cho phép bạn xử lý phương tiện truyền thông nước ngoài được cung cấp bởi người dùng của bạn đúng cách. Tuy nhiên, pygame phải phát lại phương tiện với tốc độ nhất quán và tốc độ đó phải phù hợp với tốc độ lấy mẫu của chính phương tiện đó. Không có cách nào xung quanh sự thật đó. – Pace

2

Tôi có một số bản nhạc mp3 phát lại bị chậm lại. Tôi cập nhật tần số trộn phải được dựa trên tỷ lệ mẫu mp3 sử dụng mutagen như vậy:

import pygame, mutagen.mp3 

song_file = "your_music.mp3" 

mp3 = mutagen.mp3.MP3(song_file) 
pygame.mixer.init(frequency=mp3.info.sample_rate) 

pygame.mixer.music.load(song_file) 
pygame.mixer.music.play() 

Và nó cố định vấn đề.

1

Để cải thiện Chris H answer. Dưới đây là ví dụ về cách sử dụng thư viện wave.

import wave 
import pygame 

file_path = '/path/to/sound.wav' 
file_wav = wave.open(file_path) 
frequency = file_wav.getframerate() 
pygame.mixer.init(frequency=frequency) 
pygame.mixer.music.load(file_path) 
pygame.mixer.music.play() 

Hãy nhớ rằng nếu bạn muốn thay đổi frequency hoặc bất kỳ thông số khác được sử dụng trong pygame.mixer.init bạn phải gọi pygame.mixer.quit đầu tiên. Pygame documentation

Các vấn đề liên quan