zhangchaont 发表于 2021-2-18 10:49:51

新概念英语第一册 - 带复读机按钮

本帖最后由 zhangchaont 于 2021-2-20 10:53 编辑

为了给孩子学习英语,我把单词做成了卡片放在Anki里,但是课文却一直没有什么好的方法,在电脑上用一个复读机软件给孩子们练习,但是Mac上没有什么好用的复读机软件,所以学来学去还在最开始的几课里面打转。我本来想自己写一个复读机APP的,但是考虑到水平有限,估计得花很多时间,而且最大的问题不能利用Anki里schedule安排学习。

春节在家,我突然灵光一闪,Anki是基于PyQt5开发,而这个模块是支持一部分html、css和javascript的,如果用javascript读取字幕里面的时间戳,然后根据时间段来播放MP3,不就实现了一个简单的复读机了嘛。说干就干,因为没有javascript语言基础,都是需要什么就搜索,一步步的拼凑起来的,目前已经基本能用,成品在iOS上显示如下:

macOS上的效果


js代码如下:
const lesson = document.getElementsByClassName("items").innerText;
const button_next = document.createElement("button");
button_next.innerHTML = '下一句';
button_next.setAttribute('row_count', "4");
let section = document.getElementsByClassName("section");

const button_repeat = document.createElement("button");
button_repeat.innerHTML = '重复此句';

const button_previous = document.createElement("button");
button_previous.innerHTML = '上一句';


let div = document.createElement('div');
div.setAttribute('class', 'text');
section.appendChild(div);
let p = document.createElement('p');
div.appendChild(p);

buttons_div = document.createElement('div');
buttons_div.setAttribute('class', 'buttons');

section.appendChild(buttons_div);

buttons_div.appendChild(button_previous);
buttons_div.appendChild(button_repeat);
buttons_div.appendChild(button_next);


button_next.onclick = next;
button_repeat.onclick = repeat;
button_previous.onclick = previous;
section.onload = play;

function next() {
    let index = parseInt(button_next.getAttribute('row_count'));
    index += 1;
    button_next.setAttribute('row_count', index.toString())
    play().then(r => '');
}

function previous() {
    let index = parseInt(button_next.getAttribute('row_count'));
    index -= 1;
    button_next.setAttribute('row_count', index.toString())
    play().then(r => '');
}

function repeat() {
    play().then(r => '');
}

async function play() {
    const file = "NCE1-" + lesson + ".lrc";
    let myObject = await fetch(file);
    let myText = (await myObject.text()).trim();
    let lines = myText.split('\n');
    let index = parseInt(button_next.getAttribute('row_count'));

    if (index < 4) {
      index = lines.length - 1;
      button_next.setAttribute('row_count', index.toString());
    }
    if (index > lines.length - 1) {
      index = 4;
      button_next.setAttribute('row_count', index.toString());
    }
    let current_line = lines;
    let text = current_line.slice(10, current_line.length - 1);
    p.innerText = text;
    if (index < (lines.length - 1)) {
      let next_index = index + 1;
      let next_line = lines;
      let current_time = current_line.slice(1, 9);
      let current_time_min_sec = current_time.split(':');
      let start = parseFloat(current_time_min_sec) * 60 + parseFloat(current_time_min_sec);
      let next_time = next_line.slice(1, 9);
      let next_time_min_sec = next_time.split(':');
      let end = parseFloat(next_time_min_sec) * 60 + parseFloat(next_time_min_sec) - 0.25;
      let audio = new Audio("NCE1-" + lesson + ".mp3" + "#t=" + start + "," + end);
      const play1 = audio.play();
    } else {
      let current_time = current_line.slice(1, 9);
      let current_time_min_sec = current_time.split(':');
      let start = parseFloat(current_time_min_sec) * 60 + parseFloat(current_time_min_sec);
      let audio = new Audio("NCE1-" + lesson + ".mp3" + "#t=" + start);
      const play2 = audio.play();
    }
}

