-' Svjatoslav Agejenko year:2001\r
-' converts binary file into 8 bit wave sound file without header.\r
-\r
-DECLARE SUB start ()\r
-DECLARE SUB iadd ()\r
-DECLARE SUB oadd ()\r
-DECLARE SUB byt (a!)\r
-\r
-DIM SHARED iwa(1 TO 20)\r
-DIM SHARED owa(1 TO 41)\r
-DIM SHARED iwad$\r
-DIM SHARED owad$\r
-DIM SHARED file1$\r
-DIM SHARED file2$\r
-DIM SHARED bytee AS STRING * 1\r
-\r
-\r
-start\r
-\r
-file1$ = "input.txt"\r
-file2$ = "sound.xi"\r
-\r
-OPEN file1$ FOR BINARY AS #2\r
-OPEN file2$ FOR BINARY AS #1\r
-\r
-FOR a = 1 TO 50\r
-iadd\r
-NEXT a\r
-oadd\r
-\r
-2\r
-GET #2, , bytee\r
-byt ASC(bytee)\r
-IF EOF(2) = 0 THEN GOTO 2\r
-\r
-CLOSE #2\r
-CLOSE #1\r
-\r
-PRINT "Encoding of message into sound completed"\r
-\r
-SYSTEM\r
-\r
-SUB byt (a)\r
-'PRINT "===="\r
-a = a + 1\r
-IF a > 128 THEN a = a - 128: iadd ELSE oadd\r
-IF a > 64 THEN a = a - 64: iadd ELSE oadd\r
-IF a > 32 THEN a = a - 32: iadd ELSE oadd\r
-IF a > 16 THEN a = a - 16: iadd ELSE oadd\r
-IF a > 8 THEN a = a - 8: iadd ELSE oadd\r
-IF a > 4 THEN a = a - 4: iadd ELSE oadd\r
-IF a > 2 THEN a = a - 2: iadd ELSE oadd\r
-IF a > 1 THEN iadd ELSE oadd\r
-'b$ = INPUT$(1)\r
-END SUB\r
-\r
-SUB iadd\r
-PUT #1, , iwad$\r
-END SUB\r
-\r
-SUB oadd\r
-PUT #1, , owad$\r
-END SUB\r
-\r
-SUB start\r
-\r
-pi = 3.141592653999996#\r
- \r
-b = 0\r
-FOR a = pi / 2 TO 2.5 * pi STEP (2 * pi / 20)\r
-b = b + 1\r
-iwa(b) = SIN(a) * 100\r
-IF iwa(b) < 0 THEN iwa(b) = iwa(b) + 255\r
-NEXT a\r
-\r
-b = 0\r
-FOR a = pi / 2 TO 2.5 * pi STEP (2 * pi / 40)\r
-b = b + 1\r
-owa(b) = SIN(a) * 100\r
-IF owa(b) < 0 THEN owa(b) = owa(b) + 255\r
-NEXT a\r
-\r
-FOR a = 1 TO 20\r
-iwad$ = iwad$ + CHR$(iwa(a))\r
-NEXT a\r
-\r
-FOR a = 1 TO 40\r
-owad$ = owad$ + CHR$(owa(a))\r
-NEXT a\r
-\r
-END SUB\r
-\r
+' 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
-' Svjatoslav Agejenko year: 2001\r
-' decades binary data from 8 bit wave sound file.\r
-\r
-DEFINT A-Y\r
-DECLARE SUB bysf (a$, d)\r
-DECLARE SUB messa (a$)\r
-DECLARE SUB pfo (f, t, it)\r
-DECLARE SUB anal ()\r
-DECLARE SUB start ()\r
-DECLARE SUB iadd ()\r
-DECLARE SUB oadd ()\r
-DECLARE SUB byt (a)\r
-\r
-DIM SHARED file1$\r
-DIM SHARED file2$\r
-DIM SHARED buf(-100 TO 10000)\r
-DIM SHARED bus AS STRING * 1000\r
-DIM SHARED bufi\r
-DIM SHARED bg\r
-DIM SHARED sm\r
-DIM SHARED beg\r
-DIM SHARED wai\r
-DIM SHARED old2\r
-DIM SHARED stat(1 TO 10)\r
-DIM SHARED statl\r
-DIM SHARED aver\r
-DIM SHARED byte AS STRING * 1\r
-DIM SHARED avv\r
-\r
-DIM SHARED li\r
-DIM SHARED oc\r
-DIM SHARED px\r
-\r
-start\r
-messa "searching for beginning..."\r
-\r
-OPEN "output.txt" FOR BINARY AS #1\r
-OPEN "sound.xi" FOR BINARY AS #2\r
-SEEK #2, 360\r
-\r
-2\r
-GET #2, , bus\r
-FOR a = 1 TO 1000\r
-b$ = RIGHT$(LEFT$(bus, a), 1)\r
-bufi = bufi + 1\r
-c = ASC(b$)\r
-IF c > 127 THEN c = c - 255\r
-buf(bufi) = c\r
-NEXT a\r
-IF (EOF(2) = 0) AND (bufi < 8000) THEN GOTO 2\r
-anal\r
-IF EOF(2) = 0 THEN GOTO 2\r
-\r
-CLOSE #2\r
-CLOSE #1\r
-\r
-SYSTEM\r
-\r
-SUB anal\r
-LINE (1, 170)-(200, 430), 0, BF\r
-FOR a = 1 TO bufi - (avv - 1)\r
-\r
-LINE (100, 170)-(100, 430), 13\r
-LINE (old2 - a + 100, 170)-(old2 - a + 100, 430), 11\r
-LINE (0, 300)-(200, 300), 13\r
-FOR b = 0 TO 200\r
-PSET (b, buf(b + a - 101) + 300), 0\r
-PSET (b, buf(b + a - 100) + 300), 14\r
-NEXT b\r
-LINE (old2 - a + 100, 170)-(old2 - a + 100, 430), 0\r
-\r
-c = 0\r
-FOR b = a TO a + (avv - 1)\r
-c = c + buf(b)\r
-NEXT b\r
-c = c / (avv / 2)\r
-IF c > oc THEN\r
-IF li = -1 THEN\r
-li = 1\r
-pfo a + ((avv - 1) / 2 - 1), 1, oc\r
-GOTO 3\r
-END IF\r
-END IF\r
-IF c < oc THEN\r
-IF li = 1 THEN\r
-li = -1\r
-pfo a + ((avv - 1) / 2 - 1), 2, oc\r
-GOTO 3\r
-END IF\r
-END IF\r
-3\r
-oc = c\r
-NEXT a\r
-\r
-FOR a = bufi - (avv - 2) TO bufi\r
-buf(a - (bufi - (avv - 2)) + 1) = buf(a)\r
-NEXT a\r
-old2 = old2 - (bufi - (avv - 2)) + 1\r
-bufi = avv - 1\r
-\r
-END SUB\r
-\r
-SUB bysf (a$, d)\r
-'LINE (201, 170)-(639, 430), 1, B\r
-IF d = 10 THEN px = 0: a$ = "": GOTO 5\r
- \r
-px = px + 1\r
-IF px > 53 THEN\r
-px = 1\r
-5\r
-DIM tempr(1 TO 32000)\r
-GET (201, 186)-(639, 430), tempr(1)\r
-PUT (201, 170), tempr(1), PSET\r
-LINE (201, 414)-(639, 430), 0, BF\r
-END IF\r
-\r
-LOCATE 26, 26 + px\r
-PRINT a$\r
-byte = CHR$(d)\r
-PUT #1, , byte\r
-\r
-END SUB\r
-\r
-SUB byt (a)\r
- \r
-'LINE (410, 0)-(639, 169), 1, B\r
-\r
-statl = statl + 1\r
-IF statl > 8 THEN\r
-statl = 1\r
-b = 0\r
-IF stat(1) = 1 THEN b = b + 128\r
-IF stat(2) = 1 THEN b = b + 64\r
-IF stat(3) = 1 THEN b = b + 32\r
-IF stat(4) = 1 THEN b = b + 16\r
-IF stat(5) = 1 THEN b = b + 8\r
-IF stat(6) = 1 THEN b = b + 4\r
-IF stat(7) = 1 THEN b = b + 2\r
-IF stat(8) = 1 THEN b = b + 1\r
-LOCATE 10, 69\r
-PRINT b\r
-LOCATE 10, 75\r
-PRINT HEX$(b)\r
-LOCATE 10, 79\r
-c$ = CHR$(b)\r
-IF b = 7 OR b = 8 OR b = 10 OR b = 12 OR b = 13 THEN c$ = " "\r
-PRINT c$\r
-bysf c$, b\r
-\r
-DIM tempr(1 TO 10000)\r
-GET (410, 16)-(639, 169), tempr(1)\r
-PUT (410, 0), tempr(1), PSET\r
-LINE (410, 153)-(639, 169), 0, BF\r
-END IF\r
-LOCATE 10, 50 + (statl * 2)\r
-stat(statl) = a\r
-PRINT a\r
-\r
-\r
-'IF a > 128 THEN a = a - 128: iadd ELSE oadd\r
-'IF a > 64 THEN a = a - 64: iadd ELSE oadd\r
-'IF a > 32 THEN a = a - 32: iadd ELSE oadd\r
-'IF a > 16 THEN a = a - 16: iadd ELSE oadd\r
-'IF a > 8 THEN a = a - 8: iadd ELSE oadd\r
-'IF a > 4 THEN a = a - 4: iadd ELSE oadd\r
-'IF a > 2 THEN a = a - 2: iadd ELSE oadd\r
-'IF a > 1 THEN iadd ELSE oadd\r
-END SUB\r
-\r
-SUB messa (a$)\r
-'LINE (0, 0)-(409, 169), 1, B\r
-DIM tempr(1 TO 20000)\r
-GET (0, 16)-(409, 169), tempr(1)\r
-PUT (0, 0), tempr(1), PSET\r
-LINE (0, 153)-(409, 169), 0, BF\r
-LOCATE 10, 1\r
-PRINT a$\r
-END SUB\r
-\r
-SUB pfo (f, t, it)\r
-IF t = 2 THEN\r
-bg = it\r
-IF wai > 0 THEN wai = wai - 1\r
-\r
-IF (bg - sm > 6) AND (beg = 0) THEN beg = 1: wai = 10: messa "Beginning point found!"\r
-\r
-IF (wai = 0) AND (beg = 1) THEN\r
-IF statl = 0 THEN messa "Beginning statistical analyze"\r
-statl = statl + 1\r
-IF statl > 10 THEN\r
-FOR a = 1 TO 10\r
-aver = aver + stat(a)\r
-NEXT a\r
-aver = aver * 1.5 / 10\r
-beg = 2\r
-statl = 1\r
-messa "Statistical analyze completed!"\r
-END IF\r
-stat(statl) = f - old2\r
-END IF\r
-\r
-IF beg = 2 THEN\r
-IF f - old2 >= aver THEN\r
-beg = 3\r
-statl = 0\r
-FOR a = 1 TO 8\r
-stat(a) = 0\r
-NEXT a\r
-GOTO 4\r
-END IF\r
-END IF\r
-\r
-IF beg = 3 THEN\r
-IF f - old2 >= aver THEN\r
-byt 0\r
-ELSE\r
-byt 1\r
-END IF\r
-END IF\r
-4\r
-\r
-old2 = f\r
-ELSE\r
-sm = it\r
-END IF\r
-END SUB\r
-\r
-SUB start\r
-\r
-SCREEN 12\r
-\r
-bufi = 0\r
-beg = 0\r
-statl = 0\r
-aver = 0\r
-px = 0\r
-avv = 7\r
-\r
-li = 1\r
-oc = -9999\r
-END SUB\r
-\r
+' 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