2010-01-29 3 views
5

domanda veloce.pygame audio velocità di riproduzione

Sto eseguendo pygame sotto linux solo per riprodurre alcuni file audio. Ho alcuni file .wav e ho problemi a riprodurli alla giusta velocità.

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

Ho codice ggogle cercato un po 'di roba, ma tutti sembrano andare bene chiamare la funzione init con i suoi parametri di default. Altri possono provare a eseguire questo script e vedere se ottengono lo stesso comportamento o no? Qualcuno sa come accelerarlo? O regolare la velocità per ogni file?

Grazie.

risposta

2

Apri il file audio in uno strumento audio gratuito come Audacity. Ti dirà la frequenza di campionamento dei tuoi media. Ti consentirà inoltre di convertire una frequenza di campionamento diversa in modo che tutti i tuoi suoni possano essere uguali.

+0

ma è l'unico modo? –

+0

Non necessariamente. Sono sicuro che potresti trovare un modo per calcolare la frequenza di campionamento del supporto di input in Python e quindi ricampionare i media in modo appropriato. Ciò consentirebbe di gestire correttamente i supporti stranieri forniti dagli utenti. Tuttavia, pygame deve riprodurre i contenuti multimediali ad una velocità costante e tale frequenza deve corrispondere alla frequenza di campionamento del supporto stesso. Non c'è modo di aggirare questo fatto. – Pace

2

Ho rallentato alcune tracce audio mp3. Ho aggiornato la frequenza mixer ad essere basato sul sample rate MP3 utilizzando mutagen in questo modo:

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

Ed è risolto il problema.

1

Per migliorare Chris H answer. Ecco un esempio di come utilizzare la libreria 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() 

Ricordate che se si desidera modificare frequency o qualsiasi altro parametro utilizzato in pygame.mixer.init è necessario chiamare pygame.mixer.quit prima. Pygame documentation