【懒人精灵】小飞侠插件专题——文本转语音(TTS)类

内容说明

TtsOps 提供了完整的文本转语音(TTS)功能,包括:

  • 文本转语音播放:将文本转换为语音并播放
  • 语言设置:支持多种语言和地区设置
  • 语音参数调整:可调整语速、音调
  • 状态查询:查询引擎状态和支持的语言

功能列表

初始化功能

  • init(locale: String?): 初始化 TTS 引擎
  • isInitialized(): Boolean: 检查 TTS 引擎是否已初始化
  • release(): 释放 TTS 资源

语言设置

  • setLanguage(locale: String?): 设置语言
  • isLanguageAvailable(locale: String?): 检查指定语言是否可用
  • getAvailableLanguages(): 获取支持的语言列表(JSON 格式)

语音参数

  • setSpeechRate(rate: Float): 设置语速(0.5-2.0)
  • setPitch(pitch: Float): 设置音调(0.5-2.0)

播放控制

  • speak(text: String?): 播放文本转语音
  • stop(): 停止当前播放

OOP 调用例子

-- ============================================
-- 文本转语音示例
-- 演示如何使用 XfxPlugin.lua 调用 TtsOps 进行文本转语音
-- ============================================

print('========== 文本转语音示例 ==========')

-- 加载 XfxPlugin.lua 类
local xfxModule = require('lib/XfxPlugin')

-- 创建 XFX 对象实例
local xfx = xfxModule:new({
    apkName = 'xfxPlugin-release.apk',  -- APK 文件名
})

-- 获取 TtsOps 对象
local TtsOps = xfx:getOps('ttsOps')

if not TtsOps then
    print('无法获取 TtsOps 对象')
    return
end

print('开始文本转语音示例...')

-- ============================================
-- 1. 初始化 TTS 引擎
-- ============================================
print('\n--- 1. 初始化 TTS 引擎 ---')

-- 使用中文初始化(zh_CN 或 zh-CN 都可以)
local initSuccess = TtsOps.init('zh_CN')
if initSuccess then
    print('TTS 引擎初始化成功(中文)')
else
    print('TTS 引擎初始化失败,尝试使用系统默认语言')
    -- 使用系统默认语言初始化
    initSuccess = TtsOps.init(nil)
    if initSuccess then
        print('TTS 引擎初始化成功(系统默认语言)')
    else
        print('TTS 引擎初始化失败,请检查设备是否支持 TTS')
        return
    end
end

-- 检查初始化状态
local isInit = TtsOps.isInitialized()
print('TTS 引擎状态:' .. tostring(isInit))

-- ============================================
-- 2. 获取支持的语言列表
-- ============================================
print('\n--- 2. 获取支持的语言列表 ---')

local languagesJson = TtsOps.getAvailableLanguages()
if languagesJson and languagesJson ~= '[]' then
    print('支持的语言列表:')
    local languages = jsonLib.decode(languagesJson)
    for i = 1, #languages do
        local lang = languages[i]
        print('  - ' .. lang.displayName .. ' (' .. lang.language .. '_' .. lang.country .. ')')
    end
else
    print('无法获取语言列表或设备不支持多语言')
end

-- ============================================
-- 3. 基本文本转语音播放
-- ============================================
print('\n--- 3. 基本文本转语音播放 ---')

-- 播放简单文本
print('正在播放:你好,世界')
local speakSuccess = TtsOps.speak('你好,世界')
if speakSuccess then
    print('播放完成')
else
    print('播放失败')
end

sleep(500)

-- 播放较长文本
print('正在播放:这是一段较长的文本,用于测试文本转语音功能。')
TtsOps.speak('这是一段较长的文本,用于测试文本转语音功能。')

sleep(1000)

TtsOps.speak('跟产品经理沟通:我要做一个 “简单的列表页”,产品说 “加个下拉刷新、上拉加载、侧滑删除、点击跳转、夜间模式,再适配一下折叠屏”,简单 = 我觉得简单,你觉得麻烦。')

-- ============================================
-- 4. 设置语言
-- ============================================
print('\n--- 4. 设置语言 ---')

-- 检查中文是否可用
local zhAvailable = TtsOps.isLanguageAvailable('zh_CN')
print('中文(zh_CN)是否可用:' .. tostring(zhAvailable))

