Kenshin / simpread

简悦 ( SimpRead ) - 让你瞬间进入沉浸式阅读的扩展
http://ksria.com/simpread
GNU General Public License v3.0
8.07k stars 529 forks source link

关于大声朗读的几个建议 #5177

Open everdom opened 1 year ago

everdom commented 1 year ago

简悦确实是一款很棒的chrome扩展,功能上确实非常强大,真是应有尽有,用了下大声朗读功能,用的微软tts语音非常舒服,提几个建议: 1,希望能调整朗读速度,我平时阅读资料速度比较快,而朗读太慢完全跟不上节奏,😄 2,如果朗读的时候能够进行段落标注就好了,朗读到哪里就标注到哪里,跟read aloud插件一样,方便阅读 3,快捷键不起作用,我用sr开启快捷键模式,依然不行,发现快捷键模式中有ts和tt的机器默认朗读的功能,不知道是否是冲突了 4,我平时用surfingkeys,习惯了快捷键操作,sr开启快捷键模式比较难用,能否设置直接开启快捷键,冲突不要紧,surfingkeys里面可以按p进行1秒钟的pass through模式,就可以用来启动简悦的快捷键了,应该会方便很多

Kenshin commented 1 year ago

嗨,谢谢喜欢简悦。

问题 1

估计接入的 API 有这个选项,算是 Feature 我需要研究下。

问题 2

这个可能有点麻烦,我研究下你说的插件。

问题 3

不需要 s r 插件的快捷键直接触发。

问题 4

之前的设计是为了考虑跟其他快捷键避免产生冲突。

会考虑去掉快捷键限制的…(插件就算是一种变相的去掉限制的方案)

不过,也可以出个插件解决。

hamadawon commented 1 year ago

我这边也是大声朗读插件的快捷键无法使用,tt快捷键无法使用。环境win11家庭版+Microsoft Edge 111.0.1661.62 。

hamadawon commented 1 year ago

我这边是配合HTML5视频播放器增强脚本,改变速度,默认4x

Kenshin commented 1 year ago

我这边也是大声朗读插件的快捷键无法使用,tt快捷键无法使用。环境win11家庭版+Microsoft Edge 111.0.1661.62 。

隐身模式下仅使用简悦的方式,看是不是其它扩展的干扰?

我这边是配合HTML5视频播放器增强脚本,改变速度,默认4x

怎么做的,可以分享下。

hamadawon commented 1 year ago

image

https://github.com/xxxily/h5player 搭配这个脚本实现速度控制

隐身模式扩展仅有simpread,也不能用tt快捷键。另外上周另一台闲置的联想小新笔电因低温锡官方给换主板后,给重装了win10系统,想测试是否可能是软件导致的全局热键冲突,但重装的win10+Edge环境依然无法使用tt快捷键,只能鼠标点击播放icon

Kenshin commented 1 year ago

嗨,各位。

升级到 1.0.1

如何升级

请使用 https://www.yuque.com/kenshin/simpread/fcw60u 此方式升级。


@hamadawon

https://github.com/xxxily/h5player 搭配这个脚本实现速度控制

竟然是个油猴脚本,谢谢分享 😄

hamadawon commented 1 year ago

另外发现文档里如果有“&”符号, 比如AT&T, Johnson & Johnson这种,就无法调用Azure的tts GIF 2023-4-8 18-11-03

Kenshin commented 1 year ago

@hamadawon

Cool 谢谢测试,方便的话,帮忙看看其它非法字符有问题吗?

hamadawon commented 1 year ago

http://www.fhdq.net/bd/44.html

。,、':∶;?‘’“”〝〞ˆˇ﹕︰﹔﹖﹑·¨….¸;!´?!~—ˉ|‖"〃`@﹫¡¿﹏﹋﹌︴々﹟#﹩$﹠&﹪%*﹡﹢﹦﹤‐ ̄¯―﹨ˆ˜﹍﹎+=<­­_-\ˇ~﹉﹊()〈〉‹›﹛﹜『』〖〗[]《》〔〕{}「」【】︵︷︿︹︽﹁﹃︻︶︸﹀︺︾ˉ﹂﹄︼

测试了以上字符,& 与 < 两个字符有问题

@hamadawon

Cool 谢谢测试,方便的话,帮忙看看其它非法字符有问题吗?

