Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
55
Task/Morse-code/Clojure/morse-code.clj
Normal file
55
Task/Morse-code/Clojure/morse-code.clj
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
(import [javax.sound.sampled AudioFormat AudioSystem SourceDataLine])
|
||||
|
||||
(defn play [sample-rate bs]
|
||||
(let [af (AudioFormat. sample-rate 8 1 true true)]
|
||||
(doto (AudioSystem/getSourceDataLine af)
|
||||
(.open af sample-rate)
|
||||
.start
|
||||
(.write bs 0 (count bs))
|
||||
.drain
|
||||
.close)))
|
||||
|
||||
(defn note [hz sample-rate ms]
|
||||
(let [period (/ hz sample-rate)]
|
||||
(->> (range (* sample-rate ms 1/1000))
|
||||
(map #(->> (* 2 Math/PI % period)
|
||||
Math/sin
|
||||
(* 127 ,)
|
||||
byte) ,))))
|
||||
|
||||
(def morse-codes
|
||||
{\A ".-" \J ".---" \S "..." \1 ".----" \. ".-.-.-" \: "---..."
|
||||
\B "-..." \K "-.-" \T "-" \2 "..---" \, "--..--" \; "-.-.-."
|
||||
\C "-.-." \L ".-.." \U "..-" \3 "...--" \? "..--.." \= "-...-"
|
||||
\D "-.." \M "--" \V "...-" \4 "....-" \' ".----." \+ ".-.-."
|
||||
\E "." \N "-." \W ".--" \5 "....." \! "-.-.--" \- "-....-"
|
||||
\F "..-." \O "---" \X "-..-" \6 "-...." \/ "-..-." \_ "..--.-"
|
||||
\G "--." \P ".--." \Y "-.--" \7 "--..." \( "-.--." \" ".-..-." ;"
|
||||
\H "...." \Q "--.-" \Z "--.." \8 "---.." \) "-.--.-" \$ "...-..-"
|
||||
\I ".." \R ".-." \0 "-----" \9 "----." \& ".-..." \@ ".--.-."
|
||||
\space " "})
|
||||
|
||||
(def sample-rate 1024)
|
||||
|
||||
(let [hz 440
|
||||
ms 50]
|
||||
(def sounds
|
||||
{\. (note hz sample-rate (* 1 ms))
|
||||
\- (note hz sample-rate(* 3 ms))
|
||||
:element-gap (note 0 sample-rate (* 1 ms))
|
||||
:letter-gap (note 0 sample-rate (* 3 ms))
|
||||
\space (note 0 sample-rate (* 1 ms))})) ;includes letter-gap on either side
|
||||
|
||||
(defn convert-letter [letter]
|
||||
(->> (get morse-codes letter "")
|
||||
(map sounds ,)
|
||||
(interpose (:element-gap sounds) ,)
|
||||
(apply concat ,)))
|
||||
|
||||
(defn morse [s]
|
||||
(->> (.toUpperCase s)
|
||||
(map convert-letter ,)
|
||||
(interpose (:letter-gap sounds) ,)
|
||||
(apply concat ,)
|
||||
byte-array
|
||||
(play sample-rate ,)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue