P5 und P5.sound - Sprachsynthese mit P5.speech











Zunächst werden im <head> der Seite die beiden Scripte für P5 und P5.speech eingebunden:

<script src="header/p5.js"></script>
<script src="header/p5.speech.js"></script>

Dann wird im <body> der Seite das Script innerhalb von <script>...</script> fortgesetzt: Zunächst werden Variablen definiert:

var myVoice = new p5.Speech(); // P5.Speech object für Text2Speech erstellen
var label, input, speakbutton, vslider, rslider, pslider; // Elemente für das
// User-Interface erstellen

Dann werden in der Funktion setup() die Grundkomponenten festgelegt:

function setup(){

// Eingabefeld für den zu sprechenden Text erstellen

input = createInput(""); // Eingabefeld erstellen und der Variablen input zuweisen
input.style("width", 400); // Breite des Eingabefelds festlegen
input.position(20, 65); // X/Y-Position des Eingabefelds festlegen

// Button gestalten um die Textwiedergabe auszulösen

speakbutton = createButton('Sprich mit mir'); // Button mit Aufschrift erstellen
// und der Variablen speakbutton zuweisen.

speakbutton.style("width", 400); // Breite des Buttons festlegen
speakbutton.position(20, 100); // X/Y-Position des Buttons festlegen
speakbutton.mousePressed(doSpeak); // Funktion festlegen (doSpeak), die aufgerufen
// wird, sobald der Button gedrückt wird

// Schieberegler (Slider) erstellen

vslider = createSlider(0., 100., 100.); // Slider für Volume mit einer Range
// zwischen 0 und 100 und der aktuellen Einstellung 100 erstellen und der Variablen vslider
// zuweisen.

vslider.position(680, 62); // X/Y-Position des Sliders festlegen
vslider.style("width", 300); // Breite des Sliders festlegen
vslider.mouseReleased(setVolume); // Funktion festlegen (setVolume), die aufgerufen
// wird, sobald der Slider bewegt wird.

rslider = createSlider(10., 200., 100.); // Slider für Sprechgeschwindigkeit mit
// einer Range zwischen 10 und 200 und der aktuellen Einstellung 100 erstellen und der Variablen
// rslider zuweisen.

rslider.position(680, 83); // X/Y-Position des Sliders festlegen
rslider.style("width", 300); // Breite des Sliders festlegen
rslider.mouseReleased(setRate); // Funktion festlegen (setRate), die aufgerufen wird,
// sobald der Slider bewegt wird.

pslider = createSlider(1., 200., 100.); // Slider für Sprechtonhöhe mit einer Range
// zwischen 10 und 200 und der aktuellen Einstellung 100 erstellen und der Variablen rslider
// zuweisen.

pslider.position(680, 105); // X/Y-Position des Sliders festlegen
pslider.style("width", 300); // Breite des Sliders festlegen
pslider.mouseReleased(setPitch); // Funktion festlegen (setPitch), die aufgerufen
// wird, sobald der Slider bewegt wird.

// Beschriftungen (label) erstellen

label = createDiv("volume"); // Label bzw. DIV-Tag für den Volumen-Slider erstellen
label.position(620, 62); // Position für Beschriftung festlegen
label = createDiv("rate"); // Label bzw. DIV-Tag für den Volumen-Slider erstellen
label.position(620, 83); // Position für Beschriftung festlegen
label = createDiv("pitch"); // Label bzw. DIV-Tag für den Volumen-Slider erstellen
label.position(620, 105); // Position für Beschriftung festlegen

// Text to Speech mit dem beim Eingabefeld eingegebenen Text initialisieren

myVoice.speak(input.value()); // Eingegebenen Text (input.value()) an das Text2Speech-
// Objekt myVoice übergeben, so dass er gesprochen werden kann

}

Schließlich müssen noch die Funktionen festgelegt werden, die von dem Button und den Schiebereglern aufgerufen werden:

function setVolume(){
myVoice.setVolume(vslider.value()/100.); // Pegel der Text2Speech-Stimme einstellen
}

function setRate(){
myVoice.setRate(rslider.value()/100.); // Sprechgeschwindigkeit der Text2Speech-
// Stimme einstellen

}

function setPitch(){
myVoice.setPitch(pslider.value()/100.); // Sprechtonhöhe der Text2Speech-Stimme
// einstellen

}

function doSpeak(){
myVoice.speak(input.value()); // Text2Speech-Objekt myVoice mit allen Einstellungen
// starten

}

 

 

Insgesamt sieht das Script dann folgendermaßen aus:

<script src="header/p5.js"></script>
<script src="header/p5.speech.js"></script>

<script>
var myVoice = new p5.Speech();
var label, input, speakbutton, vslider, rslider, pslider;

function setup()
{
input = createInput("");
input.style("width", 400);
input.position(20, 65);

speakbutton = createButton('Sprich mit mir');
speakbutton.style("width", 400);
speakbutton.position(20, 100);
speakbutton.mousePressed(doSpeak);

vslider = createSlider(0., 100., 100.);
vslider.position(680, 62);
vslider.style("width", 300);
vslider.mouseReleased(setVolume);
rslider = createSlider(10., 200., 100.);
rslider.position(680, 83);
rslider.style("width", 300);
rslider.mouseReleased(setRate);
pslider = createSlider(1., 200., 100.);
pslider.position(680, 105);
pslider.style("width", 300);
pslider.mouseReleased(setPitch);

label = createDiv("volume");
label.position(620, 62);
label = createDiv("rate");
label.position(620, 83);
label = createDiv("pitch");
label.position(620, 105);

myVoice.speak(input.value());
}

</script>