PulseAudio / ALSAを使用して物理入力デバイスを複数の仮想入力デバイスに分割する方法は?

PulseAudio / ALSAを使用して物理入力デバイスを複数の仮想入力デバイスに分割する方法は?

したがって、オーディオインターフェイスごとに18の入力チャンネルがあります。これらのデバイスのデータは、PortAudioというライブラリを使用するC ++プログラムを介して提供されます。問題は、デバイスごとに13以上のチャネルを受信し始めると、単一の機能を使用しているように見える負荷をpaInputOverflow処理できないため、問題が発生し始めることです。recordCallback(空のコールバック関数を試してみましたが、まだpaInputOverflow問題が発生したため、コードには関係ありません。)

まず、使用するチャンネルを選択してチャンネルを分割し、別のコールバックに別のチャンネルを処理させる方法があると思いました。しかし、これはMacCoreとASIOでのみサポートされているようで、ALSAを使用しています。

第二に、私の考えは、入力チャンネルを2つのデバイスに分割することでした。デフォルトでは、最初の9つのチャネルには1つの仮想デバイスを使用し、残りの9つのチャネルには2番目の仮想デバイスを使用しました。

私は試してみましたが、pactl load-module module-remap-sourceリマップを作成しましたが、PortAudioで別の入力「デバイス」として検出できませんでした。また、/etc/asound.conf次のように編集して分割してみてください。

次のように使用してください。

pcm_slave.firstdevice {
    pcm "hw:5,0"
    channel 18
}

pcm.firsthalf {
    type plug
    slave.pcm {
         type dsnoop
         ipc_key 12345
         slave firstdevice
         bindings [ 0 1 2 3 4 5 6 7 8 ]
    }
}

pcm.secondhalf {
    type plug
    slave.pcm {
         type dsnoop
         ipc_key 12345
         slave firstdevice
         bindings [ 9 10 11 12 13 14 15 16 17 ]
    }
}

残念ながら、これはまったく機能しません。私が何か間違っていると思います。しかし、この時点で私は何も考えていませんでした。どんな助けでも大変感謝します。

PS:私が使っている特定のディストリビューションはUbuntu 18.04です。

答え1

"hw:5,0"別名でカードを参照しないでください"hw:M-Audio18"。たとえば、次のようにエイリアスを取得できます。 aplay -l

関連情報