儿子学习拼音一直比较吃力,一个原因是小时候很多音发音不准导致无法正确的读出音,例如q、x、b、p、g、d等这些音,经多方咨询后在成都市天使儿童医院语音纠正一段时间以后有较大的改善。第二个原因是自身上课注意力不集中,课后没有抓紧复习,家长没有施加太大的压力,最终导致拼音一塌糊涂,基本上注音练习错误率在60%以上。

后来想用数字化的方式来帮忙做练习,做了一些尝试,但均宣告失败。有一些技术上的问题尚待解决,有一些是流程设计不太合理,还有电脑、手机的交互方式不是太方便,不熟悉键盘,满屏幕找字母很麻烦,也分散注意力。到最后还是采取了人工用字典目录听写的方式,找到薄弱的环节,然后强化巩固。经过一段时间的坚持练习,拼音有了一些进步,很多常见的错误也得以修正。

在做前期的尝试中,倒是也发现了一些有趣的东西。

第一个尝试:拼音测试

地址:https://github.com/derekhe/pinyin-test 这是一个Web程序,可以随机的出题,然后选择声母韵母进行组合选择,点击声母和韵母的时候还可以听到对应的发音。通过查看这种方式期望能够尽快的搞明白拼音的组合。

发音资源来源

  • 拼音声母和韵母的发音。忘了当时哪里下载的一个资源了,反正放到了MP3目录中,需要的自取
  • 整体拼音的发音,连带音调。经过一番查找,发现百度汉语提供了所有汉字的发音。例如“贺”字,通过观察URL可以知道是https://appcdn.fanyi.baidu.com/zhdict/mp3/he4.mp3,是声母韵母的组合加上音调。

出题

解决了两个资源来源的问题,下一步就是下载下来以及如何出题。 出题的方式比较简单,通过随机的组合声母韵母,通过是否能够下载对应拼音的MP3即可知道拼音是否合法。

选择Web的解决方案相对比较简单,能够在多系统运行。界面方面想采用Vue来进行书写,其实React也是OK的,只是想练练手。逻辑比较简单,看下源代码就明白。

麻烦的事情是这个东西如果放到iPad上面运行,就会出现Safari内核播放音频延迟的问题,而且暂时无法解决。问题表现为点击后半天没有声音,非常影响用户体验。由于iPad上面的所有浏览器都是基于Safari的内核的,所以换成Chrome也无法解决。如果放到电脑上或者手机上就可以了。电脑鼠标或者触摸板用起来不是太方便,大部分时候都消耗到移动、点击上面了;手机上屏幕太小,点击又不是太方便。

试过一段时间后发现钥匙把所有拼音的声母韵母都放到屏幕上,只能到iPad这样的大屏幕上,而其固有的问题还是让我最终放弃了。

为了不做个App用呢?iOS开发暂时不会啊,而且没有证书无法部署。

第二个尝试:听音写拼音

到二年级了,拼音还是不行,注音练习也是没有太大的用处,每次错每次改,每次改完下次还是错,比训练人工神经网络还要麻烦。后来发现听写拼音,不断的练习应该能够解决问题,并且最好在无人监督的情况下也能自己去做,知道对错。这次我就不想在iPad上面开发了,直接用Python写。

地址:https://github.com/derekhe/pinyin-practice

这次想做一个简单的程序,就是读音,然后拼写,电脑判断错误。

那么是否之前找的资源可以直接用呢?并不完全是。

发音资源

有一个典型的问题是有些拼音出现的次数很少,可以忽略,比如chua这种。所以最终找到了一份小学生所有的汉字的列表,通过列表来找到所有的拼音,这样6年级所有的字的拼音就出来了。

上次用的资源我发现语音质量并不是很好,经常有发音很短促,无法听清的情况,还有一些错误的发音。最后对比了一下,使用了google translate的TTS语音合成的。这个有一个比较好的事情是可以任意组合,并且有一个选项可以生成缓慢的发音,这样更容易听清。生成的文件下载为MP3格式保存

Python发音

我之前以为万能的Python应该不会太难,哪知道几个现成的库都不好用,有一个win32接口的库很直接,但win10下面直接报错。最后找到了个稳定的方案,使用pygame。

def play_mp3(pinyinfile):
    pygame.mixer.music.load(pinyinfile)
    pygame.mixer.music.play(0)
    while pygame.mixer.music.get_busy():
        pygame.time.Clock().tick(1)

其他的就是一些逻辑处理了。

最后

根据儿子的反馈,他说不想重复的做一些已经熟悉的没问题的拼音,第二依然是键盘输入的问题,由于键盘都是大写字母,需要很费脑子转换,找键位眼睛都看花了。 考虑到需求越来越复杂,性价比比较低,最终还是亲自上手,在本子上做每天20分钟拼音练习解决问题。