单位来新人,惯例要先学三个月的莫尔斯报,由于训练软件是是十年前用MFC开发的,无法修改功能,且不兼容win7,经常有错误闪退,所以我写了一个简易的练习系统。从设计到完成一共用了七天左右时间,具备随机生成、考核、听写、翻译和中文译解功能,并可以控制报文类型,数量,速度,可以设置背景音乐和声音强度。

源码下载地址:https://github.com/gusuziyi/morse-train.git

图一:主界面

图二:支持五种报文

图三:随机生成20组字码

图四:点击听写,会按照设定速度发报,并可以设置背景杂音和杂音强度

图五:翻译功能,目前支持中文,大写英文,小写英文以及各种符号

图六:点击红色按钮,进行翻译

图七:翻译功能支持不同语言,大小写和各种符号同时输入


    图八:翻译出的结果支持听写,发报时相应的元素会标红,就不会看串行了~


            图九:反译功能能够把莫斯码反译成可理解的报文

API

均位于morse.js当中

Getmorse:(line9)用于生成各类型莫尔斯码,目前支持长码、短码、字码、混合码、勤务用语五种,可根据需要自行扩充

InitBtn:(line70)用于为页面中所有按钮赋予功能

goTranslate:(line221)翻译模块,首先判断是否有中文,无中文,使用混合码字典,有中文,则调用xmorse模块

artiTranslate:(line259)反译模块,判断是否只有 . 和 – 的莫尔斯码,是则反译成报文,不是则翻译成莫尔斯码

playBg:(line279)播放选定的背景音乐

closeBg:(line289)终止选定的背景音乐

async play:(line296)用于处理系统产生的 点、划、字、词等事件,决定如何播放和等待

playAudio:(line322)区分点、划进行播放调度

sleep:(line342)系统休眠,用于生成听写时的时间间隙

createTranslate:(line349)将翻译出的报文转译成系统可播放、识别的格式。思路是字符串转数组,数组元素包裹span插入dom,以实现跟随听写字符标红,摩斯码打碎成点划并加入byte、word等控制信息

createMessage:(line419)随机生成若干组报文,实现思路同上

initWidget:(line480)初始化widget,注意不要在widget内再封装widget,没有内部通信方法

playDot:(line532)为正弦波添加矩形滤波器后调制,在440hz上0.1秒内声音近似为点

playLine:(line567)同上,只是将包络时长设置为dot的三倍

总结:

  一、关于gulp,由于之前一直在学webpack,所以经常看到webpack和gulp相比较的文章,正好这次有这个需求,就尝试了一下gulp,使用体验就是很简单,用了二小时看了几篇文章就很熟练了,当然缺点也是简单,一些事情做不到,还有一些事情要用额外插件来做,配置起来很麻烦。比如这个程序里绝大部分使用es5语法,有一些[…]、promise、require之类的es6语法,还有await、async这种es7语法,而浏览器只认识es5,这就导致必须用babel转码,而babel在gulp需要手工配置,这是一个天坑。首先babel-core和 gulp-babel版本不能用最新的,会报错误找不到@babelcore,至少要退化两个以上的版本


    图十:我使用的babel-core 和 gulp-babel版本

其次要支持es7,必须添加babel-plugin-transform-runtime,同时在.babelrc文件中添加对应的plugins

图十一:支持es7 asyns的配置

 

你以为这就完了?transform-runtime会把regenerator转换成require,只是把es7转成了es6,可以在node上运行,但是想要用script直接引用还要添加gulp-browserify转成es5,注意顺序,要在babel()之后,在uglity()之前

    图十二:gulp-browserify的配置

  二 关于jQueryUi框架,页面使用了jQueryUi,也没多想,就是想试试没用过的东西,尝尝鲜,在菜鸟教程看了几篇文章大概半天上手,在思路上它是对dom元素进行widget初始化的方式来表现ui,但是这些widget屏蔽了外部通信事件,不容易找到解决方案,比如这个软件中,一开始我把背景杂音和背景强度封装在一个controlGroup当中,结果select的onchange事件居然失效了!震惊,后来不得不用css实现了controlGroup的样式。这个地方如果不熟悉的话坑会很多,所以我感觉没有bootstrap+jquery效率高,jQueryUi对我来说应该是浅尝辄止,以后不会再用了。


    图十三:jQueryUi的初始化十分简单易懂

图十四:select的change事件

  三 关于异步低速函数,以前在node里就是无限的回调函数嵌套,在es7中有了await和async这两个方法。

await和async就类似于回调嵌套,但声明他们的时候不会执行,如图十五和图十六中,tempI和play全是async函数,他们把任务不断细分,函数执行是在图十七和图十八中的playAudio和sleep函数,他们两个都是play中的分支任务,当他们返回new Promise时会执行自身。在内存中定义自己,而当setTimeOut运行之后返回的resolve会结束await状态,父函数play会继续执行,从而可以实现使用setTimeOut节拍来控制发报速度
    

       图十五:tempI

图十六:tempI的子函数play


图十七:play的子函数playAudio


图十八:play的子函数sleep


图十九:gulp正确运行

  最后,关于使用开关取消promise链,控制播放与停止的思路:为开关添加isOn属性,点击时能控制isOn在true和false之间切换,然后在async play中监听此属性,若关闭,则抛出错误,如图二十一,然后在其父函数中catch这个错误,打印错误,如图二十。该方法的核心就是在子函数中监听全局变量,然后抛出错误给父函数进行处理。

