Действительно ли возможно управлять записью, если Смелость работает в фоновом режиме?

Я хотел бы записать аудио, в то время как Смелость работает в фоновом режиме, например, потому что я фокусируюсь на другом окне. Действительно ли возможно управлять запуском и остановкой записи с помощью глобальных сочетаний клавиш?

5
задан 30 July 2017 в 12:52

3 ответа

Смелость имеет 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 работает точно так же к приостановке/продолжению записи

Я протестировал приостанавливающуюся Смелость как процесс с командами 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"

enter image description here

... показать уведомление на текущем состоянии или даже сделать значок панелей для показа текущего состояния. Что-либо возможно


Кроме того, сценарий переключателя, согласно просьбе в комментарии

Сценарий ниже переключит запись. Добавьте его или к сочетанию клавиш или запустите его любым другим способом.

Сценарий читает состояние текущего процесса из файла /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
    
  • Если все хорошо работает, добавляет это к сочетанию клавиш, как объяснено ранее в ответе.

5
ответ дан 23 November 2019 в 08:51

Смелостью можно управлять когда ее окно не в фокусе?

В теории, да, так как это имеет модуль сценариев , который, по-видимому, может использоваться с языком сценариев 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 "$@"

дополнительная информация:

4
ответ дан 23 November 2019 в 08:51

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

1
ответ дан 23 November 2019 в 08:51

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

Похожие вопросы: