Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PCSpeaker LLM – DOS-Sprachausgabe ohne Soundkarte

Version 0.1.0 – experimenteller, quelloffener Prototyp

Dieses Projekt untersucht, wie sich eine LLM auf einem alten PC ausschließlich über den klassischen internen PC-Speaker mitteilen kann. Eine Soundkarte, Covox-Hardware oder ein externer DAC werden für die DOS-Ausgabe nicht benötigt.

Der Prototyp enthält zwei unabhängige Ausgabemöglichkeiten:

  • PCSPLAY.COM spielt kurze, extern erzeugte Sprachdaten als 8-kHz-PWM über PIT-Kanal 2 und den PC-Speaker ab.
  • PCSMORSE.COM gibt Text direkt unter DOS als Morsecode aus. Das ist der robuste Fallback und zugleich ein einfacher Hardwaretest.

Außerdem erzeugt tools/retro_tts.py aus deutschem oder englischem Text eine absichtlich einfache Formant-/Roboterstimme. Damit kann man den vollständigen Weg LLM-Text → Sprachdaten → interner Lautsprecher ausprobieren.

Schnelltest unter echtem DOS oder FreeDOS

Den gesamten Ordner auf den DOS-PC kopieren und im Projektverzeichnis starten:

DEMO.BAT

Oder einzeln:

BIN\PCSMORSE SOS
BIN\PCSMORSE READY
BIN\PCSPLAY SAMPLES\HALLO.PCM
BIN\PCSPLAY SAMPLES\HELLO.PCM

HALLO.PCM sagt synthetisch „Hallo, ich bin ein Computer“. Zuerst sollte PCSMORSE SOS getestet werden. Wenn dabei nichts zu hören ist, liegt das Problem nicht am Sprachsample, sondern wahrscheinlich am fehlenden Systemlautsprecher, Speaker-Header oder an der Emulator-Konfiguration.

Eigene LLM-Antwort erzeugen

Auf einem modernen Rechner mit Python 3:

python tools/retro_tts.py --lang de --text "Hallo. Das System ist bereit." --out ANTWORT.PCM --wav ANTWORT.WAV

ANTWORT.WAV ist eine optionale Hörvorschau. ANTWORT.PCM wird zum DOS-PC übertragen und dort abgespielt:

BIN\PCSPLAY ANTWORT.PCM

Die eingebaute Formantstimme ist bewusst klein und stark robotisch. Sie besitzt einige deutsche und englische Ausspracheregeln sowie ein kleines Wörterbuch. Unbekannte Wörter werden über vereinfachte Buchstaben- und Lautregeln erzeugt. Für eine wesentlich verständlichere Ausgabe kann eine beliebige moderne TTS auf dem LLM-Rechner eine WAV-Datei erstellen:

python tools/wav_to_pcs.py LLM_ANSWER.WAV ANTWORT.PCM

Der Konverter akzeptiert unkomprimierte PCM-WAV-Dateien mit 8, 16, 24 oder 32 Bit sowie Mono oder Stereo und erzeugt das benötigte Format:

  • 8.000 Hz
  • Mono
  • 8 Bit unsigned PCM
  • ohne WAV-Header

Damit sieht der praktische Datenweg so aus:

LLM → Text → TTS/Formantsynthese → 8-kHz-PCM → Datei/seriell → DOS-PC → PC-Speaker

In Version 0.1 geschieht die TTS-Berechnung noch auf dem modernen Rechner. Der alte PC übernimmt nur die Morse- oder PWM-Ausgabe. Eine spätere Version kann Text über COM1 empfangen und eine kleine Allophonstimme vollständig unter DOS erzeugen.

Hardware und Umgebungen

Echter PC

Empfohlen wird mindestens ein 80286. Der Player erzeugt ungefähr 8.008 Interrupts pro Sekunde; ein schneller 286, 386 oder 486 ist daher realistischer als ein 4,77-MHz-8088. Der klassische Systemlautsprecher muss tatsächlich am Mainboard-Speakeranschluss hängen.

Bei manchen neueren Mainboards existiert zwar noch ein Speaker-Header, es ist aber kein Lautsprecher angeschlossen. Ein kleiner passiver PC-Buzzer genügt häufig für den Versuch, klingt jedoch meist schlechter als ein klassischer magnetischer Gehäuselautsprecher.

