68 lines
2 KiB
Text
68 lines
2 KiB
Text
Rebol [
|
|
title: "Rosetta code: Morse code"
|
|
file: %Morse_code.r3
|
|
url: https://rosettacode.org/wiki/Morse_code
|
|
]
|
|
|
|
play-morse: function/with [
|
|
"Play Morse code"
|
|
text [string!]
|
|
][
|
|
foreach line split-lines text [
|
|
print rejoin ["^/Transmitting: " line "^/"]
|
|
foreach c line [
|
|
code: select morse-map c
|
|
either code [
|
|
prin [c ": "]
|
|
foreach sym code [
|
|
prin sym
|
|
either sym = #"." [dot][dash]
|
|
]
|
|
print ""
|
|
wait 0.3
|
|
][
|
|
if c = #" " [
|
|
print "[word gap]"
|
|
wait 0.3
|
|
]
|
|
]
|
|
]
|
|
]
|
|
print "^/Done."
|
|
][
|
|
;; Morse code dictionary
|
|
morse-map: #[
|
|
#"A" ".-" #"B" "-..." #"C" "-.-." #"D" "-.."
|
|
#"E" "." #"F" "..-." #"G" "--." #"H" "...."
|
|
#"I" ".." #"J" ".---" #"K" "-.-" #"L" ".-.."
|
|
#"M" "--" #"N" "-." #"O" "---" #"P" ".--."
|
|
#"Q" "--.-" #"R" ".-." #"S" "..." #"T" "-"
|
|
#"U" "..-" #"V" "...-" #"W" ".--" #"X" "-..-"
|
|
#"Y" "-.--" #"Z" "--.."
|
|
#"0" "-----" #"1" ".----" #"2" "..---" #"3" "...--"
|
|
#"4" "....-" #"5" "....." #"6" "-...." #"7" "--..."
|
|
#"8" "---.." #"9" "----."
|
|
]
|
|
;-- Sound functions...
|
|
;@@ https://github.com/Oldes/Rebol-MiniAudio
|
|
audio: import 'miniaudio
|
|
with audio [
|
|
;; initialize an audio device...
|
|
device: init-playback 1
|
|
;; create a waveform
|
|
wave: make-waveform-node type_sine 0.5 500.0
|
|
;; start the sound to be reused for the beep (paused)
|
|
stop snd: play :wave
|
|
;; beep function accepting time how long
|
|
beep: function[time [decimal! time!]][
|
|
start :snd
|
|
wait time
|
|
stop :snd
|
|
wait 0.1
|
|
]
|
|
dot: does[beep 0.1]
|
|
dash: does[beep 0.3]
|
|
]
|
|
]
|
|
|
|
play-morse "SOS, Hello Rebol!"
|