É possível controlar a gravação se o Audacity estiver rodando em segundo plano?

5

Eu gostaria de gravar áudio enquanto o Audacity está sendo executado em segundo plano, por exemplo, porque estou focado em outra janela. É possível controlar o início e a parada de uma gravação usando atalhos de teclado globais?

    
por orschiro 01.12.2016 / 20:06

3 respostas

5

O Audacity tem opções cli?

Infelizmente, olhando para man audacity , não mostra opções interessantes ou relevantes:

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

No entanto ...

simplesmente pausando / continuando o Audacity do cli funciona exatamente de forma semelhante ao pausar / continuar gravando

Eu testei a pausa do Audacity como um processo, com os comandos kill -stop <pid> e kill -cont <pid> . Ele fez o trabalho perfeitamente; Parou de gravar imediatamente, retomando imediatamente quando o processo foi continuado. Mesmo depois de 6 ou sete horas, ele interrompe / retoma a gravação imediatamente com esses comandos.

Adicionar os dois comandos às teclas de atalho explica exatamente o que você descreve.

Como usar

Adicione os dois comandos a seguir para teclas de atalho:

/bin/bash -c "kill -stop $(pgrep audacity)"

... para parar (pausar) a gravação e

/bin/bash -c "kill -cont $(pgrep audacity)"

... para continuar, e você tem suas próprias teclas de atalho para iniciar / parar (realmente pausar) a gravação.

Somente a inicial inicial da gravação precisa ser feita através da GUI do Audacity.

Adicionando teclas de atalho

Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione os dois comandos acima a duas teclas de atalho diferentes.

Estendendo opções

Claro que podemos ampliar opções, por exemplo

/bin/bash -c "kill -cont $(pgrep audacity) && notify-send Recording"

e

/bin/bash -c "kill -stop $(pgrep audacity) && notify-send Stopped"

...paramostrarumanotificaçãosobreoestadoatualouatémesmofazerumíconedepainelparamostraroestadoatual.Tudoépossível

Alémdisso,umscriptdealternância,conformesolicitadoemumcomentário

Oscriptabaixoiráalternaragravação.Adicione-aaumatecladeatalhoouinicie-adequalqueroutraforma.

Oscriptlêoestadodoprocessoatualdoarquivo/proc/<pid>/statusedecidequaldeveseroestadodedestino.

Alémdisso,oscriptnotificaousuáriosobreoqueaconteceemumanotificação(usandonotify-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])

Para usá-lo

  • Basta copiá-lo em um arquivo vazio, salve-o como toggle_record.py
  • Teste-o com o comando:

    python3 /path/to/toggle_record.py
    
  • Se tudo funcionar bem, adicione-o a uma tecla de atalho, conforme explicado anteriormente na resposta.

por Jacob Vlijm 01.12.2016 / 20:49
4

O Audacity pode ser controlado quando a janela não está em foco?

Na teoria, sim, já que tem um módulo de script , que aparentemente pode ser usado com a linguagem de script Perl, mas a partir de agora eu não vi uma feita, então há potencial para desenvolvedores habilitados em Perl escreverem uma.

Mas, como está, a resposta para sua pergunta é "não".

script de registro

O que é ótimo sobre a comunidade de código aberto é que sempre há uma alternativa. Nesse caso, arecord , que funciona na linha de comando. O que você vê abaixo é um script muito rápido que eu fiz, que se destina a um atalho de teclado. O uso é simples: pressione a combinação de teclas - a gravação é iniciada e pressione-a novamente para interromper a gravação.

O que é "codificado" neste script é o tipo de gravação padrão wav e a pasta ~/Music/records . Os usuários estão livres para editar este script, pois eles gostam de usar suas próprias opções / tipos de arquivos / locais, etc. Por favor, consulte a página arecord man para opções adicionais.

Eventualmente eu planejo reescrever este script em Python, o que permitirá um controle mais refinado dos diretórios do usuário, adicionar opções de linha de comando, talvez outras coisas. Por enquanto, 75% do trabalho precisa ser feito.

Abaixo está o código-fonte do script que também está disponível no meu repositório do GitHub . Regras padrão para criar e usar scripts se aplicam: garanta que ele tenha permissões executáveis e esteja armazenado na sua pasta ~/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 "$@"

informações adicionais:

por Sergiy Kolodyazhnyy 01.12.2016 / 23:05
1

Sim. Você pode usar uma combinação de um script , xdotool , wmctrl e tecla de atalho do Ubuntu .

Primeiro, crie o arquivo para selecionar a janela de gravação e envie a chave de comando para essa janela.

Em seguida, atribua uma tecla de atalho para ativar o script.

O script

#!/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

Salve o script em uma área conveniente, como /usr/local/bin/hkrecord.sh

Atribuir a tecla de atalho

Primeiro, execute o script na linha de comando como um teste rápido. Em seguida, atribua o atalho de teclado global . Para especificar a janela (necessária apenas uma vez), execute:

$ ./hkrecord.sh getwindow

A execução de hkrecord.sh sem um argumento controlará a gravação.

Entre em System Settings - > keyboard e adicione um atalho de teclado personalizado. Escolha uma tecla de atalho que não esteja em conflito com seu programa de primeiro plano. Eu uso Shift + Ctrl + P .

Esta é a configuração do Atalho personalizado :

Name:        Hotkey Record
Command:     /usr/local/bin/hkrecord.sh

Coloquei as instruções como comentários no arquivo de script.

Como benefício adicional, a mesma tecla de atalho global pode ser usada para pausar a reprodução . Eu uso este sistema como um ditafone para escrever minhas anotações.

Eu tentei tornar o script muito simples para ser fácil de entender e personalizar. Completamente testado, funcionará perfeitamente.

Nota: Os agradecimentos vão para don_crissti ee George_Vasiliou ( link ) por me ajudarem com o GUI para selecionar a janela de registro.

    
por L. D. James 02.12.2016 / 20:14