Emulator

  • 86Box und PCem eignen sich gut für einen vollständigen Retro-Test.
  • DOSBox, DOSBox-X und DOSBox Staging können den PC-Speaker emulieren.
  • Im Emulator landet der Klang normalerweise auf der modernen Soundausgabe. Das prüft Programm und Daten, aber natürlich nicht den realen Lautsprecher.

Die .COM-Programme sind keine Windows-10/11-Treiber und sollten in einer echten DOS-/FreeDOS-Umgebung oder einem passenden Emulator ausgeführt werden.

Technische Arbeitsweise von PCSPLAY

PCSPLAY.COM lädt maximal 48.000 Bytes in den Speicher. Anschließend:

  1. wird der ursprüngliche IRQ-0-/INT-8-Vektor gesichert,
  2. PIT-Kanal 0 auf einen Divisor von 149 gestellt,
  3. PIT-Kanal 2 als PWM-Einerzeuger konfiguriert,
  4. jedes 8-Bit-Sample in eine Pulsbreite von 1 bis 149 PIT-Takten umgesetzt,
  5. der BIOS-Timer näherungsweise weiterverkettet,
  6. am Ende Interruptvektor, PIT und Port 61h wiederhergestellt.

Der DOS-PC muss während der Wiedergabe weder Dateien nachladen noch DOS aus einem Interrupt heraus aufrufen. Das verringert Absturz- und Timingprobleme.

Einschränkungen

  • maximal 48.000 Bytes beziehungsweise ungefähr sechs Sekunden pro Datei
  • sehr geringe Lautstärke und Bandbreite je nach PC-Speaker
  • während der Wiedergabe praktisch keine normale Programmarbeit
  • kein Abbruch innerhalb eines Samples; spätestens nach sechs Sekunden endet es
  • ein Reset während der Wiedergabe ist unproblematisch, ein Programmabsturz kann jedoch einen Neustart erfordern, weil IRQ 0 vorübergehend verändert ist
  • die tatsächliche Wiedergaberate beträgt wegen des ganzzahligen PIT-Divisors rund 8.008 Hz

retro_tts.py teilt längere Texte automatisch in nummerierte PCM-Dateien von höchstens 5,8 Sekunden. Diese werden nacheinander mit PCSPLAY aufgerufen.

Kompilieren

FASM unter DOS oder Windows

FASM nach tools\fasm\FASM.EXE kopieren oder in PATH bereitstellen:

BUILD_FASM.cmd

Die FASM-Quellen befinden sich unter src\fasm.

GNU Binutils unter Linux

./BUILD_GNU.sh

Die entsprechenden GNU-AS-Quellen liegen unter src/gas. Die mitgelieferten .COM-Dateien wurden aus diesen Quellen gebaut und statisch überprüft.

Projektinhalt

Pfad Inhalt
bin/PCSPLAY.COM PCM-PWM-Player für DOS
bin/PCSMORSE.COM direkter Text-zu-Morse-Player
samples/HALLO.PCM deutscher Test für den PC-Speaker
samples/HELLO.PCM englischer Test für den PC-Speaker
samples/*.WAV hörbare Vorschau der gleichen Rohdaten
tools/retro_tts.py kleine DE/EN-Formantsynthese
tools/wav_to_pcs.py allgemeiner WAV-Konverter
tools/selftest.py statische Binary- und Audiodatenprüfung
src/fasm FASM-Quellen
src/gas GNU-AS-Quellen und Linkerskript

English summary

PCSpeaker LLM is an experimental DOS bridge that lets an LLM communicate without a sound card. PCSPLAY.COM renders 8-kHz unsigned PCM through the classic PC speaker using PIT-driven PWM; PCSMORSE.COM provides a direct and robust Morse fallback. German/English robotic test speech and dependency-free conversion tools are included. Physical-speaker playback still needs to be tested on real DOS/FreeDOS hardware.

Lizenz

MIT – siehe LICENSE.txt.

About

PCSpeaker Audio Output for LLM Answers without Soundcard for old DOS Computers

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages