Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - WAV-Dateien abspielen

Mit einem Multicore Propeller Controller lassen sich Musikdateien sehr komfortabel abspielen. Er ist mit seinem Multicore-Chip in der Lage Daten von der SD Karte zu lesen, die D/A Wandlung vorzunehmen, Dateien zu wechseln und/oder Programme mit angeschlossenen Sensoren auszuführen.

Das Prop-Activity Board und das Prop-Board of Education verfügen beide über eingebaute D/A Verstärker und einen microSD Kartenhalter. Der Propeller Controller holt die Musikdaten von der microSD Karte und lässt sie über den D/A Verstärker abspielen.

Material

1x  Prop-Activity Board oder Prop-BoE

1x  formatierte microSD Karte

1x  Lautsprecher oder Kopfhörer mit 3,5mm Klinkenanschluss

Aufgaben
  • Stecke die microSD Karte in den Halter auf dem Prop-AB oder Prop-BoE.
  • Verbinde den Lautsprecher/Kopfhörer über die Lautsprecherbuchse mit dem Board.
Abbildung 1 - Propeller Activity Board mit Lautsprecher und microSD Card (Courtesy of Parallax Inc.)

In dieser Übung arbeiten wir mit der Bibliotheksdatei wavplayer, die entsprechende Funktionen bereitstellt, mit denen das Laden und Abspielen von Musikdateien besonders einfach wird. Sie ist konzipiert für 16-bit PCM, 32kHz, mono WAV Dateien. Mit Audacity lassen sich zum Beispiel andere Musikformate leicht und schnell in das WAV-Format konvertieren oder direkt aufnehmen.

Aufgaben
  • Übertrage die Datei WAVTest.c in den SimpleIDE Editor und speichere das Programm ab.
  • Besorge dir eine WAV-Datei (Spieldauer < 10s, dient nur zur Demonstration) und speichere sie auf Festplatt oder einem Stick ab.
  • Kopiere die WAV-Datei auf die microSD Karte.
  • Starte das Programm WAVTest.c über Load EEPROM & Run. Das Programm spielt das kopierte Musikstück ab.

Die Funktionen der Bibliothek wavplayer.h

  • void wav_player(const char *wavDateiname)
    

Spielt eine  *.wav Datei ab.

  • int wav_playing()
    

Überprüft, ob aktuell eine wav-Datei abgespielt wird.

  • void wav_volume(int vol)
    

Stellt die Lautstärke ein. int vol nimmt Werte zwischen 0 (sehr leise) bis 10 (sehr laut) an.

  • void wav_stop(void)
    

Beendet den Lesevorgang bei einer wav-Datei (cog1), lässt aber den Ausgang offen (cog2) für das Abspielen eines weiterer Tracks.

  • void wav_close(void)
    

Beendet den Lesevorgang bei einer wav-Datei und schließt den Audioausgang. Dieser Befehl wird nur verwendet, wenn zwei cogs für andere Aufgaben benötigt werden.

 

Die Anwendung WAVLautstaerke spielt das kurze Musikstück mit der voreingestellten Lautstärke (5 von 10) ab.

  • Starte das Programm WAVTest.c über Load EEPROM & Run. Das Programm spielt das übertragene Musikstück über Lautsprecher/Kopfhörer ab.

Die Firma Parallax bietet in ihrer SoundLibrary vorformatierte kleine Audiodateien zum downloaden an.

Das Programm WAVTest.c

Programm WAVTest.c

Wie arbeitet das Programm WAVTest.c?

Zu Beginn des Programms werden die beiden Bibliotheken simpletools und wavplayer eingebunden. Die neuen Funktionen aus der Bibliothek wavplayer wurden weiter oben vorgestellt.

Zeile 6

Initialisierung der SD-Card pads mit den Propeller Pin.

Zeile 7

Der SD-Kartenhalter wird in das Dateisystem eingebunden; damit ist der Zugriff auf die SD-Card möglich. Statt Zahlenwerte einzusetzen, wurde hier mit Variablennamen gearbeitet. Dadurch ist es zu einem späteren Zeitpunkt leicht möglich, das Programm auch auf Boards mit anderen Pinverbindungen zu übertragen, indem man nur die Verbindungsleitungen in Zeile 6 anpasst.

Zeile 8

Der Konstanten musik[] , ein Array vom Typ char, wird der Dateiname guitar.wav zugewiesen.

Zeile 9

Die Funktion wav_play hat als Argument den Namen der abzuspielenden WAV-Datei (hier: guitar.wav), den sie an den WAV-Player weiterleitet, der nach einer Datei gleichen Namens im root-Verzeichnis der SD-Card sucht. Die Datei wird geöffnet, die Headerinformation über Datenrate, bits per sample und weitere Details wird gelesen und anschließend nehmen zwei cogs im Propeller ihre Arbeit auf.

cogA ist zuständig für die D/A Werte aus der WAV-DAtei , die er in einem Array ablegt.

cogB liest die Daten aus dem Array mit einer Wiederholrate von 32.000 pro Sekunde und gibt sie an den  D/A Konverter weiter.

Zeile 10

Während die Musik abspielt, wird über die Funktion wav_volume die Lautstärke eingestellt. Der vorgegebene Einstellbereich liegt zwischen 0 und 10.

 

Zeile 11

Die Spielzeit wird durch einen pause-Befehl festgelegt. Beachte, dass jeder Aufruf von wav_play auch einen wav_volume Befehl verlangt (entweder vorher oder nachher). Jedem wav_play-Befehl muss auch ein pause-Befehl folgen, der festlegt, wie lange eine wav-Datei abgespielt wird. Um eine vollständige wav-Datei zu hören, muss das Argument des pause-Befehls ca. 900ms größer sein als die eigentliche Abspiellänge der Datei.

2 - PING))) regelt die Lautstärke

Während für das Abspielen einer WAV-Datei zwei cogs verantwortlich sind, gibt es eine Reihe weiterer, nicht ausgelasteter cogs in einem Propeller, die weitere Aufgaben übernehmen können, wie zum Beispiel Sensoren abfragen.

Im folgenden Programmbeispiel wird gezeigt, dass die Lautstärkeeinstellung von einem Ping))) Ultraschallsensor übernommen wird. Dazu wird die ping-Bibliothek ping.h in den Programmcode eingebunden.

Aufgaben
  • Baue die Schaltung aus Abbildung 2 auf.
  • Übertrage das Programm Ping_Wav.c in den SimpleIDE Editor und speichere das Programm ab.
  • Starte das Programm und bewege deine Hand vor dem Sensor vor und zurück. Bei geringem Abstand der Hand ist die Musik sehr leise und bei großem entsprechend lauter.
Abbildung 2 - (Courtesy of Parallax Inc.)
Programm Ping_WAV.c

Jetzt kommst du!

  • Mit Hilfe des Programms Audacity kannst du dir selbst eine Reihe von 16-bit PCM, 32 kHz, mono WAV-Dateien aufnehmen - ganz nach deinem Musikgeschmack.
  • Setze auf das Steckbrett des Prop-BoE oder Prop-AB zwei oder mehr Taster, wie in Propeller Controller > Taster abfragen beschrieben.
  • Entwickle ein Programm, das auf Tastendruck zu jeder Taste ein bestimmtes Lied/einen bestimmten Spruch abspielt, sobald die Taste gedrückt wird.
Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf