From edb0d6918d9eee6d5653d232c07dd8fa7f00c2b6 Mon Sep 17 00:00:00 2001 From: Svjatoslav Agejenko Date: Sat, 7 Sep 2024 23:01:42 +0300 Subject: [PATCH] Using AI to improve code readability --- .../msg2xi.bas | 243 +++++--- .../xi2msg.bas | 527 ++++++++++-------- Networking/Morse/morse.bas | 3 - 3 files changed, 436 insertions(+), 337 deletions(-) diff --git a/Networking/Digital data over analog audio channel/msg2xi.bas b/Networking/Digital data over analog audio channel/msg2xi.bas index 12b06e1..70361a8 100644 --- a/Networking/Digital data over analog audio channel/msg2xi.bas +++ b/Networking/Digital data over analog audio channel/msg2xi.bas @@ -1,92 +1,151 @@ -' Svjatoslav Agejenko year:2001 -' converts binary file into 8 bit wave sound file without header. - -DECLARE SUB start () -DECLARE SUB iadd () -DECLARE SUB oadd () -DECLARE SUB byt (a!) - -DIM SHARED iwa(1 TO 20) -DIM SHARED owa(1 TO 41) -DIM SHARED iwad$ -DIM SHARED owad$ -DIM SHARED file1$ -DIM SHARED file2$ -DIM SHARED bytee AS STRING * 1 - - -start - -file1$ = "input.txt" -file2$ = "sound.xi" - -OPEN file1$ FOR BINARY AS #2 -OPEN file2$ FOR BINARY AS #1 - -FOR a = 1 TO 50 -iadd -NEXT a -oadd - -2 -GET #2, , bytee -byt ASC(bytee) -IF EOF(2) = 0 THEN GOTO 2 - -CLOSE #2 -CLOSE #1 - -PRINT "Encoding of message into sound completed" - -SYSTEM - -SUB byt (a) -'PRINT "====" -a = a + 1 -IF a > 128 THEN a = a - 128: iadd ELSE oadd -IF a > 64 THEN a = a - 64: iadd ELSE oadd -IF a > 32 THEN a = a - 32: iadd ELSE oadd -IF a > 16 THEN a = a - 16: iadd ELSE oadd -IF a > 8 THEN a = a - 8: iadd ELSE oadd -IF a > 4 THEN a = a - 4: iadd ELSE oadd -IF a > 2 THEN a = a - 2: iadd ELSE oadd -IF a > 1 THEN iadd ELSE oadd -'b$ = INPUT$(1) -END SUB - -SUB iadd -PUT #1, , iwad$ -END SUB - -SUB oadd -PUT #1, , owad$ -END SUB - -SUB start - -pi = 3.141592653999996# - -b = 0 -FOR a = pi / 2 TO 2.5 * pi STEP (2 * pi / 20) -b = b + 1 -iwa(b) = SIN(a) * 100 -IF iwa(b) < 0 THEN iwa(b) = iwa(b) + 255 -NEXT a - -b = 0 -FOR a = pi / 2 TO 2.5 * pi STEP (2 * pi / 40) -b = b + 1 -owa(b) = SIN(a) * 100 -IF owa(b) < 0 THEN owa(b) = owa(b) + 255 -NEXT a - -FOR a = 1 TO 20 -iwad$ = iwad$ + CHR$(iwa(a)) -NEXT a - -FOR a = 1 TO 40 -owad$ = owad$ + CHR$(owa(a)) -NEXT a - -END SUB - +' Utility that encodes arbitrary text message into 8 bit sound file. +' This audio can be now transferred over telephone line or recorded to magnetic tape. +' By Svjatoslav Agejenko. +' Email: svjatoslav@svjatoslav.eu +' Homepage: http://www.svjatoslav.eu +' +' Changelog: +' 2001, Initial version +' 2024.09, Improved program readability using AI + +DECLARE SUB StartProgram () +DECLARE SUB AddIWave () +DECLARE SUB AddOWave () +DECLARE SUB ByteToSound (soundByte AS SINGLE) + +DIM SHARED iwaveArray(1 TO 20) +DIM SHARED owaveArray(1 TO 41) +DIM SHARED iwaveData$ +DIM SHARED owaveData$ +DIM SHARED inputFile$ +DIM SHARED outputFile$ +DIM SHARED byte AS STRING * 1 + +StartProgram + +inputFile$ = "input.txt" +outputFile$ = "sound.xi" + +OPEN inputFile$ FOR BINARY AS #2 +OPEN outputFile$ FOR BINARY AS #1 + +FOR a = 1 TO 50 + AddIWave +NEXT a +AddOWave + +2 +GET #2, , byte +ByteToSound ASC(byte) +IF EOF(2) = 0 THEN GOTO 2 + +CLOSE #2 +CLOSE #1 + +PRINT "Encoding of message into sound completed" + +SYSTEM + +SUB ByteToSound (soundByte AS SINGLE) +' Convert a byte to 8-bit wave sound data + soundByte = soundByte + 1 + IF soundByte > 128 THEN + soundByte = soundByte - 128 + AddIWave + ELSE + AddOWave + END IF + + IF soundByte > 64 THEN + soundByte = soundByte - 64 + AddIWave + ELSE + AddOWave + END IF + + IF soundByte > 32 THEN + soundByte = soundByte - 32 + AddIWave + ELSE + AddOWave + END IF + + IF soundByte > 16 THEN + soundByte = soundByte - 16 + AddIWave + ELSE + AddOWave + END IF + + IF soundByte > 8 THEN + soundByte = soundByte - 8 + AddIWave + ELSE + AddOWave + END IF + + IF soundByte > 4 THEN + soundByte = soundByte - 4 + AddIWave + ELSE + AddOWave + END IF + + IF soundByte > 2 THEN + soundByte = soundByte - 2 + AddIWave + ELSE + AddOWave + END IF + + IF soundByte > 1 THEN + AddIWave + ELSE + AddOWave + END IF +END SUB + +SUB AddIWave +' Write iwaveData to the output file + PUT #1, , iwaveData$ +END SUB + +SUB AddOWave +' Write owaveData to the output file + PUT #1, , owaveData$ +END SUB + +SUB StartProgram +' Initialize wave data arrays + + pi = 3.141592653999996# + + b = 0 + FOR a = pi / 2 TO 2.5 * pi STEP (2 * pi / 20) + b = b + 1 + iwaveArray(b) = SIN(a) * 100 + IF iwaveArray(b) < 0 THEN + iwaveArray(b) = iwaveArray(b) + 255 + END IF + NEXT a + + b = 0 + FOR a = pi / 2 TO 2.5 * pi STEP (2 * pi / 40) + b = b + 1 + owaveArray(b) = SIN(a) * 100 + IF owaveArray(b) < 0 THEN + owaveArray(b) = owaveArray(b) + 255 + END IF + NEXT a + +' Convert wave arrays to string data + + FOR a = 1 TO 20 + iwaveData$ = iwaveData$ + CHR$(iwaveArray(a)) + NEXT a + + FOR a = 1 TO 40 + owaveData$ = owaveData$ + CHR$(owaveArray(a)) + NEXT a + +END SUB diff --git a/Networking/Digital data over analog audio channel/xi2msg.bas b/Networking/Digital data over analog audio channel/xi2msg.bas index 881ac25..a6bc393 100644 --- a/Networking/Digital data over analog audio channel/xi2msg.bas +++ b/Networking/Digital data over analog audio channel/xi2msg.bas @@ -1,242 +1,285 @@ -' Svjatoslav Agejenko year: 2001 -' decades binary data from 8 bit wave sound file. - -DEFINT A-Y -DECLARE SUB bysf (a$, d) -DECLARE SUB messa (a$) -DECLARE SUB pfo (f, t, it) -DECLARE SUB anal () -DECLARE SUB start () -DECLARE SUB iadd () -DECLARE SUB oadd () -DECLARE SUB byt (a) - -DIM SHARED file1$ -DIM SHARED file2$ -DIM SHARED buf(-100 TO 10000) -DIM SHARED bus AS STRING * 1000 -DIM SHARED bufi -DIM SHARED bg -DIM SHARED sm -DIM SHARED beg -DIM SHARED wai -DIM SHARED old2 -DIM SHARED stat(1 TO 10) -DIM SHARED statl -DIM SHARED aver -DIM SHARED byte AS STRING * 1 -DIM SHARED avv - -DIM SHARED li -DIM SHARED oc -DIM SHARED px - -start -messa "searching for beginning..." - -OPEN "output.txt" FOR BINARY AS #1 -OPEN "sound.xi" FOR BINARY AS #2 -SEEK #2, 360 - -2 -GET #2, , bus -FOR a = 1 TO 1000 -b$ = RIGHT$(LEFT$(bus, a), 1) -bufi = bufi + 1 -c = ASC(b$) -IF c > 127 THEN c = c - 255 -buf(bufi) = c -NEXT a -IF (EOF(2) = 0) AND (bufi < 8000) THEN GOTO 2 -anal -IF EOF(2) = 0 THEN GOTO 2 - -CLOSE #2 -CLOSE #1 - -SYSTEM - -SUB anal -LINE (1, 170)-(200, 430), 0, BF -FOR a = 1 TO bufi - (avv - 1) - -LINE (100, 170)-(100, 430), 13 -LINE (old2 - a + 100, 170)-(old2 - a + 100, 430), 11 -LINE (0, 300)-(200, 300), 13 -FOR b = 0 TO 200 -PSET (b, buf(b + a - 101) + 300), 0 -PSET (b, buf(b + a - 100) + 300), 14 -NEXT b -LINE (old2 - a + 100, 170)-(old2 - a + 100, 430), 0 - -c = 0 -FOR b = a TO a + (avv - 1) -c = c + buf(b) -NEXT b -c = c / (avv / 2) -IF c > oc THEN -IF li = -1 THEN -li = 1 -pfo a + ((avv - 1) / 2 - 1), 1, oc -GOTO 3 -END IF -END IF -IF c < oc THEN -IF li = 1 THEN -li = -1 -pfo a + ((avv - 1) / 2 - 1), 2, oc -GOTO 3 -END IF -END IF -3 -oc = c -NEXT a - -FOR a = bufi - (avv - 2) TO bufi -buf(a - (bufi - (avv - 2)) + 1) = buf(a) -NEXT a -old2 = old2 - (bufi - (avv - 2)) + 1 -bufi = avv - 1 - -END SUB - -SUB bysf (a$, d) -'LINE (201, 170)-(639, 430), 1, B -IF d = 10 THEN px = 0: a$ = "": GOTO 5 - -px = px + 1 -IF px > 53 THEN -px = 1 -5 -DIM tempr(1 TO 32000) -GET (201, 186)-(639, 430), tempr(1) -PUT (201, 170), tempr(1), PSET -LINE (201, 414)-(639, 430), 0, BF -END IF - -LOCATE 26, 26 + px -PRINT a$ -byte = CHR$(d) -PUT #1, , byte - -END SUB - -SUB byt (a) - -'LINE (410, 0)-(639, 169), 1, B - -statl = statl + 1 -IF statl > 8 THEN -statl = 1 -b = 0 -IF stat(1) = 1 THEN b = b + 128 -IF stat(2) = 1 THEN b = b + 64 -IF stat(3) = 1 THEN b = b + 32 -IF stat(4) = 1 THEN b = b + 16 -IF stat(5) = 1 THEN b = b + 8 -IF stat(6) = 1 THEN b = b + 4 -IF stat(7) = 1 THEN b = b + 2 -IF stat(8) = 1 THEN b = b + 1 -LOCATE 10, 69 -PRINT b -LOCATE 10, 75 -PRINT HEX$(b) -LOCATE 10, 79 -c$ = CHR$(b) -IF b = 7 OR b = 8 OR b = 10 OR b = 12 OR b = 13 THEN c$ = " " -PRINT c$ -bysf c$, b - -DIM tempr(1 TO 10000) -GET (410, 16)-(639, 169), tempr(1) -PUT (410, 0), tempr(1), PSET -LINE (410, 153)-(639, 169), 0, BF -END IF -LOCATE 10, 50 + (statl * 2) -stat(statl) = a -PRINT a - - -'IF a > 128 THEN a = a - 128: iadd ELSE oadd -'IF a > 64 THEN a = a - 64: iadd ELSE oadd -'IF a > 32 THEN a = a - 32: iadd ELSE oadd -'IF a > 16 THEN a = a - 16: iadd ELSE oadd -'IF a > 8 THEN a = a - 8: iadd ELSE oadd -'IF a > 4 THEN a = a - 4: iadd ELSE oadd -'IF a > 2 THEN a = a - 2: iadd ELSE oadd -'IF a > 1 THEN iadd ELSE oadd -END SUB - -SUB messa (a$) -'LINE (0, 0)-(409, 169), 1, B -DIM tempr(1 TO 20000) -GET (0, 16)-(409, 169), tempr(1) -PUT (0, 0), tempr(1), PSET -LINE (0, 153)-(409, 169), 0, BF -LOCATE 10, 1 -PRINT a$ -END SUB - -SUB pfo (f, t, it) -IF t = 2 THEN -bg = it -IF wai > 0 THEN wai = wai - 1 - -IF (bg - sm > 6) AND (beg = 0) THEN beg = 1: wai = 10: messa "Beginning point found!" - -IF (wai = 0) AND (beg = 1) THEN -IF statl = 0 THEN messa "Beginning statistical analyze" -statl = statl + 1 -IF statl > 10 THEN -FOR a = 1 TO 10 -aver = aver + stat(a) -NEXT a -aver = aver * 1.5 / 10 -beg = 2 -statl = 1 -messa "Statistical analyze completed!" -END IF -stat(statl) = f - old2 -END IF - -IF beg = 2 THEN -IF f - old2 >= aver THEN -beg = 3 -statl = 0 -FOR a = 1 TO 8 -stat(a) = 0 -NEXT a -GOTO 4 -END IF -END IF - -IF beg = 3 THEN -IF f - old2 >= aver THEN -byt 0 -ELSE -byt 1 -END IF -END IF -4 - -old2 = f -ELSE -sm = it -END IF -END SUB - -SUB start - -SCREEN 12 - -bufi = 0 -beg = 0 -statl = 0 -aver = 0 -px = 0 -avv = 7 - -li = 1 -oc = -9999 -END SUB - +' Utility that decodes text message from 8 bit audio recording. +' By Svjatoslav Agejenko. +' Email: svjatoslav@svjatoslav.eu +' Homepage: http://www.svjatoslav.eu +' +' Changelog: +' 2001, Initial version +' 2024.09, Improved program readability using AI + +DEFINT A-Y +DECLARE SUB bysf (a$, d) +DECLARE SUB messa (a$) +DECLARE SUB pfo (f, t, it) +DECLARE SUB anal () +DECLARE SUB start () +DECLARE SUB iadd () +DECLARE SUB oadd () +DECLARE SUB byt (a) + +DIM SHARED file1$ +DIM SHARED file2$ +DIM SHARED buf(-100 TO 10000) +DIM SHARED bus AS STRING * 1000 +DIM SHARED bufi +DIM SHARED bg +DIM SHARED sm +DIM SHARED beg +DIM SHARED wai +DIM SHARED old2 +DIM SHARED stat(1 TO 10) +DIM SHARED statl +DIM SHARED aver +DIM SHARED byte AS STRING * 1 +DIM SHARED avv + +DIM SHARED li +DIM SHARED oc +DIM SHARED px + +start +messa "searching for beginning..." + +OPEN "output.txt" FOR BINARY AS #1 +OPEN "sound.xi" FOR BINARY AS #2 +SEEK #2, 360 + +2 +GET #2, , bus +FOR a = 1 TO 1000 + b$ = RIGHT$(LEFT$(bus, a), 1) + bufi = bufi + 1 + c = ASC(b$) + IF c > 127 THEN c = c - 255 + buf(bufi) = c +NEXT a +IF (EOF(2) = 0) AND (bufi < 8000) THEN GOTO 2 +anal +IF EOF(2) = 0 THEN GOTO 2 + +CLOSE #2 +CLOSE #1 + +SYSTEM + +SUB anal + LINE (1, 170)-(200, 430), 0, BF + FOR a = 1 TO bufi - (avv - 1) + + LINE (100, 170)-(100, 430), 13 + LINE (old2 - a + 100, 170)-(old2 - a + 100, 430), 11 + LINE (0, 300)-(200, 300), 13 + FOR b = 0 TO 200 + PSET (b, buf(b + a - 101) + 300), 0 + PSET (b, buf(b + a - 100) + 300), 14 + NEXT b + LINE (old2 - a + 100, 170)-(old2 - a + 100, 430), 0 + + c = 0 + FOR b = a TO a + (avv - 1) + c = c + buf(b) + NEXT b + c = c / (avv / 2) + + IF c > oc THEN + IF li = -1 THEN + li = 1 + pfo a + ((avv - 1) / 2 - 1), 1, oc + GOTO 3 + END IF + END IF + + IF c < oc THEN + IF li = 1 THEN + li = -1 + pfo a + ((avv - 1) / 2 - 1), 2, oc + GOTO 3 + END IF + END IF + + 3 + oc = c + NEXT a + + FOR a = bufi - (avv - 2) TO bufi + buf(a - (bufi - (avv - 2)) + 1) = buf(a) + NEXT a + + old2 = old2 - (bufi - (avv - 2)) + 1 + bufi = avv - 1 + +END SUB + +SUB bysf (a$, d) + 'LINE (201, 170)-(639, 430), 1, B + IF d = 10 THEN px = 0: a$ = "": GOTO 5 + + px = px + 1 + IF px > 53 THEN + px = 1 + 5 + DIM tempr(1 TO 32000) + GET (201, 186)-(639, 430), tempr(1) + PUT (201, 170), tempr(1), PSET + LINE (201, 414)-(639, 430), 0, BF + END IF + + LOCATE 26, 26 + px + PRINT a$ + byte = CHR$(d) + PUT #1, , byte + +END SUB + +SUB byt (a) + + 'LINE (410, 0)-(639, 169), 1, B + + statl = statl + 1 + IF statl > 8 THEN + statl = 1 + b = 0 + IF stat(1) = 1 THEN b = b + 128 + IF stat(2) = 1 THEN b = b + 64 + IF stat(3) = 1 THEN b = b + 32 + IF stat(4) = 1 THEN b = b + 16 + IF stat(5) = 1 THEN b = b + 8 + IF stat(6) = 1 THEN b = b + 4 + IF stat(7) = 1 THEN b = b + 2 + IF stat(8) = 1 THEN b = b + 1 + + LOCATE 10, 69 + PRINT b + + LOCATE 10, 75 + PRINT HEX$(b) + + LOCATE 10, 79 + c$ = CHR$(b) + + IF b = 7 OR b = 8 OR b = 10 OR b = 12 OR b = 13 THEN c$ = " " + + PRINT c$ + + bysf c$, b + + DIM tempr(1 TO 10000) + GET (410, 16)-(639, 169), tempr(1) + PUT (410, 0), tempr(1), PSET + LINE (410, 153)-(639, 169), 0, BF + END IF + + LOCATE 10, 50 + (statl * 2) + + stat(statl) = a + + PRINT a + + 'IF a > 128 THEN a = a - 128: iadd ELSE oadd + 'IF a > 64 THEN a = a - 64: iadd ELSE oadd + 'IF a > 32 THEN a = a - 32: iadd ELSE oadd + 'IF a > 16 THEN a = a - 16: iadd ELSE oadd + 'IF a > 8 THEN a = a - 8: iadd ELSE oadd + 'IF a > 4 THEN a = a - 4: iadd ELSE oadd + 'IF a > 2 THEN a = a - 2: iadd ELSE oadd + 'IF a > 1 THEN iadd ELSE oadd +END SUB + +SUB messa (a$) + 'LINE (0, 0)-(409, 169), 1, B + + DIM tempr(1 TO 20000) + + GET (0, 16)-(409, 169), tempr(1) + + PUT (0, 0), tempr(1), PSET + + LINE (0, 153)-(409, 169), 0, BF + + LOCATE 10, 1 + + PRINT a$ + +END SUB + +SUB pfo (f, t, it) + IF t = 2 THEN + bg = it + + IF wai > 0 THEN wai = wai - 1 + + IF (bg - sm > 6) AND (beg = 0) THEN beg = 1: wai = 10: messa "Beginning point found!" + + IF (wai = 0) AND (beg = 1) THEN + IF statl = 0 THEN messa "Beginning statistical analyze" + + statl = statl + 1 + + IF statl > 10 THEN + FOR a = 1 TO 10 + aver = aver + stat(a) + NEXT a + + aver = aver * 1.5 / 10 + + beg = 2 + + statl = 1 + + messa "Statistical analyze completed!" + END IF + + stat(statl) = f - old2 + END IF + + IF beg = 2 THEN + IF f - old2 >= aver THEN + beg = 3 + + statl = 0 + + FOR a = 1 TO 8 + stat(a) = 0 + NEXT a + + GOTO 4 + END IF + END IF + + IF beg = 3 THEN + IF f - old2 >= aver THEN + byt 0 + ELSE + byt 1 + END IF + END IF + + 4 + + old2 = f + ELSE + sm = it + END IF +END SUB + +SUB start + + SCREEN 12 + + bufi = 0 + + beg = 0 + + statl = 0 + + aver = 0 + + px = 0 + + avv = 7 + + li = 1 + + oc = -9999 + +END SUB diff --git a/Networking/Morse/morse.bas b/Networking/Morse/morse.bas index 54895ba..5909734 100755 --- a/Networking/Morse/morse.bas +++ b/Networking/Morse/morse.bas @@ -7,9 +7,6 @@ ' 2003, Initial version ' 2024.08, Improved program readability using AI - -' Svjatoslav Agejenko 2003 - DECLARE SUB say() DECLARE SUB laus(a$) DECLARE SUB char(a!) -- 2.20.1