使用的时候,把下面网盘链接里面的Anki卡片导入,然后把新概念的音频和字幕文件拷贝到Anki的collection.media文件夹里面,如果不知道media文件夹的位置在网上搜索一下。

/*区块全局样式*/
.section {
background-color : #f6f6f6;            /*背景颜色-#f6f6f6*/
border         : 2px solid #3f3f41;/*边缘样式-实线2px*/
border-radius    : 3px;                /*圆角幅度-3px*/
margin         : 8px 8px;            /*上下间隔-8px*/
        display                                               : flex;
        flex-direction               : column;
        height: 95vh;
}

/*区块全局样式*/
.mobile .section {
background-color : #f6f6f6;            /*背景颜色-#f6f6f6*/
border         : 2px solid #3f3f41;/*边缘样式-实线2px*/
border-radius    : 3px;                /*圆角幅度-3px*/
margin         : 8px 8px;            /*上下间隔-8px*/
        display                                               : flex;
        flex-direction               : column;
        height: 77vh;
}
在模板里面的css部分,可以调节整个区块的大小,修改height后面的数值来调节。前面有.mobile的是对移动设备的设置。

你也可以把这个模板稍加修改就可以添加新概念后面的几本书。

**** Hidden Message *****

注意,因为iOS版本的Anki不会自动重新加载js,所以到第二张卡片的时候就会按钮显示不出来,退到deck界面再进去就可以了。

码农爱学习 发表于 2024-8-31 16:01:00

这个思路跟我用来练习唱英文类似

【用Anki学唱英文歌,小段小段的练习,已经成功搞定几十首了】 https://www.bilibili.com/video/BV1HXhYevEue/?share_source=copy_web&vd_source=fa3a2baa181b814ed81161268aaee250

zhangchaont 发表于 2021-7-29 09:51:16

yensen2006 发表于 2021-7-20 20:44
多谢多享!有没有第二册?

第二册的资源我应该有的,等我空了我找找做一下。

xingqiji 发表于 2022-11-24 00:04:27

HAVEA   LOOK,THX

jonah_w 发表于 2021-2-18 12:48:20

学习一下

RickVincent 发表于 2021-2-18 13:27:05

Thanks for sharing...

dayeeren 发表于 2021-2-18 15:23:46

下来看看学习- W

loveaffairs 发表于 2021-2-18 15:29:53

感谢分享

Gyngreenlie 发表于 2021-2-18 15:49:41

这个牛。感谢楼主。

yangdavid2 发表于 2021-2-18 16:29:42

多谢分享好资源!

drongh 发表于 2021-2-18 18:24:19

好东西。谢谢。

cyvZgW 发表于 2021-2-18 21:51:33

谢谢分享

shuwushimang 发表于 2021-2-18 22:43:18

感谢分享

13841910239 发表于 2021-2-19 07:41:06

学习新概念的人可以好好利用这个资料。

Tp01 发表于 2021-2-19 08:00:48

谢谢分享

竹子精 发表于 2021-2-20 21:25:24

楼主厉害了

誓吾爱 发表于 2021-2-22 11:29:56

感谢分享

han2019 发表于 2021-4-14 12:07:34

thanks a lot

CyQguoqj 发表于 2021-4-24 15:11:12

感谢楼主~

winmemo 发表于 2021-5-9 11:38:23

感谢分享。

hfwhzjy 发表于 2021-5-10 11:57:04

thanks a lot

saic99 发表于 2021-5-11 09:59:09

谢谢分享。

THGT 发表于 2021-5-19 23:06:48

感谢楼主分享

2001821 发表于 2021-6-19 14:21:00

非常的不错

Jiangxi 发表于 2021-6-19 15:23:01

挺好,有创意,一切为了孩子。好父母

duq 发表于 2021-7-17 08:50:21

多谢分享好资源!

yensen2006 发表于 2021-7-20 20:44:12

多谢多享!有没有第二册?

friends 发表于 2021-7-20 22:38:33

感谢分享,学习下
页: [1] 2 3 4
查看完整版本: 新概念英语第一册 - 带复读机按钮