Morse code: Difference between revisions

2,765 bytes added ,  2 years ago
Added Wren
(Added Wren)
Line 4,396:
 
End Module</lang>
 
=={{header|Wren}}==
{{libheader|Wren-str}}
{{libheader|Wren-sound}}
As Wren-cli doesn't have any built-in audio support, we instead build a .wav file which can then be played using a utility such as rhythmbox or SoX, having first printed the morse code to the terminal for comparison.
<lang ecmascript>import "/str" for Str
import "/sound" for Wav
 
var charToMorse = {
"!": "---.", "\"": ".-..-.", "$": "...-..-", "'": ".----.",
"(": "-.--.", ")": "-.--.-", "+": ".-.-.", ",": "--..--",
"-": "-....-", ".": ".-.-.-", "/": "-..-.",
"0": "-----", "1": ".----", "2": "..---", "3": "...--",
"4": "....-", "5": ".....", "6": "-....", "7": "--...",
"8": "---..", "9": "----.",
":": "---...", ";": "-.-.-.", "=": "-...-", "?": "..--..",
"@": ".--.-.",
"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": "--..",
"[": "-.--.", "]": "-.--.-", "_": "..--.-"
}
 
var textToMorse = Fn.new { |text|
text = Str.upper(text)
var morse = ""
for (c in text) {
if (c == " ") {
morse = morse + (" " * 7)
} else {
var m = charToMorse[c]
if (m) morse = morse + m.join(" ") + " "
}
}
return morse.trimEnd()
}
 
var morse = textToMorse.call("Hello world!")
System.print(morse) // print to terminal
 
// now create a .wav file
morse = morse.replace("-", "...") // replace 'dash' with 3 'dot's
var data = []
var sampleRate = 44100
var samples = 0.2 * sampleRate // number of samples assuming 'dot' takes 200 ms.
var freq = 500 // say
var omega = 2 * Num.pi * freq
for (c in morse) {
if (c == ".") {
for (s in 0...samples) {
var value = (32 * (omega * s / sampleRate).sin).round & 255
data.add(value)
}
} else {
for (s in 0...samples) data.add(0)
}
}
Wav.create("morse_code.wav", data, sampleRate)</lang>
 
{{out}}
<pre>
. . . . . . - . . . - . . - - - . - - - - - . - . . - . . - . . - - - .
</pre>
<br>
It's also possible to play .wav files which (preferably) have a sample rate of 44.1 kHz using DOME:
{{libheader|DOME}}
<lang ecmascript>import "audio" for AudioEngine
 
class Main {
construct new() {}
 
init() {
AudioEngine.load("morse", "morse_code.wav")
AudioEngine.play("morse")
}
 
update() {}
 
draw(alpha) {}
}
 
var Game = Main.new()</lang>
 
=={{header|XPL0}}==
9,482

edits