ALSAまたはPulseAudioを使用してステレオソースを8チャンネルPCMに再マップし、ボリュームを減らすにはどうすればよいですか?

ALSAまたはPulseAudioを使用してステレオソースを8チャンネルPCMに再マップし、ボリュームを減らすにはどうすればよいですか?

私の設定の詳細は次のとおりです。

Intel HDカード(card0)が内蔵されており、既存のすべてのアプリケーションがデフォルトで使用されています。通常、ステレオ出力はステレオファイルとストリーミングアプリケーションからカードに出力されます。

これで、USBサウンドカード(カード1:XMOSのxCORE-200)を追加し、8つの出力(4つのTwitter、4つのスピーカー)の非標準配列を持っています。対称型なので左側にツイッター2個/スピーカー2個、右側にツイッター2個/スピーカー2個があります。チャネル配列は次のとおりです。

[0, 1, FrontRightTweeter, RearRightTweeter, LeftRearTweeter, LeftFrontTweeter, 6, 7, 8, 9, RightFrontSpeaker, RightRearSpeaker, LeftRearSpeaker, LeftFrontSpeaker, 14, 1

クロスオーバーはすでに処理されているので、左側がまったく新しい左側に行き、右側がまったく新しい右側に入るようにすべてのステレオソースを再マッピングしたいと思います。

また、手動テストでは常に音量を大幅に(約90%)下げ、新しいスピーカーの設定に適したレベルに達する必要がありました。だから私はこれを即座にすることができるはずです。

.asoundrcとPulseAudioモジュールを介してALSAを使用するいくつかの例を見てみましたが、すべての部分をうまく接続できないようです。特に少ないチャンネルソースからより多くのチャンネルソースへ(通常その逆)。私はあなたが望むチャンネルの再マッピングと音量の減少を達成するためのサンプル.asoundrcまたはPulseAudioモジュールの設定(どちらの方が合理的なもの)を探しています。ありがとうございます!

答え1

これはプラグインに統合されたプラグインttableオプションを介して可能です。routeplug

pcm.MyLittleDevice {
    type plug
    slave {
        pcm "hw:1"
        channels 16
    }
    ttable [
        [ 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 ]
        [ 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 ]
    ]
}

ボリュームを減らすには、1sを小さい値に置き換えます。

答え2

@CLさんありがとうございます。 、これが私が思いついた解決策です:

pcm.xcoreremapped {
    type plug
    hint {
        show on
        description "Remapping stereo to 8-ch speaker array."
    }
    slave {
        pcm "hw:1,0"
        channels 16
    }
    ttable [
        [ 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 ]
        [ 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 ]
    ]
}

0.05 は各チャンネルの音量レベルを希望の位置に減らします。設定を簡単にするために、すべてのチャンネルを再マップしました。正しくマッピングすることを心配する必要はなく、潜在的なパフォーマンスの影響を監視しますが、未使用のチャネルを再マッピングしても何の害もないようです。

関連情報