Je voudrais jouer différents fichiers wav avec une longueur différente "même temps" indépendamment les uns des autres comme un vrai jeu de batterie.joue plusieurs fichiers wav en même temps, pour boîte à rythmes en Python
J'ai trouvé différentes bibliothèques pour le contrôle audio tels que PyAudio, etc .. Pydub et je pense que le résoudre de ce problème est le filetage .. mais il ne joue pas du tout son
from pydub import AudioSegment
from pydub.playback import play
import thread
def play_sound(f_directory,f_file):
audio = AudioSegment.from_file(f_directory+f_file)
play(audio)
thread.start_new_thread(play_sound,("drum samples/","ride_crash.wav"))
thread.start_new_thread(play_sound,("drum samples/","crash_hi.wav"))
thread.start_new_thread(play_sound,("drum samples/","kick.wav"))
si je modifie ce code à ceci
from pydub import AudioSegment
from pydub.playback import play
import thread
def play_sound(f_directory,f_file):
audio = AudioSegment.from_file(f_directory+f_file)
play(audio)
thread.start_new_thread(play_sound("drum samples/","ride_crash.wav"))
thread.start_new_thread(play_sound("drum samples/","crash_hi.wav"))
thread.start_new_thread(play_sound("drum samples/","kick.wav"))
Il joue seulement le premier.
La raison pour laquelle j'ai utilisé PyDub au lieu de PyAudio est que je pense que l'utilisation de PyDub est beaucoup plus simple, mais peut-être inutile pour cette situation. J'ai également utilisé la superposition, mais le problème avec ça, c'est que tous les fichiers sont lus pour la durée du premier fichier.
Je voudrais savoir, quel est le problème ou s'il vous plaît, laissez-moi savoir s'il y a une meilleure solution, peut-être une autre bibliothèque, mais si possible, je voudrais éviter PyGame ou Pyglet etc ... parce que je pense Cela ralentira mon programme. Sinon, j'attends avec impatience.
La lecture de pydub utilise pyaudio lorsqu'elle est disponible et ffplay comme solution de repli. Les deux sont destinés à une utilisation de débogage rapide et facile, bien que le [mécanisme pyaudio] (https://github.com/jiaaro/pydub/blob/master/pydub/playback.py#L22) _peut être étendu pour une utilisation en production (Je promets, vous ne voulez pas que ffplay pour quelque chose de réel). Fondamentalement, vous feriez seulement les morceaux beaucoup plus petits (comme 10ms si c'est une quantité acceptable de latence, c'est probablement le cas) et combiner tous les signaux audio en cours de lecture 10ms à la fois avant d'écrire dans le flux. – Jiaaro