在向TTS引擎发送请求时,有没有办法控制TTS引擎的音量?我可以在这里使用AudioManager吗?
谢谢。
答案 0 :(得分: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);
}
答案 1 :(得分:2)
是的,正如您的问题所示,您可以将AudioManager用于TTS音频。
如果您想在代码中设置音量,则需要使用getStreamVolume()
和setStreamVolume()
方法。
如果您想让用户控制音量(这可能取决于您的程序设置音量的方式/时间),this question指出您必须在{{1}期间致电setVolumeControlStream()
}。
编辑:不,你无法控制TTS引擎methods内的音量(即OnCreate()
方法)。
答案 2 :(得分:2)
speak()
方法现在可以控制TTS音量
在API级别21中添加
int speak (CharSequence text,
int queueMode,
Bundle: KEY_PARAM_VOLUME;...,
String utteranceId)
参数KEY_PARAM_VOLUME
,用于指定相对于说出文本时使用的当前流类型卷的语音音量的键
卷被指定为从0到1的浮点数,其中0表示静音,1表示最大音量(默认行为)。
答案 3 :(得分:1)
尝试此操作来控制设置:
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
sb2value =am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
am.setStreamVolume(AudioManager.STREAM_MUSIC, sb2value, 0);
答案 4 :(得分:1)
int iAlertVolume是0%到100%,用户将其设置为所需的音量。
setVolumeControlStream(AudioManager.STREAM_MUSIC);
AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
int amStreamMusicMaxVol = am.getStreamMaxVolume(am.STREAM_MUSIC);
am.getStreamVolume(am.STREAM_MUSIC);
实际音量设置:
am.setStreamVolume(am.STREAM_MUSIC, (iAlertVolume*amStreamMusicMaxVol)/100,0 );
最后的0表示不显示系统音量控制,设置为1以查看系统控制
答案 5 :(得分:0)
在我添加对setLegacyStreamType()的调用之前,上面的内容对我没有任何帮助,如下所示(在Kotlin中):
// Requires Lollipop or above
var ttobj: TextToSpeech? = null
val attrs = AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
.setLegacyStreamType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build()
ttobj?.setAudioAttributes(attrs)