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

Я просто решил это, скопировав фоновое изображение в папку / usr / share / backgrounds (с pkexec nautilus - ленивым мной или лучше с sudo cp /path/to/image.jpg /usr/share/backgrounds). После этого я изменил фоновое изображение Unity в обычном режиме. Вы должны сделать это последнее изменение для любого менеджера рабочего стола, который у вас есть в вашей системе. Кроме того, я думаю, что изображение должно быть вне папки пользователя.

Это сработало для меня.

1
задан 30 July 2017 в 22:52

2 ответа

Можно ли контролировать Audacity, когда его окно не находится в фокусе?

Теоретически, да, поскольку в нем есть скриптовый модуль, который, по-видимому, может использоваться с языком сценариев Perl, я не видел ни одного, поэтому есть потенциал для разработчиков Perl-специалистов, чтобы написать их.

Но как бы то ни было, ответ на ваш вопрос «нет».

arecord Script

Что хорошего в сообществе с открытым исходным кодом, так это то, что всегда есть альтернатива. В этом случае arecord, который работает из командной строки. То, что вы видите ниже, - это очень быстрый скрипт, который я создал, который предназначен для привязки к сочетанию клавиш. Использование просто: нажмите комбинацию клавиш - начнется запись и снова нажмите ее, чтобы остановить запись.

Что такое «жестко закодированное» в этом скрипте, это тип записи по умолчанию wav и ~/Music/records. Пользователи могут свободно редактировать этот скрипт, так как им нравится использовать свои собственные параметры / типы файлов / местоположения и т. Д. Для дополнительных опций см. Справочную страницу arecord.

В конце концов я планирую переписать этот скрипт в Python, который позволит более мелкомасштабный контроль каталогов пользователей, добавить параметры командной строки, возможно, другие вещи. На данный момент это составляет 75% работы.

Ниже приведен исходный код скрипта, который также доступен на моем скриптовом модуле . Стандартные правила для создания и использования скриптов применяются: убедитесь, что у него есть исполняемые разрешения и сохранены в вашей папке ~/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 May 2018 в 03:43
Да. Вы можете использовать комбинацию скриптов, 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

Я разместил инструкции как комментарии в файле сценария.

В качестве дополнительного преимущества можно использовать ту же самую глобальную горячую клавишу для Custom Shortcut . Я использую эту систему как диктофон для записи из моих записанных заметок.

Я попытался сделать скрипт очень простым, чтобы его было легко понять и настроить.

Примечание: Спасибо за то, что don_crissti и George_Vasiliou (https://unix.stackexchange.com/a/328548/81664) помогли мне с графическим интерфейсом для выбора окно записи.

1
ответ дан 23 May 2018 в 03:43
  • 1
    Теоретически хороший вариант, но в настоящее время он не работает на моем Unity / 16.04). Я полагаю, что xdotool 's xdotool key --window (или фактически то, как вы ищите окно), вероятно, простудится. Если я добавлю echo $windowid к скрипту, я получу 7 (!) Разных оконных -id, которые, очевидно, являются ложными (Unity), и сценарий полностью завершается. Всякий раз, когда я смотрю на соответствующее окно -id в wmctrl и выполняю команду напрямую, он работает. Я бы предложил искать соответствующее окно с помощью pid и использовать wmctrl. Добавьте уведомление, и у вас есть победитель. – Jacob Vlijm 2 December 2016 в 23:35
  • 2
    @JacobVlijm Я обновил сценарий примерно в то же время, когда вы разместили. Я добавил опцию изолировать только одно окно, если найдено несколько окон. Удостоверьтесь, что у него есть большая часть окна, чтобы отличить его от похожих окон. – L. D. James 2 December 2016 в 23:38
  • 3
    Я имею в виду, что вам нужно найти окно из wmctrl -lp, ища совпадение с pgrep audacity. Это 100% рабочий матч. – Jacob Vlijm 2 December 2016 в 23:48
  • 4
    @JacobVlijm Я замечаю, что xdotool не распознает окно по названию «Audacity». Используйте параметр сохранения, чтобы сохранить проект или файл в уникальном имени. Я уже добавил эту информацию в ответ. – L. D. James 2 December 2016 в 23:49
  • 5
    действительно не нужно, просто найдите строку в wmctrl -lp, в которой найден pid смелости, всегда работает, если есть одно окно. – Jacob Vlijm 2 December 2016 в 23:51

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

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