Lazy loaded image
Android开发
🗒️抓取谷歌中文语音包并推送到其他设备的方案
字数 1163阅读时长 3 分钟
2025-1-24
2025-1-24
type
status
date
slug
summary
tags
category
icon
password
😀
主要是针对设备需要安装语音引擎但是又不通外网的情况,谷歌tts引擎安装后如果要使用中文是需要有外网下载语音包的。
 

📝 提取语音包

1、获取语音包资源

💡
找一台能正常使用语音合成的设备,通过adb命令进行连接。
💡
进入shell,找到当前设备已经下载的语音包文件
检查目录内容:
一般来说谷歌语音引擎自动下载语音包完成后,会保存至上述三个路径中的某一个,所以需要依次执行,查看对应文件夹下的文件进行确认。
如果某次执行出现如下所示:
恭喜你,你已经找到语音包下载文件的保存目录了。
cmn-cn-x-ssa 文件夹里,有三个文件夹/文件:
  • hmm:这可能是语音模型的文件夹,包含了语音合成的音频特征模型。🔊
  • lstm:这通常是深度学习模型,可能用来进行语言模型的预测。🤖
  • voice_metadata:这个文件一般会包含关于语音的元数据,比如语音的配置、名字、描述等。📝
这些都是谷歌TTS引擎所需要的语音资源。通常情况下,如果你想备份这个语音包并在没有外网的设备上使用,应该将整个 cmn-cn-x-ssa 文件夹备份下来。

2、采用备份的方式提取文件

💡
可以使用以下命令将整个 cmn-cn-x-ssa 文件夹拉取到你的电脑上:
确保目标路径 F:/voiceFile/ 存在,并且命令执行时可以正确访问,同时保证目标文件夹不包含中文字符,否则会报错。💻 如果命令行反馈如下:
说明资源文件已经成功提取到本地电脑,此时对应文件夹应该是能看到资源文件了。
notion image

📝 推送到其他设备

💡
这里的其他设备指的是已经安装引擎,但是需要在内网环境使用的安卓设备。

1、adb连接设备

可以看到此时安装引擎之后,连播放示例都不行:
notion image

2、将本地电脑的语音资源推送到语音不可用的设备

使用 adb push 命令。这与 adb pull 相反,adb push 是把文件从你的电脑上传到安卓设备。📱

基本命令格式:

举个例子:

假设你想把 F:/voiceFile/cmn-cn-x-ssa/ 目录下的文件推送到安卓设备的 /data/data/com.google.android.tts/ 目录下,命令如下:

注意事项:

  1. 目标路径的权限问题: 设备上的很多系统目录(如 /data/data/)是需要 root 权限才能进行写入的。没有 root 权限时,你可能会看到类似 "Permission denied" 的错误。解决办法是:
      • 如果设备已经 root,先使用 adb root 重新获取 root 权限。
      • 如果没有 root 权限,可以考虑将文件推送到设备的可写目录,如 /sdcard//storage/emulated/0/ 目录。
  1. 确保目标路径存在: 推送之前,检查设备上目标路径是否存在。如果不存在,可能会导致推送失败。
    1. 如果目标路径不存在,你可以先创建目录,命令如下:
  1. 注意文件大小: 如果你要推送的文件非常大,推送时间可能会比较长,确保设备和电脑的连接稳定。
  1. 文件权限: 推送后,如果需要调整文件权限(例如修改可执行权限),可以使用 adb shell chmod 命令来修改:

    上手操作:将语音包推送到设备:

    我们要将 F:/voiceFile/cmn-cn-x-ssa/ 中的文件推送到 /data/data/com.google.android.tts/app_voices_greco_v2/
    如果提示权限问题,且你已经获得 root 权限,可以尝试以下命令:
    上一篇
    Gradle下载超时问题处理办法
    下一篇
    1 计算机基础

    评论
    Loading...