web-dev-qa-db-ja.com

LinuxでS / PDIF入力とPCM出力をミックスする方法(PCMとS / PDIFを同時に聞くため)?

Alsamixerでは、PCMOutまたはIEC958In(これが私のS/PDIF入力)のいずれかを選択できますが、両方を選択することはできません。解決策はありますか?

注:ステレオサウンドが必要なため、一方のチャンネルにIEC958 Inを選択し、もう一方のチャンネルにPCMOutを選択することはできません。

OSS4も試しましたが、同じです。S/ PDIF入力とPCM出力を同時に聞くことはできません。明らかな何かが欠けているような気がします。助けていただければ幸いです。

これが必要な理由は次のとおりです。2台のコンピューターがあり、両方を使用しています。ただし、セカンダリコンピュータを十分に活用するには、alsamixerで手動でチャネルを切り替えずにその音を聞く必要があります(はい、スクリプトを記述してショートカットに割り当てることは可能ですが、これでは問題は解決しません)。

2
Lissanro Rayen

私はついに解決策を見つけました。私は多くのことを試みましたが、他のすべての構成/方法は私に悪い音を与えるか、実際には同じように機能しましたが、より複雑でした。それで、私はここで私のために働いた最も簡単な解決策を与えます(そして少なくとも何人かの人々のために働く可能性が高いいくつかの代替案に言及します)。私はDebianテストを使用しているので、私が言及するいくつかのことはDebian固有のものです。他のディストリビューションでも同じことをするのはそれほど難しいことではありません。

JACKをインストールします

apt-get install qjackctl jackd2

ALSAを構成します

