feat: expanded and added more tasks
This commit is contained in:
@@ -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?
|
||||
@@ -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?
|
||||
@@ -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?
|
||||
@@ -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.
|
||||
Reference in New Issue
Block a user