TTS - Text to Speech - Ein Funktionstest für einen Sprachsynthesizer
(EN google-translate)
(PL google-translate)
Sprachsynth002.zipBild 0-1: Screenshot der App.
Hinweise:
|
Sollte wegen verändertem Android-Betriebssystem das Flashen neuer Apps nicht funktionieren, kann noch ein Versuch mit adb gemacht werden. Siehe: Android->ADB_apps.
import processing.vr.*; import android.speech.tts.TextToSpeech; import java.util.Locale; import java.util.Set; import android.media.AudioManager; import android.content.Context; //ACHTUNG: //Android->VR anhaken PMatrix3D eyeMat = new PMatrix3D(); TTS tts; String zeichen = "ABCDEFGHIJKLMNOPQRSTUVWXZ"; int RESTZEIT = 0; String[] AUSWAHL = {"1","2","3"}; int inx=0; void setup() { fullScreen(MONO); tts = new TTS(); tts.setzeSpechgeschwindigkeit(1.0f); tts.setzeStimmhoehe(1.0f); tts.setzeLautstaerke(0.8f); } void draw() { //Standardeinstellungen für unser Arbeiten: background(0); getEyeMatrix(eyeMat); //Kameramatrix auslesen translate(eyeMat.m03, eyeMat.m13, eyeMat.m23); //Welt in Koordinatenursprung von Kamera setzen. lights(); float ez_x = eyeMat.m02; //Einheitsvektor der aktuellen Blickrichtung // float ez_y = -eyeMat.m12; float ez_y = eyeMat.m12; float ez_z = eyeMat.m22; //ENDE Standardeinstellungen für unser Arbeiten: //Buchstaben auf "Platten" zeichnen: textSize(64); for(int i=0;i<zeichen.length();i++) { pushMatrix(); float z = -500.0f; float y = - 200 + (i/5)*100; float x = 100*(i%5) - 200; //Nähe zum Zielkreis: //1) Einheitsvektor bilden: float laenge = sqrt(x*x+y*y+z*z); float xx=x/laenge; float yy=y/laenge; float zz=z/laenge; //2) Skalarprodukt mit Blickrichtung (ez) float sk = xx*ez_x + yy*ez_y + zz*ez_z; if(sk>0.99f && RESTZEIT==0) { AUSWAHL[inx]=zeichen.substring(i,i+1); inx++; inx%=AUSWAHL.length; if(AUSWAHL[0].equals(AUSWAHL[1]) && AUSWAHL[1].equals(AUSWAHL[2])) { tts.sprich(AUSWAHL[0]); AUSWAHL[0] ="1"; AUSWAHL[1] ="2"; AUSWAHL[2] ="3"; } RESTZEIT = 30; } translate(x,y,z); noStroke(); /* fill(200.0f,200.0f,200.0f); rect(-40, -40, 80, 80); translate(0,0,5); */ fill(0,255,0); text(zeichen.substring(i,i+1),-20,20); popMatrix(); } //Zielkreis zeichnen eye(); //Transformation realtiv zur Kamera translate(0, 0, 95); //Zielkreis relativ zur Kamera zeichnen noFill(); stroke(255,0,0); ellipse(0, 0, 10, 10); if(RESTZEIT>0) RESTZEIT--; }
Code 0-1: Sprachsynthese002.pde
public class TTS { TextToSpeech tts; AudioManager audio; int currentVolume; int maxVolume; public void setzeSpechgeschwindigkeit(float s) { tts.setSpeechRate(s); } public void setzeStimmhoehe(float h) { tts.setSpeechRate(h); } public void setzeLautstaerke(float ls) { if(ls<0.0f) ls=0.0f; if(ls>1.0f) ls=1.0f; int LAUT = (int) (maxVolume*ls); audio.setStreamVolume(AudioManager.STREAM_MUSIC, LAUT, 0); } public void sprich(String text) { if(tts!=null) { tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); println("tts: \""+text+"\""); } else { println("tts==null"); } } public TTS() { //NEU: getActivity(). ab Proc. 3! tts=new TextToSpeech(getActivity().getApplicationContext(), new TextToSpeech.OnInitListener() { //@Override public void onInit(int status) { if(status != TextToSpeech.ERROR) { tts.setLanguage(Locale.GERMAN); } } }); audio = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE); //NEU: getActivity(). ab Proc. 3! currentVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC); maxVolume = audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC); } }
Code 0-2: TTS.pde
Übung
|