Gerät für Programm in PulseAudio einstellen?

10

Im Computer habe ich 2 Audiogeräte.

Wenn ich ein Programm ausführe (sagen wir Skype), kann ich (mit "pavucontrol" -> "PulseAudio Volume Control") einrichten, damit diese Anwendung das angegebene Gerät für die Wiedergabe oder Aufnahme verwendet.

Aber - in den Registerkarten Wiedergabe / Aufnahme ist die Anwendung nur sichtbar, wenn sie gerade etwas tut (Wiedergabe oder Aufnahme).

Wie kann ich das Gerät pro Anwendung einstellen, aber bevor die Anwendung mit der Aufnahme oder Wiedergabe von Sounds beginnt?


quelle

Antworten:

8

Ich weiß nicht, ob es irgendwo eine Einstellungs- oder Konfigurationsdatei dafür gibt, aber es kann mit Umgebungsvariablen durchgeführt werden. Ich habe meine Antwort auf diesen Eintrag in den PulseAudio-FAQ zum Einstellen der Aufnahmequelle gestützt . Ich habe dies mit Ausgabe versucht (eine Senke in PulseAudio), aber es sollte sowohl für Eingabe als auch für Ausgabe funktionieren.

Der erste Schritt besteht darin, den internen Namen der Quelle und Senke abzurufen, die Sie verwenden möchten. Dazu müssen Sie den pactl listBefehl verwenden. Dieser Befehl gibt einen Datenstapel zurück, im Folgenden werden jedoch nur die Quellennamen aufgelistet:

LANG=C pactl list | grep -A2 'Source #' | grep 'Name: ' | cut -d" " -f2

Diese Liste enthält wahrscheinlich die Namen sowohl für reguläre Quellen als auch für die Monitorquellen von PulseAudio (deren Name auf meinem System "monitor" enthält). Sie möchten den regulären Quellennamen des Geräts verwenden, auf das Sie abzielen möchten.

Sie können das Gleiche tun, um die Namen der Spülen zu erhalten:

LANG=C pactl list | grep -A2 'Sink #' | grep 'Name: ' | cut -d" " -f2

Sobald Sie die Namen haben, können Sie von Ihrem Terminal aus Folgendes ausführen:

PULSE_SINK=<sink_name> PULSE_SOURCE=<source_name> <command_to_run_skype>

Wenn Sie dies über ein Menü ausführen möchten, müssen Sie wahrscheinlich ein Shell-Skript erstellen und dieses anstelle des Standardbefehls verwenden. So etwas sollte funktionieren:

#!/bin/sh
set PULSE_SINK <sink_name>
set PULSE_SOURCE <source_name>
<command_to_run_skype>
Moberley
quelle
Schöne kleine Befehle, um interne Namen zu finden, ta !!
Vix
2

Sie müssen die Variablen wie folgt EXPORTIEREN und zuweisen:

#! / bin / sh 
export PULSE_SINK = "sink_name" 
export PULSE_SOURCE = "Quellenname" 
command_to_run_skype
Krish
quelle
0

Ich habe ein Perl-Modul geschrieben, das diese PulseAudio.pm ausführt .

Es erlaubt Ihnen, eine Syntax wie diese zu verwenden:

use PulseAudio;
use constant TRACKIN  => 'pci-0000:00:1d.7-usb-0:2.3:1.0'

my $pa = PulseAudio->new;

my $sink   = $pa->get_sink_by([qw/properties device.bus_path/] => TRACKIN );
my $source = $pa->get_source_by(
  [qw/properties device.bus_path/] => TRACKIN
  , [qw/properties device.profile.name/] => 'analog-stereo'
);
$pa->exec({
  sink      => $sink
  , source  => $source
  , prog    => '/usr/bin/audacity'
});

Natürlich können Sie in get_sink_byund beliebige Kriterien verwenden get_source_by. Es liest aus pacmd info. Dies funktioniert nach der gleichen Idee wie bei @ moberleys Antwort, außer dass eine Perl-Bibliothek verwendet wird, anstatt Sie zu zwingen, Ihre eigenen Analysen durchzuführen. Es bietet auch einige andere raffinierte Funktionen.

Für meine Podcast-Show verwende ich dies tatsächlich auch, um Skype zu starten.

$pa->exec({
  sink      => $sink
  , source  => $source
  , prog    => '/usr/bin/skype'
  , args    => ['--callto','btrlistener021']
});

(Die btrlistener*Skype-Namen sind für Blogtalkradio).

Evan Carroll
quelle