Anleitung zum Mischen von zwei Audio-Streams

Anleitung zum Mischen von zwei Audio-Streams

Für ein Broadcast-Setup möchte ich Audio von einem Eingabegerät mit Audio aus einer WAV-Datei mischen. Die WAV-Datei enthält eine Intro-, Warte- oder Exit-Musik, die ich irgendwann während der Sendung zur Musik hinzufügen möchte.

Folgendes Setup ist das Ziel: Bildbeschreibung hier eingeben

Es sind mehrere Schritte erforderlich:

  1. zwei Ströme hinzufügen/mischen
  2. in Mono umwandeln (oder vielleicht hätte dies zuerst getan werden sollen)
  3. Teilen Sie die Streams für einen Broadcast-Stream und ein VU-Meter auf
  4. Senden Sie den Stream an den lokalen Audioausgang

Ich bin ziemlich sicher, dass das möglich sein muss, aber ich konnte im Internet noch keine Lösung finden. Das Durchsuchen von Alsas .asoundrc hat noch kein Ergebnis gebracht. Es scheint, dass Alsa dmix einige Mixe durchführt, aber nicht das, was ich hier will....

Ich weiß wirklich nicht, wo ich anfangen soll.

Kann das bitte jemand aufklären? Eine Teillösung wäre auch ok!

Antwort1

Am einfachsten geht das mit Pulseaudio. (Sie können es auch mit ALSA machen, aber die Konfiguration wird mühsam.)

Alles, was Ton erzeugt, wird automatisch auf dem aktuellen Ausgang gemischt („Sink“ in Pulseaudio-Terminologie), sodass Sie sich nicht um das Mischen kümmern müssen. Sie können die Lautstärke mit steuern pavucontrol, und es merkt sich die letzte Lautstärke anhand des Anwendungsnamens. Sie können paplayWAV-Dateien über die Befehlszeile abspielen, aber jeder andere Audioplayer ist auch geeignet.

Die Konvertierung in Mono erfolgt automatisch, wenn Ihr Sink mono ist. Wenn Sie den lokalen RaspPi-Sink nicht dafür konfigurieren können (ich weiß es nicht, ich besitze keinen RaspPi), können Sie einen "Pseudo"-Sink hinzufügen mit

pactl load-module module-null-sink sink_name=whatever

oder wenn sich herausstellt, dass Sie in Pulseaudio eine Neuzuordnung vornehmen müssen module-remap-sink(siehe unten, habe dies selbst noch nicht ausprobiert).

Dieser Sink oder der lokale RaspPi-Sink verfügt über eine zugehörige .monitorQuelle, die Sie zum Verteilen an Icecast usw. verwenden können.

Sie können eine permanente Einspeisung des hw:1-Eingangs in die von Ihnen gewählten Senken einrichten mit

pacmd load-module module-loopback source="alsa_input.name_of_hw_1" sink="whatever_or_local_sink"

Sie können die verfügbaren Sink-Namen auflisten mit

pacmd list-sinks | grep name:

Verwenden Sie als Argumente den Namen ohne die spitzen Klammern.

Ich denke, das sind die Grundlagen. Lesen Sie mehr über die verfügbaren PulseaudioModule, und pacmd helperklärt Ihnen, was Sie über die Befehlszeile tun können, wenn Sie nicht verwenden möchten pavucontrol.

BearbeitenfürALSA:

Informieren Sie sich zunächst über die verfügbarenPlugins. Sie benötigen eine „virtuelle Soundkarte“, um den Ton an darkice usw. weiterzuleiten. Das ist ein Kernelmodul, also machen Sie so etwas wie

sudo modprobe snd-aloop pcm_substreams=2

zum Testen, und legen Sie eine Datei ein, /etc/modprobe.dwenn es funktioniert. Angenommen, der Loopback ist hw:3,*,*.

Auf der Eingangsseite der virtuellen Soundkarte benötigen Sie etwas wie

dmix "main_in" --> Stecker (Slave.Kanäle = 1) --> hw:3,0,0

Dann können Sie aplay -D main_in sound.wav, und laufen

alsaloop -C hw:0 -P main_in

um es mit dem Audio-Grabber zu verbinden.

Auf der Ausgangsseite der virtuellen Soundkarte etwas wie

hw:3,1,0 --> dsnoop "Hauptausgang"

und um es wieder über den lokalen Audioausgang abzuhören,

alsaloop -C main_out -P local_audio_out

Anschließend kannst du auch darkicedirekt das VU-Meter laufen lassen main_out. Übrigens arecord -D main_out -d 0 -vv /dev/nullist das ein nettes VU-Meter zum Testen.

Lesen Sie die Details zur Syntax im obigen Link nach. Ich werde das nicht ausprobieren. Die -->Pfeile zeigen die Master/Slave-Beziehungen des Plugins an. Die Latenz wird wahrscheinlich furchtbar sein, mit einem Loopback durch den Kernel-Speicher und vielen Userspace-Anwendungen.

Wenn Pulseaudio bei Ihnen nicht funktioniert, ist eine Alternative jack, aber ich habe keine Erfahrung mit der Konfiguration.

verwandte Informationen