Linux PCでUSBサウンドカードを設定するためにALSAを学び、設定ファイルの作成を始めました。多くの努力の後、ついに1つを作成して実行することができました。.asoundrc
マイホームフォルダに保存した内容は次のとおりです。
pcm.!default {
type plug
slave {
pcm "hw:1,0"
}
}
ctl.!default {
type hw
card 1
}
pcm_slave.maudiomtrackeight1 {
pcm "hw:1,0"
channels 8
rate 44100
buffer_size 4096
period_size 1024
}
pcm.outch1 {
type dshare
ipc_key 1111
slave maudiomtrackeight1
bindings [ 0 ]
hint.description "M-Audio M-Track Eight output/playback channel 1"
}
pcm.inch1 {
type dsnoop
ipc_key 1111
slave maudiomtrackeight1
bindings [ 0 ]
hint.description "M-Audio M-Track Eight input/capture channel 1"
}
pcm.outch2 {
type dshare
ipc_key 1111
slave maudiomtrackeight1
bindings [ 1 ]
hint.description "M-Audio M-Track Eight output/playback channel 2"
}
pcm.inch2 {
type dsnoop
ipc_key 1111
slave maudiomtrackeight1
bindings [ 1 ]
hint.description "M-Audio M-Track Eight input/capture channel 2"
}
pcm.outch3 {
type dshare
ipc_key 1111
slave maudiomtrackeight1
bindings [ 2 ]
hint.description "M-Audio M-Track Eight output/playback channel 3"
}
pcm.inch3 {
type dsnoop
ipc_key 1111
slave maudiomtrackeight1
bindings [ 2 ]
hint.description "M-Audio M-Track Eight input/capture channel 3"
}
pcm.outch4 {
type dshare
ipc_key 1111
slave maudiomtrackeight1
bindings [ 3 ]
hint.description "M-Audio M-Track Eight output/playback channel 4"
}
pcm.inch4 {
type dsnoop
ipc_key 1111
slave maudiomtrackeight1
bindings [ 3 ]
hint.description "M-Audio M-Track Eight input/capture channel 4"
}
pcm.outch5 {
type dshare
ipc_key 1111
slave maudiomtrackeight1
bindings [ 4 ]
hint.description "M-Audio M-Track Eight output/playback channel 5"
}
pcm.inch5 {
type dsnoop
ipc_key 1111
slave maudiomtrackeight1
bindings [ 4 ]
hint.description "M-Audio M-Track Eight input/capture channel 5"
}
pcm.outch6 {
type dshare
ipc_key 1111
slave maudiomtrackeight1
bindings [ 5 ]
hint.description "M-Audio M-Track Eight output/playback channel 6"
}
pcm.inch6 {
type dsnoop
ipc_key 1111
slave maudiomtrackeight1
bindings [ 5 ]
hint.description "M-Audio M-Track Eight input/capture channel 6"
}
pcm.outch7 {
type dshare
ipc_key 1111
slave maudiomtrackeight1
bindings [ 6 ]
hint.description "M-Audio M-Track Eight output/playback channel 7"
}
pcm.inch7 {
type dsnoop
ipc_key 1111
slave maudiomtrackeight1
bindings [ 6 ]
hint.description "M-Audio M-Track Eight input/capture channel 7"
}
pcm.outch8 {
type dshare
ipc_key 1111
slave maudiomtrackeight1
bindings [ 7 ]
hint.description "M-Audio M-Track Eight output/playback channel 8"
}
pcm.inch8 {
type dsnoop
ipc_key 1111
slave maudiomtrackeight1
bindings [ 7 ]
hint.description "M-Audio M-Track Eight input/capture channel 8"
}
ほとんどの概念は理解できますが、次の内容は理解できません。
channels
:オーディオチャンネル番号を表すのですか?私が使うように単核球症またはステレオ?私のサウンドカードに8つの入力ポートと8つの出力ポートがあるとします。単核球症構成を16 - 8入力+ 8出力、または8 - 8入力出力ペアに設定する必要があります(使用する場合)。ステレオ構成では、値を8 - 4入力+ 4出力または4 - 4入力 - 出力ペアに設定する必要がありますか?buffer_size
:待ち時間を減らすためにこれらのサイズを減らす必要があること以外は何も知りません。これはどういう意味ですか?period_size
:これもやはりレイテンシーと関係がありますか?bindings
:これらのマッピングチャネルはポートにありますか? ~のため単核球症私が使用する構成[ <index_number> ]
。私は[ <index_number1> <index_number2> ]
利用できるステレオ構成図?ipc_key
:同じスレーブで定義されているすべてのPCMデバイスに同じ一意の番号が割り当てられていることがわかります。スレーブとして検出された新しいサウンドカードを追加し、上記とhw:2,0
同じ方法でPCMデバイスを定義し続けると仮定すると、新しいスレーブデバイスで定義された各PCMデバイスに異なる値(2222など)を割り当てる必要がありますか?
残りを見つけるためにいくつかの実験を試してみることができますが、まだ明確ではありません。チュートリアルが多くなく、良い公式ALSA文書が不足しているという事実は役に立ちません。誰かがこれを説明できますか?
答え1
部分的な答え:
まず、M-Trackの構成を作成する必要が全くない可能性が高いと申し上げたいと思います。実際の設定方法はあなたの分け前です。いいえほとんどの場合、予想されるもの:各チャンネルを別々のデバイスに設定しました。つまり、バンドの演奏を同時に録音しようとすると、各チャンネルが別々に処理されるため、チャンネル(バンドメンバー)間でランダムなオフセットが発生する可能性があります。したがって、通常、8チャンネルすべてを別々のトラックに録音し、適切に同期して編集します。
音楽を再生するためにホームHi-Fiシステムを接続したい場合も同様です。独立したデバイスではなく、左/右/中央/サブウーファー/リアなどの同期チャンネルが必要です。
私が考えることができる唯一の状況は、何らかの理由で各チャンネルが別の部屋のスピーカーに接続されており、各チャンネルを介して別の音楽を再生したい場合は、別々のデバイスを作成するのが合理的でしょうか?
さらに、最新のALSAはデフォルトでハードウェアデバイスの上にプラグインをdshare
自動的に提供するため、dsnoop
これを明示的に指定する必要はありません。
つまり、説明は次のようになります。
channels
:同時に録画/再生されるチャンネル数。 1つはモノラル、2つはステレオ、8つはカード用です。入力と出力は別々に計算されるため、8つの入力と8つの入力チャンネルの場合は「8つのチャンネル」と言えます。デバイスの設定inch
方法に応じて、各デバイスのエントリを作成する必要がoutch
あります。channels 1
bindings
:デバイスからバインドされたデバイスのチャンネルをデバイスのチャンネルにマッピングします。上部にプラグインを配置して、元のデバイスの左右のチャンネルを変更したいとしますbindings { 0 1 1 0 }
。ipc_key
:dmix
、、プラグインを使用dshare
するとdsnoop
、複数のクライアントが単一のソース/シンクと通信できます。この通信はこのキーを介して行われます(IPC =プロセス間通信)。したがって、1つのサウンドカードに複数のプラグインがあるか、各サウンドカードに1つのプラグインがあるかに関係なく、各プラグインに異なるキーが必要です。それ以外の場合は問題が発生します。buffer_size
: オーディオデータは、いわゆるバッファ、つまり複数のサンプルを保存するために使用されるRAMブロックに保存され転送されます。この値を高く設定すると、処理前に大量のデータが保存されるため、遅延時間が長くなります。非常に低く設定すると、処理オーバーヘッドが原因で次のデータが入出力される前にすべてのデータが処理されず、オーディオドロップアウトが発生します。period_size
:全く分からない。
すべてのALSA PCMプラグインも説明されています。ここ詳細。
自分がしていることを本当に知らない限り、buffer_size
周りをめまいません。period_size
待ち時間が重要な場合(たとえば、ライブパフォーマンスでコンピュータを使用したい場合)、最初にすべきことはPulseaudioを削除してすべてのオーディオにjackd
使用することです。場合のみまだ大きな遅延時間の問題が発生した場合は、他の値を試してみてくださいbuffer_size
。
答え2
この記事バッファと期間の関係の簡単な説明は次のとおりです。
サウンドカードには、録音されたサンプルを保存するハードウェアバッファがあります。バッファが充分に冷えたら【サウンドカード? ] 割り込みが発生します。その後、カーネルサウンドドライバは直接メモリアクセス(DMA)を使用してサンプルをメモリ内のアプリケーションバッファに転送します。 [...] バッファーは非常に大きくなる可能性があり、1 回の操作で転送すると、待機時間と呼ばれる許容できない遅延が発生する可能性があります。この問題を解決するために、ALSAはバッファを一連のサイクル(OSS / Freeではフラグメントと呼びます)に分割し、データをサイクルに転送します。
これは次のように聞こえます:
- オーディオサンプルはバッファに保存されます。
- カーネルはオーディオサンプルをバッファからアプリケーションメモリにコピーします。
- バッファが大きすぎて1つのコピーに転送できません(遅延が発生しました)。
- バッファは
period
sと呼ばれるフラグメントにコピーされます。
記事は以下を提供します。チャート。