Next Generation User Interfaces How-To: Spracheingabe

spracherkennung Die Eingabe von Befehlen funktioniert nicht nur per Kommandozeile sondern auch per Sprachsteuerung. In Windows finden sich die Einstellungen dafür in der Systemsteuerung unter „Erleichterte Bedienung -> Spracherkennung“.

Einige Interaktionsformen bekommt man geschenkt, wenn man sie – wie zum Beispiel die Sprachsteuerung – in seinem Betriebssystem einfach nur aktiviert und ein wenig trainiert. Wenn sich die zu bedienende Anwendung dann noch passend ins System integriert, dann funktioniert die Sprachsteuerung bereits. Schaltflächen in HTML-Dokumenten und auch in Silverlight- sowie Flex-Anwendungen werden dann einfach durch das Aufsagen der entsprechenden Beschriftung aktiviert. Wer sich nicht auf die eingebaute Spracherkennung verlassen möchte oder wo diese gar nicht erst verfügbar ist, der kann auf Bibliotheken zu Spracherkennung zurückgreifen. Didier Brun hat unter http://www.bytearray.org/?p=1151 eine solche Bibliothek bereits für den Flash Player 10.1 angekündigt. Oder man sendet die Sprachaufnahme an einen Server, der das dann verarbeitet…

soundactivity Einfacher geht es, wenn man sich nur mit der Lautstärke zufrieden gibt. Denn mit dem Flash Player können die angeschlossenen Audioquellen – auch mehrere gleichzeitig – genutzt werden. Ohne weiteren Aufwand erhält man dort auch die Lautstärke der jeweiligen Klangquelle.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var mic:Microphone;
var sound:SoundTransform;
 
// Verhindere Rückkopplung und stelle die Lautstärke auf 0
sound = new SoundTransform(0);
 
// Ermittle das Standardmikrofon
mic = Microphone.getMicrophone();
// Erzwinge die Verarbeitung durch den Flash Player
mic.setLoopBack(true);
// Verhindere Rückkopplung 
mic.soundTransform = sound;
 
// Überprüfe bei jedem "Redraw" des Bildschirms...
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
 
// ...die Aktivität des Sounds (also die Lautstärke)...
function enterFrameHandler(event:Event):void {
	trace(mic.activityLevel)	
	// ...und zeichne eine Linie abhängig vom Wert!
	graphics.lineStyle(0);
	graphics.lineTo(500-x,500-mic.activityLevel*4);
	x--;
}

Die Lautstärke kann nun für zahlreiche Formen der Eingabe genutzt werden. Vom Applausometer über das Aufblasen von Ballons bis hin zum Vorwärtspusten eines Segelbootes (ja, natürlich zählt hier nur die Lautstärke, aber die Assoziationen in den meisten Gehirnen lassen einen doch eher pusten als das Boot anschreien).

Wem die reine Lautstärke nicht reicht, der kann sowohl mit AIR 2, mit Flash ab Flash Player 10.1 (Microphone SampleDataEvent.SAMPLE_DATA ) als auch mit Silverlight ab Version 4 (AudioSink.OnSamples) den kompletten Sound analysieren. Für den Flash Player 10.1 sieht das dann so aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
            creationComplete="application_creationCompleteHandler(event)"
            >
 
   <fx:Script>
      <![CDATA[
         import mx.events.FlexEvent;
 
         protected function application_creationCompleteHandler(event:FlexEvent):void
         {
            var m:Microphone = Microphone.getMicrophone();
            m.addEventListener(SampleDataEvent.SAMPLE_DATA, microphone_sampleDate);
            m.setLoopBack(true);            
         }
 
         protected function microphone_sampleDate(event:SampleDataEvent):void {
            // Verarbeite die Bytes des Samples
            trace(event.data.bytesAvailable);
         }         
      ]]>
   </fx:Script>
 
</s:Application>