-- 检查英文是否可用
local enAvailable = TtsOps.isLanguageAvailable('en_US')
print('英文(en_US)是否可用:' .. tostring(enAvailable))

-- 切换到英文
if enAvailable then
    local setLangSuccess = TtsOps.setLanguage('en_US')
    if setLangSuccess then
        print('已切换到英文')
        TtsOps.speak('Hello, World')
    end
end

-- 切换回中文
if zhAvailable then
    TtsOps.setLanguage('zh_CN')
    print('已切换回中文')
end

-- ============================================
-- 5. 调整语速
-- ============================================
print('\n--- 5. 调整语速 ---')

-- 正常语速(1.0)
TtsOps.setSpeechRate(1.0)
print('正常语速播放')
TtsOps.speak('这是正常语速的语音')

sleep(500)

-- 慢速(0.7)
TtsOps.setSpeechRate(0.7)
print('慢速播放')
TtsOps.speak('这是慢速的语音')

sleep(500)

-- 快速(1.5)
TtsOps.setSpeechRate(1.5)
print('快速播放')
TtsOps.speak('这是快速的语音')

-- 恢复正常语速
TtsOps.setSpeechRate(1.0)

-- ============================================
-- 6. 调整音调
-- ============================================
print('\n--- 6. 调整音调 ---')

-- 正常音调(1.0)
TtsOps.setPitch(1.0)
print('正常音调播放')
TtsOps.speak('这是正常音调的语音')

sleep(500)

-- 低音(0.7)
TtsOps.setPitch(0.7)
print('低音播放')
TtsOps.speak('这是低音的语音')

sleep(500)

-- 高音(1.5)
TtsOps.setPitch(1.5)
print('高音播放')
TtsOps.speak('这是高音的语音')

-- 恢复正常音调
TtsOps.setPitch(1.0)

-- ============================================
-- 7. 停止播放
-- ============================================
print('\n--- 7. 停止播放 ---')

-- 注意:speak() 方法是阻塞的,会等待播放完成
-- 如果需要非阻塞播放,可以在后台线程中调用
-- 这里演示 stop() 方法的使用

print('开始播放...')
-- 在实际使用中,如果需要停止播放,可以在另一个线程中调用 stop()
-- 由于 speak 是阻塞的,这里仅演示 stop 方法的调用
TtsOps.speak('这是一段测试文本')

-- 如果需要非阻塞播放,可以使用 ThreadOps 在后台线程执行
-- local ThreadOps = xfx:getOps('threadOps')
-- if ThreadOps then
--     -- 在后台线程播放
--     ThreadOps.runOnBackground(java.lang.Runnable({
--         run = function()
--             TtsOps.speak('这是一段很长的文本,用于测试停止播放功能')
--         end
--     }))
--     -- 等待一段时间后停止
--     sleep(2000)
--     TtsOps.stop()
-- end

-- ============================================
-- 8. 综合示例:多语言朗读
-- ============================================
print('\n--- 8. 综合示例:多语言朗读 ---')

-- 中文朗读
if TtsOps.isLanguageAvailable('zh_CN') then
    TtsOps.setLanguage('zh_CN')
    TtsOps.setSpeechRate(1.0)
    TtsOps.setPitch(1.0)
    print('中文朗读:欢迎使用文本转语音功能')
    TtsOps.speak('欢迎使用文本转语音功能')
    sleep(500)
end

-- 英文朗读
if TtsOps.isLanguageAvailable('en_US') then
    TtsOps.setLanguage('en_US')
    TtsOps.setSpeechRate(1.0)
    TtsOps.setPitch(1.0)
    print('English: Welcome to Text to Speech')
    TtsOps.speak('Welcome to Text to Speech')
    sleep(500)
end

-- 日文朗读(如果支持)
if TtsOps.isLanguageAvailable('ja_JP') then
    TtsOps.setLanguage('ja_JP')
    print('日本語:テキスト読み上げ機能へようこそ')
    TtsOps.speak('テキスト読み上げ機能へようこそ')
end

-- ============================================
-- 9. 释放资源
-- ============================================
print('\n--- 9. 释放资源 ---')

