Pertanyaan Catat hasil program dengan PulseAudio


Saya ingin merekam output program dengan PulseAudio menggunakan skrip command line / bash. Penting untuk tidak mencatat semua output, tetapi hanya output dari satu program tertentu.

Saya pikir saya harus membuat null-sink baru dan memindahkan output program ke sink baru ini. Daripada tahu parec untuk menggunakan monitor khusus ini untuk merekam.

Langkah pertama akan menjadi sesuatu seperti ini:

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

Tapi bagaimana cara memindahkan output program sekarang ke sink ini?
Dan bagaimana cara merekam sink khusus dengan skrip bash?


43
2017-09-10 15:49


asal




Jawaban:


Coba sesuatu seperti ini:

Di terminal masuk

pacmd

(ini adalah CLI dari PulseAudio-Server) kemudian gunakan

list-sink-inputs

(di mana Anda mendapatkan indeks dari input yang sedang berjalan) Sekarang cari indeks input Anda. Sekarang disebut sebagai $ INDEX

bagian yang dapat ditulis adalah:

pactl load-module module-null-sink sink_name=steam
pactl move-sink-input $INDEX steam
parec -d steam.monitor | oggenc -b 192 -o steam.ogg --raw -

Penjelasan:

  • Perintah pertama akan menambahkan null-sink seperti yang sudah Anda ketahui.
  • Perintah kedua memindahkan masukan wastafel dari wastafel audio standar Anda ke uap
  • Perintah ketiga mencatat monitor dari steam perangkat (-d) dan menempatkan output (raw-wave-stream) ke oggenc, yang mengkodekan aliran gelombang ini ke file-oga. (untuk penggunaan mp3 lumpuh)

46
2017-09-10 18:10



Brilian, terima kasih banyak atas jawaban yang luar biasa ini! :) - Force
bisakah Anda menjelaskan cara membatalkan operasi ini? sink null saya masih dipetakan ke berbagai aplikasi, dan sekarang saya tidak memiliki suara! - ixtmixilix
@ixtmixilix: cara termudah untuk mengembalikan semua pengaturan ke default adalah dengan hanya mematikan dan memulai ulang server pulseaudio. Jika diatur ke autospawn (ini adalah default) Anda cukup mengeluarkan pulseaudio -k di terminal. - Takkat
@ixtmixilix Ketika Anda menjalankan list-sink-inputs perhatikanlah sink nilai. Untuk menukar kembali jalankan saja pactl move-sink-input $INDEX $SINK. Sesuatu seperti pactl move-sink-input 4719 1 - Ciaran


Memperbaiki Jawaban waschtl dari utas ini sehingga Anda bisa KEDUA DENGARKAN DAN MEREKA suara aplikasi:

Pertama, kita mencari output default dan memasukkan nama sinknya $DEFAULT_OUTPUT:

$ pacmd list-sinks | grep -A1 "* index"
  * index: 1
    name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
$ DEFAULT_OUTPUT=$(pacmd list-sinks | grep -A1 "* index" | grep -oP "<\K[^ >]+")
$ echo $DEFAULT_OUTPUT
alsa_output.pci-0000_00_1b.0.analog-stereo

Kemudian, kita buat a wastafel gabungan yang hanya memiliki satu budak: $ DEFAULT_OUTPUT. Suara yang dihasilkan oleh aplikasi (sumber) akan diteruskan ke slave sink (mis. Output nyata), dan kami juga akan merekamnya. Ini berbeda dari a sink null dimana sumber suara tidak diteruskan.

$ pactl load-module module-combine-sink \
  sink_name=record-n-play slaves=$DEFAULT_OUTPUT \
  sink_properties=device.description="Record-and-Play"

sink_properties bersifat opsional dan mungkin bug jika Anda menggunakan spasi di nama deskripsi.

Kemudian, kita bisa menggunakannya pactl move-sink-input ... perintah dari Jawaban waschtl (dengan merekam-n-play dari pada uap) tetapi GUI pavucontrol lebih sederhana (dan bagus untuk memeriksa / mengatasi masalah):

$ sudo apt-get install pavucontrol
$ pavucontrol &

Kemudian, kami memainkan beberapa suara di aplikasi yang ingin kami rekam. Di pavucontrol  Putar kembali tab, kita pilih dalam daftar dropdown aplikasi: "Rekam-dan-Putar".

Akhirnya, kami baik untuk merekam dan mendengarkan pada saat bersamaan! (timpang Contoh mp3, jalankan di latar depan)

$ parec --format=s16le -d record-n-play.monitor | \
  lame -r --quiet -q 3 --lowpass 17 --abr 192 - "temp.mp3"

Atau kita dapat merekam di latar belakang dan berhenti kapan saja:

$ parec --format=s16le -d record-n-play.monitor | \
  lame -r --quiet -q 3 --lowpass 17 --abr 192 - "temp.mp3" \
   > /dev/null &1>/dev/null
$ killall -q parec lame

