Talkie
Sprachbibliothek für Arduino
Erhältlich als Arduino -Bibliothek "Talkie".
Die Originalversion finden Sie [hier] (https://github.com/ing-digital/talkie).
Eine gute Erklärung des TMS5220 -Vorgangs und des LPC -Frame -Formats finden Sie [hier] (https://github.com/mamev/mame/blob/master/src/devices/sound/tms5220.txt).
Wenn Sie diese Bibliothek nützlich finden, geben Sie ihr einen Stern.
? Google Translate
YouTube -Videos
| Demonstration von Talkie Voltmeter Beispiel | Intoderation durch Gadget -Neustart |
|---|
| |
Verbesserungen am Original und an der nicht blockierenden Version von Paulstoffregen
- Verbesserter Code, also läuft Talkie jetzt auf 8 MHz Arduino (mit Millis () Interrupt deaktiviert während des Sprechens).
- Der ISR_ratio -Fehler für einfache Arduino wurde behoben.
- Versorgungsfunktionen SayqvoltaMillivolts (), extrahiert aus den Beispielen, hinzugefügt.
- Die umgekehrte Ausgabe an Pin 11 ist standardmäßig aktiviert, um das Volumen für direkt angeschlossene Piezo oder Lautsprecher zu erhöhen.
- Kommentare hinzugefügt und refactoring, um die Funktionalität besser zu verstehen.
- Die Kompatibilität für die Arduino -Tonbibliothek wurde hinzugefügt, indem Timer1 -Interrupts an jedem Ende der Sprache gestoppt werden.
- Extrahierte InitializeHardware () und termininateHardware () Funktionen für die einfache Anpassung an andere Plattformen.
- Derzeit unterstützt:
- ATMEGA328 , wie auf den UNO- und Nano Boards gefunden.
- ATMEGA2560 , wie im Mega 2560 Board gefunden.
- ATMEGA32U4 , wie auf den Leonardo- und CircuitPlayGound -Boards zu finden.
- ARM M0 (getestet auf Arduino Zero), wie auf den SAMD- , Teensy- und Teilchenbrettern zu finden.
- ESP32 . ESP8266 ist unter Verwendung von FRC2 theoretisch möglich, aber im Moment teilt Arduino den FRC1 -Timer zwischen Interrupts und PWM.
- ARM M3 (auf Bluepill getestet) für Roger Clarks sowie STM -Kern.
Pin- und Timer -Mapping -Tabelle für verschiedene Plattformen
| Plattform | Pin normal | Pin invertiert | 8 -kHz -Timer | PWM -Timer | Anmerkungen |
|---|
| AVR (UNO und Nano) | Pin 3 | Pin 11 | Timer1 | Timer2 | |
| ATMEGA2560 | Pin 6/PH3 | Pin 7/PH4 | Timer1 | Timer4 | |
| Leonardo | Pin 9/PB5 | Pin 10/PB6 | Timer1 | Timer4 | |
| Promicro | Pin 5/PC6 | % | Timer1 | Timer4 | |
| Esplora | Pin 6/PD7 | % | Timer1 | Timer4 | |
| Null (SAMD) | A0 | % | TC5 | DAC0 | |
| ESP32 | Pin 25 | % | hw_timer_t | DAC0 | |
| Bluepill | Pin 3 | % | Timer3 | Analogwrite | Roger Clarks Core |
| Bluepill | PA3 | % | Timer4 | Analogwrite | STM -Kern |
| Teensy | Pin 12/14721 | % | Intervaltimer | Analogwrite | |
Timer -Nutzung
Timer 1 (Servo -Timer) wird bei allen ATMEGAS zur Aktualisierung von Sprachausgabendaten bei 8 kHz verwendet.
Timer 2 (Ton -Timer) auf ATMEGA328 (62500 Hz / 16 µs) oder Timer 4 auf ATMEGA2560 + ATMEGA32U4 (5 µs) wird verwendet, um den 8 -Bit -PWM -Ausgang zu erzeugen.
Beide Timer sind daher nicht für andere Bibliotheken / Zwecke verfügbar, wie die Servo -Steuerung oder der Tonausgang.
Unterschiede zwischen Bluepill -Kernen
Es gibt zwei Kerne für den Bluepill .
- Der
STM32F1 von Roger Clark; http://dan.drown.org/stm32duino/package_stm32duino_index.json - Die CMSIS -basierte
stm32 von ST Microsystems; https://github.com/stm32duino/boardmanagerfiles/raw/master/stm32/package_stm_index.json
Die Erzeugung des Hochgeschwindigkeits -PWM ist für den Roger Clark -Kern kompliziert und für den STM -Kern leicht . Die Programmgröße für Voltmeterayq.cpp ist 21 KByte für Roger Clark Core und 32 KByte für STM Core. Das 8 -kHz -Interrupt -Handling erfordert 8 µs für Roger Clark -Kern und 12 µs für STM -Kern.
Hinweise
- In der Standardeinstellung sind sowohl invertierte als auch nicht invertierte Ausgänge aktiviert, um das Volumen zu erhöhen, wenn der Lautsprecher zwischen ihnen angehängt wird.
- Die Bibliothek verwendet Timer 1 und Timer 2 auf atmega328, sodass Bibliotheken wie Ton, Servo, Analogwrite () und einige andere Bibliotheken während des Sprechens nicht verwendet werden können.
- Nach einem Anruf zu
say...() Sie können tone() wieder verwenden. - Verwenden Sie [Sloeber] ervo
write() nach einem Anruf, um zu sagen ... Sie müssen den Servo vor dem ersten write() detach() und attach() , um den Timer erneut für Servo zu initialisieren. - Wenn Sie SPI -Funktionen auf atmega328 verwenden möchten, während Talkie spricht , deaktivieren Sie die Verwendung von Talkies -Nutzung von Pin 11 von
Talkie Voice(true, false); anstelle von Talkie Voice; oder Voice.doNotUseInvertedOutput(); . - Das Portieren auf Attinys ist nicht möglich, da ihnen die Hardware -Multiplikation fehlt. (Glauben Sie mir, ich habe es versucht!)
- Ich benutze die Lautsprecher von alten Ohrhörern oder Kopfhörern , die ungefähr 16 bis 32 Ω haben, direkt ohne einen Serienwiderstand auf meinen atmegas. Der Kopfhörerlautsprecher ist in der Regel viel lauter, besonders wenn sie in ihren ursprünglichen Gehäusen bleiben. Wenn Sie den Lautsprecher nicht zwischen nicht umgekehrter und invertierter Ausgabe verbinden, müssen Sie einen Serienkondensator von 1 bis 10 uF verwenden. Blockieren Sie den Gleichstrom. Suchen Sie nach der richtigen Polarität. Der Wechselstrom ist proportional zur Reichweite des Sprechers, nicht seines Widerstands in ω, und liegt zwischen 10 und 40 Ma. Letzteres ist definitiv aus der Spezifikation für ATMEGAS, aber ziemlich laut - was Sie hören, was Sie stundenlang auf meinem Schreibtisch liefern und laufen. Wenn Sie sich nicht sicher sind, verwenden Sie einfach einen Piezo -Lautsprecher oder einen Stromverstärker.
Vordefinierter Wortschatz
Das vordefinierte Vokabular befindet sich in den Vokabeln _*. H -Dateien, insbesondere in vocab_us_large.h.
Eigenes Wortschatz
Um LPC -Daten zu erstellen, können Sie den Python_Wizard oder den BlueWizard für Mac OS X verwenden.
Eine andere Möglichkeit, LPC -Daten zu erstellen, besteht darin, QBoxPro, eine nicht unterstützte alte Windows -Anwendung unter XP, zu verwenden, mit der Talkie -kompatible Datenströme erzeugt werden können. Die fehlende bwcc.dll (Borland Windows Custom Control Library) finden Sie hier, z. B. hier. Der Prozess wird hier beschrieben und lautet so:
- Erstellen Sie ein neues Projekt mit den folgenden Projektparametern: Byte / 8 kHz / 5220 Codierungstabelle
- GOTO -Projekt und fügen Sie die Audiodatei hinzu
- Wählen Sie den Prozess mit: mittlerer Bitrate und drücken Sie OK
- Verkettung bearbeiten: Schließung einfügen, indem Sie einen Namen hinzufügen. Setzen Sie dann die Phrase ein und drücken Sie OK
- Formatieren Sie es, indem Sie die erste Zeile im Formatmenü auswählen: LPC 10V, 4UV
Ausgangsfilter
C to avoid clicks | Low pass 1600Hz
_____
D3 >-----||-----|_____|-----+-----> to Power amplifier
100nF 10k |
---
--- 10 nF
|
_|_ GND
Kompilieren Sie Optionen / Makros für diese Bibliothek
Um die Software an unterschiedliche Anforderungen anzupassen, stehen einige Kompilieroptionen / Makros zur Verfügung.
Ändern Sie sie, indem Sie sie aktivieren / deaktivieren, oder ändern Sie gegebenenfalls die Werte.
| Name | Standardwert | Datei | Beschreibung |
|---|
NO_COMPATIBILITY_FOR_TONE_LIB_REQUIRED | deaktiviert | Talkie.h | Wenn Sie die Arduino -Tonbibliothek nicht verwenden, kann das Aktivieren von bis zu 844 Bytes -Programmgröße speichern. |
FAST_8BIT_MODE | deaktiviert | Talkie.h | Wenn Sie definiert sind, verwenden wir 8bit anstelle von 16 -Bit -Koeffizienten K1 und K2. Dies spart 10 Mikrosekunden (40 statt 50 US) für eine 16 -MHz -Atmega und hat fast die gleiche Qualität, mit Ausnahme einigeriger "Aussetzer", z. B. im Wort "Tausend". |
ENABLE_PITCH | deaktiviert | Talkie.h | Wenn Sie definiert sind, interpretieren wir den zweiten Parameter aSampleRateForPitch von say() und SayQ() . Dies erfordert rund 160 Bytes Programmraum und wenige zeitaufwändige Abteilungen. Wenn deaktiviert, wird der Parameter aSampleRateForPitch nur ignoriert. |
SAMPLE_RATE_DEFAULT | 8000 | Talkie.h | F Sie möchten global die Tonhöhe ENABLE_PITCH Talkie festlegen. |
Änderungen inklusive (*.h) Dateien mit Arduino IDE
Verwenden Sie zunächst Sketch> Sketch -Ordner (Strg+k) .
Wenn Sie das Beispiel noch nicht als eigene Skizze gespeichert haben, befinden Sie sich sofort im Ordner der richtigen Bibliothek.
Andernfalls müssen Sie zum Ordner Parallel libraries navigieren und die Bibliothek auswählen, auf die Sie zugreifen möchten.
In beiden Fällen befinden sich die Bibliotheksquelle und die Einschlüssedateien im src -Verzeichnis der Bibliotheken.
Die Änderung muss für jede neue Bibliotheksversion erneuert werden!
Ändern Sie Kompilierungsoptionen / Makros mit Plattformio
Wenn Sie Platformio verwenden, können Sie die Makros in der Plattformio.ini -Datei mit build_flags = -D MACRO_NAME oder build_flags = -D MACRO_NAME=macroValue definieren.
Ändern Sie Kompilierungsoptionen / Makros mit Sloeber IDE
Wenn Sie Sloeber als IDE verwenden, können Sie leicht globale Symbole mit Eigenschaften> Arduino> CompileOptions definieren.

Schema für Voltmeter Beispiel

Links
Die Talkie -Implementierung aus dem Jahr 2017, basierend auf der Peter Knights -Version, erweiterte sich mit Tonhöhe, Geschwindigkeit und Biegung.
Revisionsgeschichte
Version 1.4.0
- Hinzufügen von Parameter
aSampleRateForPitch und Macro ENABLE_PITCH .
Version 1.3.3
- Hinzufügen von Unterstützung für SAMD51 und ESP32 Core 3.x.
Version 1.3.2
- ESP32 -Timer -Fehler behoben.
Version 1.3.1
- Aktualisiert _1_voltmeter Beispiel und in Beispielnamen umbenannt.
- Verbesserte SAMD -Unterstützung.
Version 1.3.0
- Blockierungswart auf ATMega32U4 -Serie in Beispielen entfernt.
- 10 -Bit -Koeffizienten funktionieren jetzt, aber sie klingen nicht besser?
- Getestet an einem ESP32.
- Auf einem Bluepill getestet.
Version 1.2.0
- Korrekturer falscher Funktionsname DonotuseuseInvertedoutput ().
- Funktionen
digitalWriteNonInvertedOutput() und digitalWriteInvertedOutput() hinzugefügt.
Version 1.1.0
- SAMD -Unterstützung.
- ESP32 -Unterstützung.
- Teensy Unterstützung.
- Versionsnummer.
- Umbenannt *.c in *.cpp -Dateien.
- Funktionsfunktion
sayQTimeout() in talchieutils.cpp . - Beispiel uswistancetovoice hinzugefügt.
- Funktionsfunktion
sayQVoltageVolts() . - Verbessertes Endhandling, um Klicks zu minimieren.
Version 1.0.2
- ATMega2560 unterstützt und getestet
- Stellen Sie beim Beenden immer Pins auf die Eingabe ein, um ein Klick zu vermeiden.
Version 1.0.1
- SPI -Kompatibilität hinzugefügt, indem Pin 11 nicht zurückgesetzt wird, wenn SPI erkannt wird
- Neue Konstruktor
Talkie(bool aUseNonInvertedOutputPin, bool aUseInvertedOutputPin);
Version 1.0.0
- Erste Arduino -Bibliotheksversion
CI
Die Bibliotheksbeispiele werden mit GitHub -Aktionen für die folgenden Boards getestet:
- Arduino: AVR: Uno
- Arduino: AVR: Leonardo
- Arduino: AVR: Mega
- Arduino: Sam: Arduino_Due_X
- ESP8266: ESP8266: HUZZAH: EESZ = 4M3M, XTAL = 80
- ESP32: ESP32: Federesp32: FlashFreq = 80
- STMICROELECTRONIK: STM32: Genf1: pnum = Bluepill_f103c8