我对代码还很陌生,所以我试图理解很多东西,如果我不知道的话,很抱歉。我正在运行一个脚本,该脚本侦听多通道(8 通道)Focusrite 18i20 接口(第 3 代)的输入。我正在使用阻塞方法而不是回调方法(我认为)。
Python版本:3.11.4
PyAudio版本:0.2.11
火炬版本:2.1.1+cu118
现在,界面通过界面上的 8 个麦克风通道接收音频(是的,我已经检查过麦克风是否正常工作,并且通过 DAW 运行简单的多输入来获取音频)。
然后,脚本运行并回放/将实时音频传输到笔记本电脑上的立体声耳机端口。它效果很好,但仅适用于通道 1 和 2,不适用于通道 3 至 8。
以下是一些逻辑:
音频流设置:
if read_from_file == True:
wf = wave.open(audio_path, 'rb')
stream = paudio.open(
format=paudio.get_format_from_width(wf.getsampwidth()),
channels=output_format, rate=wf.getframerate(), output=True)
elif read_from_file == False:
istream = paudio.open(format=format_audio, channels=channels, rate=sr,
input=True, frames_per_buffer=input_chunk,
input_device_index=input_device)
stream = paudio.open(format=pyaudio.paInt16, channels=2, rate=sr,
frames_per_buffer=input_chunk, output=True)
直播和回放:
while len(data) > 0 and time.time() < end_time:
if channels == 8:
numpy_data = np.frombuffer(data, dtype=np.int16)
stereo_data = mix_down_to_stereo(numpy_data)
if normalize == False:
data = stereo_data.astype(np.int16).tobytes()
else:
processed_data = compress_and_normalize(stereo_data,
threshold=-0.1, ratio=4.0,
normalize_scale=0.5)
scaled_data = np.int16(processed_data * 32767)
data = scaled_data.tobytes()
stream.write(data)
if read_from_file == True:
data = wf.readframes(chunk)
elif read_from_file == False:
data = istream.read(input_chunk)
关闭音频流:
if read_from_file == True:
wf.close()
stream.close()
paudio.terminate()
我已确保接口上的所有驱动程序都是最新的,并重置接口上的出厂默认设置以确保(然后再次测试音频输入以确保我没有做一些奇怪的事情)。频道 3 到 8 上没有任何声音,这是否有原因? PyAudio 是否兼容多通道支持?
我也尝试过创建一个像这样的简单脚本:
import pyaudio
import wave
FORMAT = pyaudio.paInt16
CHANNELS = 8
RATE = 48000
CHUNK = 1024
RECORD_SECONDS = 5
FILENAME = "test_recording.wav"
audio = pyaudio.PyAudio()
# Start Recording
stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True,
frames_per_buffer=CHUNK)
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
# Stop Recording
stream.stop_stream()
stream.close()
audio.terminate()
# Save the recorded data as a WAV file
wf = wave.open(FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(audio.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
这将输出一个 8 通道文件来收听。当我在 RX10 (iZotope)/Pro Tools 中调出文件时,除了通道 3 到通道 8 上的静默之外什么也看不到。
谢谢大家!
天哪,我是个白痴。我想到了。只需在播放设备设置下的 Windows 设置中将接口格式设置为“8 通道”而不是“2”即可。