Blog der Heimetli Software AG

Ein bash-Script steuert den omxplayer

Das Ziel war, die Lautstärke des omxplayers durch einen GPIO zu kontrollieren. Wenn ein Relais am GPIO anzieht, soll die Lautstärke sinken, und wenn das Relais abfällt wieder steigen.

Auf der Kommandozeile kann man den Pegel durch die Tasten '-' und '+' kontrollieren. Diese Tasten senken bzw. erhöhen die Lautstärke um 3dB pro Anschlag.

Weil der GPIO nicht ohne weiteres Tastendrücke simulieren kann, habe ich das folgende Script geschrieben. Es liest den ausgewählten GPIO und stellt bei jeder Pegeländerung die gewünschte Lautstärke ein. Damit der Uebergang einigermassen sanft erfolgt, wird nach jedem 'Tastendruck' eine halbe Sekunde gewartet.

Das Script

Weil es einen GPIO liest, muss es mit sudo ausgeführt werden, damit es die nötigen Rechte für den Zugriff hat.

Die Kommentare im Script sollten eigentlich Dokumentation genug sein.

Den GPIO können Sie auf Zeile 3 einstellen. Auf Zeile 31 wird die Anzahl der Stufen festgelegt und auf Zeile 34 wie schnell die Lautstärke ändert.

Auf meinem alten Raspbian auf dem Raspberry 2 kennt der omxplayer übrigens die Option --loop noch nicht. Wenn sich der Player über diese Option beschwert, dann ist es Zeit für einen Upgrade ;-)

#!/bin/bash

# The GPIO that controls the sound volume
pin=17

# Configure the GPIO as input
echo $pin > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio$pin/direction

# Read the state of the input
previous=$(cat /sys/class/gpio/gpio$pin/value)

# Loop forever
while true
do
  # Read the input
  state=$(cat /sys/class/gpio/gpio$pin/value)

  # If the state is not the same as the previous state
  if [ $state -ne $previous ]
  then
    # Determine the control character
    if [ $state -eq "1" ]
    then
      ch='+'
    else
      ch='-'
    fi
    
    # Turn the volume up or down in five steps
    for i in {1..5}
    do
      echo -n $ch
      sleep 0.5
    done
  fi

  # Wait a bit to keep the system load low
  sleep 0.5

  # Update the previous state for the next round
  previous=$state

done | omxplayer --loop  '/usr/share/scratch/Media/Sounds/Music Loops/Garden.mp3'

Nicht abtippen!

Mit dem folgenden Link Download des Scripts können Sie das Script auf Ihren Raspberry holen.

Denken Sie dran, dass es ausführbar sein muss wenn es aufgerufen wird.