我是 Linux 新手,最近开始从事我的第一个(非常简单)项目 - 摩尔斯电码生成器。我已经能够完成翻译工作,现在我想采取下一步。
替换字符“.”的最佳方法是什么?发出嘟嘟声和“-”,并发出稍长的嘟嘟声?我希望能够真正产生可听的莫尔斯电码。
更高级的用户会采用哪种方式来执行此操作?如果您有任何想法,请尽可能用简单的语言解释。
笔记:我的代码在pastebin上:http://pastebin.com/K5Ap3p4S。
echo
echo "What would you like to translate today?"
read transmission
clear
echo $transmission | sed 's/.\{1\}/& /g' | sed 's/a/.-/g;
s/b/-.../g;
s/c/-.-./g;
答案1
最后:我不会准确回答你的问题,但帮助正在进行中。
您确实需要一个程序来生成声音。命令beep
可能有帮助。
你可以尝试编写所有细节因为这个人也尝试过使用蜂鸣声。就像向扬声器发送 2 秒的 1000 Hz 音调(调试将准确显示正在执行的操作):
beep --debug -f 1000 -l 2000
但beep仅使用电脑扬声器来产生提示音。
并且您的计算机可能没有安装扬声器。
然而,在linux中生成声音实际上很容易:将其发送到/dev/audio
$ echo "test" > /dev/audio
当然,“测试”是一种非常差的声波,它听起来就像一个简单的“凹凸”。
要实际生成有用的音调,您需要在文件中创建正弦波中的所有值,然后将文件发送到/dev/audio
.和这是这个想法的一个粗略的例子。
事实上,所有这些都已经编码在一个为莫尔斯电码设计的命令: CW。
在 Debian 衍生版本中,使用以下命令安装它:apt-get cw
。
然后执行这个:
echo "test" | cw
这就是“我不会完全回答你的问题”的原因,因为cw
所有的工作都为你做了。它将字符转换为破折号和点,为每个字符创建一个声波并将其发送到声卡。
事实上,Linux 为业余无线电爱好者提供的帮助数量是巨大的:
https://radio.linux.org.au/?sectpat=morse
那就是仅有的对于莫尔斯电码。
答案2
你可以将它们替换为响铃字符。您只需替换“.”即可带有一个响铃字符,“-”带有两个字符。请注意,由于字符串必须扩展,但这应该不会太难 - 例如,您可以逐个字符地复制字符串,在适当的位置放置两个响铃字符。
但请注意,铃声字符有时“不起作用”(您听不到);为了获得更强大的解决方案,您可能需要编写类似简单解析器的东西,它会使用外部命令(例如mpg123
)播放声音,以便在遇到“.”时播放声音。或“-”,然后等待命令(甚至播放“无声音”曲目!:))。
伪代码看起来像这样:
For every character in string:
If character is '.':
play "shortBeep"
else if character is '-'
play "shortBeep"
play "shortBeep" # or play "longBeep"
else
play "noBeep" # or wait
答案3
您已经能够将给定文本转换为莫尔斯电码,现在想要将该莫尔斯电码转换为音频蜂鸣声。
下载(或创建)两种声音的两个文件(点的 DOT.wav 具有短蜂鸣声,破折号的 DASH.wav 具有长蜂鸣声),然后使用speaker-test
或sox
在循环内迭代信号,以生成与当前匹配的声音信号。
通过使用各种命令行选项,您甚至可能不需要这两个文件,并且可以生成指定频率和持续时间的声音。
参考:
http://manpages.ubuntu.com/manpages/trusty/man1/speaker-test.1.html
http://sox.sourceforge.net/
检查您的安装是否有扬声器测试或 sox 的替代品,您也许能够找到 play、beep、siggen、tonegen 等工具。查看https://en.wikipedia.org/wiki/List_of_Linux_audio_software了解更多。