feat: expanded and added more tasks

This commit is contained in:
2026-07-08 23:33:26 +02:00
parent 8fdf69e11f
commit d0b776485a
97 changed files with 3121 additions and 427 deletions
@@ -0,0 +1,39 @@
# Aufgabe 01: Mikrofon aufnehmen und speichern
## Ziel
Du nimmst Audio vom Mikrofon auf und speicherst es als WAV-Datei.
## Warum ist das wichtig?
Speech-to-Text ist nur so gut wie die Audioquelle und deren Format.
## Voraussetzungen
- Mikrofon
- Python
- PortAudio oder sounddevice
## Theorie
Audio hat Samplerate, Kanäle, Bit-Tiefe und Pegel. Falsche Formate führen zu schlechter Erkennung oder unnötiger Latenz.
## Aufgabe
Baue ein Skript, das fünf Sekunden Audio aufnimmt, Pegel ausgibt und eine WAV-Datei speichert.
## Akzeptanzkriterien
- WAV-Datei ist abspielbar.
- Samplerate und Kanalzahl werden angezeigt.
- Leise oder übersteuerte Aufnahme wird erkannt.
## Erweiterungen
- Füge automatische Normalisierung als Option hinzu.
## Reflexionsfragen
- Welche Samplerate erwartet dein STT-Modell?
- Woran erkennst du Übersteuerung?
- Warum ist Mono oft sinnvoll?
-38
View File
@@ -1,38 +0,0 @@
# Aufgabe 01: Sprache zu Text
## Ziel
Du baust ein kleines Programm, das Audio vom Mikrofon aufnimmt und in Text umwandelt.
## Aufgabe
Baue eine CLI-Anwendung:
```text
$ listen
Du hast gesagt: "Wie viele Personen sind im Raum?"
```
Nutze dafür zuerst eine einfache Lösung:
- Whisper
- faster-whisper
- oder eine andere lokale STT-Lösung
## Lernpunkte
- Audio aufnehmen
- WAV/PCM-Grundlagen
- Samplingrate
- Latenz
- Push-to-talk vs. dauerhaftes Zuhören
## Akzeptanzkriterien
- Du kannst 3 Sekunden Audio aufnehmen.
- Das Audio wird transkribiert.
- Der erkannte Text wird ausgegeben.
## Erweiterung
Baue Push-to-talk: Aufnahme startet erst, wenn du Enter drückst.
@@ -0,0 +1,38 @@
# Aufgabe 02: Push-to-Talk CLI bauen
## Ziel
Du baust eine einfache Push-to-Talk-Bedienung für Terminaltests.
## Warum ist das wichtig?
Daueraufnahme ist beim Entwickeln störend und datenschutzkritisch.
## Voraussetzungen
- Aufgabe 01
- Terminal
## Theorie
Push-to-Talk reduziert falsche Aktivierungen und macht Tests reproduzierbar. Später kann ein Wake Word ergänzt werden.
## Aufgabe
Implementiere eine CLI, die nur während gedrückter Taste oder zwischen Start/Stopp-Kommandos aufnimmt.
## Akzeptanzkriterien
- Aufnahme startet kontrolliert.
- Aufnahme endet zuverlässig.
- Datei oder Buffer wird an die nächste Pipeline-Stufe übergeben.
## Erweiterungen
- Zeige während der Aufnahme einen Pegelindikator.
## Reflexionsfragen
- Warum ist Push-to-Talk am Anfang besser als Wake Word?
- Welche Taste ist im Terminal praktikabel?
- Wie verhinderst du versehentliche Daueraufnahme?
-39
View File
@@ -1,39 +0,0 @@
# Aufgabe 02: Text zu Sprache
## Ziel
Dein Programm soll nicht nur Text ausgeben, sondern hörbar antworten.
## Aufgabe
Baue eine CLI-Anwendung:
```text
$ say "Hallo Matthias, ich bin bereit."
```
Das Programm soll den Text über Lautsprecher ausgeben.
## Mögliche Tools
- Piper
- Kokoro
- systemeigene TTS-Tools
- Cloud-TTS
## Lernpunkte
- Sprachsynthese
- Latenz
- lokale vs. Cloud-TTS
- Audio-Ausgabe unter Linux
## Akzeptanzkriterien
- Ein Text kann als Sprache ausgegeben werden.
- Die Ausgabe funktioniert mehrfach hintereinander.
- Fehler bei fehlendem Audiogerät werden verständlich angezeigt.
## Erweiterung
Baue eine kleine Queue, damit mehrere Sätze nacheinander gesprochen werden.
@@ -0,0 +1,38 @@
# Aufgabe 03: Whisper Batch STT integrieren
## Ziel
Du wandelst eine gespeicherte WAV-Datei mit Whisper oder faster-whisper in Text um.
## Warum ist das wichtig?
Der Roboter braucht zuverlässige Transkription, bevor er sinnvoll antworten kann.
## Voraussetzungen
- Aufgaben 01-02
- Whisper/faster-whisper installiert
## Theorie
Batch-STT verarbeitet einen fertigen Audioclip. Das ist einfacher als Streaming und ideal für erste Pipeline-Tests.
## Aufgabe
Baue `transcribe file.wav`, gib Text, Sprache, Laufzeit und Modellname aus.
## Akzeptanzkriterien
- Eine WAV-Datei wird transkribiert.
- Laufzeit wird gemessen.
- Fehler bei fehlender Datei sind verständlich.
## Erweiterungen
- Teste verschiedene Modellgrößen und notiere Qualität/Latenz.
## Reflexionsfragen
- Welche Modellgröße ist lokal realistisch?
- Wie beeinflusst Raumlärm die Ausgabe?
- Wann reicht Batch-STT nicht mehr?
@@ -0,0 +1,38 @@
# Aufgabe 04: Streaming vs Batch bewerten
## Ziel
Du vergleichst eine Batch-Pipeline mit einer einfachen Chunk- oder Streaming-Strategie.
## Warum ist das wichtig?
Für natürliche Dialoge entscheidet Latenz oft stärker als Modellqualität.
## Voraussetzungen
- Aufgabe 03
- Audio-Grundlagen
## Theorie
Streaming kann früher Zwischenergebnisse liefern, ist aber komplexer. Batch ist robust, wartet aber bis zum Ende der Aufnahme.
## Aufgabe
Miss Ende-zu-Ende-Latenz für kurze und lange Äußerungen und beschreibe, wann du Streaming einführen würdest.
## Akzeptanzkriterien
- Mindestens drei Messungen sind dokumentiert.
- Batch-Latenz ist von Aufnahmezeit getrennt.
- Eine Entscheidung für den Kursstand ist begründet.
## Erweiterungen
- Implementiere einen experimentellen Chunk-Transcriber.
## Reflexionsfragen
- Welche Latenz fühlt sich im Dialog noch gut an?
- Welche Fehler erzeugen unvollständige Chunks?
- Was würdest du zuerst optimieren?
@@ -0,0 +1,38 @@
# Aufgabe 05: Text-to-Speech erzeugen
## Ziel
Du wandelst Text in hörbare Sprache um.
## Warum ist das wichtig?
Antworten müssen gesprochen werden, nicht nur im Terminal erscheinen.
## Voraussetzungen
- Lautsprecher
- Python TTS oder System-TTS
## Theorie
TTS hat Stimme, Geschwindigkeit, Ausgabeformat und Startlatenz. Für Roboter wirkt eine kurze, klare Antwort natürlicher als lange Absätze.
## Aufgabe
Baue `speak "Text"`, das Audio erzeugt und abspielt oder als Datei speichert.
## Akzeptanzkriterien
- Text wird hörbar ausgegeben.
- Lange Texte werden begrenzt oder geteilt.
- TTS-Fehler blockieren den Prozess nicht dauerhaft.
## Erweiterungen
- Teste zwei Stimmen oder Engines.
## Reflexionsfragen
- Welche Antwortlänge passt für TTS?
- Was passiert bei Sonderzeichen?
- Wie misst du Startlatenz?
@@ -0,0 +1,38 @@
# Aufgabe 06: Audio Queue einführen
## Ziel
Du baust eine Queue, damit TTS-Ausgaben geordnet abgespielt werden.
## Warum ist das wichtig?
Der Roboter soll nicht mehrere Antworten gleichzeitig sprechen.
## Voraussetzungen
- Aufgabe 05
- Nebenläufigkeit Grundlagen
## Theorie
Eine Queue entkoppelt Erzeugung und Wiedergabe. Sie erlaubt Stop, Clear, Priorität und sauberes Shutdown-Verhalten.
## Aufgabe
Implementiere eine Audio-Queue mit Worker, `enqueue`, `stop_current` und `clear`.
## Akzeptanzkriterien
- Zwei Texte werden nacheinander gesprochen.
- Queue kann geleert werden.
- Worker beendet sich sauber.
## Erweiterungen
- Füge Priorität für Warnhinweise hinzu.
## Reflexionsfragen
- Wann darf eine neue Antwort alte Sprache abbrechen?
- Wie verhinderst du Race Conditions?
- Welche Zustände braucht ein Audio-Player?
@@ -0,0 +1,38 @@
# Aufgabe 07: Voice Pipeline verbinden
## Ziel
Du verbindest Mikrofon, STT, LLM-Agent und TTS zu einem manuellen Dialog.
## Warum ist das wichtig?
Das ist der erste komplette Sprachpfad des späteren Roboterkopfs.
## Voraussetzungen
- Aufgaben 02-06
- Agent aus Modul 01
## Theorie
Pipelines bestehen aus Stufen mit klaren Datenformaten. Jede Stufe muss einzeln testbar bleiben, sonst wird Debugging schwer.
## Aufgabe
Baue einen Ablauf: Push-to-Talk -> STT -> Agent -> TTS. Logge Textzwischenstände und Zeiten.
## Akzeptanzkriterien
- Gesprochene Frage wird beantwortet.
- Transkript und Antwort werden angezeigt.
- Jede Stufe hat eine gemessene Dauer.
## Erweiterungen
- Füge einen Textmodus als Fallback hinzu.
## Reflexionsfragen
- Welche Stufe ist am langsamsten?
- Wo können Datenschutzdaten entstehen?
- Warum muss jede Stufe separat testbar bleiben?
@@ -0,0 +1,38 @@
# Aufgabe 08: Wake Word als optionaler Prototyp
## Ziel
Du testest ein Wake Word als Alternative zu Push-to-Talk.
## Warum ist das wichtig?
Ein Roboterkopf soll später freihändig nutzbar sein, aber Fehlaktivierungen müssen verstanden werden.
## Voraussetzungen
- Aufgaben 01-07
- Wake-Word-Bibliothek optional
## Theorie
Wake Words sind Klassifikatoren für kurze Audiosignale. Sie erzeugen False Positives und False Negatives, besonders bei Lärm oder ähnlichen Worten.
## Aufgabe
Baue einen optionalen Prototyp, der nach Aktivierung eine kurze Aufnahme startet, oder dokumentiere bewusst, warum du es noch weglässt.
## Akzeptanzkriterien
- Aktivierung wird sichtbar geloggt.
- Fehlaktivierungen werden notiert.
- Push-to-Talk bleibt als Fallback erhalten.
## Erweiterungen
- Miss Wake-Word-CPU-Last.
## Reflexionsfragen
- Welche Fehlaktivierung wäre peinlich oder riskant?
- Wie informierst du über aktive Aufnahme?
- Wann lohnt sich Wake Word wirklich?
+18
View File
@@ -0,0 +1,18 @@
# Voice Interface
Audioaufnahme, Speech-to-Text, Text-to-Speech, Queues und Latenzmessung.
## Aufgaben
- [01: Mikrofon aufnehmen und speichern](01-mikrofon-aufnehmen-und-speichern.md)
- [02: Push-to-Talk CLI bauen](02-push-to-talk-cli-bauen.md)
- [03: Whisper Batch STT integrieren](03-whisper-batch-stt-integrieren.md)
- [04: Streaming vs Batch bewerten](04-streaming-vs-batch-bewerten.md)
- [05: Text-to-Speech erzeugen](05-text-to-speech-erzeugen.md)
- [06: Audio Queue einführen](06-audio-queue-einfuehren.md)
- [07: Voice Pipeline verbinden](07-voice-pipeline-verbinden.md)
- [08: Wake Word als optionaler Prototyp](08-wake-word-als-optionaler-prototyp.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.