Kassetten bzw. Aufnahmen davon als WAV Dateien in Python umzuwandeln in ASCII (.BAS) oder (später) in BINÄR Dateien...
Die "0" und "1" in den WAV Daten sind, ist von den Grundlagen her in diesem Bild gut zu sehen:
http://en.wikipedia.org/wiki/File:Fsk.svg
Siehe: http://de.wikipedia.org/wiki/Frequenzumtastung
Den Aufbau des Audio-Signals Vom Dragon hier u.a. hier beschrieben:
http://www.onastick.clara.net/cosio.htm
http://www.cs.unc.edu/~yakowenk/coco/te ... ormat.html
Das Format vom Dragon ist wohl auch das gleiche wie von einigen "CoCo" Homecomputer Modellen... Was es nicht ist, ist das sog. Kansas City standard Format. Zu dem es hier ein netten Blog-Eintrag mit Python-Skript gibt: http://dabeaz.blogspot.de/2010/08/using ... sette.html
Mein erster Ansatz ist hier: https://github.com/jedie/python-code-sn ... ragon%2032
Dort liegen auch zwei WAV Dateien, zum testen.
Bisher werden allerdings nur der 0,1 Bitstrom angezeigt. Die Ausgabe sieht dann so aus:
Code: Alles auswählen
Read 'HelloWorld1 origin.wav'...
Numer of audio frames: 109923
Framerate: 44100
samplewidth: 2
channels: 1
struct_unpack_str: <h
00100000001010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010001111000000000011110000000001000
00001000000010000000100000001000000010000000100000001000000000000000000
00000000000000000000000000000000000000001111000010101010000000000000000
00000000010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010001111001000000001001100
01111000010010000000000001010000000000010000010010010010000001001101001
10000010010001100000001000011110000000100100011000000110000000000011110
00100101000000000000101000111000000000010010010010110111000100010000010
01010100010001100100011001011110010000001001110101011110010010010100011
00100010001010000100010001000000000001111000100011000000000001111000110
10000000001001001001000000000000000000000000011101010101010101010101000
2734 bits decoded.
Ein Problem ist der "Startpunkt", den ich unten mit "even_odd" festlege. Wenn der falsch gewählt ist, kommt nur Käse raus.
Eine Idee, was man machen könnte: Man probiert mit einen Wert und testet ob man den Header mit "010101..." Folge kommt. Wenn nicht, dann anderen Wert nehmen und von vorn Probieren...
Generell funktioniert das "erkennen" der Sinus-Kurve so, das ich einfach nachsehe ob eine Anzahl (MIN_TOGGLE_COUNT) an sample Werten alle positiv oder negativ ist...
Hatte auch überlegt nach Werten zu schauen die kontinuierlich größer oder kleiner werden. So würde man die Flanken der Sinuskurve finden. Hätte den Vorteil, das die Symmetrie beim Nulldurchgang egal ist...
Keine Ahnung wie ich nun weiter machen könnte...
Immer her mit Verbesserungsvorschläge, bitte!