Можно ли контролировать запись, если 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) за помощь с графическим интерфейсом для выбора окна записи.

Другие вопросы по тегам