Ich arbeite an einem Projekt, bei dem LED-Leuchten mit Audioereignissen synchronisiert werden. Ich beziehe mich nicht auf reaktive LED-Projekte, die den ADC aus der Audioamplitude oder dem Spektrum lesen, sondern darum, dass einige zusätzliche digitale Daten zusammen mit dem Audio abgespielt werden, um mehrere Auslöser von Ereignissen anzuzeigen.
Anfänglich verfolge ich den Ansatz, eine Stereodatei zu verwenden und einen Kanal für Audio und einen anderen Kanal für Daten zu haben. Auf die Datei wird von einem SD-Kartenmodul zugegriffen und von einem Codec- oder MP3-Player-Modul verarbeitet. Der Kanal mit Daten hat Impulse mit unterschiedlichen Sinuswellenfrequenzen, um verschiedene Ereignisse anzuzeigen und bestimmte LED-Leuchten auszulösen.
Ich habe dies mit einem Spektrumanalysator-Chip geschafft, aber es ist nicht ideal, da es durch die Verwendung des ADC zu Schwankungen kommt und Änderungen in der Lautstärkeregelung das Signal beeinflussen. Ich hoffe, eine digitale Signallösung zu finden, da beim Lesen der SD-Karte und der Audioverarbeitung die Daten von einem Kanal der Datei (wav oder mp3) in Echtzeit in der MCU gelesen werden müssen.
Idealerweise wäre die MCU ein ESP32. Ich habe mit einigen Bibliotheken experimentiert, die WAV-Dateien von einer SD-Karte lesen können (z. B. esp32_I2S_player), aber ich konnte es nicht schaffen, die Daten zum Erstellen der erforderlichen "Wenn-Bedingungen" zu erhalten. Ein weiterer Versuch war, zu sehen, ob ich dies mit einem VS1053-Codec tun könnte, aber Bibliotheken für diesen Chip bieten auch keine Funktion zum Auslesen von Daten von der SD-Karte eines bestimmten Kanals, und ich konnte in der nicht viel darüber finden Datenblatt.
Also meine Fragen sind:
Ich fühle mich in dieser Ausgabe stagniert, also schätze ich Ihre Antworten wirklich. Danke.
Die Verwendung eines zusätzlichen DSP für die Dekomprimierung kann dies erschweren, es sei denn, Sie beschränken sich auf Dateien mit konstanter Bitrate. Wenn Sie eine hohe Zeitgenauigkeit der Lichtereignisse benötigen, müssen Sie möglicherweise die Verarbeitungsverzögerung ab dem Eingeben der Daten bis zum Ausgeben des Tons berücksichtigen , was bei unterschiedlichen Bitraten unterschiedlich wäre.
Möglicherweise könnten Sie einen bestimmten Decoder umgehen, indem Sie ein unabhängiges Timing durchführen, einen MCU-Zeitzähler zu Beginn der Audioausgabe starten und Lichtereignisse zu geeigneten Zeitstempeln auslösen. In diesem Fall möchten Sie Ihre Lichtdaten möglicherweise in einer eigenen Datei codieren, die durch ein Benennungsmuster verknüpft ist, oder sie in verwobene Daten einbetten, die etwas vor den komprimierten Audiodaten angezeigt werden, denen sie entsprechen, und bis zum angegebenen Zeitstempel in einem MCU-Puffer gespeichert werden .
Eine mögliche drastische Vereinfachung besteht darin, lineare PCM-WAV-Dateien anstelle von komprimierten MP3-Dateien zu speichern. Angesichts der Tatsache, dass eine Audio-CD nur etwa 3/4 Gigabyte groß ist, kann selbst eine billige SD-Karte möglicherweise einige Stunden unkomprimiertes Audio speichern. Wenn Sie keine Komprimierung haben, ist es für Ihre MCU ziemlich einfach, die Daten einfach über einen DAC auszutakten, verwenden Sie jedoch vorzugsweise einen Hardware-Timer-gesteuerten DAC (und möglicherweise DMA) oder zumindest einen Interrupt, keine Software-Verzögerungsschleife.
Ich mag es nicht, Befehlsdaten als analoges Signal in einer digitalen Datei zu codieren.
Ich denke, ich würde versuchen, die Beleuchtungsbefehle als Textblöcke im Textblock der ID3-Informationen in der MP3-Datei zu codieren.
Der Liedtextblock befindet sich vor den Tondaten, sodass Sie ihn schnell dekodieren können sollten, bevor Sie mit der Wiedergabe beginnen.
Typische Bibliotheken für die MP3-Wiedergabe scheinen nicht alle ID3-Tags zu lesen. Einige Bibliotheken lesen einige Tags. Sie könnten entweder die Songtext-Tags vor der Wiedergabe in Ihrer eigenen Lesefunktion extrahieren oder eine der vorhandenen Bibliotheken erweitern.
Innerhalb der Songtext-Tags befinden sich Zeitstempel und Text.
Sie können die Zeitstempel so codieren, wie sie die ID3-Standards definieren, oder Ihre eigenen, genaueren Zeitstempel in Ihrem eigenen Format codieren (die ID3-Zeitstempel werden nur in Sekunden angegeben).
Der Textinhalt ist der interessante Teil. Definieren Sie Ihre eigene Textcodierung für Ihre Lichter. Sagen Sie „DMX1:FFFF00000000“ für volles helles rotes Licht auf Adresse 1 (das ist nur die Codierung von DMX-Daten als Hexadezimalzahl, wobei die Adresse im Header enthalten ist).
Oder etwas Einfacheres, wenn Sie nur eine Handvoll LEDs ein- und ausschalten müssen, die direkt mit dem Mikrocontroller verbunden sind.
Oder implementieren Sie Ihr Format so, dass Sie es für DMX verwenden können, aber einen Interpreter in Ihrem Controller für lokale LEDs haben.
Der Inhalt ist wirklich bis zu Ihnen. In jedem Fall ist es viel flexibler als das Einbetten von Sounds in einen Kanal Ihrer Audiodatei.
Es gibt Texteditoren, mit denen Sie Ihre Befehle in die MP3-Dateien einfügen können. Geben Sie einfach Befehle in Ihrem privaten Format als Liedtext ein.
Ich habe einmal eine Anwendung entwickelt, in der beliebige Ereignisse durch in den Sound eingebettete Audio-Wasserzeichen ausgelöst werden konnten . Sie könnten den Ton über blecherne unverstärkte Computerlautsprecher an einem Ende des Konferenzraumtisches abspielen, und meine Demobox am anderen Ende würde LEDs genau in den richtigen Momenten einschalten.
Es war insofern effizient, als der Decoder auf einem winzigen 8-Bit-Mikrocontroller (6502-basiert) lief, der von einer einfachen analogen Signalverarbeitungskette (Mikrofonvorverstärker, Filter usw.)
Die schnelle Lösung in meiner Welt wäre die Wiedergabe von einem Computer. Es gibt fertige Computerprogramme, die den Ton auf vielen Kanälen mit Midi (normalerweise für Synthesizer verwendet) oder DMX (sehr ähnlich zu Midi, aber für Lichter verwendet) synchronisieren können.
JRE
David Tweed
JRE
stobbe
nvuono
Schlafmann