C++ Raspberry Pi上的Portaudio,找不到输入流的设备

C++ Raspberry Pi上的Portaudio,找不到输入流的设备,c++,raspberry-pi,real-time,audio-streaming,portaudio,C++,Raspberry Pi,Real Time,Audio Streaming,Portaudio,我是Portaudio的新手,我用一个叫做Matrix Creator的设备将它安装在Raspberry Pi上。Matrix Creator使用所有GPIO引脚连接Pi,其上有8个麦克风 我想使用Portaudio来实现实时音频流(在录音时播放声音,或者同时播放麦克风采集的任何声音) 根据,它说我们必须知道inputStream和outputStream的设备Id。我使用函数Pa_GetDeviceCount检查Pi可以检测到什么,代码如下所示: int numDevices = Pa_G

我是Portaudio的新手,我用一个叫做Matrix Creator的设备将它安装在Raspberry Pi上。Matrix Creator使用所有GPIO引脚连接Pi,其上有8个麦克风

我想使用Portaudio来实现实时音频流(在录音时播放声音,或者同时播放麦克风采集的任何声音)

根据,它说我们必须知道inputStream和outputStream的设备Id。我使用函数Pa_GetDeviceCount检查Pi可以检测到什么,代码如下所示:

  int numDevices = Pa_GetDeviceCount();
  cout<<"Device num: "<<numDevices<<endl;
  const PaDeviceInfo * deviceInfo;
  for(int i = 0; i < numDevices; i++){ 
      deviceInfo = Pa_GetDeviceInfo(i);
      cout<<"Device info of "<<i<<"is :"<<deviceInfo;}
问题1

我有没有办法获取矩阵话筒的设备信息

问题2


由于我无法获取输入设备Id,我仍然希望使用缓冲区将从麦克风接收到的数据作为输入流传递,(我可以将麦克风接收到的所有信号放入2D缓冲区,),如何实现实时音频采集和播放??

查看特定的硬件,它似乎不应该作为一个单独的音频接口(以您的典型方式,就像一个外部声卡)。这就是为什么portaudio不会特别识别它的原因

如果您查看链接的代码和矩阵文档,整个软件运行在抽象层(抽象层)之上。这样就可以用C++调用内核模块来读取设备中的值。因此,你可以通过C++中的HAL内核模块访问硬件输入(或者如果你想使用不同的语言,或者更容易的设置,则可以使用更高级别的接口)。 这正是问题所在;通过C++中的内核模块访问麦克风输入!p> 因此:

问题1-有没有办法获取矩阵话筒的设备信息?

如果您可以单独访问每个话筒的设备信息,我会感到惊讶,除非HAL支持这一点(尽管查看后,我在文档中没有看到任何内容)

问题2-由于我无法获取输入设备Id,我仍然希望使用缓冲区将从麦克风接收到的数据作为输入流传递(我可以将麦克风接收到的所有信号放入2D缓冲区、代码),我可以如何实现实时音频采集和播放?

为portaudio设置音频输出是一项非常常见的任务,因此我相信您会在网上找到许多关于如何设置的示例。对于初学者来说,portaudio下载中包含了通过portaudio选择的输出播放浮点数据(正弦波)

然而,对于实时性来说,一般的技术是,当音频输出设备准备好接收更多音频时,它将运行回调函数以返回下一个音频缓冲区。portaudio示例文件夹(即程序)中有更多此类示例

在这个回调函数中,您可以执行任何DSP处理,并根据需要调整信号

请注意: portaudio回调函数可以在中断级别调用,并且将非常快速地搜索新的输入块,因此我不确定这样向portaudio发送音频有多可行(没有极端的缓冲)。但是没有看到哈尔支持的另一种方式


我不确定您打算如何使用即时播放(除了通过波束形成的实时音频,以便您可以听到Alexa/Google Home听到的声音?),我相信此设备不适用于此目的,但我希望这能有所帮助

micarray\u recorder\u direct.cpp是我试图用来获取音频信号的文件。我希望使用“mics.read()”提供的缓冲区。既然我想要无限的实时流,我应该把缓冲区放在哪里?(在main函数内部,并将缓冲区传递给回调函数?或在回调函数内部读取mics?)在portaudio下的示例“paex_sine.c”中,似乎它们在main中生成数据并在回调函数内部传递数据,而回调函数只处理如何传递左右信号。
Device num: -10000