NB:

  • Untuk meng-unmess semua atau coba ulang prosedur: Hapus atau atur ulang bak cuci dengan menggunakan jawaban ini. pulseaudio -k berfungsi baik untuk mengatur ulang semua ke default sesi.
  • Jika kita mengubah output default di Pengaturan Sistem Suara, pengaturan Pemutaran aplikasi kustom akan ditimpa dan kita harus kembali di pavukontrol untuk mengaturnya kembali ke antarmuka gabungan.
  • Untuk dapat mendengarkan suara dari beberapa antarmuka "nyata" (misalnya headphone, output HDMI, dll ...), kita harus menyertakan semua output "nyata" yang mungkin kita gunakan untuk mendengarkan, seperti merekam-n-playbudak slink, seperti: pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2.

EDIT: Waspadalah, karena Unbuntu 18 (mungkin 17 juga), sink gabungan cenderung menjadi perangkat output sistem default, bukan perangkat output nyata. Jadi ketika Anda mengubah volume menggunakan ikon suara di baki sistem, itu memengaruhi suara rekaman Anda. Penanganan Masalah: Setelah membuat sink gabungan, buka pavucontrol di tab Output. Pilih "Lihat: Perangkat Output Virtual" dan setel ulang volume suara dari wastafel gabungan menjadi 100%. Kemudian pilih "View: Hardware Output Devices" dan tekan ikon hijau "Definisikan sebagai alternatif" pada perangkat output nyata.


20
2018-01-24 10:41





Jawaban @ Waschtl luar biasa. @ixtmixilix bertanya tentang memulihkan audio biasa setelah perekaman selesai. Inilah cara termudah yang saya tahu:

Instal dan jalankan pavucontrol GUI. Anda harus melihat aplikasi audio-output dan volume meter di bawah Putar kembali tab di sana. Akan ada tombol di sebelahnya yang menunjukkan bahwa itu sedang diputar Output Null. Klik itu dan ubah ke output audio biasa Anda, Stereo Analog Audio yang Terpasang dalam hal ini.

Berikut ini screenshot dari apa yang Anda cari:

screenshot

Anda juga dapat menggunakan pendekatan ini untuk mengatur rekaman Anda di masa depan, setelah Anda menjalankan load-module perintah dalam jawaban @ Waschtl untuk membuat wastafel.


7
2018-03-02 18:02



Jika memungkinkan, unggah tangkapan layar Imgur dan hubungkan ke jawaban Anda. - Lucio
Meraih satu, terima kasih atas sarannya. - Jack O'Connor


Memperbaiki KrisWebDevJawabannya lebih lanjut, jika Anda ingin merekam-n-play untuk selalu tersedia, pertama cari tahu keluaran defaultnya:

pacmd list-sinks | grep -A1 "* index" | grep -oP "<\K[^ >]+"

yang akan menghasilkan sesuatu seperti:

alsa_output.pci-0000_00_1b.0.analog-stereo

Selanjutnya, buat file ~/.config/pulse/default.pa:

.include /etc/pulse/default.pa

load-module module-combine-sink sink_name=record-n-play slaves=alsa_output.pci-0000_00_1b.0.analog-stereo sink_properties=device.description="Record-and-Play"

Silakan ganti alsa_output.pci-0000_00_1b.0.analog-stereo dengan output apa pun yang Anda dapatkan dari pacmd perintah. Pulsa tidak membaca file konfigurasi default ketika file konfigurasi kustom ada - itulah mengapa baris pertama di atas termasuk file konfigurasi default. Dengan cara itu pulseaudio masih memuat konfigurasi default terlebih dahulu.

Menjalankan pulseaudio -k untuk membunuh instance pulseaudio saat ini, jadi yang baru dimulai dengan konfigurasi baru.

Jika suatu saat Anda ingin membatalkan perubahan di sini, hapus saja ~/.config/pulse/default.pa file dan jalankan pulseaudio -k.

Jika Anda ingin record-n-play menjadi sink default untuk semua output, Anda dapat melakukannya dengan menambahkan baris lain ke akhir ~/.config/pulse/default.pa:

set-default-sink record-n-play

Untuk program-program yang pulseaudio sudah memiliki informasi yang tersimpan, itu mengingat perangkat output apa pun yang mereka gunakan terakhir, jadi Anda harus secara manual mengkonfigurasi ulang menggunakan salah satu metode yang dijelaskan dalam jawaban KrisWebDev.


5
2017-07-19 08:56





Saya telah membuat skrip bash ini berdasarkan jawaban yang diberikan oleh @Waschtl dan jawaban @KrisWebDev.

Tersedia disini: https://gist.github.com/ramast/4be3314bc73f28f55e3604497188b007

Bagaimana cara menggunakan?

$ ./pulse-recorder.bash 
    index: 225
                application.name = "ALSA plug-in [mplayer]"
                module-stream-restore.id = "sink-input-by-application-name:ALSA plug-in [mplayer]"
Choose recording index: 225
temp.mp3 file already exist, replace (y/n)? y

2
2018-05-01 19:10



Jika Anda memiliki banyak output (misalnya speaker, beberapa headset, monitor audio), Anda dapat mengganti pada baris 21 dengan misalnya: default_output = alsa_output.pci-0000_00_1b.0.analog-stereo di mana ini dari keluaran daftar pacmd -sink - smaudet