web-dev-qa-db-fra.com

Est-il possible de contrôler l'enregistrement si Audacity s'exécute en arrière-plan?

J'aimerais enregistrer de l'audio pendant qu'Audacity s'exécute en arrière-plan, par exemple. parce que je suis concentré sur une autre fenêtre. Est-il possible de contrôler le début et la fin d'un enregistrement à l'aide de raccourcis clavier globaux?

5
orschiro

Audacity a-t-il des options cli?

Malheureusement, la recherche dans man audacity ne montre aucune option intéressante ou pertinente:

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

Pourtant...

mettre simplement en pause/continuer Audacity de cli fonctionne exactement de la même manière que mettre en pause/continuer l'enregistrement (-)

J'ai testé la mise en pause d'Audacity en tant que processus, avec les commandes kill -stop <pid> et kill -cont <pid>. Il a parfaitement fait le travail. il a immédiatement arrêté d’enregistrer et repris immédiatement lorsque le processus a été poursuivi. Même après 6 ou 7 heures, il arrête/reprend l'enregistrement immédiatement avec ces commandes.

L'ajout des deux commandes aux touches de raccourci fait exactement ce que vous décrivez.

Comment utiliser

Ajoutez les deux commandes suivantes aux touches de raccourci:

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

... pour arrêter (mettre en pause) l'enregistrement, et

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

... pour reprendre et vous avez vos propres touches de raccourci pour démarrer/arrêter (mettre en pause) l'enregistrement.

Seul le démarrage initial de l'enregistrement doit être effectué via l'interface graphique Audacity.

Ajout aux raccourcis clavier

Choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez les deux commandes ci-dessus à deux touches de raccourci différentes.

Options d'extension

Bien sûr, nous pouvons étendre les options, par exemple.

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

et

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

enter image description here

... pour afficher une notification sur l'état actuel, ou même créer une icône de panneau pour afficher l'état actuel. Tout est possible


En outre, un script de basculement, comme demandé dans un commentaire

Le script ci-dessous va basculer l'enregistrement. Ajoutez-le à une touche de raccourci ou lancez-le d'une autre manière.

Le script lit l'état du processus en cours à partir du fichier /proc/<pid>/status et détermine ce que doit être l'état ciblé.

De plus, le script indique à l'utilisateur ce qui se passe dans une notification (en utilisant 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])

Pour l'utiliser

  • Copiez-le simplement dans un fichier vide, enregistrez-le sous le nom toggle_record.py
  • Testez le avec la commande:

    python3 /path/to/toggle_record.py
    
  • Si tout fonctionne bien, ajoutez-le à une touche de raccourci, comme expliqué précédemment dans la réponse.

5
Jacob Vlijm

Audacity peut-il être contrôlé lorsque sa fenêtre n'est pas au point?

En théorie, oui, car il a un module de script , qui peut apparemment être utilisé avec le langage de script Perl, mais pour le moment je n'en ai pas encore créé, il existe donc un potentiel pour les compétences en Perl. les développeurs à en écrire un.

Mais en l'état, la réponse à votre question est "non".

un script d'enregistrement

Ce qui est génial avec la communauté open source, c'est qu'il y a toujours une alternative. Dans ce cas, arecord, qui fonctionne à partir de la ligne de commande. Ce que vous voyez ci-dessous est un script très rapide que j'ai créé et qui est destiné à être lié à un raccourci clavier. L'utilisation est simple: appuyez sur la combinaison de touches - l'enregistrement commence et appuyez à nouveau pour arrêter l'enregistrement.

Ce qui est "codé en dur" dans ce script est le type d'enregistrement wav et le dossier ~/Music/records par défaut. Les utilisateurs sont libres d’éditer ce script car ils préfèrent utiliser leurs propres options/types de fichiers/emplacements, etc. Veuillez consulter la page de manuel arecord pour des options supplémentaires.

Finalement, je prévois de réécrire ce script en Python, ce qui permettra un contrôle plus fin des répertoires des utilisateurs, ajoutera des options de ligne de commande, peut-être autre chose. Pour l'instant, 75% du travail doit être fait.

Vous trouverez ci-dessous le code source du script, également disponible sur my référentiel GitHub . Les règles standard pour la création et l'utilisation de scripts s'appliquent: assurez-vous qu'il dispose des autorisations nécessaires et qu'il est stocké dans votre dossier ~/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 "$@"

information additionnelle:

4

Oui. Vous pouvez utiliser une combinaison de un script , xdotool , wmctrl et le raccourci clavier d'Ubuntu .

Créez d'abord le fichier pour sélectionner la fenêtre d'enregistrement et envoyez la clé de commande à cette fenêtre.

Attribuez ensuite un raccourci clavier pour activer le script.

Le scénario

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

Enregistrez le script dans une zone pratique telle que /usr/local/bin/hkrecord.sh

Attribuer le raccourci clavier

Commencez par exécuter le script à partir de la ligne de commande en guise de test rapide. Attribuez ensuite le raccourci clavier global . Pour spécifier la fenêtre (une seule fois nécessaire), exécutez:

$ ./hkrecord.sh getwindow

Lancer hkrecord.sh sans argument contrôlera l'enregistrement.

Allez dans System Settings -> keyboard et ajoutez un raccourci clavier personnalisé. Choisissez une touche de raccourci qui ne sera pas en conflit avec votre programme de premier plan. j'utilise Shift+Ctrl+P.

C'est la configuration pour le raccourci personnalisé :

 Nom: touche de raccourci Enregistrer 
 Commande: /usr/local/bin/hkrecord.sh

J'ai placé les instructions sous forme de commentaires dans le fichier de script.

Un avantage supplémentaire est que le même raccourci clavier global peut être utilisé pour suspendre la lecture . J'utilise ce système comme un dictaphone pour écrire à partir de mes notes enregistrées.

J'ai essayé de rendre le script très simple pour qu'il soit facile à comprendre et à personnaliser. Bien testé, il fonctionnera parfaitement.

Remarque: Merci à don_crissti et à George_Vasiliou ( https://unix.stackexchange.com/a/328548/81664 ) de m'avoir aidé à utiliser l'interface graphique pour la sélection du fenêtre d'enregistrement.

1
L. D. James