使用Python从不同的PC声卡通道获取信号



我想知道如何使用Python从不同通道的PC声卡中获取信号。在一个通道中,我想得到一个简单的信号,比如正弦波,从另一个通道,我想获得一个方波。

我知道我可以使用像这样的pyaudio获得信号

FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 1024
p = pyaudio.PyAudio()
stream = p.open(
format=FORMAT, 
channels=CHANNELS, 
rate=RATE, input=True,
frames_per_buffer=CHUNK) #I get one signal

但使用这种方法,我一次只能得到一个信号(流(,并且我需要得到两个同时的信号(两个"流"(。

<嘿>

看起来你在这里唯一的问题是你只指定了一个频道!

FORMAT = pyaudio.paInt16
CHANNELS = 1 # Change this to 2 !!!
RATE = 44100
CHUNK = 1024
p = pyaudio.PyAudio()
stream = p.open(
format=FORMAT, 
channels=CHANNELS, 
rate=RATE, input=True,
frames_per_buffer=CHUNK) #I get one signal

只需将指定通道的行更改为:

CHANNELS = 2

然后您将收到2个声道的音频:-(

如果你的音频接口有足够的输入,你可以增加这个数字,一次录制更多的频道。

编辑1:

这将允许您读取2个传入音频流,例如:

frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print "finished recording"

然后您的data(2个阵列,2个通道输入(将存储在frames阵列中。

有关完整的2通道示例,请参阅此处的git托管Python代码。

我能够解决将列表一分为二并更改CHANNELS=2的问题

如果CCD_ 4是我从pyaudio函数获得的列表,signal[::2]是一个信道,而signal[1::2]是另一个信道。

下面有一个例子:

sinal = np.frombuffer(stream.read(CHUNK, exception_on_overflow=False), np.int16)
sinal[::2] #from channel 1 for exemple
sinal[1::2] #from channel 2 for exemple

最新更新