次のコマンドを実行します。Sudoapt-getinstalllibasound2-pluginsここに my /etc/asound.conf 、その内容を〜/ .asoundrcに入れることができます-しかし、/ etc /asound.confの方が適していますシステム全体であるためです。ご覧のとおり、比較的簡単です。デバイス「all」はJACKを対象としており、!default-すべての非JACKアプリケーションを対象としています。 !defaultがジャックではなくプラグタイプであることが重要です。そうしないと、あらゆる種類の奇妙な問題が発生します。私のasound.confをあなたのニーズに簡単に適応させることができます-オーディオデバイスとチャンネルを追加または削除する方法が明らかであることを願っています。そうでない場合は、ドキュメントをお読みください(http://alsa-project.org/main/index.php/Asoundrc)。

私のasound.confの唯一の問題は、私のようなステレオアナログ入力を指定した場合、アナログ入力(通常はマイク)をモノラルとして使用できないことです。もう1つの奇妙なことは、JACKで多くのXRUNを取得することですが、私の場合、それらは音質に影響を与えないので、無視します。

重要な注意:サウンドカードがハードウェアミキシングに対応している場合、JACK以外のアプリケーションからのサウンドを聞くために、ALSA JACKプラグインを備えた!defaultセクションは必要ありません。カードの機能がわからない場合は、次のコマンドを実行してください。

cat /proc/asound/card0/pcm*/info | grep count

少なくとも一部のデバイスに複数のサブデバイスがある場合、カードはハードウェアミキシングに対応しています。デフォルトのチャネルでハードウェアミキシングが利用できる場合は、asound.confの例から!defaultセクションを削除できます。

代替のALSA構成(非推奨!)ALSA JACKプラグインなしでasound.confを書き込むことは可能ですが、私の場合、これは悪い音になりましたPFカーネルにアップグレードした後でも(後で説明します)、buffer_sizeが非常に大きい(1分あたりのアーティファクトが少ない場合もあれば、数分あたり1つのアーティファクトがある場合もある)にもかかわらず、入力にクリックのようなアーティファクトが頻繁に発生します。 JACKはオーディオデバイスを可能な限り直接使用する必要がありますが、ここではそうではないため、ここで驚くことはありません。とにかくこれを何らかの理由で試したい場合は、ALSA JACKプラグインなしで私の/etc/asound.confを参照してください(http://science.su/stuff/linux/sound/jack/without_alsa_jack_plugin/asound.conf)。最初のものよりも複雑ですが、できるだけ読みやすくするようにしました。試す前に、JACKとasound.confで同じperiod_sizeとperiodsを使用していることを確認してください。この代替構成を例として残しておきます(asound.confでさまざまなタイプを使用する方法、モノラルをステレオにアップミックスする方法などを確認できます)。

JACKの構成

これが qjackctlの設定のスクリーンショット です。最も重要な設定は、「リアルタイム」、「入力デバイス」、「出力デバイス」です。他のすべては、作業セットアップの単なる例です。

より良いカーネルへのアップグレード

RTカーネルへの移行を試みることをお勧めします(最終的にはVanillaカーネルに同様のリアルタイムサポートが含まれますが、近い将来、許容できるオーディオレイテンシが必要な場合は、パッチを適用したカーネルを使用する必要があります。アーティファクト、特にオーディオ入力から)。DebianTesting以降でRTカーネルを試すには、このコマンドを実行する必要があります(NVidiaドライバーが必要だと思います。そうでない場合は、任意のドライバーをインストールしてください)。代わりに必要):

Sudo apt-get install linux-image-3.4-trunk-rt-AMD64 linux-headers-3.4-trunk-rt-AMD64 nvidia-kernel-dkms

RTカーネルが機能する場合は、このメッセージの残りの部分をスキップしてください。RTカーネルを使用すると、完全な低遅延サウンドを聞くことができます。しかし、残念ながら多くのNVidiaカードはRTカーネルで動作せず、私のものはその1つ(GeForce GTX 295)であったため、RTを使用できませんでした。

注:Vanillaカーネルでは、buffer_sizeが比較的大きい場合でも、アナログ入力とデジタル入力の両方で1分間に数回クリックのようなアーティファクトが発生しました。これは許容できないため、Vanillaカーネルは私の目的には機能しませんでした。それがあなたのために働き、あなたが許容できる音のために許容しなければならない比較的高いオーディオレイテンシー(バッファ)で大丈夫なら、あなたは明らかにあなたのカーネルを変える必要はありません。

DebianのNVidiaドライバーには、3.4 RTカーネルで動作するように、変更が含まれています。変更する必要はありませんが、残念ながら、グラフィカルインターフェイスの代わりに黒い画面が表示される場合があります。この場合、 RTカーネルをアンインストールして、他の何かを試す必要があります。たとえば、PF-kernel(http://pf.natalenko.name)。作成者はdebファイルを提供していませんが、提供している誰かのサイトへのリンクを提供しています(http://kernel.night-leshiy.r )-このサイトは英語以外の言語で書かれていますが、どの言語であっても、理解する必要はありません。pfカーネルとそのヘッダーを含むdebファイルをダウンロードし、次のコマンドでインストールするだけです。

Sudo dpkg -i linux-*-pf*.deb

PFカーネルにはBFSスケジューラーが含まれており、8つのハードウェアスレッドを備えたXeonベースのクアッドコアワークステーション(OSは8つのCPUと見なします)では、リアルタイムプロセス(JACKなど)の最悪の場合の待ち時間を数百ミリ秒から数ミリ秒に短縮しました。ミリ秒(私の場合は2ミリ秒未満)。もちろん、これはRTカーネル(10〜30以内のリアルタイムプロセスの最悪の場合のレイテンシー)と比較すると非常に悪い結果に見えます マイクロ秒の範囲)が、バニラカーネルよりもはるかに優れています。個人的には、2つの期間で128のbuffer_sizeを使用しています。私の場合、これは数時間のテスト後のサウンドのアーティファクトを防ぐのに十分です。 RTカーネルを使用すると、さらに良い結果が得られるはずです。

BFSは最適なスケジューラーではありませんが、低レイテンシーが必要で、RTカーネルが機能しない場合は、Vanillaカーネルのスケジューラーよりもはるかに優れています。 RTカーネル、O(n)の代わりにO(1)複雑さでBFSが改善され、おそらくさらに優れたスケジューラー-RIFSがあります。それらを見つけることができます。ここ(http://code.google.com/p/rifs-scheduler/downloads/list)独自のカーネルをコンパイルする場合。もしそうなら、kernel-packageをインストールし、このハウツーを読んでください(http://vanilja.org/kernel)。

私の経験が誰かに役立つことを願っています。

2
Lissanro Rayen