gpt4 book ai didi

linux - 您可以使用 PortAudio 回调来写回流的输入缓冲区吗?

转载 作者:太空宇宙 更新时间:2023-11-04 09:23:23 24 4
gpt4 key购买 nike

在高层次上,我的目标是从一个流中获取麦克风输入,对其进行一些处理,然后将其复制到另一个流中的麦克风输入。后者是我的默认设备,我的其他应用程序(由于我无法控制的原因,无法指定任何其他设备)可以从默认设备记录并仍然获得处理过的输入。

这是我的代码片段:

int stream1_callback(const void *card_capture, void *card_playback, unsigned long frameCount, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData) {
main_t *data = (main_t *) userData;

// UNUSED(card_capture);
UNUSED(card_playback);
UNUSED(frameCount);
UNUSED(timeInfo);
UNUSED(statusFlags);
// UNUSED(userData);

deinterleave_i16_i16(card_capture, data->mic_unprocessed, NUM_MICS, BLOCKSIZE_48KHZ);
printf("De-interleaved!\n");

process_microphones(data->mic_unprocessed, data->mic_processed);
printf("Processed!\n");

return 0;
}

int stream2_callback(const void *inputBuffer, void *outputBuffer, unsigned long frameCount, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData) {
main_t *data = (main_t *) userData;

// UNUSED(inputBuffer);
UNUSED(outputBuffer);
UNUSED(frameCount);
UNUSED(timeInfo);
UNUSED(statusFlags);
// UNUSED(userData);

interleave_i16_i16(data->mic_processed, (int16 *)inputBuffer, 1, BLOCKSIZE_16KHZ);
printf("Interleaved!\n");

return 0;
}

int main() {
// ...

/* -- setup stream1 -- */
err = Pa_OpenStream(&stream1, &stream1InputParams, NULL, 48000, BLOCKSIZE_48KHZ, paNoFlag, stream1_callback, &main_data);
if (err != paNoError) {
goto error;
}

/* -- setup stream2 -- */
err = Pa_OpenDefaultStream(&stream2, 1, 0, paInt16, 16000, BLOCKSIZE_16KHZ, stream2_callback, &main_data);
if (err != paNoError) {
goto error;
}

//...
}

所以我想知道回调的输入缓冲区是否实际上是可写的。或者如果有其他(更好的)方法可以写入另一台设备的输入。

最佳答案

一般情况下,不能写入捕获设备;他们直接进入硬件。

为了能够将您自己的示例数据注入(inject)捕获设备,必须编写其驱动程序以允许这样做。环回驱动程序 snd-aloop 就是这种情况。

关于linux - 您可以使用 PortAudio 回调来写回流的输入缓冲区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com