Kenshin commented 1 year ago

@hamadawon

太详细了,这就好办多了,等我升级下版本就行了。

Kenshin commented 1 year ago

@hamadawon

嗨,升级到 1.0.2 修复了你提到的错误,感谢帮忙测试 🙏

请使用 插件管理器 升级。

hamadawon commented 1 year ago

大佬,还发现一个bug,一个GBK 编码页面 ,可以转换完后再播放,但不能边转边播放。 以https://www.69shu.com/txt/45735/31993993为例 localhost:7026/tts_stream?title=两组%xx,即%xx%xx。utf-8编码的的三组%xx能显示成汉字 GIF 2023-4-14 10-46-34

Kenshin commented 1 year ago

okay 我在出差,先 Mark 下。

sasasqt commented 1 year ago

支持多浏览器的速度控制插件 https://github.com/polywock/globalSpeed

Install the Chrome, Firefox, or Edge extension.

Kenshin commented 1 year ago

@sasasqt

谢谢提示,可以用于简悦?

sasasqt commented 1 year ago

@sasasqt

谢谢提示,可以用于简悦?

可用于带audio/video tag的 比如模式1下的大声朗读

模式2下的大声朗读貌似要改代码手动hook后才行 (或者用audio tag包装下?)

Kenshin commented 1 year ago

可用于带audio/video tag的 比如模式1下的大声朗读

那就行。

模式2

因为使用了 Stream 方案,所以其实并不适合使用此方式 😂

PS:谢谢解释,我研究后会把这个方式推给简悦的用户。👍

sasasqt commented 1 year ago

可用于带audio/video tag的 比如模式1下的大声朗读

那就行。

模式2

因为使用了 Stream 方案,所以其实并不适合使用此方式 😂

PS:谢谢解释,我研究后会把这个方式推给简悦的用户。👍

查了下 mdn里有个playbackrate 的参数:https://developer.mozilla.org/en-US/docs/Web/Guide/Audio_and_video_delivery/WebAudio_playbackRate_explained

minimal reproducible code:

<html>
    <body>
    <script>
        window.onload = () => {
        const v = document.getElementById("myVideo");
        const p = document.getElementById("pbr");
        const c = document.getElementById("currentPbr");

        p.addEventListener(
            "input",
            () => {
            c.innerHTML = p.value;
            v.playbackRate = p.value;
            },
            false,
        );
        };
    </script>
    <video id="myVideo" controls>
    <source
        src="http://localhost:7026/tts_stream?title=16-%E6%88%91%E6%88%91%E6%88%91%EF%BC%8C%E6%9D%A5%E5%8C%97%E4%BA%AC%E7%AD%BE%E5%94%AE%E5%95%A6%EF%BC%81"
        type="video/webm" />
    </video>

    <form>
    <input id="pbr" type="range" value="1" min="0.5" max="4" step="0.1" />
    <p>Playback Rate <span id="currentPbr">1</span></p>
    </form>
</body>
</html>

这样大声朗读模式1应该就可以改速读了


大声朗读模式2似乎是

  1. 先生成音频文件并保存到本地
  2. 再通过ttsRender(base64)来朗读

第二步骤的ttsrender函数似乎可以用html代替:

    <video id="myVideo" controls>
    <source
        src="path\to\saved\audio"
        type="video/webm" />
    </video>

这样模式2应该也可以用playbackrate的方法了!

Kenshin commented 1 year ago

@sasasqt

okay 我先 Mark 下,这段时间在休假ing

sasasqt commented 1 year ago

问题2

衍生问题: 希望以更细的颗粒度处理tts,比如以段落/句子为单位在后端调用微软edge tts api,从而支持从点击的指定句子/段落处开始播放。

update: 微软edge的api似乎会返回逐字的时间戳

{
  "Metadata": [
    {
      "Type": "WordBoundary",
      "Data": {
        "Offset": 1000000,
        "Duration": 4625000,
        "text": {
          "Text": "Prepare",
          "Length": 7,
          "BoundaryType": "WordBoundary"
        }
      }
    }
  ]
}

https://gist.github.com/wilinz/13f4bc343754f01c06a90aa9c12e449a#file-ms-edge-tts-api-md

Kenshin commented 1 year ago

Cool 不错,我会研究下的。