Focusrite 18i20 无法识别 PyAudio 多通道

问题描述 投票:0回答:1

我对代码还很陌生,所以我试图理解很多东西,如果我不知道的话,很抱歉。我正在运行一个脚本,该脚本侦听多通道(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 上的静默之外什么也看不到。

谢谢大家!

python audio streaming playback pyaudio
1个回答
0
投票

天哪,我是个白痴。我想到了。只需在播放设备设置下的 Windows 设置中将接口格式设置为“8 通道”而不是“2”即可。

© www.soinside.com 2019 - 2024. All rights reserved.