【问题标题】:Is it possible to process two microphones input in real time using DSP System Toolbox(MATLAB)?是否可以使用 DSP System Toolbox(MATLAB) 实时处理两个麦克风输入?
【发布时间】:2015-09-29 10:59:21
【问题描述】:

我一直在尝试使用数字系统处理系统工具箱来实现主动降噪 (ANC) 系统。我也使用过dsp.AudioRecorderdsp.AudioPlayer。这是我的初始化代码:

mic_reference = dsp.AudioRecorder('NumChannels',1);
mic_reference.DeviceName='ASIO4ALL v2'; 
mic_error = dsp.AudioRecorder('NumChannels',1);
mic_error.DeviceName='ASIO4ALL v2';
sink1_2 = dsp.AudioPlayer;
sink1_2.DeviceName='ASIO4ALL v2';

我为每个麦克风拨打step(frame)。我收到一个错误提示

使用 AudioRecorder/step 时出错 给定的音频设备只能打开一次。

是 DSP 系统工具箱的限制是一次只能在一个录音机设备上操作,还是一次可以使用两个录音机设备?

有规定对同一音频设备进行多声道处理,但是如何实时处理来自两个独立设备的音频?

【问题讨论】:

    标签: matlab audio signal-processing noise-reduction


    【解决方案1】:

    查兰塞,

    这不是 DSP System Toolbox 的限制,而是 ASIO 驱动程序的行为。 ASIO 驱动程序授予对应用程序播放或录制的独占访问权限。因此,第二个对象试图重新使用相同的设备进行记录,从而导致错误。

    在您的情况下,如果您的参考信号是通道 1,错误信号是通道 2,则您需要记录 2 个通道的数据,而不是使用两个记录器对象。

    har = dsp.AudioRecorder('NumChannels', 2);
    har.DeviceName = 'ASIO4ALL v2';
    hap = dsp.AudioPlayer;
    hap.DeviceName = 'ASIO4ALL v2';
    data = step(har);
    refData = data(:, 1);
    errData = data(:, 2);
    outData = doSomething(refData, errData);
    step(hap, outData);
    

    希望这会有所帮助。

    点菜

    【讨论】:

    • 谢谢你,Dinesh。我认为这是 ASIO 驱动程序的问题。现在我将音频驱动程序更改为“Direct Sound”,并且可以为两个麦克风提供两个不同的设备名称并同时处理它们。因此,DSP 系统工具箱不能处理两个音频输入是不正确的。但是如何控制 ASIO 驱动程序授予独占访问权限(假设它是比 'Direct Sound' 稳定的驱动程序)?
    • 你能解释一下如何映射两个通道(左通道到一个设备,右通道到另一个设备)。我无法理解您在上面的代码中在做什么,您正在使用一个录音机(麦克风)并将其两个立体声(左和右)输入处理为两个数据(参考,错误)。图片中的第二个麦克风在哪里?
    • DirectSound 和 ASIO 有不同的用途。 ASIO 主要用于低延迟应用程序,而 DirectSound。 DirectSound 创建应用程序与之对话的虚拟设备层。每个应用程序都与这个虚拟层而不是实际的物理设备进行通信。在播放过程中,如果两个应用程序尝试将两种声音播放到同一个输出,DirectSound 将负责混音,这会增加延迟。因此,驱动程序模型的选择取决于您的应用程序的目的
    • 我不完全清楚您要记录多少信号。如果您使用两个记录器对象,我假设您需要两个输入信号。
    • 使用 DirectSound 我有 1.2 秒的音频延迟,没有任何额外的处理只是“dspStreamingPassthrough”。使用 ASIO 可以减少多少?将脚本转换为 MEX 文件会影响处理时间吗?
    【解决方案2】:

    当您记录信号时,您应该从 2 个麦克风(每个称为通道/观察 - 即左右通道)进行记录,并且您应该将这两个观察组合成一个流,然后再将其传递给 Matlab,您应该只将 1 个双通道信号输入传递到 dsp AudioRecorder 工具箱 - 它不接受我不认为的两个来源。当您读入数据时,它应该是 2 个向量的矩阵(假设您在 AudioRecorder 设置中指定了 2 个通道)。

    【讨论】:

    • 感谢回复。实际上在主动降噪中,我会使用两个不同的麦克风(参考和错误)和一个扬声器,所有这些都应该实时处理。我不是在谈论两个通道(左和右)处理。所以,不可能用dsp AudioRecorder实时处理两个麦克风和一个扬声器..!是否有可能使用单个录音机来处理来自一个麦克风(参考)的一帧和来自另一个麦克风(错误)的下一帧。所以,我可以处理一些滞后的数据。
    • 你有两个立体声麦克风吗?否则,您可以将一个麦克风连接到左声道,将另一个麦克风连接到右声道,然后同时读取两者。
    • 正如@hbaderts 所说,两个麦克风应该形成一个实时数据流。
    • @hbaderts 如何将通道映射到不同的音频设备? (左声道到一个麦克风,右声道到另一个麦克风)?
    • @GameOfThrows 现在我将音频驱动程序从 ASIO 更改为“Direct Sound”,并且能够通过两个不同的名称识别两个 Audiorecorder 对象并在线处理它们。 !
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2023-01-31
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 2013-06-09
    相关资源
    最近更新 更多