Я хотел бы записать аудио, в то время как Смелость работает в фоновом режиме, например, потому что я фокусируюсь на другом окне. Действительно ли возможно управлять запуском и остановкой записи с помощью глобальных сочетаний клавиш?
К сожалению, изучение 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 работает точно так же к приостановке/продолжению записи
Я протестировал приостанавливающуюся Смелость как процесс с командами kill -stop <pid>
и kill -cont <pid>
. Это сделало задание отлично; это прекратило записывать сразу, возобновившись сразу, когда процесс был продолжен. Даже после 6 или семи часов, это останавливается/возобновляет записывать сразу же с этими командами.
Добавление двух команд к сочетаниям клавиш делает точно, что Вы описываете.
Добавьте следующие две команды к сочетаниям клавиш:
/bin/bash -c "kill -stop $(pgrep audacity)"
... остановить (пауза) запись, и
/bin/bash -c "kill -cont $(pgrep 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
Если все хорошо работает, добавляет это к сочетанию клавиш, как объяснено ранее в ответе.
В теории, да, так как это имеет модуль сценариев , который, по-видимому, может использоваться с языком сценариев Perl, но с прямо сейчас, я не видел сделанную ту, таким образом, существует потенциал для разработчиков в опыте в Perl для записи того.
, Но как это, ответ на Ваш вопрос является "нет".
, Что является большим о сообществе разработчиков ПО с открытым исходным кодом, - то, что всегда существует альтернатива. В этом случае, 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 "$@"
Да. Можно использовать комбинацию сценария, 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.
Это - конфигурация для Пользовательского Ярлыка:
Name: Hotkey Record Command: /usr/local/bin/hkrecord.sh
Я поместил инструкции как комментарии в файле сценария.
Как дополнительное преимущество, та же Глобальная Горячая клавиша может использоваться для приостановки воспроизведения. Я использую эту систему в качестве диктофона для записи из моих зарегистрированных примечаний.
Я пытался сделать сценарий очень простым быть легким понять и настроить. Полностью протестированный, это будет работать беспрепятственно.
Примечание: Спасибо выходит в don_crissti и и George_Vasiliou (https://unix.stackexchange.com/a/328548/81664) для помощи мне с GUI для выбора рекордного окна.