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?
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
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.
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.
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.
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"
... 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
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])
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.
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".
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 "$@"
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.
#!/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
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.