2017-12-25 55 views
0

저는 PyAudio와 오디오 조작법에 익숙하지 않아서 이것이 답을 찾지 못했습니다. PyAudio는 채널 맵을 통해 다른 채널에 사운드를 보낼 수있는 옵션을 제공하지만, 어떻게해야합니까? 다른 채널들이 컴퓨터/파이썬에 연결되어 있습니까?PyAudio에서 사용할 여러 오디오 출력 채널을 연결하는 방법은 무엇입니까?

예를 들어 블루투스 스피커를 페어링하여 내 컴퓨터의 내부 스피커를 하나의 채널로, 블루투스 스피커를 두 번째로 간단하게 사용할 수 있습니까?

(궁극적으로 내가 2 개 개의 다른 출력을 동시에하지만, 별도로 2 개 .WAV 파일을 재생하고 싶습니다. 그것에 대해 의견을, PyAudio보다 개방이 일을 더 쉬운 방법도 있다면!)

감사합니다 너의 도움으로! :)

답변

0

나는 이것이 sounddevice을 사용하여 가능할 수 있다고 생각합니다. 설치 세부 사항은 링크를 참조하십시오.

sounddevice 여기 sd.query_devices()

>>> print sd.query_devices() 
    0 Microsoft Sound Mapper - Input, MME (2 in, 0 out) 
> 1 Jack Mic (IDT High Definition A, MME (2 in, 0 out) 
    2 Microphone Array (IDT High Defi, MME (2 in, 0 out) 
    3 Microsoft Sound Mapper - Output, MME (0 in, 2 out) 
< 4 Speakers/Headphones (IDT High, MME (0 in, 2 out) 
    5 Communication Headphones (IDT H, MME (0 in, 2 out) 

장치 ID (4)를 이용하여 다양한 입력/출력 오디오 장치를 나열하는 쉬운 방법을 제공하는 출력 장치 (스피커)이다. 나는 bluetooth을 구성하지 않았습니다. 하지만 가지고 있다면 목록에 표시되어야합니다.

모두 출력 장치가 나열되면, 당신은 단순히 sounddevice 재생이 진행되는 동안 IO 차단의 제한이 sd.play(data_array, sampling_frequency, device=device_id_)

동안 사용하여 리디렉션 할 수 있습니다, 나는 그것이 스레딩의 사용에 의해 극복 될 수 있다고 생각합니다.

참고 : 다음 코드는 두 가지 다른 장치에서 테스트되지 않습니다. 작동하는지 알려주세요.

import sounddevice as sd 
import soundfile as sf 
import threading 
from threading import Thread 

def audioFunc1(): 
    audio1 = "audio1.wav" 
    data1, fs1 = sf.read(audio1, dtype='float32') 
    sd.play(data1, fs1, device=3) #speakers 

def audioFunc2(): 
    audio2 = "audio2.wav" 
    data2, fs2 = sf.read(audio2, dtype='float32') 
    sd.play(data2, fs2, device=10) #headset 

if __name__ == '__main__': 
    Thread(target = audioFunc1).start() 
    Thread(target = audioFunc2).start()