ARTICLE · 1118615
给女儿写个英语学习App(三):磨耳朵,从一句提醒到一个播放器
上一篇末尾我留了个话头:磨耳朵这个栏目,也是我自己做着做着才发现,一开始就想错了地方。今天就把这个坑挖开。
先交代背景。学英语的小孩,光上课不够,每天得有一段泛听时间——歌谣、对话、歌曲,放着当背景音,耳朵泡在里面,行话叫磨耳朵。我们家这个安排定得挺早:九月八号定学习参数的时候就写上了,每天早晨二十分钟。
01 第一版:它只是一句话
第一篇文章里我说过那个痛点:教材音频整整齐齐躺在文件夹里,但每天早晨那二十分钟,我总要想半天——今天听哪一段?
现在回头看,我对「想半天」这三个字的理解当时就跑偏了。我以为难点是「选哪一段」,是个信息问题。
所以你看我的第一版是怎么做的。九月中旬出的学习计划里,我给的建议是:在平板上按单元建播放列表,想听直接点播。后来 App 做出来了,磨耳朵在里面长什么样?一行字,写在使用建议里:「每天早晨 20 分钟:循环播放 3.02(农场对话)、3.04(歌谣)、3.10(歌曲)磨耳朵。」
再后来 App 升级成服务器版,每天会算一张「今日推荐」卡。磨耳朵日,卡片上显示什么?一句话:「今天早晨听一听这个单元的歌谣和对话,磨磨耳朵。」

对,就是你现在看到的这个。三个版本——建播放列表的建议、App 里的一行字、推荐卡上的一句话——我一直在优化「告诉她听什么」,没有一版能让她自己听上。
孩子真要听个音频,实际动作是:开 iPad,登录,进单元,翻到那一页,找到那个小喇叭按钮,点。一首歌两三分钟,二十分钟要点七八次,翻页还容易断。这个流程的隐含前提是:旁边站着一个大人,全程伺候。
02 想错的地方
想错的地方说出来特别简单:我把磨耳朵做成了一个提醒事项,但她需要的是一个播放器。
提醒事项是给大人的——大人看到「今天听 3.02」,去张罗。可磨耳朵真正的用户是孩子,是早晨七点半该出门的小孩。她不需要知道今天该听哪段,她需要的是一个键:按下去,歌就一首接一首地放,放到她吃完早饭。
所以问题根本不在我推荐得准不准,是她连开始这一步都得靠我。
这个认识不是哪天开悟来的,是九月中下旬我自己受不了了。每天早上那句「今天早晨听一听……」是我写的,但放音频的还是我,掐时间的还是我。我给 App 写了句广告词,把自己写成了播放器。
03 重做:这次把需求写明白
九月十九号下午,我把磨耳朵整个推翻,给自己提了三条需求,原话记在文档里:
每日磨耳朵内容单独成一个任务栏目;可以勾选哪些单元的听力素材参加;勾选完自动循环播放,一首接一首;记录每个素材的播放次数。
这次我没闷头就写。上一篇的教训还在——我以为切完了就等于切对了。所以先让两个 AI 把方案挑了一遍毛病再动手,还真挑出三个我自己没意识到的坑。
04 第一个坑:一跳页,歌就停了
我的 App 是三个独立页面:门户一个,单元学习一个,家长区一个。平时没觉得这有什么,做磨耳朵才发现:页面一切换,音频就卸载了。
也就是说,孩子听着歌,突然想翻回去看个词卡——一点,歌没了。
解法没什么取巧的:磨耳朵不能是单独一页,必须长在门户里,做成一个内置栏目;那个播放器也不放在栏目里,挂在页面最外层。这样屏幕上切到哪个页签,音乐都不受影响。界面给孩子的提示我写得挺直白:「切回『学习』页音乐也不会停哦。」
「不跳页」这条后来被升格成硬性约束——凡是切页会断播的方案,直接不看。
05 第二个坑:怎么算「听过一次」
需求里有一条「记录播放次数」。听着简单,我原来的统计逻辑是「点击就算」——点一下播放按钮,记一次。
AI 一句话把我问住了:那孩子把同一个按钮连点八下,算听了八次吗?
小朋友的手你懂的,兴奋起来就是哒哒哒。按点击计数,这个数字很快就是废数据。改法也简单:不数点击,数「播完」。一首歌从头到尾放完了,才算听过一次,中途被打断的不算。
这里还有个很小的取舍,我挺喜欢:单曲循环这个功能,浏览器本来有个现成的开关,一行代码都不用写。但用了它,「播完」这个事件就不触发了——播完不计数。所以我没用现成的,老老实实在播完的回调里写:计一次数,然后重放这首。多写三行代码,保住一个真实的数字。
随机播放也留了个小心思:抽下一首时如果抽中的还是刚才那首,就重新抽。不会连续两遍放同一首。
06 第三个坑:上一篇切的 286 段,一段都没进来
上一篇我写了怎么把整段音频切成 286 句逐句原音,切得多费劲。这次做磨耳朵,我第一反应就是:素材多好啊,现成的,全放进来。
两个 AI 都反对。理由我一开始还不服气,后来想通了:逐句切片是「学」的工具——跟读、精听,一句一句过。磨耳朵是背景音,要的就是整首的歌、整段的对话,囫囵个儿地放。把切片混进来,磨耳朵就变成了另一个跟读练习。
所以素材池里只有整曲:七个单元,每单元八组,五十六条。顺带记一件小事:需求文档里写的是五十五条,实现的时候一条条数出来是五十六条。差一条也得改过来——上次就是栽在「差不多」上的。
07 勾选权:这一栏里她说了算
还剩一个决定:这五十六条素材,谁来挑?
按家长的本能,我来挑啊——按教学进度,当前学 Unit 3 就听 Unit 3,科学,合理,对齐课程。
最后拍板的时候我把这个方案否了。勾选权给孩子,家长只有看的份。她想听哪个单元、想循环哪首歌,自己勾。App 按她的账号记住勾选,换设备也不丢。
理由说白了还是那个:磨耳朵的主角是她的耳朵。我替她挑好,这个栏目就是我的计划表;她自己挑,它才是她的歌单。她挑得不「科学」,又怎么样呢——多听几首没学过的单元的歌,天塌不下来。
08 她用起来之后
栏目九月十九号晚上上线。第二天早晨七点三十六分,播放记录里出现了第一条。

