<span>ZeroBOY</span>bella
<span>ZeroBOY</span>bella

Menu

  • Anleitungen
    • DADDELKISCHDE
      • Einbau
      • Installation
      • Downloads
    • Kategorien
      • Technisches/Diagramme
      • Monitor
      • Steuerung
      • Sound
      • User Projekte
    • RTFM
      • LVL1 – Gehäuse
      • LVL2 – Steuerung
      • LVL3 – Strom
      • LVL4 – Komponenten
      • Glossar
  • Shop
  • Teile
    • Merch
    • Teileliste + Links
    • Raspberry Zero
      • Amazon
      • PiHut
      • PiMoroni
  • Downloads
    • ZeroBOY OS
  • Community
  • Info
    • Geschichte
    • AGBs
    • Versand und Zahlung
    • Datenschutzerklärung
    • Widerrufsbelehrung & Widerrufsformular
    • Shopvote Zertifiziert
    • Kontakt
    • Impressum
  • Translate
  • Wishlist
  • Checkout
  • My Account
User Login
13

Cart

Menu

Skip to content
  • Anleitungen
    • DADDELKISCHDE
      • Einbau
      • Installation
      • Downloads
    • Kategorien
      • Technisches/Diagramme
      • Monitor
      • Steuerung
      • Sound
      • User Projekte
    • RTFM
      • LVL1 – Gehäuse
      • LVL2 – Steuerung
      • LVL3 – Strom
      • LVL4 – Komponenten
      • Glossar
  • Shop
  • Teile
    • Merch
    • Teileliste + Links
    • Raspberry Zero
      • Amazon
      • PiHut
      • PiMoroni
  • Downloads
    • ZeroBOY OS
  • Community
  • Info
    • Geschichte
    • AGBs
    • Versand und Zahlung
    • Datenschutzerklärung
    • Widerrufsbelehrung & Widerrufsformular
    • Shopvote Zertifiziert
    • Kontakt
    • Impressum
  • Translate
  • Anleitungen
    • DADDELKISCHDE
      • Einbau
      • Installation
      • Downloads
    • Kategorien
      • Technisches/Diagramme
      • Monitor
      • Steuerung
      • Sound
      • User Projekte
    • RTFM
      • LVL1 – Gehäuse
      • LVL2 – Steuerung
      • LVL3 – Strom
      • LVL4 – Komponenten
      • Glossar
  • Shop
  • Teile
    • Merch
    • Teileliste + Links
    • Raspberry Zero
      • Amazon
      • PiHut
      • PiMoroni
  • Downloads
    • ZeroBOY OS
  • Community
  • Info
    • Geschichte
    • AGBs
    • Versand und Zahlung
    • Datenschutzerklärung
    • Widerrufsbelehrung & Widerrufsformular
    • Shopvote Zertifiziert
    • Kontakt
    • Impressum
  • Translate

Blog

Lautstärkeregelung über Potentiometer: Software Ansatz mit Teensy, Triggerhappy und Sabrant USB Soundkarte

10. November
by ZeroBOY-Admin
Sound

Motivation:

 

Benutzt man das Potentiometer direkt am Lautsprecher, so lässt sich nicht die Lautstärke der Kopfhörer beeinflussen. Das Potentiometer lässt sich nicht vor den Verstärker schalten (Also direkt hinter die Soundkarte). Tut man es dennoch so hat es kaum noch eine Wirkung auf die Lautstärke.

Mittels amixer lässt sich per Terminal leicht die Lautstärke einer Soundkarte regeln. Im Folgenden soll beschrieben werden, wie ich das Potentiometer über den Teensy als Eingabegerät nutze und dessen Eingaben mittels Triggerhappy in amixer-Konsolenbefehle umwandele.

 

Hardware:

 

Sabrant USB Soundkarte: http://www.amazon.de/Sabrent-External-Adapter-erforderlich-AU-MMSA/dp/B00IRVQ0F8

Teensy LC

 

Software:

Retropie 3.7

triggerhappy (bereits installiert)

 

  1. USB-Sound einrichten

 

1.1 Schließe die USB Soundkarte an!

1.2 Wenn Retropie hochgefahren ist, wechsel mit F4 ins Terminal oder benutze SSH.

1.3 Prüfe ob die Soundkarte erkannt wurde:

 

pi@retropie:~ $ lsusb

 

Die Ausgabe sieht dann in etwa so aus:

 

Bus 001 Device 007: ID 0d8c:0014 C-Media Electronics, Inc.

Bus 001 Device 004: ID 0424:2517 Standard Microsystems Corp. Hub

Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter

Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

 

Der C-Media Electronics Eintrag ist deine USB Soundkarte.

 

1.4 Nun prüfe die Priorität deiner USB Soundkarte im System, da amixer standardmäßig die Soundkarte mit der höchsten Priorität regelt::

 

pi@retropie:~ $ cat /proc/asound/modules

 

 

Die Ausgabe sieht dann so aus:

 

0 snd_bcm2835

1 snd_usb_audio

 

