Spring naar hoofdtekst

Geluiden op commando in GNOME

Geplaatst op door ,
Laatste aanpassing op .

Inleiding

Een behoorlijke tijd geleden werkte ik samen met een aantal andere programmeurs. Eén van hen had een klein programmaatje gemaakt dat met een druk op de knop een geluidje afspeelde. Het was in AutoIt geschreven, heette WavRunner.exe en zorgde voor de nodige hilariteit tijdens onze werkdag. Met name Homer Simpson was akoestisch goed vertegenwoordigd.

GNOME

Omdat ik GNU/Linux als besturingssysteem gebruik, kan ik onder Ubuntu (zonder al te grote omwegen) geen .exe bestanden uitvoeren. Ik ging op zoek naar een vergelijkbaar alternatief voor gebruik met de GNOME desktop.

Ik zag het niet zitten om een programma te schrijven dat continu op de achtergrond zou luisteren naar bepaalde toetscombinaties. In plaats daarvan bedacht ik, dat ik voor elke toets (en bijbehorend wav-bestand) een sneltoets zou kunnen toevoegen. Ik vond het commandline programma play dat een wav-geluidsbestand kan afspelen. Nu nog de sneltoets toevoegen…

dconf en dan?

Was het vroeger nog redelijk eenvoudig om via bepaalde XML-bestanden instellingen van GNOME te wijzigen, moet dit tegenwoordig via een binair opgeslagen database genaamd dconf. Gelukkig zijn er mensen die de moeite nemen om hier tegenaan te programmeren en ziedaar: een Perl-script dat alle bestaande sneltoetsen kan exporteren en importeren.

Script

Met bovengenoemd script als werkpaard heb ik onderstaande wrapper geschreven die voor alle wav-bestanden in een opgegeven map een sneltoets toevoegt. Als eerste worden alle bestaande sneltoetsen geëxporteerd. Al eerder door het script toegevoegde shortcuts worden weggefilterd. Dan volgt het toevoegen per wav-bestand. Tot slot wordt de volledige lijst opniieuw geïmporteerd.

Ik heb gekozen voor de toetscombinatie Ctrl + Shift + Alt + letter of cijfer. Je zou ook de Super-toets kunnen gebruiken, maar dat zorgde voor onvoorspelbaar gedrag in combinatie met het openen van programma's en vensters (Super + 1, Super + 2 etc.).

#!/bin/bash

GNOMESCRIPT='/path/to/keybindings.pl';
WAVFOLDER='/path/to/folder/containing/wav-files';

if [ ! -f "${GNOMESCRIPT}" ]; then
    echo "The GNOME-keys script could not be found.";
    exit 1;
fi

if [ ! -x "${GNOMESCRIPT}" ]; then
    echo "The GNOME-keys script is not executable.";
    exit 2;
fi

# Create a temporary file for exporting
EXPORTFILE="$( mktemp --suffix=.csv )";

# Export existing keyboard shortcuts
"${GNOMESCRIPT}" -e "${EXPORTFILE}";

# Create a temporary file for importing
IMPORTFILE="$( mktemp --suffix=.csv )";

# Filter out existing wavplay-shortcuts
grep -v 'wavplay' "${EXPORTFILE}" > "${IMPORTFILE}";

# Loop through folder
find "${WAVFOLDER%/}/" -maxdepth 1 -iname "?.wav" -print | while read i
do
  F="$( basename ${i} )";

  # Add a shortcut for each wav-file
  echo -e \
  "custom\t'wavplay-${F%%.wav}'\t'play ${i}'\t'<Primary><Shift><Alt>${F%%.wav}'" \
  >> "${IMPORTFILE}";
done

# Import existing and new keyboard shortcuts
"${GNOMESCRIPT}" -i "${IMPORTFILE}";

# Clean up
rm "${EXPORTFILE}" "${IMPORTFILE}"

# Exit normally
exit 0;

Let op

De namen van de geluidsbestanden mogen uit slechts één letter of cijfer bestaan. Deze aanpak werkt dus alleen voor de toetsen A-Z en 0-9, maar dat mag de pret niet drukken. Met 36 verschillende geluiden kom je een heel eind :-)

Inhoudsopgave

Atom-feed Atom-feed van FWiePs weblog

Artikelen


Doorzoek de onderstaande categorieën om de lijst met artikelen te filteren.