Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] 软件缓存导致的语音朗读停止 #2251

Closed
2 tasks
tangzivps opened this issue Sep 7, 2022 · 18 comments
Closed
2 tasks

[BUG] 软件缓存导致的语音朗读停止 #2251

tangzivps opened this issue Sep 7, 2022 · 18 comments
Labels
BUG B.软件未按预期的功能运行

Comments

@tangzivps
Copy link

tangzivps commented Sep 7, 2022

浏览器版本(web端反馈,先勾选浏览器,然后填版本号)

  • Chrome/Edge/Firefox PC
  • [√ ] Chrome/Edge/Firefox/WebView Android
  • 其他浏览器,请补充

机型(如Redmi K30 Pro)

Realme Neo 2T

安卓版本(如Android 7.1.1)

安卓12

阅读Legdao版本(我的-关于-版本,如3.20.112220)

最新,最近1年版本都这样

网络环境(移动,联通,电信,移动宽带,联通宽带,电信宽带,等等..)

全部

问题描述(简要描述发生的问题)

现象:

使用软件语音朗读功能朗读时,经常阅读几章后停止。

分析原因:

初始怀疑TTS原因,所以换了不同的TTS,没有解决,后来在自己服务器上搭建了wxxxcxx大佬的ms-ra-forwarder项目,由于采用的是api,分析服务器请求正常,仍旧出现问题,排除TTS原因

然后怀疑是书源,因为每次都在新一章开头停止,由于阅读貌似是错误5次停止朗读,那么可能章节末尾或者章节开头有特殊字符,但是读不了的章节把内容复制出来对比后,看不出问题。不是特殊字符导致的停止

后来偶尔一次清理软件缓存,可以朗读很长时间,以前停顿的章节可以顺利朗读,基本可以确定是软件缓存问题。

相关截图

复现步骤(详细描述导致问题产生的操作步骤,如果能稳定复现)

使用软件朗读功能,如果以前没朗读过,可能缓存比较小,需要朗读几小时才会触发问题。

触发问题后就会大概率复现:经常读几章就停止,有时候还会自动跳过某些段落。

此时只要软件 我的-其他设置-清理缓存 里清理下缓存,又可以连续读几小时不会停了。

怀疑软件会缓存音频,而又清理不及时导致朗读出现问题。

使用书源(填写URL或者JSON)

和书源无关

@tangzivps tangzivps added the BUG B.软件未按预期的功能运行 label Sep 7, 2022
@821938089
Copy link
Collaborator

发一下日志

@tangzivps
Copy link
Author

tangzivps commented Sep 9, 2022

崩溃日志 无

书架日志,见截图,截图时间 18:12 分,但是日志上显示的错误的是18:04 分,我录屏的时间是18:10

Screenshot_2022-09-09-18-12-49-63_90024215e504237c76412be1999ad914

1.mp4

视频请开声音听,因为涉及到朗读效果。

解释下录屏的操作,就是那一段一旦被跳过了,那么只要不清理缓存,无论你重试多少次,那一段都不会读,只要清理了缓存,那么就可以正常读,我是由此排除完全是TTS问题的。

最近的版本的不知道是阅读还是tts原因,经常跳过某一段不读,一章有2段以上,非常影响听书效果。

当然了,TTS也有问题,用EDGE接口比较稳定版本可以稳定读几小时,但是Azure本本就是可以换语音语调的版本就不稳定,问题就很容易复现。以前是经常读到某一章开头就停下,那时候如果手动继续朗读,就会跳过标题继续读,症状和我现在录屏一样的。

@821938089
Copy link
Collaborator

你点一下日志里面的一条记录然后截图给我看看

@tangzivps
Copy link
Author

Screenshot_2022-09-09-19-06-51-46_90024215e504237c76412be1999ad914

@wxxxcxx
Copy link

wxxxcxx commented Sep 10, 2022

TTS 服务在转换语音时是有一定概率出错的(和Azure的API有关)。我修改了下代码让其在失败后进行重试。

可以重新部署一下最新的版本,看看能不能缓解跳段的状况。

wxxxcxx/ms-ra-forwarder#34

@tangzivps
Copy link
Author

收到,已经重新部署并测试。

不过朗读这玩意一般要连续听好久才复现,下次反馈可能明天。

@821938089
Copy link
Collaborator