Wie du siehst ist deine USB Soundkarte nicht an Position 0 (höchste Priorität).

1.5 Wir können das ändern und das System zwingen die Soundkarten in einer anderen Reihenfolge zu laden. indem wir eine Sound-Konfigurationsdatei erstellen. Erstelle die Datei mit folgendem Befehl:

 

pi@retropie:~ $ sudo nano /etc/modprobe.d/alsa-base.conf

 

 

Das wird den nano-Texteditor aufrufen. Kopiere folgenden Text in die Datei:

 

options snd_usb_audio index=0

options snd_bcm2835 index=1

options snd slots=snd-usb-audio,snd-bcm2835

 

Danach drücke Strg+X um den Editor zu schließen. Beantworte den Speicherdialog mit Yes um die Änderungen zu speichern.

 

1.6 Starte das System neu und wechsel erneut ins Terminal mit F4.

1.7 Wenn alles richtig gemacht wurde solltest du folgende Ausgabe erhalten, wenn du diesen Befehl eintippst:

pi@retropie:~ $ cat /proc/asound/modules

Ausgabe:

0 snd_usb_audio

1 snd_bcm2835

 

1.8 Jetzt hast du die Priorität der Soundkarten geändert. Aber ohne Änderungen am Quellcode von Emulationstation wird Retropie immer nach einem Mixer mit dem Namen “PCM” suchen.

Unsere USB Soundkarte wird aber unter einem anderen Namen geführt (“Speaker” in meinem Fall).

Wir können das leicht umgehen, indem wir eine virtuelle Soundkarte einrichten, welche auf die USB-Karte zeigt. Gebe dazu Folgendes ein:

 

pi@retropie:~ $ sudo nano /etc/asound.conf

 

Kopiere folgenden Text in die Datei:

 

pcm.card0 {

type hw card 0

}

 

ctl.card0 {

type hw card 0

}

 

pcm.!default card0

 

Danach drücke Strg+X um den Editor zu schließen. Beantworte den Speicherdialog mit Yes um die Änderungen zu speichern.

 

Nun gebe “sudo reboot” ins Terminal ein um den Pi zu rebooten.

Nachdem der Pi hochgefahren ist, solltest du schon in der Lage sein die Sounds in den Menüs und Emulatoren zu hören.

 

  1. Potentiometer an Teensy anschließen

 

Ich habe das GameBoy Potentiometer benutzt, aber jedes andere Potentiometer sollte funktionieren.

 

Teensy 3.3V an Pot Line-in

Teensy Pin 21 an Pot Line-out

beliebiger Teensy GND-Pin an Pot GND

 

Problembehebung: Falls du verrauschte Werte vom Pot bekommst liegt das vielleicht daran, dass du Line-in und Line-out vertauscht hast, oder eine falsche Spannung anlegst.

 

  1. Teensy LC programmieren

 

3.1 Hier ist der Codeschnipsel den ich für meinen Teensy nutze, um die Ausgabe des Potentiometers zu interpretieren:

 

char volumeLVLs[21];

 

//Hotkeys für Triggerhappy

void setupVolumeKeys() {

volumeLVLs[0] = KEY_MINUS;        // 0%

volumeLVLs[1] = KEY_EQUAL;        // 5%

volumeLVLs[2] = KEY_LEFT_BRACE;   // 10%

volumeLVLs[3] = KEY_RIGHT_BRACE;  // 15%

volumeLVLs[4] = KEY_BACKSLASH;    // 20%

volumeLVLs[5] = KEY_SEMICOLON;    // 25%

volumeLVLs[6] = KEY_QUOTE;        // 30%

volumeLVLs[7] = KEY_TILDE;        // 35%

volumeLVLs[8] = KEY_COMMA;        // 40%

volumeLVLs[9] = KEY_PERIOD;       // 45%

volumeLVLs[10] = KEY_SLASH;       // 50%

volumeLVLs[11] = KEY_CAPS_LOCK;   // 55%

volumeLVLs[12] = KEY_END;         // 60%

volumeLVLs[13] = KEY_INSERT;      // 65%

volumeLVLs[14] = KEY_V;           // 70%

volumeLVLs[15] = KEY_T;           // 75%

volumeLVLs[16] = KEY_P;           // 80%

volumeLVLs[17] = KEY_SCROLL_LOCK; // 85%

volumeLVLs[18] = KEY_PRINTSCREEN; // 90%

volumeLVLs[19] = KEY_PAUSE;       // 95%

volumeLVLs[20] = KEY_I;           // 100%

}

 

int volumeLVL;

int deltaVolume=0;

int volumeKey=0;

float volumeRel=0;

 

void loop() {

 

volumeLVL=analogRead(21);

if(volumeLVL<4)volumeLVL=0;

if(volumeLVL>1019)volumeLVL=1023;

 

volumeRel=0.0195503421309873*volumeLVL;

deltaVolume=volumeKey-(int)volumeRel;

volumeKey=(int)volumeRel;

 

//Hotkey nur dann senden wenn sich der Wert am Pot ändert

if(deltaVolume!=0){

Serial.print("Volume = ");

Serial.print(volumeKey*5);

Serial.println(" %");

Keyboard.set_key1(volumeLVLs[volumeKey]);

Keyboard.send_now();  // Hotkey senden

Keyboard.set_key1(0);

Keyboard.send_now();  // Senden beenden

}

 

}

 

  1. Triggerhappy einrichten

 

