Android TTS音量控制

Cha*_*ana 3 android text-to-speech

在向TTS引擎发送请求时,有没有办法控制TTS引擎的音量?我可以在这里使用AudioManager吗?

谢谢.

use*_*782 11

你可以在TTS speak()方法中得到这个,但只能从API级别11开始.

为了保持向后兼容性,您可以定位更高的api级别(使用更低的min sdk)并使用"@TargetApi(api_level)"装饰器以及sdk版本检查.

/**  speak the single word, at a lower volume if possible */
protected void speakOneWord(String text) {
    int apiVer = android.os.Build.VERSION.SDK_INT;
    if (apiVer >= 11){
        speakApi13(text);
    } else {
        // compatibility mode
        HashMap<String, String> params = new HashMap<String, String>();
        mTts.speak(text, TextToSpeech.QUEUE_ADD, params);
    }
}   

/**  speak at a lower volume, for platform >= 13 */
@TargetApi(13)
protected void speakApi13(String text) {
    HashMap<String, String> params = new HashMap<String, String>();
    params.put(TextToSpeech.Engine.KEY_PARAM_VOLUME, "0.1");
    mTts.speak(text, TextToSpeech.QUEUE_ADD, params);
}   
Run Code Online (Sandbox Code Playgroud)


Gin*_*ani 5

speak() 方法现在可以控制 TTS 音量

在 API 级别 21 中添加

int speak (CharSequence text, 
                int queueMode, 
                Bundle: KEY_PARAM_VOLUME;..., 
                String utteranceId)
Run Code Online (Sandbox Code Playgroud)

参数KEY_PARAM_VOLUME,用于指定相对于朗读文本时使用的当前流类型音量的语音音量的键。
音量被指定为范围从 0 到 1 的浮点数,其中 0 是静音,1 是最大音量(默认行为)。


gar*_*ary 2

是的,正如您的问题所问,您可以使用AudioManager来处理 TTS 音频。

如果您想在代码中设置音量,您需要使用getStreamVolume()setStreamVolume()方法。

如果您想让用户控制音量(这可能取决于您的程序如何/何时设置音量),此问题指出您必须setVolumeControlStream()在 期间调用OnCreate()

编辑:不,您无法在 TTS 引擎的方法(即Speak()方法)中控制音量。

  • setStreamVolume() 方法更改系统范围的音量,而不是应用程序的音量。这个答案应该被标记为不正确,下面有更好的解决方案 (4认同)