-- 使用完毕后释放 TTS 资源
TtsOps.release()
print('TTS 资源已释放')

print('\n========== 文本转语音示例完成 ==========')

直接调用例子


import('com.nx.assist.lua.LuaEngine')

-- ============================================
-- 方式二:直接调用方式(不推荐,但可以了解底层实现)
-- ============================================
print('========== 方式二:直接调用方式 ==========')

local loader = LuaEngine.loadApk('xfxPlugin-release.apk')
if not loader then
    print('Failed to load APK')
    return
end

local UtilCodeMain = loader.loadClass('com.xfx.plugin.Main')
if not UtilCodeMain then
    print('Failed to load Class')
    return
end

-- 初始化插件(需要 Context)
local context = LuaEngine.getContext()
UtilCodeMain.init(context)

-- 获取 TtsOps 对象
local TtsOps = UtilCodeMain.ttsOps()

if not TtsOps then
    print('无法获取 TtsOps 对象')
    return
end

print('开始文本转语音示例...')

-- 初始化 TTS 引擎
TtsOps.init('zh_CN')

-- 播放文本
TtsOps.speak('你好,世界')

-- 释放资源
TtsOps.release()

实际应用示例

示例 1:朗读通知消息

local xfxModule = require('lib/XfxPlugin')
local xfx = xfxModule:new({apkName = 'xfxPlugin-release.apk'})

local TtsOps = xfx:getOps('ttsOps')

if not TtsOps then
    print('无法获取 TtsOps 对象')
    return
end

-- 初始化 TTS(使用中文)
if not TtsOps.init('zh_CN') then
    print('TTS 初始化失败')
    return
end

-- 设置语音参数
TtsOps.setSpeechRate(1.0)
TtsOps.setPitch(1.0)

-- 模拟接收通知消息
local notifications = {
    '您有一条新消息',
    '系统更新已完成',
    '电池电量低于 20%',
    '网络连接已断开'
}

for i = 1, #notifications do
    local msg = notifications[i]
    print('朗读通知:' .. msg)
    TtsOps.speak(msg)
    sleep(1000)  -- 每条消息间隔 1 秒
end

-- 释放资源
TtsOps.release()

示例 2:朗读时间

local xfxModule = require('lib/XfxPlugin')
local xfx = xfxModule:new({apkName = 'xfxPlugin-release.apk'})

local TtsOps = xfx:getOps('ttsOps')
local TimeOps = xfx:getOps('timeOps')

if not TtsOps or not TimeOps then
    print('无法获取必要的 Ops 对象')
    return
end

-- 初始化 TTS
if not TtsOps.init('zh_CN') then
    print('TTS 初始化失败')
    return
end

-- 获取当前时间
local timeStr = TimeOps.getNowString()
print('当前时间:' .. timeStr)

-- 朗读时间
local timeText = '当前时间是 ' .. timeStr
TtsOps.speak(timeText)

-- 释放资源
TtsOps.release()

示例 3:朗读数字和计算结果

local xfxModule = require('lib/XfxPlugin')
local xfx = xfxModule:new({apkName = 'xfxPlugin-release.apk'})

local TtsOps = xfx:getOps('ttsOps')

if not TtsOps then
    print('无法获取 TtsOps 对象')
    return
end

-- 初始化 TTS
if not TtsOps.init('zh_CN') then
    print('TTS 初始化失败')
    return
end

-- 计算并朗读结果
local a = 10
local b = 20
local result = a + b

local text = string.format('%d 加 %d 等于 %d', a, b, result)
print('计算结果:' .. text)
TtsOps.speak(text)

-- 释放资源
TtsOps.release()

示例 4:多语言切换朗读

local xfxModule = require('lib/XfxPlugin')
local xfx = xfxModule:new({apkName = 'xfxPlugin-release.apk'})

local TtsOps = xfx:getOps('ttsOps')

if not TtsOps then
    print('无法获取 TtsOps 对象')
    return
end

-- 初始化 TTS(使用系统默认语言)
if not TtsOps.init(nil) then
    print('TTS 初始化失败')
    return
end

-- 多语言文本
local texts = {
    {locale = 'zh_CN', text = '你好,世界'},
    {locale = 'en_US', text = 'Hello, World'},
    {locale = 'ja_JP', text = 'こんにちは、世界'},
    {locale = 'ko_KR', text = '안녕하세요, 세계'}
}

