如果 Audacity 在后台运行,是否可以控制录音?

如果 Audacity 在后台运行,是否可以控制录音?

我想在 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++ CtrlP

这是自定义快捷方式

名称:热键记录
命令:/usr/local/bin/hkrecord.sh

我将说明作为注释放在脚本文件中。

另一个好处是,同一个全局热键可以用于暂停播放.我使用这个系统作为录音机来记录我录制的笔记。

我尝试让脚本变得非常简单,以便于理解和自定义。经过彻底测试,它将无缝运行。

注:感谢 don_crissti 和 George_Vasiliou (https://unix.stackexchange.com/a/328548/81664) 帮助我选择记录窗口的 GUI。

相关内容