Можно ли контролировать запись, если Audacity работает в фоновом режиме?
Я хотел бы записывать звук, когда Audacity работает в фоновом режиме, например, потому что я сфокусирован на другом окне. Можно ли управлять началом и остановкой записи с помощью глобальных сочетаний клавиш?
3 ответа
Есть ли в 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
Тем не мение...
просто приостановка / продолжение Audacity из cli работает точно так же, как приостановка / продолжение записи
Я тестировал паузу Audacity как процесс с помощью команд kill -stop <pid>
а также kill -cont <pid>
, Это отлично сработало; он немедленно прекратил запись, возобновив немедленно, когда процесс был продолжен. Даже через 6 или 7 часов они сразу же прекращают / возобновляют запись с помощью этих команд.
Добавление двух команд к сочетаниям клавиш делает именно то , что вы описываете.
Как пользоваться
Добавьте следующие две команды для сочетаний клавиш:
/bin/bash -c "kill -stop $(pgrep audacity)"
... остановить (приостановить) запись и
/bin/bash -c "kill -cont $(pgrep audacity)"
... для возобновления, и у вас есть собственные сочетания клавиш для запуска / остановки (фактически паузы) записи.
Только начальный запуск записи должен быть сделан через графический интерфейс Audacity.
Добавление к сочетаниям клавиш
Выберите: "Системные настройки" > "Клавиатура" > "Ярлыки" > "Пользовательские ярлыки". Нажмите "+" и добавьте две команды выше к двум различным сочетаниям клавиш.
Варианты расширения
Конечно, мы можем расширить возможности, например,
/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
Если все работает нормально, добавьте его к сочетанию клавиш, как объяснено ранее в ответе.
Можно ли контролировать Audacity, когда его окно не в фокусе?
Теоретически, да, поскольку у него есть модуль сценариев, который, очевидно, может использоваться с языком сценариев Perl, но на данный момент я не видел ни одного созданного, поэтому у опытных разработчиков на Perl есть возможность его написать.
Но на самом деле ответ на ваш вопрос "нет".
сценарий arecord
Что хорошего в сообществе open source, так это то, что всегда есть альтернатива. В этом случае, arecord
, который работает из командной строки. То, что вы видите ниже, это очень быстрый скрипт, который я сделал, и который предназначен для привязки к сочетанию клавиш. Использование простое: нажмите комбинацию клавиш - начинается запись, и нажмите ее еще раз, чтобы остановить запись.
Что "жестко закодировано" в этом скрипте по умолчанию wav
тип записи и ~/Music/records
папка. Пользователи могут свободно редактировать этот скрипт, так как им нравится использовать свои собственные параметры / типы файлов / местоположения и т. Д. Пожалуйста, обратитесь к arecord
Страница man для дополнительных опций.
Со временем я планирую переписать этот скрипт на Python, который позволит более детально управлять каталогами пользователей, добавлять параметры командной строки, возможно, другие вещи. На данный момент, это делает 75% работы, которая должна быть выполнена.
Ниже приведен исходный код скрипта, который также доступен в моем репозитории GitHub. Применяются стандартные правила для создания и использования сценариев: убедитесь, что он имеет права на выполнение и хранится в вашем ~/bin
папка
#!/bin/bash
# Author: Serg Kolo
# Date: Dec 1, 2016
# Purpose: simple script for recording audio with arecord
# Written for: https://Ask-ubuntu.ru/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 "$@"
Дополнительная информация:
Да. Вы можете использовать комбинацию скрипта, xdotool, wmctrl и горячей клавиши 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.
Это конфигурация для пользовательского ярлыка:
Название: Hotkey Record Команда: /usr/local/bin/hkrecord.sh
Я разместил инструкции в виде комментариев в файле скрипта.
Как дополнительное преимущество, та же самая Глобальная горячая клавиша может использоваться для приостановки воспроизведения. Я использую эту систему в качестве диктофона для записи своих записей.
Я попытался сделать скрипт очень простым, чтобы его было легко понять и настроить. Тщательно протестировано, оно будет работать без проблем.
Примечание. Выражаем благодарность don_crissti и George_Vasiliou ( https://unix.stackexchange.com/a/328548/81664) за помощь с графическим интерфейсом для выбора окна записи.