【问题标题】:Android Text To Speech Male VoiceAndroid 文字转语音男声
【发布时间】:2012-04-06 14:22:37
【问题描述】:

我有一个工作的文本到语音,但我想知道当应用程序调用它来播放它时,它会代替女性声音而不是男性声音?

【问题讨论】:

标签: java android text-to-speech


【解决方案1】:

现在可以使用男声/女声并从 App UI 动态更改。像这样定义 TTS(在构造函数中添加 google tts 引擎):

tts = new TextToSpeech(context, this, "com.google.android.tts");

contex = 活动/应用程序

this=TextToSpeech.OnInitListener

tts.getVoices() 列表中,通过名称选择您想要的声音,如下所示:

for (Voice tmpVoice : tts.getVoices()) {
        if (tmpVoice.getName().equals(_voiceName)) {
            return tmpVoice;
            break;
        }
}

注意:你需要通过从tts.getVoices() 获取硬编码的voice_name 来设置_voiceName。例如:对于英国男性,它将是:“en-us-x-sfg#male_1-local”

【讨论】:

  • 它每次都更改语音名称,我用于印地语男性,值为语音[名称:hi-in-x-cfn#male_3-local,区域设置:hi_IN,质量:400,延迟: 200] , 现在为 hi-IN 显示 Voice[Name: hi-in-x-hia-local, locale: hi_IN, quality: 400,] , 以前它的工作现在它的创建问题
【解决方案2】:

可以变男声

这是我的代码,希望对你有帮助!

//onCreate  
T2S= new TextToSpeech(testApp.getInstance().getApplicationContext(), this, "com.google.android.tts");
    Set<String> a=new HashSet<>();
    a.add("male");//here you can give male if you want to select male voice.
    Voice v=new Voice("en-us-x-sfg#male_2-local",new Locale("en","US"),400,200,true,a);
    T2S.setVoice(v);
    T2S.setSpeechRate(0.8f);

在 Activity 上实现 TextToSpeech.OnInitListener。

@Override
public void onInit(int status) {
    if (status == TextToSpeech.SUCCESS) {
        Set<String> a=new HashSet<>();
        a.add("male");//here you can give male if you want to select male voice.
        //Voice v=new Voice("en-us-x-sfg#female_2-local",new Locale("en","US"),400,200,true,a);
        Voice v=new Voice("en-us-x-sfg#male_2-local",new Locale("en","US"),400,200,true,a);
        T2S.setVoice(v);
        T2S.setSpeechRate(0.8f);

       // int result = T2S.setLanguage(Locale.US);
        int result = T2S.setVoice(v);

        if (result == TextToSpeech.LANG_MISSING_DATA
                || result == TextToSpeech.LANG_NOT_SUPPORTED) {
            Log.e("TTS", "This Language is not supported");
        } else {
           // btnSpeak.setEnabled(true);
            speakOut(mMessageVoice);
        }

    } else {
        Log.e("TTS", "Initilization Failed!");
    }
}

并添加此功能:

private void speakOut(String message) {

    t1.speak(message, TextToSpeech.QUEUE_FLUSH, null);
}

【讨论】:

  • 但是当我们设置像 if (status == TextToSpeech.SUCCESS) { Set a=new HashSet(); 这样的语言环境时a.add("男");语音 v=new Voice("hi-IN-x-sfg#male_2-local",new Locale("hi","IN"),400,200,true,a); tts.setVoice(v); int 结果 = tts.setVoice(v); tts.setSpeechRate(0.8f); ------------->>>> 为什么给女声?我在哪里失踪?
  • 它动态改变男性的值不固定 ---->e("hi-IN-x-sfg#male_2-local",new Locale("hi","IN"), 400,200,true,a)
  • 它不工作。它仍然以默认的女声说话。有什么出路吗?
【解决方案3】:

这取决于底层的 TTS 引擎。有些是可配置的并且有不同的声音(男性、女性等),有些只有一种声音。在任何情况下,您都无法从您的应用程序控制这一点,用户必须从“设置”应用程序更改 TTS 引擎设置。您只能指示他们安装特定引擎,并设置您的应用程序以使用它。

【讨论】:

    【解决方案4】:

    您不能让 Android TextToSpeech 听起来像男性。如果您将TextToSpeech.setPitch() 的值更改为较低的值,例如 0.1,听起来会很糟糕。

    您唯一的选择是尝试其他文本转语音引擎,或者使用女性声音。

    【讨论】:

    • 谷歌换了新logo,安卓却只有女声,不可思议。
    • 答案不再正确。例如 en_UK 现在有 18 个声音,其中几乎一半是男性。一些语言环境仍然只有一种语言。应该删除或更新。
    【解决方案5】:

    可以将声音变成男性。设置在onCreate():tts.setEngineByname("com.google.android.tts") 并在文本到语音设置中默认设置谷歌 tts 服务并在谷歌 tts 服务中安装男声。

    像这样您可以使用任何第三方 android tts 服务并检查设备。或要求安装。

    【讨论】:

      【解决方案6】:

      无论哪种方式,您都可以通过以下方式将您的 android Text-to-Speech 设置为 google TTS 服务:

      1. tts = new TextToSpeech(context, this, "com.google.android.tts"),或
      2. 安装新的男(英文)语音并在android中默认设置。

      希望对你有帮助。

      【讨论】:

        【解决方案7】:

        与之前的一些答案相反,性别不是Voice 对象的参数(甚至不是“特征”)。

        如您所见...截至 2021 年 5 月,没有“isMale”布尔参数。

        一个“功能”Set 参数,但这些字符串实际包含的内容取决于引擎,并且文档和/或实现极差……并且没有引擎使用此参数来描述性别我知道的。

        TextToSpeech.setVoice() 的设计使得被设置的 Voice 必须与之前由 TextToSpeech.getVoices() 返回的 Voice 对象之一完全匹配/实例——这不是一种方法以某种方式创建/请求新的自定义语音或尝试混合和匹配参数。(这并不是说某些引擎不会尝试对您尝试发送给它的不存在的新语音做出最佳近似)。

        即使实现了性别,Voice 参数也并非设计为可独立设置。

        Voice 对象是引擎可以使用 getVoices() 描述其可用声音的一种方式——它们本身并不是声音。

        据我所知,Voice 类的构造函数对语音引擎开发人员以外的任何人都没有用处。

        所有这一切意味着,除非特定引擎的作者选择将“男性”或“女性”作为声音名称的子字符串,否则您无法确定声音听起来是男性还是女性而不是先听。

        因此,为了控制语音输出“是”男性还是女性,以下所有条件都必须为真:

        1. 您已经知道要查找的唯一语音名称(字符串)
        2. 包含该语音的引擎安装在用户设备上(不在您的控制范围内)
        3. 该引擎的安装版本足够新,可以包含该声音(不在您的控制范围内)
        4. 该引擎的安装版本不是太新,因此不再包含该声音(不在您的控制范围内)
        5. 用户安装了特定的语音(不在您的控制范围内)
        6. 如果未安装语音,则用户已连接到互联网(不在您的控制范围内)

        PS - 即使你认为你找到了一个男声,它实际上也可能是一个对你来说听起来只是男性的女性。 :)

        PPS - 您可以改用云服务来消除所有设备的不可预测性。

        【讨论】:

        • 您可以调整音高/速度,这可以使女性声音“听起来”更低/更深(大多数人听起来会是男性)。
        猜你喜欢
        • 2015-08-29
        • 2018-09-25
        • 2021-04-21
        • 2017-04-14
        • 2017-10-10
        • 2011-03-04
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多