@tangzivps
Copy link
Author

使用了最新部署的tts和上面测试版本阅读。
测试时间5个小时,很稳定了,唯一一次出错是503,应该是Azure服务问题。因为当时没听出来(前后不连贯才知道跳段),不确定哪段文字。

Screenshot_2022-09-11-19-32-19-25_90024215e504237c76412be1999ad914

睡觉时定了60分钟朗读(有的书听着能催眠),醒来后也正常读完并日志里没有错误。

目前版本比较满意感谢各位。

@YogiLiu
Copy link

YogiLiu commented Jun 21, 2024

这个问题似乎还是没解决,我是在朗读引擎里直接设置的 Azure 的 API,发现的问题是朗读一段时间后就卡住了,参考 #2251 (comment) 提到的问题,我做了一些测试。

我代理了Azure 的 API,以下是代码:

# web.py
# Usage:
# pip install aiohttp
# python web.py

import logging
from aiohttp import web, ClientSession


routes = web.RouteTableDef()
logger = logging.getLogger('proxy')
logging.basicConfig(level=logging.INFO)



@routes.post('/')
async def api(request: web.Request):
    sess: ClientSession = request.app["sess"]
    data = await request.text()
    logger.info(f'req {data}')
    async with sess.post(
        "https://eastasia.tts.speech.microsoft.com/cognitiveservices/v1",
        data=data,
        headers=request.headers,
    ) as res:
        body = await res.read()
        content_type = res.headers.get('Content-Type', 'application/octet-stream')
        logger.info(f'res {res.status} {content_type} {len(body)}')
        headers = {
            'Content-Type': content_type,
        }
        # return web.Response(body=body, headers=headers, status=404)
        return web.Response(body=body, headers=headers, status=res.status)


async def init_session(app: web.Application):
    client = ClientSession(loop=app.loop)
    app['sess'] = client
    yield
    await client.close()


app = web.Application()
app.cleanup_ctx.append(init_session)
app.add_routes(routes)

web.run_app(app)

复现步骤:

  1. 在 APP 的其他设置里清理缓存,同时把网络 TTS 的地址改为我的代理 API
  2. 启动我的代理 API,代理 API 先返回状态码 404,模拟 Azure API 出错
  3. 开始朗读,此时是有 Toast 提示报错的,同时代理 API 也不断有请求进来,先不管报错,保持运行一段时间,积累一定的缓存
  4. 退出朗读,关闭 APP
  5. 重启代理 API,但是此时把状态码改回正常状态
  6. 启动 APP,打开小说,开始朗读,此时在代理 API 的日志中没有任何新的访问日志,应该是使用了错误的缓存
  7. 切换到另一章,此时就会发现代理 API 的日志中有了新日志,同时朗读功能正常了,猜测是缓存功能以章节为单位

@821938089

@821938089
Copy link
Collaborator

@YogiLiu
你的content-type规则没写吧
不检查状态码的

@YogiLiu
Copy link

YogiLiu commented Jun 21, 2024

@821938089 写了的,特意打印了日志确认 content-type 有值,是 audio/mpeg

不过需要注意的是,由于我并不知道 Azure API 到底是出什么问题,所以我的这个模拟和我真正遇到的问题又有些不同,我遇到的真实问题是朗读进度一直在某句话停住(红色字体一直不动),而模拟的情况是没有红色字体显示,所以不确定是否真的在朗读。

@821938089
Copy link
Collaborator

@YogiLiu 你用的是最新测试版吗

@YogiLiu
Copy link

YogiLiu commented Jun 21, 2024

@YogiLiu
Copy link

YogiLiu commented Jun 21, 2024

@821938089 这是我的配置

Screenshot_20240621_172726

@821938089
Copy link
Collaborator

@YogiLiu 用最新测试版

@YogiLiu
Copy link

YogiLiu commented Jun 21, 2024

@821938089 emmm...最新测试版在那里下载呢,抱歉我确实找不到 :(,README 里没写,官网的下载页面 3.0 链接也都失效了

@821938089
Copy link
Collaborator

@YogiLiu
Copy link

YogiLiu commented Jun 21, 2024

@821938089 谢谢,已经安装了,先尝试一段时间,没注意到使用了工作流构建,抱歉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BUG B.软件未按预期的功能运行
Projects
None yet
Development

No branches or pull requests

4 participants