2017-03-09 13 views
3

실제 드럼 세트처럼 서로 다른 길이의 "다른 시간"으로 서로 다른 wav 파일을 재생하고 싶습니다.은 동시에 여러 개의 wav 파일을 재생합니다. Python의 드럼 머신

나는 그런 등 PyAudio, Pydub .. 오디오 제어를위한 다른 라이브러리를 발견하고 나는이 스레딩되어이 문제를 해결할 생각 ..하지만 난 수정하면이 모든

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

에서 소리를 재생하지 않습니다 이 코드를

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

첫 번째 것만 재생합니다.

내가 PyAudio 대신 PyDub를 사용한 이유는 PyDub를 사용하는 것이 훨씬 쉽지만이 상황에서는 쓸모가 없을 것이라고 생각합니다. 오버레이도 사용했지만 문제는 첫 번째 파일의 지속 시간 동안 만 모든 파일이 재생된다는 것입니다.

제가 궁금한 점은 무엇이 문제인지 또는 더 나은 해결책이 있는지, 다른 라이브러리가 있는지 알려주십시오. 가능한 경우 PyGame 또는 Pyglet 등을 피하고 싶습니다. 내 프로그램 속도가 느려집니다. 그렇지 않다면, 나는 그것을 고대합니다.

+0

pydub의 재생은 가능한 경우 pyaudio를 사용하고 대체 장치로 재생합니다. 둘 다 빠르고 편리한 디버깅을 목적으로합니다. [pyaudio 메커니즘] (https://github.com/jiaaro/pydub/blob/master/pydub/playback.py#L22) _ 프로덕션 용으로 확장 할 수 있습니다 _ (나는 약속한다, 너는 진짜를 위해 ffplay을 원하지 않는다). 기본적으로 청크를 훨씬 작게 만들 수 있습니다 (대기 시간이 허용되는 경우 10ms와 같을 것입니다.) 스트림에 쓰기 전에 현재 재생중인 모든 오디오 신호를 한 번에 10ms 씩 결합합니다. – Jiaaro

답변

1

멀티 스레딩 솔루션이 아니기 때문에 지금까지의 내가 PyDub가 사용하는 단일 스트림으로 제한됩니다 모든 재생 방법을 알고있는 유일한

내가, 당신은 결국 더 저수준 API를 사용해야 될 것 같아요 동시에 여러 개의 오디오 채널을 열 수 있습니다. 아마도 당신은 같은 Pyaudio 컨텍스트에서 여러 스트림을 열어 pyaudio로 할 수 있습니다.

나는 다른 경로를 직접 택했습니다. 모든 샘플을 단일 출력 스트림으로 재생되는 단일 출력 샘플로 혼합합니다.

+0

그래서 드럼/심벌즈마다 다른 스트림을 열어야 하나의 출력으로 믹스됩니까? – bence1971387

+0

또는 샘플 자체? 그렇다면, 그들은 여전히 ​​충분히 제어 가능합니까? – bence1971387

+0

샘플 데이터를 하나의 단일 출력 스테레오 샘플로 직접 믹스하여 단일 오디오 출력 스트림으로 재생합니다. "제어 가능"이란 무엇을 의미합니까? 믹싱을하는 방법에 전적으로 달려 있다고 생각합니다. 필자는 파이 오디오를 통해 별도의 출력 스트림을 재생하는 방법을 살펴볼 것을 권합니다. –