web-dev-qa-db-ja.com

端末を介してJACK出力ボリュームを制御する方法、またはPulseAudio入力を取得する方法はありますか?

私は少し具体的な質問があります:

ミュージシャンとして、ソフトウェアのモニタリングにUbuntuを使用しています。マウスホイールで出力マスターボリュームを制御したいと思っています。

この目的のために、私は現在amixer -D Pulse sset Master 5%+(マウスホイールを上げる)およびamixer -D Pulse sset Master 5%-(マウスホイールを下げる)というコマンドでEasyStrokeを使用しています。

問題は、Reaper、DAW、一部のメディアプレーヤーなど、直接JACK出力を持ついくつかのプログラムを使用していることです。

ソフトウェアがPulseAudio JACK Sink出力を使用している限り、マウスホイールを介して出力ボリュームを制御できますが、ソフトウェアがPulseAudioを使用しない場合、JACKに直接接続され、常に最大ボリュームになります。

スクリーンショットを参照すると:赤でマークされた出力(PulseAudio JACK Sink)のマスターボリュームを操作できますが、実際にはすべてのサウンド(システム出力)を制御するために緑でマークされた出力にアクセスする必要があります。

残念ながら、私はALSAマスターボリュームをamixer -q sset Master X経由で制御できません。ALSAは私の唯一のUSBサウンドカード用のコントロールを提供していないためです。

マウスボタンコマンドを置き換えることができるターミナルを介してJACK出力ボリュームを制御する方法はありますか?

または、JACK接続の右側にPulseAudio入力モジュールを追加して、Reaperと他のすべてのJACKソフトウェアを接続し、それらをPulseAudio JACKシンク経由でルーティングする方法はありますか? (PulseAudio JACK Sourceはマイクにのみ使用され、入力を再生しません。)

enter image description here

7
Prototype700

this の例に基づいて、問題を解決できます。

サウンドカードがハードウェア側の音量を制御できない場合、またはドライバーがサウンドカードのこの機能をサポートしていない場合、考えられる回避策は~/.asoundrcファイルで新しい仮想pcmデバイスを定義することです。ソフトウェア側のボリューム。

まず、サウンドカードの名前を知る必要があります。

 aplay -L

ここで役立つコマンドです。実際のカード名はCARD=の後に表示され、デバイス名(番号)はDEV=の後に表示されます。

でデバイスをテストできます

speaker-test -D <card name> -c <channel count> -twav

追加して新しいsoftvolデバイスを作成します

pcm.softvol {
    type            softvol
    slave {
    pcm         "<card name>,<device name>"
    }
    control {
        name        "<control name>"
        card        "<card name>"
    }
}

~/.asoundrcへ。 (ファイルが存在しない場合は、ファイルを作成する必要があります)

この場合はMasterである必要があります。上のリンクにあるコントロール名の詳細を参照してください。

次に、新しいデバイスをテストします

speaker-test -D softvol -c <channel count> -twav

Alsamixerを開くと、新しいコントロールMasterが表示され、alsamixerを使用して音量を変更できるはずです。

/etc/asound.confでデバイスをデフォルトとして追加設定する必要があるかもしれません:

pcm.!default {
    type   hw
    card   <card name>
}
ctl.!default {
    type   hw
    card   <card name>
}

これは上のリンクの提案とは異なりますが、それがOPが機能すると報告したものです。

次に、Jackインターフェースデバイスをsoftvolに設定する必要があります。

amixer -q sset Master 5%+
amixer -q sset Master 5%-
amixer -q sset Master 50%

出力ボリュームをそれぞれ5%ずつ増減する、または50%に設定する、固定。

Amixerは、マスターボリュームコマンドにアクセスする前に、初めてデバイスを「開く」必要があります。 jackd実行されていない間にspeaker-test -D softvol -c <channel count> -twavを使用してサウンドテストを開始し、実行してからSudo alsactl storeを使用してマスターボリュームの状態。それ以外の場合、ボリュームコントロールを機能させるには、再起動するたびにsoftvolを通じてサウンドを再生する必要があります。

1
mook765

2019年7月21日更新

Linux向けのプロの音楽Webサイトから:

非難度の質問を投稿して申し訳ありませんが、あなたの指導が必要です。ジャックがオーディオを制御すると、flashplayerを含む多くのアプリが非常に大音量で動作します。つまり、VLCでは音量を5%に設定します。各アプリのレベルを個別に設定するのではなく、alsamixerのようにマスターボリュームを制御したいと思います。どうやってやるの?

