Chciałbym nagrać wyjście programu za pomocą PulseAudio przy użyciu wiersza poleceń / skryptu bash. Ważne jest, aby nie rejestrować wszystkich danych wyjściowych, a tylko dane wyjściowe z jednego określonego programu.
Pomyślałem, że będę musiał utworzyć nowy zerowy zlew i przenieść dane wyjściowe programu do tego nowego zlewu. Następnie powiedz parec, aby używał tego konkretnego monitora do nagrywania.
Pierwszym krokiem byłoby coś takiego:
pactl load-module module-null-sink sink_name=steam
Ale jak przenieść teraz wyjście programu do tego zlewu?
A jak nagrać konkretny zlew za pomocą skryptu bash?
źródło
pulseaudio -k
w terminalu.list-sink-inputs
zanotujsink
wartość. Aby zamienić z powrotem, po prostu biegnijpactl move-sink-input $INDEX $SINK
. Coś w stylupactl move-sink-input 4719 1
Poprawianie odpowiedzi Waschtl w tym wątku, abyś mógł ZARÓWNO SŁUCHAĆ I NAGRYWAĆ dźwięk aplikacji:
Najpierw szukamy naszego domyślnego wyjścia i umieszczamy jego nazwę ujścia w
$DEFAULT_OUTPUT
:Następnie tworzymy połączony zlew, który ma tylko jedno urządzenie podrzędne: $ DEFAULT_OUTPUT . Dźwięk generowany przez aplikację (źródło) zostanie przesłany do zlewu podrzędnego (tj. Rzeczywista moc wyjściowa), a my również go nagramy. Różni się od zlewu zerowego, w którym dźwięk źródłowy nie jest przekazywany.
sink_properties
jest opcjonalny i może powodować błędy, jeśli używasz spacji w nazwie opisu.Następnie moglibyśmy użyć
pactl move-sink-input ...
polecenia odpowiedzi Waschtla (z funkcją Record-n-Play zamiast Steam ), ale GUIpavucontrol
jest prostsze (i doskonałe do sprawdzania / rozwiązywania problemów):Następnie odtwarzamy dźwięk w aplikacji, którą chcemy nagrać. W
pavucontrol
Playbackzakładce wybieramy z rozwijanej listy aplikacji: „Record-and-Play” .Wreszcie, jesteśmy w stanie nagrywać i słuchać jednocześnie! ( lame przykład mp3, uruchom na pierwszym planie)
Lub możemy nagrywać w tle i zatrzymać w dowolnym momencie:
NB:
pulseaudio -k
działa świetnie, aby zresetować wszystko do ustawień domyślnych sesji.pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2
.EDYCJA: Uważaj, ponieważ od Ubuntu 18 (być może również 17), połączony zlew staje się domyślnym systemowym urządzeniem wyjściowym, a nie rzeczywistym urządzeniem wyjściowym. Dlatego zmiana głośności za pomocą ikony dźwięku w zasobniku systemowym wpływa na dźwięk nagrania. Obejście: Po utworzeniu połączonego zlewu otwórz
pavucontrol
kartę Wyjście. Wybierz „Widok: wirtualne urządzenia wyjściowe” i zresetuj głośność połączonego zlewu do 100%. Następnie wybierz „Widok: sprzętowe urządzenia wyjściowe” i naciśnij zieloną ikonę „Zdefiniuj jako alternatywę” na rzeczywistym urządzeniu wyjściowym.źródło
Odpowiedź Waschtla jest fantastyczna. @ixtmixilix zapytał o przywrócenie normalnego dźwięku po zakończeniu nagrywania. Oto najprostszy sposób, jaki znam:
Zainstaluj i uruchom
pavucontrol
GUI. Powinieneś zobaczyć swoją aplikację do odtwarzania dźwięku i jej miernik głośności pod Playbackzakładką. Obok będzie przycisk pokazujący, że gra na Null Output . Kliknij na to i zmień na zwykłe wyjście audio, W moim przypadku Wbudowane Audio Analogowe Stereo .Oto zrzut ekranu tego, czego szukasz:
Możesz również użyć tego podejścia, aby skonfigurować nagranie w przyszłości, po uruchomieniu
load-module
polecenia w odpowiedzi @ Waschtl, aby utworzyć zlew.źródło
Poprawiając odpowiedź KrisWebDev , jeśli chcesz, aby funkcja nagrywania i odtwarzania była zawsze dostępna, najpierw sprawdź domyślne wyjście:
która wyświetli coś takiego:
Następnie utwórz plik
~/.config/pulse/default.pa
:Proszę zamienić na
alsa_output.pci-0000_00_1b.0.analog-stereo
dowolny wynik otrzymany zpacmd
polecenia. Pulse nie odczytuje domyślnego pliku konfiguracyjnego, gdy istnieje niestandardowy plik konfiguracyjny - dlatego pierwsza linia powyżej zawiera domyślny plik konfiguracyjny. W ten sposób pulseaudio nadal ładuje domyślną konfigurację jako pierwszą.Uruchom,
pulseaudio -k
aby zabić bieżącą instancję pulseaudio, aby nowa została uruchomiona z nową konfiguracją.Jeśli w dowolnym momencie chcesz cofnąć zmiany tutaj, po prostu usuń
~/.config/pulse/default.pa
plik i uruchompulseaudio -k
.Jeśli chcesz, aby funkcja record-n-play była domyślnym ujściem dla wszystkich wyjść, możesz to zrobić, dodając jeszcze jeden wiersz na końcu
~/.config/pulse/default.pa
:W przypadku programów, w których pulseaudio już zapisało informacje, pamięta, na jakim urządzeniu wyjściowym używali ostatnio, więc będziesz musiał ręcznie przekonfigurować te, używając jednej z metod opisanych w odpowiedzi KrisWebDev.
źródło
Stworzyłem ten skrypt bash na podstawie odpowiedzi udzielonych przez @Waschtl i @KrisWebDev.
Dostępne tutaj: https://gist.github.com/ramast/4be3314bc73f28f55e3604497188b007
Jak używać?
Nowa wersja
Stworzyłem skrypt Pythona, który oferuje kilka ulepszeń w stosunku do starego. https://gist.github.com/ramast/c47bd5e57586e9c2deb74975e27089f0
Jak używać?
Po naciśnięciu Enter nagrywanie rozpocznie się natychmiast. jeśli do czasu wciśnięcia wejdziesz aplikacja została już zatrzymana (np. zamknąłeś mplayera) skrypt zaczeka, aż aplikacja pojawi się ponownie i rozpocznie nagrywanie.
Jedyną wadą tego skryptu (w porównaniu do oryginalnego) jest to, że jeśli lista zawiera dwa wpisy o tej samej nazwie, skrypt nie będzie działał poprawnie. Na przykład
źródło