標準で日本語に対応していた。forked from: "Google Text To Speech" speak Japanese.

by paq forked from "Google Text To Speech" speak Japanese. (diff: 484)
標準で日本語に対応していた。forked from: "Google Text To Speech" speak Japanese.

Google側が日本語に対応したので使ってみたが、2バイト文字が使えない..。
♥2 | Line 91 | Modified 2010-12-20 10:30:37 | MIT License
play

ActionScript3 source code

/**
 * Copyright paq ( http://wonderfl.net/user/paq )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/jfH3
 */

// forked from ikekou's "Google Text To Speech" speak Japanese.
//Google側が日本語に対応したので使ってみたが、2バイト文字が使えない..。
//

package 
{
    import com.bit101.components.PushButton;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.text.TextField;
    import flash.text.TextFieldType;
    import flash.ui.Keyboard;
    
    [SWF(backgroundColor=0xeeeeee, width=465, height=465, frameRate=30)]
    
    public class Main extends Sprite 
    {
        private var tf:TextField;
        private var isChanged:Boolean;
        
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            
            tf = new TextField();
            tf.border = true;
            tf.borderColor = 0x999999;
            tf.background = true;
            tf.backgroundColor = 0xffffff;
            tf.multiline = false;
            tf.width = 300;
            tf.height = 19;
            tf.type = TextFieldType.INPUT;
            tf.x = 33;
            tf.y = (stage.stageHeight - tf.height) / 2;
            tf.multiline = false;
            tf.restrict = "^ア-ン";
            tf.text = "なぜか、「う」が短剣符";
            addChild(tf);
            
            isChanged = false;
            tf.addEventListener(KeyboardEvent.KEY_DOWN, _onKeyDown);
            tf.addEventListener(Event.CHANGE, _onChange);
            
            new PushButton(this, 333, tf.y, "speak", _onSpeak);
        }
        
        private function _onChange(e:Event):void 
        {
            isChanged = true;
        }
        
        private function _onKeyDown(e:KeyboardEvent):void 
        {
            if (e.keyCode == Keyboard.ENTER && isChanged) 
            {
                isChanged = false;
                _onSpeak(null);
            }
        }
        
        private function _onSpeak(e:Event):void
        {
            if (!tf.text) return;
            
            var s:Speaker = new Speaker();
            s.speak(tf.text);
            
            tf.text = "";
            isChanged = false;
            stage.focus = tf;
        }
    }
    
}

    internal class Config 
    {
        
        public static const URL_PROXY:String = "http://ikekou.jp/api/proxy.php";
        
    }
    
    import flash.events.Event;
    import flash.media.Sound;
    import flash.net.URLRequest;
    import flash.net.URLVariables;

    internal class Speaker 
    {
        
        public function speak(target:String):void
        {
            if (!target) return;
            
            var req:URLRequest = new URLRequest(Config.URL_PROXY);
            var vars:URLVariables = new URLVariables();
            req.data = vars;
            vars.url = "http://translate.google.com/translate_tts?tl=ja&q=" + encodeURI(target);
            
            var snd:Sound = new Sound();
            snd.addEventListener(Event.COMPLETE, _onComplete);
            snd.load(req);
        }
        
        private function _onComplete(e:Event):void 
        {
            Sound(e.target).play();
        }
        
    }