web-dev-qa-db-ja.com

ALSAの設定方法は?

UnityからXFCEに切り替えた後、サウンド構成で問題が発生しました。システムに複数のサウンドカードがあります。使用したいのは、カーネルによって最後にロードされるサウンドカードです。 ALSAはデフォルトで最初のものを使用しているようです。

さらに、複数のアプリケーションで同時にサウンドを使用することはできません。「サウンドデバイスが使用中です」などのエラーが発生します。ALSAアーキテクチャ、プローブするために使用する必要のあるツールに関する洞察を誰かに教えてもらえますか?システムと構成ファイルの構造化方法に関するアドバイス。

5
Gearoid Murphy

システム全体の構成ファイルは「/etc/asound.conf」に保存され、すべてのALSA準拠アプリケーションは起動するたびにこのファイルを読み取ります。現在のサウンドデバイスの感覚をつかむのに最適な場所は、ここ「/ proc/asound /」です。設定ファイルがない場合、ALSAアプリケーションはデフォルトのサウンドデバイスとして/ proc/asound/card0を使用します。ここで実行しているALSAのバージョンを確認できます '/ proc/asound/version'。

各サウンドデバイスには、多数の「pcms」が関連付けられています。各pcmは基本的に出力チャネルです: "front"、 "rear"、 "surround41"、 "surround51"など。次のコマンドを使用して、使用可能なpcmチャネルを確認できます。

aplay -L | grep CARD

これらのpcmチャネルのいくつかは、物理オーディオ出力に対応していませんが、ALSAによって提供されるソフトウェアチャネルです。私たちが興味を持っているのは「dmix」と呼ばれるものです。 「dmix」チャネルは、ALSAが提供するソフトウェアミキサーで、複数の同時入力ストリームを処理します。

注意すべきことの1つは、特定のサウンドデバイスを識別するための複数の規則の使用です。構成ファイルはcard0、card1など、または単に0、1などを使用します。Creative、Nvidiaなどの名前でカードを参照することもできます。これらの名前はALSAprocディレクトリでソフトリンクとして定義されています。 'ls -l/proc/asound'。通常、構成ファイルでPCMチャネルを参照する場合、形式は次のとおりです: "channel-name:card-index、sub-index"。したがって、たとえば、「dmix:2,0」は、カード2、サブデバイス0のdmix pcmチャネルを指します。次のコマンドを使用すると、各サウンドカードに関連付けられているサブデバイスが表示されます。

aplay -l

最後のステップは、「/ etc /asound.conf」にある構成ファイル自体です。このファイルには、「pcm」チャネル定義と「ctl」チャネル定義の2つのコンポーネントが必要です。 'pcm'チャネルは出力を定義し、複数のサウンドストリームを単一のハードウェア出力チャネルに多重化する役割を果たします。 'ctl'チャネルはミキサーに使用され、ボリュームの制御を担当します。

ALSAは、多重化を処理する「プラグ」と呼ばれるソフトウェアpcmチャネルを使用します。これは、スレーブpcm出力チャネル用のソフトウェアフロントエンドです。スレーブのpcm出力チャネル自体がミキシング可能である必要があります。構成ファイルの例は次のとおりです。

pcm.custom
{
    type plug
    slave
    {
        pcm "dmix:2,0"
    }
}

ctl.custom
{
    type hw
    card Creative
}

pcm.!default pcm.custom
ctl.!default ctl.custom

この例では、システム「dmix:2,0」の3番目のサウンドデバイスに「dmix」出力チャネルを使用しています。 3番目のインデックスは0から始まるため、2です(card0、card1、card2)。さらに、「ctl」スキーマは同じカードを参照しますが、今回はソフトリンクされた名前「Creative」を使用します。

これが他の人にも役立つことを願っています。

13
Gearoid Murphy