REM CW.BAS Jim FitzSimons 31 March, 2000 pi# = 4# * ATN(1#) DATA 1,1,-1,-1,1,1,0 DATA -1,1,-1,1,-1,1,0 DATA 1,-1,-1,1,-1,0 DATA 1,1,1,1,1,0 DATA -1,1,1,1,1,0 DATA -1,-1,1,1,1,0 DATA -1,-1,-1,1,1,0 DATA -1,-1,-1,-1,10 DATA -1,-1,-1,-1,-1,0 DATA 1,-1,-1,-1,-1,0 DATA 1,1,-1,-1,-1,0 DATA 1,1,1,-1,-1,0 DATA 1,1,1,1,-1,0 DATA -1,-1,1,1,-1,-1,0 DATA -1,1,0 DATA 1,-1,-1,-1,0 DATA 1,-1,1,-1,0 DATA 1,-1,-1,0 DATA -1,0 DATA -1,-1,1,-1,0 DATA 1,1,-1,0 DATA -1,-1,-1,-1,0 DATA -1,-1,0 DATA -1,1,1,1,0 DATA 1,-1,1,0 DATA -1,1,-1,-1,0 DATA 1,1,0 DATA 1,-1,0 DATA 1,1,1,0 DATA -1,1,1,-1,0 DATA 1,1,-1,1,0 DATA -1,1,-1,0 DATA -1,-1,-1,0 DATA 1,0 DATA -1,-1,1,0 DATA -1,-1,-1,1,0 DATA -1,1,1,0 DATA 1,-1,-1,1,0 DATA 1,-1,1,1,0 DATA 1,1,-1,-1,0 DIM M%(1 TO 40, 7) A$ = ",./0123456789?ABCDEFGHIJKLMNOPQRSTUVWXYZ" FOR I% = 1 TO 40 FOR J% = 0 TO 6 READ M%(I%, J%) IF M%(I%, J%) = 0 THEN EXIT FOR NEXT J% NEXT I% CLS SampleRate# = 11025# LowerFrequency# = 990# UpperFrequency# = 1010# CenterFrequency# = 1000# DotLength# = .5# PRINT SampleRate#; LowerFrequency#; UpperFrequency#; DotLength#; CenterFrequency# LowerFrequency# = 2# * pi# * LowerFrequency# / SampleRate# UpperFrequency# = 2# * pi# * UpperFrequency# / SampleRate# CenterFrequency# = 2# * pi# * CenterFrequency# / SampleRate# DotLength# = FIX(SampleRate# * DotLength#) PRINT SampleRate#; LowerFrequency#; UpperFrequency#; DotLength#; CenterFrequency# PRINT "Press enter if default message is OK." 'Message$ = "CQ CQ CQ DE W7ANF W7ANF W7ANF PSE KKK" OPEN "CW.txt" FOR INPUT AS #1 LINE INPUT #1, Message$ CLOSE #1 PRINT "Message="; Message$ LINE INPUT TempMessage$ IF TempMessage$ <> "" THEN Message$ = UCASE$(TempMessage$) END IF PRINT "Message="; Message$ OPEN "CW.PCM" FOR OUTPUT AS #1 'Erase the file. CLOSE #1 'Write as PCM. CoolEdit will add the header for the *.WAV file. 'Make it look like two seperate tones. 'Each dot or dash has the same envelope so it is easy to 'synchronize the decode. OPEN "CW.PCM" FOR BINARY AS #1 CurrentTime& = 0& FOR I% = 1 TO LEN(Message$) J% = INSTR(A$, MID$(Message$, I%, 1)) IF J% <> 0 THEN FOR K% = 0 TO 6 IF M%(J%, K%) = 0 THEN EXIT FOR ELSEIF M%(J%, K%) = -1 THEN 'Dot FOR T# = 1# TO DotLength# Amplitude# = 32768# * (1# - COS(2# * pi# * T# / DotLength#)) / 2# CurrentTime& = CurrentTime& + 1& S% = Amplitude# * SIN(CurrentTime& * LowerFrequency#) PUT #1, , S% NEXT T# ELSE 'Dash FOR T# = 1# TO DotLength# Amplitude# = 32768# * (1# - COS(2# * pi# * T# / DotLength#)) / 2# CurrentTime& = CurrentTime& + 1& S% = Amplitude# * SIN(CurrentTime& * UpperFrequency#) PUT #1, , S% NEXT T# END IF NEXT K% ELSE S% = 0 FOR T# = 1# TO DotLength# CurrentTime& = CurrentTime& + 1& PUT #1, , S% NEXT T# END IF S% = 0 FOR T# = 1# TO DotLength# CurrentTime& = CurrentTime& + 1& PUT #1, , S% NEXT T# NEXT I% 'Add CW ID to end of the file. PRINT "Press enter if default CW ID is OK." Message$ = " VFSKCW DE W7ANF K" PRINT "CW ID="; Message$ LINE INPUT TempMessage$ IF TempMessage$ <> "" THEN Message$ = UCASE$(TempMessage$) END IF PRINT "CW ID="; Message$ FOR I% = 1 TO LEN(Message$) J% = INSTR(A$, MID$(Message$, I%, 1)) IF J% <> 0 THEN FOR K% = 0 TO 6 IF M%(J%, K%) = 0 THEN EXIT FOR ELSEIF M%(J%, K%) = -1 THEN 'Dot FOR T# = 1# TO DotLength# Amplitude# = 32768# * (1# - COS(2# * pi# * T# / DotLength#)) / 2# CurrentTime& = CurrentTime& + 1& S% = Amplitude# * SIN(CurrentTime& * CenterFrequency#) PUT #1, , S% NEXT T# ELSE 'Dash FOR T# = 1# TO 3# * DotLength# Amplitude# = 32768# * (1# - COS(2# * pi# * T# / (3# * DotLength#))) / 2# CurrentTime& = CurrentTime& + 1& S% = Amplitude# * SIN(CurrentTime& * CenterFrequency#) PUT #1, , S% NEXT T# END IF S% = 0 FOR T# = 1# TO DotLength# CurrentTime& = CurrentTime& + 1& PUT #1, , S% NEXT T# NEXT K% ELSE S% = 0 FOR T# = 1# TO 2# * DotLength# CurrentTime& = CurrentTime& + 1& PUT #1, , S% NEXT T# END IF S% = 0 FOR T# = 1# TO DotLength# CurrentTime& = CurrentTime& + 1& PUT #1, , S% NEXT T# NEXT I% PRINT "done" CLOSE #1 END