0

현재 8 채널의 오디오 (.wav 파일)를 사운드 카드의 8 채널로 출력 할 수있는 스크립트 작업을하고 있습니다. 내 스크립트는 일종의 일이지만 syncronization 문제가 있습니다. 재생 중에 채널 간의 타이밍이 바뀌 었음을 알게되었습니다. 매우 중요합니다.Python (Sounddevice)의 다중 채널 사운드 동기화 문제

현재 각 소리 채널을 시작하는 스레드를 사용하고 있습니다.

제 질문은 채널/스레드 간의 더 나은 동기화를 달성하는 방법에 대한 제안이 있으십니까? 출력 채널을 매핑 (왼쪽 또는 오른쪽 채널) 할 때 제대로 작동하므로 여전히 sounddevice를 사용하고 싶습니다.

감사합니다.

+0

왜 스레드가 필요합니까? – Matthias

답변

0

다른 스트림을 동기화하는 것은 매우 어렵습니다. 한 번에 하나의 Stream (또는 OutputStream) 개체 만 사용해야합니다. 단일 스트림에서 8 개의 채널을 처리하면 문제가되지 않습니다.

8 채널로 play() 함수를 사용할 수도 있고 8 채널을 처리하는 사용자 정의 콜백 함수를 만들어 Stream 또는 OutputStream에 사용할 수도 있습니다.

UPDATE :

스트림에서 여러 장치를 사용할 수없고, 또한 issue 29 on Github 참조. 다른 호스트 API를 사용해 볼 수 있습니다. 사운드 카드 용 ASIO 드라이버가 있습니까? ASIO를 사용하면 대개 하나의 장치에 여러 채널을 사용할 수 있습니다. 그래도 문제가 해결되지 않으면 PortAudio mailing list에서 질문 할 수 있습니다.

입력 데이터는 채널당 하나의 열이있는 2 차원 NumPy 배열이어야합니다. Stream 클래스의 callback 매개 변수에 대한 설명서를 살펴보십시오.

+0

경험을 공유해 주셔서 감사합니다. 8 개의 다른 스트림을 사용하는 것이 최적이 아니라는 느낌이 들었습니다. 그러나 내 사운드 카드 (Behringer FCA1616)는 4 개의 다른 출력 스테레오 채널로 설치됩니다. 지금은 대신 OutputStream을 사용하려고합니다. 스트림 옵션이있는 버퍼 기반 시스템을 사용하는 것이 더 낫다고 말할 수 있습니까? –

+0

한 가지 더 질문 : 사운드 장치 용 설명서에서 입력 데이터가 스트림에 어떤 형식이어야하는지 확인할 수 없습니까? 각 행에 삽입 된 채널이 포함 된 행렬? –

+0

그리고 여러 장치에 출력해야 할 때 장치 = 1,2,3,4가되어야합니까? –