나는 내 귀를 모스 부호를 읽는 훈련하고 생성, 명령 줄 sox
(아래 참조)을 사용으로 사운드를 생성하는)루비 : 모스 부호으로 사운드
자신을 훈련하기 위해, 내가 쓴 조금 루비 스크립트를. 기본적으로 미리 만들어진 사운드 파일은 dit
초, dah
초, 복수 공백 (문자와 단어 사이, dit
및 dah
)이 붙어 있습니다. 그것은 작동하지만 대상 파일이 커질수록 점점 느려지고 있습니다.
wav 파일에 루비를 사용하여 소리를 생성하는 더 스마트 한 방법이 있습니까?
#!/usr/bin/ruby
wordlength = 5
blocklength = 12
testlength = 5
alphabet = [ "G", "A", "S", "5", "D", "0", "R", "/", "2", "L", "9", "T", "V", "I", "O", "Q", "C", "4", "F", "X", "E", "N", "U" ]
playstring = ""
block = ""
page = ""
MORSE = {
"!" => "---.", "\"" => ".-..-.", "$" => "...-..-", "'" => ".----.",
"(" => "-.--.", ")" => "-.--.-", "+" => ".-.-.", "," => "--..--",
"-" => "-....-", "." => ".-.-.-", "/" => "-..-.", "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" => "--..",
"[" => "-.--.", "]" => "-.--.-", "_" => "..--.-",
"ka" => "-.-.-.",
}
startblock = "dit.wav ditspace.wav dit.wav ditspace.wav dit.wav ditspace.wav dah.wav wordspace.wav dit.wav ditspace.wav dit.wav ditspace.wav dit.wav ditspace.wav dah.wav wordspace.wav dit.wav ditspace.wav dit.wav ditspace.wav dit.wav ditspace.wav dah.wav wordspace.wav dah.wav ditspace.wav dit.wav ditspace.wav dah.wav ditspace.wav dit.wav ditspace.wav dah.wav wordspace.wav wordspace.wav wordspace.wav "
endblock = "dit.wav ditspace.wav dah.wav ditspace.wav dit.wav ditspace.wav dah.wav ditspace.wav dit.wav blockspace.wav "
playstring << "uebungsanfang.wav wordspace.wav "
system ('/opt/local/bin/sox ' + playstring.to_s + ' tmp.wav 2>/dev/null')
system ('mv tmp.wav tmp2.wav')
playstring = ""
testlength.times do |line|
printf line.to_s + " "
playstring << "gruppe" + (line+1).to_s + ".wav wordspace.wav "
playstring << startblock
system ('/opt/local/bin/sox tmp2.wav ' + playstring.to_s + ' tmp.wav 2>/dev/null')
system ('mv tmp.wav tmp2.wav')
playstring = ""
blocklength.times do |count|
word = alphabet.sample.to_s + alphabet.sample.to_s + alphabet.sample.to_s + alphabet.sample.to_s + alphabet.sample.to_s
word.each_char do |char|
MORSE[char].each_char do |dahdit|
case dahdit
when '.' then playstring << "dit.wav "
when '-' then playstring << "dah.wav "
end
playstring << "ditspace.wav "
end
playstring << "letterspace.wav "
system ('/opt/local/bin/sox tmp2.wav ' + playstring.to_s + ' tmp.wav 2>/dev/null')
system ('mv tmp.wav tmp2.wav')
playstring = ""
end
playstring << "wordspace.wav "
block << word.to_s + " "
end
playstring << endblock
playstring << "blockspace.wav "
system ('/opt/local/bin/sox tmp2.wav ' + playstring.to_s + ' tmp.wav') #2>/dev/null
system ('mv tmp.wav tmp2.wav')
playstring = ""
page << "%02d" %(line+1).to_s + ": VVV <ak> " + block + "+" + "\n"
block = ""
end
playstring << "uebungsende.wav"
system ('/opt/local/bin/sox tmp2.wav ' + playstring.to_s + ' tmp.wav 2>/dev/null') # &
system ('rm tmp2.wav')
system ('mv tmp.wav cw.wav')
system ('lame --cbr -b 128 cw.wav cw.mp3')
system ('rm cw.wav')
puts
puts page
으로 사운드 사용 미리 생성 삭스 : 함유
sox -e floating-point -r 22500 -n -t wav - synth 0.3 sin 0 > letterspace.wav
파일 Übungsende
등 (테스트, 테스트 종료, 그룹 하나, 둘의 시작, ...) 나는 (파일 업로드에 "GRUP까지 한
say -v Steffi --file-format=WAVE [email protected] -o uebungsanfang.wav "Anfang der Übung."
: 맥 OS X의 명령 say
을 사용하여 생성된다 pe 5 ", 즉. "group 5") 여기에 : https://docs.google.com/open?id=0B4QwMfBGRCjVbE5iZHpHMHBKT3c
감사합니다. IO가 문제가 될 것으로 생각했습니다. 나는 당신의 제안을 최대한 빨리 시도 할 것입니다 (일명 사무실에있는 한 빨리). – Christian