Answers:
尝试这样的事情:
在终端中输入
pacmd
(这是PulseAudio-Server的CLI),然后使用
list-sink-inputs
(您在其中获得正在运行的输入的索引)现在找到输入的索引。现在称为$ INDEX
可编写脚本的部分是:
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 -
pulseaudio -k
在终端中发出。
list-sink-inputs
请记下该sink
值。要交换回来,只需运行pactl move-sink-input $INDEX $SINK
。像pactl move-sink-input 4719 1
改善此线程的Waschtl答案,以便您既可以收听又可以记录应用程序的声音:
首先,我们寻找默认输出并将其接收器名称放入$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
然后,我们创建一个只有一个从属的组合接收器:$ DEFAULT_OUTPUT。应用程序(源)生成的声音将被转发到从属接收器(即实际输出),我们还将对其进行记录。它不同于不转发源声音的空接收器。
$ pactl load-module module-combine-sink \
sink_name=record-n-play slaves=$DEFAULT_OUTPUT \
sink_properties=device.description="Record-and-Play"
sink_properties
是可选的,如果在描述名称中使用空格,则可能会出错。
然后,我们可以使用Waschtl Answer的pactl move-sink-input ...
命令(用record-n-play代替steam),但是GUI 更简单(并且非常适合检查/解决问题):pavucontrol
$ sudo apt-get install pavucontrol
$ pavucontrol &
然后,我们在要录制的应用程序中播放一些声音。在pavucontrol
Playback标签中,我们在应用程序下拉列表中选择:“ Record-and-Play”。
最后,我们很高兴同时录制和收听!(la脚的 mp3示例,在前台运行)
$ parec --format=s16le -d record-n-play.monitor | \
lame -r --quiet -q 3 --lowpass 17 --abr 192 - "temp.mp3"
或者我们可以在后台录制并随时停止:
$ 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
注意:
pulseaudio -k
可以很好地将所有内容重置为会话的默认值。pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2
。编辑:请注意,由于Ubuntu 18(也许也为17),组合接收器趋向于成为默认的系统输出设备,而不是实际的输出设备。因此,当您使用系统托盘中的声音图标更改音量时,会影响录制的声音。解决方法:创建合并的接收器后,pavucontrol
在“输出”选项卡中打开。选择“查看:虚拟输出设备”,然后将合并的接收器的音量重置为100%。然后选择“查看:硬件输出设备”,然后在实际输出设备上按绿色图标“定义为替代”。
@Waschtl的答案太棒了。@ixtmixilix询问录制完成后如何恢复常规音频。这是我知道的最简单的方法:
安装并运行pavucontrol
GUI。您应该在其中的Playback选项卡下看到音频输出应用程序及其音量计。旁边会有一个按钮,显示它正在Null Output上播放。单击该按钮,然后将其更改为您的普通音频输出,本例中为“ 内置音频模拟立体声”。
这是您要查找的屏幕截图:
load-module
在@Waschtl的答案中运行命令以创建接收器之后,您也可以在以后使用此方法来设置录制。
如果您想一直提供record-n-play的功能,请进一步改善KrisWebDev的答案,首先找出默认输出:
pacmd list-sinks | grep -A1 "* index" | grep -oP "<\K[^ >]+"
这将输出类似:
alsa_output.pci-0000_00_1b.0.analog-stereo
接下来,创建一个文件~/.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"
请替换alsa_output.pci-0000_00_1b.0.analog-stereo
为从pacmd
命令获得的任何输出。当自定义配置文件存在时,Pulse不会读取默认配置文件-这就是上面第一行包含默认配置文件的原因。这样,pulseaudio仍将首先加载默认配置。
运行pulseaudio -k
以杀死当前的pulseaudio实例,以便使用新配置启动一个新实例。
如果您想随时撤消此处的更改,只需删除该~/.config/pulse/default.pa
文件并运行即可pulseaudio -k
。
如果您想让Record-n-play成为所有输出的默认接收器,则可以在以下内容的末尾添加另一行~/.config/pulse/default.pa
:
set-default-sink record-n-play
对于Pulseaudio已经存储了信息的程序,它会记住它们最后使用的输出设备,因此您必须使用KrisWebDev答案中描述的方法之一手动重新配置这些设备。
我已经根据@Waschtl和@KrisWebDev答案提供的答案创建了该bash脚本。
在这里可用:https : //gist.github.com/ramast/4be3314bc73f28f55e3604497188b007
如何使用?
$ ./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
我创建了一个python脚本,该脚本比旧的有了一些改进。 https://gist.github.com/ramast/c47bd5e57586e9c2deb74975e27089f0
如何使用?
$ ./pulse-recorder.py
1 - ALSA plug-in [mplayer]
2 - AudioIPC Server
Please enter a number: 1
Your selection was: ALSA plug-in [mplayer]
Please press enter when you are ready to start
当您按Enter键时,录制将立即开始。如果在您按下Enter键时应用程序已经停止(例如,您关闭了mplayer),脚本将等到应用程序再次出现并开始记录。
该脚本(相对于原始脚本)的唯一缺点是,如果列表包含两个具有相同名称的条目,则该脚本将无法正常运行。例如
$ ./pulse-recorder.py
1 - ALSA plug-in [mplayer]
2 - ALSA plug-in [mplayer]