kramann.info
© Guido Kramann

Login: Passwort:










EmbSyst
1 day_by_day
2 Eingebettete_Systeme
..2.1 Softwareentwicklung
....2.1.1 AgileSoftwareentwicklung
....2.1.2 Verhalten
....2.1.3 Entwurfsmuster
....2.1.4 FuzzyRegler
....2.1.5 Uebung
..2.2 Arduino
....2.2.1 Uebung1
..2.3 Android
....2.3.1 UML
......2.3.1.1 Volumenberechnung
......2.3.1.2 UML_Klassendiagramm
......2.3.1.3 Konstruktor
......2.3.1.4 Statische_Variable
....2.3.2 bluej
....2.3.3 Threads
....2.3.4 Interfacedesign
....2.3.5 Android
......2.3.5.1 Getting_Started
......2.3.5.2 App
......2.3.5.3 Beispielprojekt
........2.3.5.3.1 Richtlinien
........2.3.5.3.2 Anforderungen
........2.3.5.3.3 Layout
........2.3.5.3.4 Projekt_einrichten
........2.3.5.3.5 Refactoring
........2.3.5.3.6 Icon
........2.3.5.3.7 Icon2
........2.3.5.3.8 Kurzanleitung
........2.3.5.3.9 Architektur
........2.3.5.3.10 Anwendungsklasse
......2.3.5.4 Threads
......2.3.5.5 Activities
......2.3.5.6 Was_ist_wo
......2.3.5.7 Regelungssysteme
........2.3.5.7.1 Servo
........2.3.5.7.2 Fahrzeug
......2.3.5.8 ADB_Apps
......2.3.5.9 Veroeffentlichen
......2.3.5.10 Einzelheiten
........2.3.5.10.1 Bildschirmaufloesung
........2.3.5.10.2 Parameter
........2.3.5.10.3 Permission
........2.3.5.10.4 Latenzzeit
......2.3.5.11 Tonerkennung
........2.3.5.11.1 Wahrscheinlichkeitsrechnung
........2.3.5.11.2 Kovarianz_Scilab
........2.3.5.11.3 Java_Threads
........2.3.5.11.4 Java_Reflection
....2.3.6 Processing
......2.3.6.1 Installation
......2.3.6.2 Erste_Schritte
......2.3.6.3 Mechatronik
......2.3.6.4 Bibliotheken
......2.3.6.5 Uebung
......2.3.6.6 Snippets
........2.3.6.6.1 Dateioperationen
........2.3.6.6.2 Bilder
........2.3.6.6.3 GUI
........2.3.6.6.4 Text
........2.3.6.6.5 PDF
........2.3.6.6.8 Maus
........2.3.6.6.10 Zeit
........2.3.6.6.13 Animation
........2.3.6.6.15 Simulation
......2.3.6.7 Referenzen
....2.3.7 Android_Processing
......2.3.7.1 Basics
......2.3.7.2 Einrichten
......2.3.7.3 Crossplattform
......2.3.7.4 sinus
......2.3.7.5 sample
......2.3.7.6 analyse
......2.3.7.7 synthese
......2.3.7.8 Hilfsapps
......2.3.7.9 Eigene_Library
....2.3.8 Processing_VR
....2.3.9 Shapes3D
....2.3.10 TextToSpeech
....2.3.11 Internetprogrammierung
......2.3.11.1 Codegenerierung
......2.3.11.2 PHP_Programmierung
......2.3.11.3 PHP_OOP
......2.3.11.4 Java
......2.3.11.5 UDP
......2.3.11.6 Internetkontrolle
........2.3.11.6.1 Kamerabild
....2.3.12 OSC
......2.3.12.1 Datenaustausch
......2.3.12.2 i2audiolab
......2.3.12.3 Ardour
....2.3.13 Netzwerkprogrammierung
....2.3.14 JNI
....2.3.15 Erweitern
......2.3.15.1 sprich
......2.3.15.2 spiel
....2.3.16 thbvr
....2.3.17 Reflection
....2.3.18 Script
....2.3.19 Java3D
3 Echtzeitprogrammierung
..3.1 Echtzeit
..3.2 Korrektheit
..3.2 Semaphoren
..3.3 Hardware
..3.5 Synchronprogramm
..3.6 Zustandsmaschine
..3.7 Arduino
....3.7.1 Uebung
....3.7.2 RTOS
....3.7.3 Scheduler
....3.7.4 Semaphor
......3.7.4.1 Laufkatze
......3.7.4.2 Java
......3.7.4.3 Semaphor
....3.7.5 Messages
..3.8 Android
....3.8.2 Threads
......3.8.2.1 Java
......3.8.2.2 Synchronisierung
..3.9 Petrinetze
....3.9.1 Installation
....3.9.2 Test
4 KI
..4.1 Unueberwachtes_Lernen
..4.2 Agentensysteme
....4.2.1 Architekturen
......4.2.1.1 Verhalten
......4.2.1.2 Entwurfsmuster
....4.2.2 SUMO
......4.2.2.1 GettingStarted
......4.2.2.2 Antrieb
......4.2.2.3 Sensoren
......4.2.2.4 Zeitbasis
......4.2.2.5 Fernsteuerung
......4.2.2.6 Umsetzung_Fernst
......4.2.2.7 Fernsteuerung3
......4.2.2.10 Umsetzung
......4.2.2.11 Sockelsoftware
......4.2.2.12 Plan
......4.2.2.13 Lernen
........4.2.2.13.1 Parameter
........4.2.2.13.2 Identifikation
........4.2.2.13.3 Java
..4.3 Genetische_Algorithmen
....4.3.1 Heuristiken
....4.3.2 Genalgorithmus
..4.4 Kalmanfilter
....4.4.1 Vorarbeit
....4.4.2 Minimalversion
....4.4.3 Beispiel
5 Bildverarbeitung
..5.1 Gestalttheorie
..5.2 Bildverarbeitung
6 Technische_Systeme
..6.1 Kulturgeschichte
..6.2 Technikphilosophie
..6.3 Anthropozaen
7 Literatur
kramann.info
© Guido Kramann

Login: Passwort:




TTS - Text to Speech - Ein Funktionstest für einen Sprachsynthesizer

(EN google-translate)

(PL google-translate)

Sprachsynth002.zip
Screenshot der App.

Bild 0-1: Screenshot der App.

Hinweise:

  • processing.vr läuft nur auf sehr neuen Android-Versionen und nur auf geeigneten Smartphones(?): bis 4.4 nicht, 5?, 6 geht.
  • Nicht vergessen im Menüpunkt "Android" VR anzuhaken.
  • TTS faßt die Sprachsynthese in einer leicht benutzbaren Klasse zusammen. Darin liegt der ganze Sinn dieses Beispiels.
  • PApplet scheint ab Version 3 nicht mehr direkt von Activity zu erben. Darum: getActivity().getApplicationContext() statt getApplicationContext(), vergl. TTS.pde

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

  • Testen Sie oben stehendes Projekt.
  • Ergänzen Sie eine Rückmeldung beim Start dazu, ob die Sprachsynthese funktioniert, oder nicht.
  • Fügen Sie etwas hinzu, was visuell eine Rückmeldung über die Fokussierung der Buchstaben gibt.
  • Ergänzen Sie das Projekt so, dass "gesammelte" Buchstaben als Wort ausgesprochen werden , wenn dies durch eine bestimmte Blickrichtung angefordert wird und dass bei einer anderen alle gesammelten Buchstaben gelöscht werden.