
Ubuntu 10.10の革新の1つは、「ベア」ALSAからPulseAudioへの移行でした。 以前は、問題を解決するために釘を付けて削除するための多くのヒントがありましたが、現在はPulseAudioは安定しており、スピーカーはヒスを鳴らしません;)
この記事では、最初から、それが何であり、どのように機能するかを説明します。
- アプリケーションを閉じるときにすべてのサウンドをUSB列に切り替える方法(USBホットプラグ);
- オーディオ出力用のサウンドカードポートの選択方法(ラップトップ/ヘッドフォンスピーカー、ラインアウト/ヘッドフォン);
- サウンドカードプロファイルの選択方法(物理ポートのマッピング:5.1またはステレオ+ lineIn?);
- 音量を制御し、静かな信号を増幅する方法(!);
- Skypeを音楽よりも大きくする方法は?
そして、PulseAudioの管理を簡素化するように設計されたソリューションを紹介します;)
PulseAudioについて簡単に
このレビューは
ウィキペディアによく書かれています。 以下は、Alsaとの主な違いの要約リストです。
- PulseAudio-アプリケーションからサウンドストリームを受け取り、Alsaに転送する「サウンドアブストラクションレイヤー」。
- PulseAudioはオブジェクトで動作し、オブジェクト間でオーディオストリームをリダイレクト(ルーティング)できます。
- PulseAudio-通常、ユーザーに代わって実行されるデーモン。
- ネットワーク経由でサウンドを転送し、他のコンピューターにインストールされたマイクを「共有」できます。
- これで、USBカラムをオフにすると、1つのプログラムがフリーズするのではなく、使用可能な別のカードに転送されます:)
GUIツール
いくつかのニュアンスを解決するためにこの記事を読んでいて、掘り下げていない場合は
、PulseAudioページで説明されているGUIツールを試すことをお勧めし
ます 。
pavucontrol
を使用すると、「デフォルト」レコーダー(入力デバイス、右側の「フォールバックとして設定」ボタン)をすばやく選択でき、Skypeが機能します。)また、
pavucontrol
使用
pavucontrol
と、一般および個々のアプリケーションの音量を制御でき
pavucontrol
。
PulseAudioの概念
カード、シンク、ソース
サウンドカードには、入力(ライン入力、マイク)と出力(ヘッドフォン、ライン出力、S / PDIF)の2種類のソケットがあることが知られています。 典型的な構成では、既存の各サウンドカードとその「ソケット」に対して、PulseAudioは次のオブジェクトを作成します。
- カード 。 オブジェクトは、すべての入力と出力を持つ物理的なサウンドカードを表します。
- シンク (英語の低地)-「シンク」、サウンドストリームの受信。 サウンドカード出力を表します:ライン出力、ヘッドフォン、ラップトップスピーカー。
- ソース (英語ソース)-サウンドストリームを作成する音源。 サウンドカード入力を表します:ライン入力、マイク。
PulseAudioは、「デフォルトのシンク」と「デフォルトのソース」を定義します。これは、新しく起動したアプリケーションにデフォルトで使用されるオブジェクトです。
Sinkはサウンドカードの物理ポートを記述する必要がないことに注意してください。これは、サウンドストリームレシーバーの抽象化です。 PulseAudioは高度なものであり、非常に「トリッキーな」オブジェクトを作成できます。たとえば、タイプが「NULL」のSink(PulseAudioモジュール-null-シンクモジュールで実装)は、単にサウンドを吸収し、module-pipe-sinkモジュールでは、FIFOファイルを介してサウンドストリームを転送できます。 マルチキャストブロードキャストをホストするネットワークシンクを作成したり、特定のホストにサウンドストリームを送信したりすることもできます。 これはすべてPulseAudioモジュールによって実装されます。
そのため、サウンドは「シンク」で再生され、「ソース」で録音されます。
シンク入力およびソース出力
- シンク入力 。 PulseAudioをサポートするアプリケーションが音声を再生しようとすると、宣言されたシンクの1つに出力を送信し、「シンク入力」:シンク入力になります。 アプリケーションは複数の出力ストリームを作成し、ストリームごとに個別のシンク入力を作成できます。
- ソース出力 アプリケーションが何らかのソースからサウンドを受信する場合(録音)、それは「ソース出力」:ソース出力になります。
デフォルトでは、各シンク入力はシンクの1つと通信し、サウンドストリームを送信します。 PulseAudioは、Sinkの接続先(サウンドカードなど)をさらに判別し、目的の目的に転送します。
ソースには特別なタイプのモニターがあります。 シンクごとに、記録できる個別のモニターを作成できます。 したがって、「スピーカーからの音」の録音が判明します。
そのため、メディアプレーヤーはSink-Input、Skype、およびSink-Input、Source-Outputを作成します。
モジュール、クライアント、サンプル
記事の一部として-純粋に情報提供:)
- モジュール 読み込まれたPulseAudioモジュール。 たとえば、Alsaデバイスを指すパラメーターを指定してmodule-alsa-sinkをロードすると、このデバイスに関連付けられたシンクが作成されます。 PulseAudioオブジェクトを作成する他のモジュールを使用すると、それを制御したり、FIFOを使用してサウンドストリームを交換したりできます。
- クライアント PulseAudioに接続されたアプリケーション。 Sink-InputおよびSource-Outputストリームを作成し、PulseAudioデーモンを制御できます。
- サンプル 高速再生のためにPulseAudioに読み込まれたサウンドサンプル。 標準的なサウンドを再生するために使用できます。 たとえば、x11ベル。 モジュール、クライアント、またはコンソールからのコマンドで再生できます。
ALSA→PulseAudio
もちろん、最初にPulseAudioがインストールされ実行されていることを確認する必要があります:
sudo apt-get install pulseaudio
pulseaudio --start -D
すべてのアプリケーションがPulseAudioで直接動作できるわけではありません。通常、Alsaを使用できます。 このようなアプリケーションでは、AlsaがサウンドストリームをPulseAudioにリダイレクトすることを報告する必要があります。
これを行うには、次の行を
~/.asoundrc
ファイルに挿入します(
ちなみに、Skypeのマイクを ~/.asoundrc
ます
!それでも「Skypeによる音量の自動調整を許可する」を無効にすると、
目的がプロンプトされます)。
pcm.pulse { type pulse }
ctl.pulse { type pulse }
pcm.!default { type pulse }
ctl.!default { type pulse }
最初の2行は、入力と出力用の「パルス」という名前のALSA仮想デバイスと、制御(ボリューム)デバイスを作成します。 次の2つ-それらを「デフォルト」として定義します。Alsaの代わりにすべてのアプリケーションが特別なプラグインを介してPulseAudioを使用します(何も疑わない)。
変更を適用するには、サウンドアプリケーションを再起動する必要があります。 新しく起動したアプリケーションは、変更自体をキャッチします。
UPD:
yuretsz は 、OSS(
/dev/dsp
)を使用するアプリケーションは、ラッパー
padsp [options] PROGRAM [ARGUMENTS ...]
介して実行することを
padsp [options] PROGRAM [ARGUMENTS ...]
。
Office PulseAudio:pactl
PulseAudioはpactlコマンドを使用して制御されますが、これについては便利で高度であるとは言えませんが、トレーニングを行います。
財産検査
最初に、PulseAudioで定義されているオブジェクトを見てみましょう。 見るべきものがあるように、バックグラウンドミュージックを開始することをお勧めします。
pactl list
コマンドは、既存のオブジェクトの長いリストを表示します。
各オブジェクトには、それを説明する一連のフィールドと、特別なフィールド「プロパティ」があります:キーと値のプロパティのリスト(通常は文字列)。
すべてのオブジェクトにはインデックス(シンク#0)-特定のタイプのオブジェクトの一意の番号があります。 また、多くのオブジェクトには名前(Name :)があります。インデックスとNameを使用して、特定のオブジェクトを参照できます。
SinkおよびSourceオブジェクトのフィールドを確認することをお勧めします。デフォルトでは、これらはハードウェアを説明しています。
私の例を示します:
シンク#1-シンク:サウンドを再生します
状態:RUNNING-Sink works:音楽が再生されます
名前:alsa_output.pci-0000_00_1b.0.analog-stereo-シンクの一意の名前
説明:内部オーディオアナログステレオ-シンクテキストの説明
ドライバー:module-alsa-card.c-使用されている「ドライバー」:このシンクを作成したPulseAudioモジュール
サンプル仕様:s16le 2ch 44100Hz-サンプリングパラメーター、チャンネル数、エンコード。
チャンネルマップ:フロント左、フロント右-サウンドチャンネル
所有者モジュール:5-このシンクを作成したモジュールのインデックス
ミュート:いいえ
ボリューム:0:26%1:26%-両方のチャネルのボリューム
0:-35.42 dB 1:-35.42 dB
バランス0.00
ベースボリューム:100%-"ベースボリューム":出力デバイスの「増幅されていない」ボリュームを示します
0.00 dB
モニターソース:alsa_output.pci-0000_00_1b.0.analog-stereo.monitor-このシンクに関連付けられた「モニター」の名前
(仮想ソース:「スピーカーからの音」を書くことができます)
レイテンシ:161458 usec、設定済み210,000 usec-サウンドラグオプション
フラグ:HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
プロパティ:...-あらゆる種類のプロパティ。 そこで、このシンクが音を出すデバイスAlsaの名前を見ることができます。
ポート:-シンクポート:サウンドカードの物理ポートに対応
アナログ出力:アナログ出力(優先度9900)-ヘッドフォン出力
アナログ出力スピーカー:アナログスピーカー(優先度10000)-ラップトップスピーカー
アクティブなポート:analog-output-speaker-現在選択されているポート:ラップトップのスピーカーから再生する音楽。
カード#1-物理的なサウンドカード
名前:alsa_card.pci-0000_00_1b.0
ドライバー:module-alsa-card.c
所有者モジュール:5
プロパティ:...
プロファイル:-サウンドカードプロファイル:物理ポート用に選択されたマッピングプリセット。
出力:アナログステレオ:アナログステレオ出力(シンク:1、ソース:0、優先度6000)
出力:アナログステレオ+入力:アナログステレオ:アナログステレオデュプレックス(シンク:1、ソース:1、優先度6060)
出力:iec958-stereo:デジタルステレオデュプレックス(IEC958)(シンク:1、ソース:0、優先度5500)
出力:iec958ステレオ+入力:アナログステレオ:デジタルステレオ(IEC958)出力+アナログステレオ入力(シンク:1、ソース:1、優先度5560)
入力:アナログステレオ:アナログステレオ入力(シンク:0、ソース:1、優先度60)
off:オフ(シンク:0、ソース:0、優先度0)
アクティブプロファイル:出力:アナログステレオ+入力:アナログステレオ
ソース#1-ソース:サウンドを録音できます
状態:IDLE-ソースはアイドルです:何も書いていません:)
名前:alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
説明:内蔵オーディオアナログステレオのモニター
ドライバー:module-alsa-card.c
サンプル仕様:s16le 2ch 44100Hz
チャンネルマップ:前面左、前面右
所有者モジュール:5
ミュート:いいえ
ボリューム:0:100%1:100%
0:0.00 dB 1:0.00 dB
バランス0.00
ベースボリューム:100%
0.00 dB
シンクのモニター:alsa_output.pci-0000_00_1b.0.analog-stereo-このソースは、最初のシンクモニターとして作成されます。
それから、スピーカーから聞こえたものを録音することができます
レイテンシ:0 usec、設定済み1999818 usec
フラグ:DECIBEL_VOLUME LATENCY
プロパティ:...
pactlおよびpacmd
pactlに加えて、PulseAudioを管理するための別のユーティリティ:
pacmd
ます。
module-cli-protocolモジュールがPulseAudioに接続されている場合、PulseAudioシェルがハングするUNIXソケットが作成されます。 これはtelnetによく似ています:)
シェルはテキストコマンドを受け取り、実行します。
pacmd help
は、使用可能なコマンドのリストを表示します。
問題は、
pactl
がすべてに対応できる
pacmd
なく、
pacmd
使用がそれほど便利で
pacmd
ないことです。 将来的には
pactl
に固執しますが、機能が十分でない場合は
pacmd
を使用し
pacmd
。
記事の最後で、標準機能に加えて機能する独自のユーティリティを紹介します。はるかに機能的で便利です:)
カードプロファイル:サウンドカードポートのマッピング
サウンドカードには限られた数のコネクタがあり、多数のアプリケーションが存在する可能性があります。すべてを使用して5.1サウンドを出力し、マイク用に1つを残すことができます。 または、ステレオ出力用に1つのジャックを残しますが、マイク入力とラインを取得します。 または...
残念ながら、ここでは魔法は機能しません。セットはメーカーによって事前にインストールされています。 「カード」オブジェクトの「プロファイル」フィールドにリストが表示されます。
各プロファイルに対して、優先度が設定されます。この特定のプロファイルの「魅力の程度」を決定する数値です。 デフォルトでは、PulseAudioは優先度が最も高いプロファイルを選択します。
プロファイルごとに、選択した場合に生成されるSinksおよびSource'ovの数:
sinks: 1, sources: 0
。
現時点では優先順位を変更できませんが、1つまたは別のプロファイルを選択できます。
pactl list
出力でマップとプロファイルの名前
pactl list
、以下を選択します。
pactl set-card-profile 'alsa_card.pci-0000_00_1b.0' 'output:analog-stereo+input:analog-stereo'
それだけです、カードのポートが再割り当てされます。
「オフ」プロファイルを選択すると、すべてのコネクタを完全にオフにできます。
pactl set-card-profile 'alsa_card.pci-0000_00_1b.0' 'off'
シンクポート:サウンドをヘッドフォンに切り替えます
1つのシンクに複数のオーディオポートを装備できます。 たとえば、ラップトップのサウンドカードに基づくシンクには、内蔵スピーカーとヘッドフォン出力の2つのポートがあります。
現在のSinkポートは、
Active Port: analog-output-speaker
フィールドで確認できます。
目的のSinkオブジェクトのポートリストを見て、ポートを割り当てます。
pactl set-sink-port 'alsa_output.pci-0000_00_1b.0.analog-stereo' 'analog-output'
音声は即座にヘッドフォンに転送され、スピーカーが切断されます。
Sourceも同様です。 おそらく、間違った録音ポートが選択されているために、マイクがSkypeで機能しない可能性があります。
デフォルトのシンク:デフォルトのサウンド出力
PulseAudioは、シンクの1つを「デフォルト」としてマークします。新しい実行中のアプリケーションは、デフォルトでシンクを再生します。 つまり、アプリケーションが(たとえば、ユーザー設定から)シンク入力の作成時にシンクを単独で選択しない場合、default-sinkが選択されます。
pactl stat
コマンドを実行すると、デフォルトの
pactl stat
を確認できます。
$ pactl stat
...
Default Sink: alsa_output.pci-0000_00_1b.0.analog-stereo
Default Source: alsa_input.usb-046d_0802_0825F490-02-U0x46d0x802.analog-mono
変更:目的のシンクの名前を見て、次のように記述します。
pacmd set-default-sink '1'
場合によっては、
pacmd
を使用して長い名前の代わりに数字を使用できることに注意してください。
Sourceも同様です。 ちなみに、誤って選択されたdefault-Sourceは、Skypeが通信できないこともあります:)
Move Sink-Input:サウンドストリームを移動します
このアクションを使用すると、Sink-Inputを1つのSinkから別のSinkに転送できます。 したがって、接続したばかりのUSBカラムに音楽を転送できます。
2つのシンクの名前を見て、目的のシンク入力を見つけて記述します。
pactl move-sink-input 16 '1'
Sink-Input#16の音がすぐにSink#1に切り替わります。 USBスピーカーの可能性があります。
pactl
、すべてのシンク入力を
pactl
または
pacmd
に転送することはできません。 記事の最後に解決策があります。
ソース出力はソース間で切り替えることもできます。
音量調節
PulseAudioの音量は数値で設定されます:0..65535(0%と100%に対応)、そして驚きです! -値が100%を超えると、信号の増幅が発生します。これは、異常な音量の映画を見るときに不可欠です。
ここでは、インデックスシンクを使用できます。
pactl set-sink-volume '1' 100 # ! 100/65535 = 0,15%
pactl set-sink-volume '1' 65535 # 100%
pactl set-sink-volume '1' 78642 # 120% —
pactl set-sink-mute '1' true #
強化はクリッピングを引き起こす可能性があります:よく知られた「バウンス」。
同様に、Source'ovの音量を制御できます。
UPD :バージョン0.9.15から機能「FLAT_VOLUME」が登場しました(Sink 'Flags'で確認できます)。 このフラグを使用すると、SinkボリュームはすべてのSink入力の最大ボリュームに自動的に設定されます。 次のように無効にできます:
echo "flat-volumes = no" >> /etc/pulse/daemon.conf
適用量
Windows7の出現により、PulseAudioに慣れていないLinuxoidは、個々のアプリケーションのボリュームを制御する能力をうらやんでいます:)
可能になりました。目的のシンク入力のインデックスを見て、別のアプリケーションを強化します。
pactl set-sink-input-volume '16' 80000
一時停止
シンクとソースは「一時停止」できます。
pactl suspend-sink '1'
構成
これらのコマンドのいずれかをスタートアップに追加するというアイデアが得られたら、すぐにそれを捨ててください! このような場合、PulseAudio構成ファイルを使用する必要があります。
例は
/etc/pulse/default.pa
ファイルにあります。 shebang
#!/usr/bin/pulseaudio -nF
。これは、構文が
pacmd
理解するコマンドに非常に似ているスクリプトです。
独学の場合:
パトリック
公益事業者の不便さに悩まされたあなたの忠実な使用人は、PulseAudioデーモンを管理するための彼自身のユーティリティを書きました:)
機能:
- 短く直感的なコマンド
ls
を使用した計量された情報の流れ:大量の情報(特にプロパティ)が端末に落ちないようになりました- ポートとプロファイルを含むすべてのオブジェクトは、名前またはインデックスで指定できます
set sink 0 port next
コマンド-ポート番号を推測できず、次のポートに切り替えることができます。 ホットキーに便利です。- すべてのサウンドストリームを目的のシンク(USB列)に移動する
mv sink 0 all
コマンドの存在
GitHub:
ootync / Patricks(スクリプトファイルをどこかに置き、patricks.phpにシンボリックリンクを作成します)
作業例:
シンクのリストを表示します。 現在のシンクには、>のマークが付いています。
ootync @ rtfm〜$ patricks ls sinks
>シンク#0 <alsa_output.pci-0000_00_1b.0.analog-stereo>
シンク#1 <alsa_output.pci-0000_00_2b.0.hdmi-stereo>
シンク#0を詳しく見てみましょう。
ootync @ rtfm〜$ patricks ls sink 0
シンク#0 <alsa_output.pci-0000_00_1b.0.analog-stereo>
デフォルト:はい
説明:内部オーディオアナログステレオ
状態:実行中
ドライバー:module-alsa-card.c
所有者モジュール:モジュール#4 <module-alsa-card>
サンプル仕様:s16le 44100ch 2Hz
チャンネルマップ:前面左、前面右
ミュート:いいえ
ボリューム:25%
ベースボリューム:100
レイテンシ:199703
構成されたレイテンシー:210,000
フラグ:HARDWARE、HW_MUTE_CTRL、HW_VOLUME_CTRL、DECIBEL_VOLUME、LATENCY
ポート:アナログ出力、アナログ出力ヘッドフォン
アクティブポート:アナログ出力
モニターソース:ソース#0 <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>
Id:0
名前:alsa_output.pci-0000_00_1b.0.analog-stereo
プロップリスト:33アイテム
Sink#0ポートのリストをよく見てください。
ootync @ rtfm〜$ patricks ls sink 0 ports
>#0 analog-output: "Analog Output" prio = 9900
#1アナログ出力ヘッドフォン: "Analog Headphones" prio = 9000
シンク#0を次のポートに切り替えます ootync @ rtfm〜$ patricks set sink 0 port next
シンク#0 <alsa_output.pci-0000_00_1b.0.analog-stereo>:アナログ出力ヘッドフォン
すべてのシンク入力を次のシンクに転送します(たとえば、新しく接続したUSBスピーカー) ootync @ rtfm〜$ patricks mv sink next all
1つの入力{65}を移動して「alsa_output.pci-0000_00_1b.0.analog-stereo」をシンクします...
シンク#0 <alsa_output.pci-0000_00_1b.0.analog-stereo>:デフォルトのシンク
参照資料
「著者から」の設定コンソールコマンドの例モジュールの説明よくある質問次のシリーズで
私は記事がすぐにではないことを言わなければならない...私はまだすべてを理解していない:))