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

时间:2018-07-10 20:21:56

标签: python audio pc soundcard

我想知道如何使用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

但是使用这种方法,我一次只能获得一个信号(流),并且我需要同时获得两个信号(两个“流”)。

谢谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这似乎是您唯一的问题,就是您仅指定一个频道!

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代码here

答案 1 :(得分:0)

我能够解决将列表一分为二并更改library(stringr) string <- c("Y: 10 ,W: 3 , cp: 0.05","Y: 4 ,W: 9 , cp: 2.2") vec <- t(str_split(str_split(string, " ,", simplify = TRUE), ": ", simplify = TRUE)[,2]) mtx = matrix( vec, nrow = length(vec)/3, ncol = 3) colnames(mtx) <- c("Y","W","cp") mtx

如果CHANNELS=2是我从pyaudio函数获得的列表, signal是一个频道,signal[::2]]是另一个频道。

下面有一个例子:

signal[1::2