我想在 Audacity 在后台运行时录制音频,例如因为我的焦点在另一个窗口上。是否可以使用全局键盘快捷键控制录制的开始和停止?
答案1
Audacity 有 cli 选项吗?
不幸的是,查看man audacity
并没有发现任何有趣或相关的选项:
OPTIONS
-help display a brief list of command line options
-version display the audacity version number
-test run self diagnostics tests (only present in development
builds)
-blocksize nnn
set the audacity block size for writing files to disk to nnn
bytes
然而...
简单地从 CLI 暂停/继续 Audacity 的工作原理与暂停/继续录制完全相同
kill -stop <pid>
我使用命令和测试了暂停 Audacity 的过程kill -cont <pid>
。它完美地完成了工作;它立即停止录制,并在继续该过程时立即恢复。即使在 6 或 7 小时后,它也会使用这些命令立即停止/恢复录制。
将这两个命令添加到快捷键确切地你描述的。
如何使用
将以下两个命令添加到快捷键:
/bin/bash -c "kill -stop $(pgrep audacity)"
...停止(暂停)录制,然后
/bin/bash -c "kill -cont $(pgrep audacity)"
...恢复,并且您有自己的快捷键来开始/停止(实际上是暂停)录制。
只有初始开始录音需要通过 Audacity GUI 完成。
添加快捷键
选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。点击“+”,将上面的两个命令分别添加到两个不同的快捷键上。
扩展选项
当然我们可以扩展选项,例如
/bin/bash -c "kill -cont $(pgrep audacity) && notify-send Recording"
和
/bin/bash -c "kill -stop $(pgrep audacity) && notify-send Stopped"
...显示当前状态的通知,甚至制作面板图标来显示当前状态。一切皆有可能
此外,根据评论中的要求,还提供一个切换脚本
以下脚本将切换录制。将其添加到快捷键或以其他方式启动。
该脚本从文件中读取当前进程状态/proc/<pid>/status
,并决定目标状态应该是什么。
此外,脚本还会通过通知告知用户发生了什么(使用notify-send
)。
#!/usr/bin/env python3
import subprocess
try:
pid = subprocess.check_output(["pgrep", "audacity"]).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
else:
state = "(stopped)" in open("/proc/"+pid+"/status").read()
if state == True:
cmd = ["kill", "-cont", pid]; msg = "Recording"
else:
cmd = ["kill", "-stop", pid]; msg = "Pausing"
subprocess.Popen(cmd)
subprocess.Popen(["notify-send", msg])
使用它
- 只需将其复制到空文件中,然后另存为
toggle_record.py
使用以下命令测试运行:
python3 /path/to/toggle_record.py
如果一切正常,请将其添加到快捷键,如答案中前面所述。
答案2
当 Audacity 窗口不在焦点上时可以控制它吗?
从理论上讲,是的,因为它有一个脚本模块,它显然可以与 Perl 脚本语言一起使用,但截至目前我还没有看到一个,因此 Perl 熟练的开发人员有可能编写一个。
但事实上,你的问题的答案是“不”。
arecord 脚本
开源社区的优点在于总有替代方案。在本例中,arecord
,它从命令行运行。下面是我编写的一个非常快速的脚本,旨在绑定到键盘快捷键。使用方法很简单:按下组合键 - 开始录制,再次按下组合键停止录制。
此脚本中“硬编码”的是默认的wav
录制类型和~/Music/records
文件夹。用户可以自由编辑此脚本,因为他们喜欢使用自己的选项/文件类型/位置等。请查阅arecord
手册页以了解更多选项。
最终我计划用 Python 重写这个脚本,这样可以更精细地控制用户的目录,添加命令行选项,也许还有其他功能。目前,这已经完成了 75% 的工作。
以下是脚本的源代码,也可以在我的GitHub 存储库. 创建和使用脚本的标准规则适用:确保它具有可执行权限并存储在您的~/bin
文件夹中
#!/bin/bash
# Author: Serg Kolo
# Date: Dec 1, 2016
# Purpose: simple script for recording audio with arecord
# Written for: https://askubuntu.com/q/855893/295286
record_audio()
{
# Set up some variables to control arecord here
# Please remember to quote the variables
# and pay attention to slashes in file paths
filetype="wav"
filename="record_$(date +%H_%M_%m_%d_%Y)"
directory="$HOME/Music/recordings/"
if ! [ -d "$directory" ];
then
mkdir "$directory"
fi
# This part will initiate recording of timestamped
# please see arecord's man page for other options
notify-send "Recording started"
exec arecord -t "$filetype" "$directory""$filename"."$filetype"
}
main()
{
if pgrep -f "arecord" ;
then
pkill -f "arecord" && notify-send "Recording stopped"
else
record_audio
fi
}
main "$@"
附加信息:
答案3
是的。你可以使用脚本,工具,控制端和Ubuntu 的热键。
首先创建文件以选择录制窗口并将命令键发送到该窗口。
然后指定一个热键来激活该脚本。
剧本
#!/bin/bash
# Specify the Window running your recording by running
# "./hkrecord.sh getwindowid" from the command line.
# Alternatively you can edit the ~/recordfile and place your own string. This
# first line of the fie will be used
# Ensure you have the following "xdotool" and "wmctrl" installed.
recordfile="$HOME/recordfile"
getwindowid(){
windowid=$(wmctrl -lp | awk '{$2=$3=$4=":"; print $0}'| awk -F: \
'{print $1"\n"$4}' | zenity --list --column="No" --height=800 --width=1000 \
--column="Select your choice" \
--text="Text above column(s)" --hide-column=1 --title="My menu" 2>/dev/null)
[[ "$windowid" ]] && sed -i "1i @$windowid" $recordfile || \
echo "No Window selected"
exit
}
if [ ! $# -eq 0 ]; then
if [[ "x$1" == *"get"* ]]; then
echo "Getting the window id"
getwindowid
exit
fi
fi
recordwindow="$(head -n1 $recordfile)"
if [ "$(echo $recordwindow | egrep '@0x')" ]; then
windowid=$(echo $recordwindow | sed "s/\@//")
else
windowid=$(echo $(wmctrl -lp|egrep -i $recordwindow)|head -n1|\
awk '{print $1}')
echo "$windowid|$recordfwindow" # debug line... can be commented out.
fi
echo "Using WindowID: $windowid" # debug line... can be commented out.
if [ -z $windowid ]; then
espeak "Can't locate specified window!"
espeak "Exiting..."
exit
fi
xdotool key --window $windowid p
将脚本保存到方便的区域,例如/usr/local/bin/hkrecord.sh
分配热键
首先从命令行运行脚本作为快速测试。然后分配全局键盘快捷键。要指定窗口(仅需要一次)运行:
$ ./hkrecord.sh getwindow
不带参数运行hkrecord.sh
将控制录音。
进入System Settings
-> 并添加keyboard
自定义键盘快捷键。选择一个不会与前台程序冲突的热键。我使用Shift++ Ctrl。P
这是自定义快捷方式:
名称:热键记录 命令:/usr/local/bin/hkrecord.sh
我将说明作为注释放在脚本文件中。
另一个好处是,同一个全局热键可以用于暂停播放.我使用这个系统作为录音机来记录我录制的笔记。
我尝试让脚本变得非常简单,以便于理解和自定义。经过彻底测试,它将无缝运行。
注:感谢 don_crissti 和 George_Vasiliou (https://unix.stackexchange.com/a/328548/81664) 帮助我选择记录窗口的 GUI。