for i = 1, #texts do
    local item = texts[i]

    -- 检查语言是否可用
    if TtsOps.isLanguageAvailable(item.locale) then
        -- 设置语言
        if TtsOps.setLanguage(item.locale) then
            print('切换到:' .. item.locale .. ' - ' .. item.text)
            TtsOps.speak(item.text)
            sleep(1000)
        end
    else
        print('语言不可用:' .. item.locale)
    end
end

-- 释放资源
TtsOps.release()

示例 5:朗读文件内容

local xfxModule = require('lib/XfxPlugin')
local xfx = xfxModule:new({apkName = 'xfxPlugin-release.apk'})

local TtsOps = xfx:getOps('ttsOps')
local FileOps = xfx:getOps('fileOps')

if not TtsOps or not FileOps then
    print('无法获取必要的 Ops 对象')
    return
end

-- 初始化 TTS
if not TtsOps.init('zh_CN') then
    print('TTS 初始化失败')
    return
end

-- 读取文本文件
local filePath = '/sdcard/readme.txt'
local content = FileOps.readFileToString(filePath)

if content then
    print('文件内容:' .. content)

    -- 如果内容较长,可以分段朗读
    local maxLength = 200  -- 每段最大长度
    if #content > maxLength then
        -- 分段朗读
        local start = 1
        while start <= #content do
            local segment = string.sub(content, start, start + maxLength - 1)
            print('朗读段落:' .. segment)
            TtsOps.speak(segment)
            start = start + maxLength
            sleep(500)  -- 段落间隔
        end
    else
        -- 直接朗读
        TtsOps.speak(content)
    end
else
    print('无法读取文件:' .. filePath)
end

-- 释放资源
TtsOps.release()

注意事项

  1. 初始化

    • 使用前必须先调用 init() 方法初始化 TTS 引擎
    • init() 方法会阻塞当前线程直到初始化完成,建议在后台线程调用
    • 初始化失败可能是因为设备不支持 TTS 或未安装 TTS 引擎
  2. 语言设置

    • 语言格式支持 "zh_CN"、"en_US"、"zh-CN"、"en-US" 等
    • 使用前建议先调用 isLanguageAvailable() 检查语言是否可用
    • 某些设备可能只支持部分语言
  3. 播放控制

    • speak() 方法会阻塞当前线程直到播放完成
    • 如需非阻塞播放,建议在后台线程调用
    • 可以使用 stop() 方法停止当前播放
  4. 资源管理

    • 使用完毕后建议调用 release() 释放 TTS 资源
    • 释放后需要重新初始化才能使用
  5. 语音参数

    • 语速范围:0.5-2.0(1.0 为正常语速)
    • 音调范围:0.5-2.0(1.0 为正常音调)
    • 参数超出范围会自动限制在有效范围内
  6. 线程安全

    • TTS 操作不是线程安全的,建议在同一线程中调用
    • 如需在多个线程使用,请确保线程同步
  7. 设备兼容性

    • 不同设备的 TTS 引擎可能支持的语言和功能不同
    • 建议在使用前检查所需功能是否可用

接口说明

初始化接口

  • init(locale: String?): Boolean – 初始化 TTS 引擎,locale 为语言区域(如 "zh_CN"),null 使用系统默认
  • isInitialized(): Boolean – 检查 TTS 引擎是否已初始化
  • release() – 释放 TTS 资源

语言设置接口

  • setLanguage(locale: String?): Boolean – 设置语言
  • isLanguageAvailable(locale: String?): Boolean – 检查指定语言是否可用
  • getAvailableLanguages(): String – 获取支持的语言列表(JSON 格式)

语音参数接口

  • setSpeechRate(rate: Float): Boolean – 设置语速(0.5-2.0)
  • setPitch(pitch: Float): Boolean – 设置音调(0.5-2.0)

播放控制接口

  • speak(text: String?): Boolean – 播放文本转语音(阻塞方法)
  • stop(): Boolean – 停止当前播放
1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520飞云脚本圈
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【懒人精灵】小飞侠插件专题——文本转语音(TTS)类

企业级大数据智能营销管理系统

源码转让