三个按钮:开始、随机、单曲循环。每首歌后面跟着一句「听过 N 次」。
下面这张图,是她前两周的播放记录,按单元聚合:

几个事实,我不加评论地摆在这:
头两天她听的是 Unit 3,正在学的单元,八首歌轮着来。之后她跑去了 Unit 6——还没学到的单元——一听就是一个多星期。然后是 Unit 7,也是没学过的,听得最凶,最常的一首两周里完整播了十四次。中间有个早晨,她用八分钟把 Unit 4 的八首歌每首过了一遍,之后再没碰过。昨天早上听完,她把勾选又换回了 Unit 6。
两周加起来,二百零四次,全部在早晨——上学日七点半前后,起得晚的日子就九点多。没有一次是我安排的,我也没催过。
09 故意没做的:20 分钟计时器
写需求的时候我犹豫过要不要做个计时器:放满二十分钟自动停,多整齐。
最后没做。App 里到现在没有任何计时、倒计时、到点停止。
二十分钟是我们俩的约定,不是机器的开关。今天出门早不早、饭吃完没有、想多听一首还是少听一首,这些她和我商量着来,比一个到点掐断的闹钟强。机器管「放」,时间管在人。
上一篇我写过一个假的自动打分,那是想当然做出来的;这个不做的计时器,是想明白了之后故意留的:这个 App 里得有一部分,大人说了不算,机器说了也不算。
写在最后
给自己记三条,贴在这:
提醒不算功能。一句话写得再对,孩子用不起来就是零。以后再觉得「这个功能不就是提示一下嘛」,就把这篇翻出来看看。
数字要真。「听过几次」得真是播完的次数,不能是点击的次数。数字一旦掺水,后面所有判断都建立在沙子上。
不替她挑歌。她这两周听的,一大半不在我的推荐里。我的推荐卡还在每天早上认认真真算「今天听什么」,她一个字都没看——挺好,各干各的。
还有一个我自己的念想:按进度,Unit 6 要到十一月中旬才轮到学。她提前把这个单元听了几十遍。到老师教「A Day Out」那些词的那天,我想看看她是不是已经会跟着唱了。
到时候再写一篇。