图二十:使用try-catch运行异步函数

图二十一:子函数play中监听点击事件,抛出错误

源码下载地址:https://github.com/gusuziyi/morse-train.git

转载于:https://www.cnblogs.com/qmzy/p/9625523.html

 一套莫尔斯电报听写、翻译系统相关推荐

  1. 【Python+C#】手把手搭建基于Hugging Face模型的离线翻译系统(如果你想,也可以在线)

    前言:目前翻译都是在线的,要在C#开发的程序上做一个可以实时翻译的功能,好像不是那么好做(其实主要是第三方的都要AppID或者授权,太不友好了).而且大多数处于局域网内,所以访问在线的api也显得比较 ...

  2. 【Python+C#】手把手搭建基于Hugging Face模型的离线翻译系统,并通过C#代码进行访问...

    前言:目前翻译都是在线的,要在C#开发的程序上做一个可以实时翻译的功能,好像不是那么好做.而且大多数处于局域网内,所以访问在线的api也显得比较尴尬.于是,就有了以下这篇文章,自己搭建一套简单的离线翻 ...

  3. 搭建属于自己的翻译系统

    你有没有用过翻译系统?你有没有想过搭建一套属于自己的翻译系统? 在本文中,我们将介绍如何使用神经网络搭建翻译系统,尽管可能受制于训练数据以及模型大小的原因,搭建的翻译系统可能不够完善,准确性和覆盖范围 ...

  4. 在线英语词典翻译系统

    github源码链接: https://github.com/LxNoMi/online_English_translation_system 绪论 在线英语词典翻译系统是一个基于客户端和服器(C-S ...

  5. (2)esp8266多国语言翻译系统

    http://bbs.mydigit.cn/simple/?t2649513.html 这个想法不错 原来只是想用esp8266搞一个百度的多国语言翻译系统出来的,只是为了尝试如何调用各种web ap ...

  6. 从零搭建一套结构光3D重建系统[理论+源码+实践]

    01 背景介绍 图1 典型3D结构光系统 尽管结构光作为一种已经相当成熟,并且广泛应用的三维重建技术,不同于深度学习,依旧缺乏相关的课程,网上的开源资料寥寥无几,即使有,也是晦涩难懂,许多刚入门的研究 ...

  7. NLP——基于transformer 的翻译系统

    文章目录 基于transformer 的翻译系统 1. 数据处理 1.1 英文分词 1.2 中文分词 1.3 生成字典 1.4 数据生成器 2. 构建模型 2.1 构造建模组件 layer norm层 ...

  8. (三)用于构建AI语言翻译系统的工具

    目录 介绍 工具和版本 TensorFlow Keras Pandas Word2Vec 下一步 下载源文件 - 3.5 KB 介绍 谷歌翻译工作得如此之好,它通常看起来很神奇.但这不是魔法--这是深 ...

  9. 谷歌为什登不上去github_同声传译被攻陷!谷歌发布Translatotron直接语音翻译系统...

    来源:Google AI [导读]今天,谷歌发布Translatotron语音翻译系统,这是第一个可以直接将一个人的声音从一种语言转换成另一种语言,同时保持说话人的声音和节奏的翻译模型. 让说不同语言 ...

最新文章

  1. 栈与队列6——生成最大窗口值数组
  2. 解决 Windows instance 时间不同步问题 - 每天5分钟玩转 OpenStack(153)
  3. http头部信息解析
  4. Xcode 3.2.5免证书开发调试[转]
  5. C# Winform程序中DataGridView中使用ContextMenuStrip实现右键菜单
  6. SpringMVC日期类型转换问题三大处理方法归纳
  7. C 输入 输出——Day03
  8. mysql表无法获取_CentOS下无法正常获取MySQL数据库表数据的问题
  9. android 电影院订票系统 论文,基于Android平台的电影票订票系统的设计与实现
  10. android游戏中期检查表,中期检查表教师评语
  11. python历史时间轴可视化_TimeLine一个基于Python的时间轴创建者 | MOS86
  12. 计算机和材料成型及控制工程,材料成型及控制工程专业属于什么门类
  13. speedoffice(PPT)怎么将背景设置为渐变的背景
  14. python+mitmdump实战(3/3)(附源码)
  15. 规格型号、购方名称、地址备注等格式有误、特殊字符-无法开票?
  16. 一起来找:程序员必去的社区与网站
  17. Banana Pi BPI-R2 Pro 开源路由器采用瑞芯微Rockchip RK3568芯片方案设计
  18. 最有意思的100条英语(转)
  19. 解决mac Cornerston的Authentication provider raised an exception 更新失败问题
  20. java判断浏览地址是手机还是pc,判断是手机还是PC浏览器的方法

热门文章

  1. 机器人合肥乐博_乐博机器人编程——让机器人陪伴全国儿童成长
  2. C语言每日一练——第1天:字母大小写转换
  3. java 实现将图片替换到word 文档中
  4. 【新】CSDN文章一键打印、输出PDF(自动阅读全文、全清爽模式)
  5. PostgreSQL插入大量数据:pg_testgen插件
  6. Bean是如何创建的?
  7. 评点SAP HR功能及人力资源管理软件
  8. linux无线鼠标右键自动选择,2020年高性价比无线鼠标推荐
  9. 通过微信公众号跳转H5页面领取现金红包
  10. 【Havel 定理】Degree Sequence of Graph G