4.1 Wechsel wieder ins Terminal am Pi und gebe ein:

 

$sudo nano /etc/init.d/triggerhappy

 

Ersetze

DAEMON_ARGS="--daemon --triggers /etc/triggerhappy/triggers.d/ --socket /var/run/thd.socket --pidfile $PIDFILE --user nobody /dev/input/event*"

mit

DAEMON_ARGS="--daemon --triggers /etc/triggerhappy/triggers.d/ --socket /var/run/thd.socket --pidfile $PIDFILE --user pi /dev/input/event*"

 

4.2 Dann erstelle die Konfigurationsdatei:

 

$sudo nano /etc/triggerhappy/triggers.d/volumectrl.conf

 

mit folgendem Inhalt:

 

KEY_MINUS  1       /usr/bin/amixer set Speaker -- - 0%

KEY_EQUAL  1       /usr/bin/amixer set Speaker -- - 5%

KEY_LEFT_BRACE  1       /usr/bin/amixer set Speaker -- - 10%

KEY_RIGHT_BRACE  1       /usr/bin/amixer set Speaker -- - 15%

KEY_BACKSLASH  1       /usr/bin/amixer set Speaker -- - 20%

KEY_SEMICOLON  1       /usr/bin/amixer set Speaker -- - 25%

KEY_QUOTE  1       /usr/bin/amixer set Speaker -- - 30%

KEY_TILDE  1       /usr/bin/amixer set Speaker -- - 35%

KEY_COMMA  1       /usr/bin/amixer set Speaker -- - 40%

KEY_PERIOD  1       /usr/bin/amixer set Speaker -- - 45%

KEY_SLASH  1       /usr/bin/amixer set Speaker -- - 50%

KEY_CAPS_LOCK  1       /usr/bin/amixer set Speaker -- - 55%

KEY_END  1       /usr/bin/amixer set Speaker -- - 60%

KEY_INSERT  1       /usr/bin/amixer set Speaker -- - 65%

KEY_V  1       /usr/bin/amixer set Speaker -- - 70%

KEY_T  1       /usr/bin/amixer set Speaker -- - 75%

KEY_P  1       /usr/bin/amixer set Speaker -- - 80%

KEY_SCROLL_LOCK  1       /usr/bin/amixer set Speaker -- - 85%

KEY_PRINTSCREEN  1       /usr/bin/amixer set Speaker -- - 90%

KEY_PAUSE  1       /usr/bin/amixer set Speaker -- - 95%

KEY_I  1       /usr/bin/amixer set Speaker -- - 100%

 

4.3 Starte den triggerhappy Prozess neu mit:

 

$sudo invoke-rc.d triggerhappy restart

 

Du solltest jetzt in der Lage sein die Lautstärke mit dem Potentiometer zu regulieren.

 

Fehlerbehebung: Falls es nicht klappt, wird deine Soundkarte vielleicht nicht als “Speaker” gelistet. Um den Namen deiner Soundkarte herauszufinden wechsel ins Terminal und gib ein:

 

$sudo alsamixer

 

Notiere dir den Item-Namen und ersetze “Speaker” in der volumectrl.conf mit diesem.

 

Mögliche Verbesserungen:

 

Anstelle einer einzelnen Taste als Hotkey, wäre es sinnvoller Tastenkombis zu nutzen, so dass man beim normalen Tippen nicht zufällig die Lautstärke ändert.

Herzlichen Dank an Julio für dieses Tutorial!

Post navigation

Previous PostNext Post

Related Posts

13. November

Verstärker + frei verlegbarer Potentiometer + PCB 2.0

27. Januar

Stereo downmix auf Mono

30. August

Soundausgabe über GPIO des Zeros

30. August

Einstellungen für eine Ausgabe via USB-Soundcard

30. August

Diagramm um die Lautstärke des ZeroBOYs regeln zu können

Folge uns

Akzeptierte Zahlungsmethoden

  • Maestro
  • MasterCard
  • PayPal
  • Visa
  • Anleitungen
  • Shop
  • Teile
  • Downloads
  • Community
  • Info
  • Translate
Copyright © 2020 ZeroBOY, All Rights Reserved.
Um Ihnen einen optimalen Service auf unserer Webseite zu bieten, verwenden wir Cookies zur Verbesserung der Funktionalität sowie zu Analysezwecken.
Durch die weitere Nutzung dieser Webseite erklären Sie sich damit einverstanden.
Weitere Details zu den eingesetzten Cookies, ihrer Verwendung und zur Änderung der Cookie-Einstellungen finden Sie in unseren Datenschutzerklärungen
Stimme zuStimme nicht zuErfahre mehr