使用 Python 从不同的 PC 声卡通道获取信号
Get signal from different PC sound card channels using Python
我想知道如何使用 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 代码 here。
我能够解决将列表一分为二并更改 CHANNELS=2
如果signal
是我从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
我想知道如何使用 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 代码 here。
我能够解决将列表一分为二并更改 CHANNELS=2
如果signal
是我从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