2010-12-28 6 views
3

Gibt es eine Möglichkeit, die Lautstärke der TTS-Engine zu steuern, wenn eine Anfrage an die TTS-Engine gesendet wird? Kann ich den AudioManager hier verwenden?Android TTS Lautstärkeregler

Vielen Dank.

Antwort

2

Ja, wie Ihre Frage fragt, können Sie AudioManager für TTS-Audio verwenden.

Wenn Sie die Lautstärke in Ihrem Code einstellen möchten, sollten Sie die Methoden getStreamVolume() und setStreamVolume() verwenden.

Wenn Sie dem Benutzer die Kontrolle über das Volumen geben (dies kann davon abhängen, wie/wann Ihr Programm setzt Volumen), this question weist darauf hin, dass Sie setVolumeControlStream() während OnCreate() verlangen.

EDIT: Und nein, können Sie nicht Lautstärke innerhalb des methods des TTS-Engine (das heißt die Speak() Methode).

0

diese versuchen, die Einstellungen zu steuern:

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
sb2value =am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
am.setStreamVolume(AudioManager.STREAM_MUSIC, sb2value, 0); 
1

int iAlertVolume ist ein 0% bis 100%, Benutzer dieses Volumen auf gewünschte festlegt.

setVolumeControlStream(AudioManager.STREAM_MUSIC); 
AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
int amStreamMusicMaxVol = am.getStreamMaxVolume(am.STREAM_MUSIC); 
am.getStreamVolume(am.STREAM_MUSIC); 

Aktuelle Einstellung Volumen:

am.setStreamVolume(am.STREAM_MUSIC, (iAlertVolume*amStreamMusicMaxVol)/100,0);

Die 0 am Ende sagt sie das System Lautstärkeregler nicht angezeigt werden, auf 1 bis System ctrl

7

sehen Sie diese erhalten in TTS speak() - Methoden, aber nur ab API-Level 11.

Um die Abwärtskompatibilität zu erhalten, könnten Sie die höhere API-Ebene (mit lo wer min sdk) und verwenden Sie einen "@TargetApi (api_level)" Dekorateur zusammen mit sdk version check.

/** 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

speak() Verfahren können nun steuern TTS Volumen

in API-Ebene hinzugefügt 21

int speak (CharSequence text, 
       int queueMode, 
       Bundle: KEY_PARAM_VOLUME;..., 
       String utteranceId) 

Parameter KEY_PARAM_VOLUME, drücken, um die Sprachlautstärke in Bezug auf den aktuellen Stromtyp Volumen verwendet, um anzugeben, wenn der Text gesprochen .
Volume wird als Float zwischen 0 und 1 angegeben, wobei 0 für Stille und 1 für die maximale Lautstärke steht (Standardverhalten).