投稿された2つの回答があり、これが最も役に立ちます。

そのような概念はありません。 JACKは、プロオーディオおよび音楽作成ワークフロー用に設計されています。一部はそのように使用していますが、デスクトップサウンドサーバーではありません。このようなものが必要な場合は、JackMixのような単純なものからArdourのような複雑なものまで、すべてのJACKクライアントをミキシングクライアント経由でルーティングする必要があります。 JACK自体はこの機能を提供しておらず、その設計の範囲から完全に外れています。

最も簡単な解決策は、インストールすることです JackMix

「デスクトップで多くのジャックアプリケーションに苦労して、直接アクセスできるすべてのボリュームに共通の場所ではなく、独自のマスターボリュームフェーダーを使用している人はいますか?」

「問題の解決策は、アナログ機器を接続する必要がある場合に使用するミキサーとまったく同じように見えるジャック用ミキサーアプリであるJackMixです。」

Jackには他のアプリケーションがあり、リストされている here を見つけることができます。


元の答え

私は音楽的に挑戦していると告白しなければなりませんが、私は このスクリプト があなたが向かっているところだと思います:

pacmd list-sinks, and set the volume withpacmd set-sink-volume`を使用してすべてのシンクのリストを取得できるため、次のようにする必要があります

VOLUME='+5%'
for SINK in `pacmd list-sinks | grep 'index:' | cut -b12-`
do
  pacmd set-sink-volume $SINK $VOLUME
done

ここで、$VOLUMEは絶対(150%)または相対(+5%、-5%)であり、その他の形式も可能です。

ほとんどのウィンドウマネージャーは、キーを押すと、引数を指定してスクリプトまたはプログラムを起動するように構成できます。これが最良の方法ですが、WMがそうでない場合は、xbindkeysのようなツールがあります。だからあなたは好きなようにカスタマイズすることができます。

シンクのボリュームが100%を超えると、Pulseaudioがハードウェアミキサーの使用を開始し、サウンドが歪む可能性があることに注意してください。

また、Pulseaudioでは、pamcd set-sink-input-volumeを使用して、各アプリケーション(「オーディオストリーム」)の音量を設定できます。 pacmd list-sink-inputsを使用してそれらをリストし、同様の方法で設定できます。

これにより、シンクボリュームを固定レベルにできるため、ハードウェアミキサーを使用しなくてもほぼ同じになり、シンクを切り替えると、自動的に「適切な」ボリュームになります。それが私が好む設定です。

2

アップデート1

そのため、記事を長くする前に簡単に説明します。

PCMが利用できない場合(ミキサーで非表示になっているだけではない)でも、dbusがPCMを検出するため、PulseAudioを使用してJACKを管理できます。

何よりも前に、次のコマンドを使用して、USBサウンドカード用のカーネルモジュールがロードされていることを確認してください。

Sudo modprobe snd-usb-audio

サウンドカードコントロールがミキサーに表示されないのはこのためです。確認のため、実行してくださいaplay -lおよびaplay -Lおよびこれら2つのコマンドの出力をポストします。

次に、対応するpulseaudioパッケージをインストールすることから始めます:

Sudo apt-get update && Sudo apt-get install pulseaudio-module-jack

次に、対応するモジュールをロードします。

pactl load-module module-jack-sink channels=2

そして最後にデフォルトのシンクをJACKに設定します

pacmd set-default-sink jack_out


の限り Sudo pactl load-module module-alsa-sink control=PCM、この行により、pulseaudioは、ALSA APIサウンドカードレベルでパルスコード変調ボリュームレベルを処理する新しいシンクソースを作成できます。 OPのサウンドカードは、システムから出てスピーカーから音声が出ているため、パルス変調によってデジタルオーディオストリームをアナログに変換できる必要があります。


まず、pcmデバイスを制御するシンクを出力として追加する必要があります。

Sudo pactl load-module module-alsa-sink control=PCM

次に(再確認するために、pavucontrolを介して新しい出力が表示されるかどうかを確認します(つまり、pulseaudioボリュームコントロールGUI)。

pCMシンクの出力ボリュームを直接制御できます

pactl set-sink-volume [pcm-sink-name likely something along the lines of alsa.default] 50%

1
BarBar1234