You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-native-tts设置hi-IN报语言不支持、语音不存在错误如何解决

React Native TTS 印地语播报报错排查方案

两个报错的核心原因是硬编码语言/语音参数前未校验设备实际支持情况,且未等待TTS引擎初始化完成,react-native-tts不会自动下载缺失的系统语音包,iOS、Android的语言码规则、语音标识存在平台差异,直接写死hi-IN或iOS专属语音id很容易触发异常,按以下步骤排查修复:

1. 修正初始化逻辑,先拉取设备实际支持的资源

不要在组件顶层直接调用TTS设置方法,必须等TTS引擎初始化完成后,先拉取设备当前已安装的语言、语音列表,匹配到印地语资源后再设置参数,参考代码:

import React, { useEffect } from 'react'
import { Button, View } from 'react-native'
import Tts from 'react-native-tts'

const Home = () => {
  useEffect(() => {
    // 等待TTS引擎初始化完成再执行配置
    Tts.getInitStatus().then(() => {
      // 获取设备所有支持的TTS语言
      Tts.languages().then(supportedLangs => {
        console.log('设备支持语言列表:', supportedLangs)
        // 获取设备所有已安装的语音包
        Tts.voices().then(availableVoices => {
          console.log('设备可用语音列表:', availableVoices)
          // 匹配印地语相关资源,不要硬写hi-IN,部分设备返回hi或hi_IN格式
          const hindiVoice = availableVoices.find(voice => voice.language.toLowerCase().startsWith('hi'))
          if (!hindiVoice) {
            console.log('当前设备未安装印地语TTS语音包')
            return
          }
          // 用接口实际返回的参数设置,不要硬编码
          Tts.setDefaultLanguage(hindiVoice.language)
          Tts.setDefaultVoice(hindiVoice.id)
        })
      })
    }).catch(err => {
      console.log('TTS初始化异常:', err)
    })
  }, [])

  return (
    <View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}>
      <Button
        title="Speak!"
        onPress={() => Tts.speak('वहां कोई है?')}
      />
    </View>
  )
}

export default Home

2. 分平台补全缺失的语音资源

如果打印的列表里找不到印地语相关项,按对应平台安装语音包:

  • iOS端:进入系统「设置-辅助功能-朗读内容-嗓音」,找到印地语分类,手动下载Lekha系列语音包,下载完成后重启App即可识别到对应资源。注意你注释里的com.apple.ttsbundle.Lekha-compact是iOS专属语音id,必须等下载完成后才能生效,提前硬写会直接触发「selected voice was not found」报错。
  • Android端:首先确认系统默认TTS引擎为「Google文字转语音引擎」(部分厂商自带TTS不支持印地语),切换后进入Google TTS设置页,下载印地语(印度)语音包。注意安卓端印地语语言码通常为下划线分隔的hi_IN,和iOS的横杠格式hi-IN不一致,硬写横杠格式会触发「Language is not supported」报错。

避坑提醒

所有TTS参数配置逻辑必须放在Tts.getInitStatus()的成功回调中执行,模块顶层代码执行时TTS引擎还未完成初始化,哪怕设备已安装对应语音包,也可能偶发识别失败报错。
禁止跨平台硬编码语音id,iOS和安卓的语音资源命名规则完全不同,写死iOS的语音id在安卓端运行必然报错。

内容的提问来源于stack exchange,提问作者saikumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:57:21