放送設定では、入力デバイスからのオーディオと .wav ファイルのオーディオをミックスしたいと考えています。 .wav ファイルには、放送中のある時点で音楽に追加したいイントロ、待機、または終了時の音楽が含まれています。
必要な手順は複数あります:
- 2つのストリームを追加/ミックスする
- モノラルに変換する(あるいはこれを最初に行うべきだったかもしれない)
- 放送ストリームとVUメーターのストリームを分割する
- ストリームをローカルオーディオ出力に送信する
これは可能であると確信していますが、インターネット上ではまだ解決策を見つけることができません。alsa の .asoundrc を調べても、まだ結果は得られませんでした。alsa dmix はミキシングを行うようですが、ここで私が求めているものではありません...
どこから始めたらいいのか本当に分かりません。
誰かこれについて説明してくれませんか? 部分的な解決策でも構いません!
答え1
最も簡単な方法は、Pulseaudio を使用することです。(ALSA でも可能ですが、設定が面倒です。)
サウンドを生成するものはすべて、現在の出力 (Pulseaudio 用語では「シンク」) で自動的にミックスされるため、ミックスについて心配する必要はありません。 でボリュームを制御できpavucontrol
、アプリケーション名によって最後のボリュームが記憶されます。 を使用するpaplay
と、コマンドラインから wav ファイルを再生できますが、他のオーディオ プレーヤーでもかまいません。
シンクがモノラルの場合、モノラルへの変換は自動的に行われます。ローカルのRaspPiシンクをそのように構成できない場合(RaspPiを所有していないのでわかりません)、次のように「疑似」シンクを追加できます。
pactl load-module module-null-sink sink_name=whatever
または、Pulseaudio で再マップする必要があることが判明した場合module-remap-sink
(以下を参照、まだ自分で試していません)。
このシンクまたはローカル RaspPi シンクには、.monitor
icecast などに配布するために使用できる関連ソースがあります。
選択したシンクにhw:1入力を永続的に供給するには、
pacmd load-module module-loopback source="alsa_input.name_of_hw_1" sink="whatever_or_local_sink"
利用可能なシンク名を一覧表示するには、
pacmd list-sinks | grep name:
引数として、山括弧なしの名前を使用します。
これが基本だと思います。Pulseaudioについてはこちらをお読みくださいモジュール、pacmd help
を使用したくない場合は、コマンドラインから何ができるかがわかりますpavucontrol
。
編集のためにアルサ:
まず、利用可能なプラグインオーディオをdarkiceなどに送るには「仮想サウンドカード」が必要です。これはカーネルモジュールなので、次のようにします。
sudo modprobe snd-aloop pcm_substreams=2
/etc/modprobe.d
テスト用に、動作したらファイルを配置します。ループバックは であるとしますhw:3,*,*
。
仮想サウンドカードの入力側には、次のようなものが必要です。
dmix "main_in" --> プラグ (slave.channels = 1) --> hw:3,0,0
aplay -D main_in sound.wav
そして、実行することができます
alsaloop -C hw:0 -P main_in
オーディオグラバーに接続します。
仮想サウンドカードの出力側では、次のようなもの
hw:3,1,0 --> dsnoop "main_out"
そして、ローカルオーディオ出力でモニターするために、
alsaloop -C main_out -P local_audio_out
darkice
その後、と VU メーターを直接実行できますmain_out
。ちなみに、arecord -D main_out -d 0 -vv /dev/null
はテスト用の優れた VU メーターです。
上記のリンクで構文の詳細を読んでください。私はこれを試すつもりはありません。-->
矢印はプラグインのマスター/スレーブ関係を示しています。カーネル空間を介したループバックが 1 つあり、ユーザー空間アプリケーションが多数あるため、レイテンシはおそらくひどいものになるでしょう。
Pulseaudio が機能しない場合は、代替手段として がありますjack
が、私はそれを設定した経験がありません。