スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    第32回「Flash CS 5.5でネイティブ拡張ライブラリを作ってみる。【AIR for Android編】」の巻(前編)

    「ネイティブ開発とは?」

    AIR 3.0から、ネイティブライブラリを利用して、
    いままでのAIRでは不可能だった
    各プラットフォーム固有の処理を可能にします。

    対応プラットフォーム
    • Windows
    • Mac OS X
    • iOS
    • Android
    • Black Berry
    • Google TV
    Flash(ActionScript)で開発を行う場合、
    様々なライブラリを使用して開発を行います。

    FlashやAIRによるネイティブ依存がない場合、
    通常は、各種ライブラリ(.swcファイル)を使用して、
    開発を行います。

    ネイティブ開発を行う場合、
    ネイティブ拡張ライブラリ(.aneファイル)を使用して、
    開発を行います。

    今回は、Flash Pro CS 5.5を使用して、
    ネイティブ拡張ライブラリの作成までを
    説明します。

     
    今回作成する「ネイティブ拡張ライブラリ」

    今回作成する「ネイティブ拡張ライブラリ」は、
    「テキスト読み上げ機能を行う」ライブラリです。

    入力した文字列を解析してAndroid端末が音声で話します。
    この機能は「TextToSpeech」とも呼ばれています。
    Androidの機能で、AIR for Androidには、この機能は
    搭載していません。この機能をAIR for Androidで
    利用する場合、ネイティブ拡張ライブラリとして
    作成して、AIR側で呼び出す仕組みにする必要があります。

    今回は、ネイティブライブラリ(JAR)ファイルは既に
    用意しています。
    このネイティブライブラリと対話する為のコードを
    ActionScriptで実装を行います。
    実装後、ネイティブ拡張ライブラリ(ANE)ファイル
    作成までの手順を説明します。

    動作イメージ(動画)

    ※ 日本語のエンジンは、KDDI研究所様が開発した「N2」
    インストールして動作させています。

    事前に準備するツール
    Flash CS 5.5
    AIR SDK 3.1(3.0でも問題ありません。)
    Android SDK(インストールしている状態にしておく。)
    ANEtty(ネイティブ拡張ライブラリを作成するツール。AIRアプリ)
    AIRランタイム3.0以上がインストールしているAndroid端末

    セットアップ
    Flash CS 5.5にAIR 3を使用できるようにセットアップする
    必要があります。

    下記ページの説明に従い、セットアップを行って下さい。
    Flash Professional CS5.5 で Flash Player 11 と AIR 3 を使う方法

    ネイティブライブラリ(JAR)を含む
    作業フォルダを以下からダウンロードします。
    作業フォルダ(ZIPファイル)

    解凍すると以下のフォルダが現れます。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 001
    text2speech4ane_wsが、作業フォルダになります。
    このフォルダ直下にFLAファイルやActionScriptファイルを
    作成していきます。

    AneLab-TTS.jarが、ネイティブライブラリです。
    このネイティブライブラリと対話するActionScriptファイルの実装、
    SWCの作成までをFlash CS 5.5で行います。
    ネイティブ拡張ライブラリ(ANE)ファイルは、ANEttyという
    ツールを使用して作成していきます。

    ネイティブ拡張ライブラリの開発準備

    1. Flash CS 5.5を起動
    「新規作成」から「AIR」をクリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 002

    2. スクリプトの設定
    プロパティのスクリプトでActionScript3.0を選択している
    右横にあるアイコンをクリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 003

    3.ドキュメントクラスの設定
    ドキュメントクラスの名称を設定後、
    「クラス定義の編集」ボタンをクリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 004

    ドキュメントクラスの編集はFlash CS 5.5上で行います。
    「Flash Professional」のラジオボタンを選択後、OKボタンをクリックします。
    ※ 確認アラート全てOKボタンをクリックしていきます。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 005

    ActionScriptの編集画面となります。
    このタイミングでFLAファイルとドキュメントクラスの保存を行います。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 006

    FLAファイル名は「TTSMain.fla」で、
    解凍したtext2speech4ane_wsフォルダ直下に保存します。

    text2speech4ane_wsフォルダ以下に
    so/ane/mainフォルダを作成します。

    このmainフォルダ直下にドキュメントクラスを保存します。
    ドキュメントクラスのファイル名は「TTSMain.as」で保存します。

    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 007

    ここでは、ネイティブの機能を使用するに辺り、
    必要な情報を説明します。

    ネイティブライブラリ(AneLab-TTS.jar)の仕様について
    ネイティブライブラリの仕様を表にまとめました。
    関数名戻値概要
    createなしネイティブライブラリのTextToSpeechを
    生成します。
    ・使用時には必ず実行する必要があります。
    ・実行前にはStatusEventの登録を行って下さい。
    ・生成処理後、StatusEventを発行します。

    ■ 成功時
    code = "CREATE_STATUS"
    level = "SUCCESS"
    このイベント発行後、
    speech関数の実行が可能になります。

    □ 失敗時
    code = "CREATE_STATUS"
    level = "ERROR"
    speakなしテキスト文字列から音声処理を行います。
    引数1:テキスト文字列 (String)
    引数2:ピッチ(Number)
    引数3:スピーチレート(Number)
    引数2~3は、0.1~2.0の値。
    ・StatusEventを発行します。

    ■ スピーチ終了時
    code = "PLAY_STATUS"
    level = "COMPLETED"
    stopなし音声処理をストップします。
    shutdownなしネイティブライブラリの
    TextToSpeechリソースを解放します。


    ActionScriptからネイティブライブラリにアクセスする方法
    ネイティブライブラリの関数を呼び出す場合、
    ExtensionContext」クラスを使用しないといけません。

    flash.external.ExtensionContext

    ExtensionContextのインスタンスを生成する場合、
    ExtensionContextのstaticなメソッド、
    createExtensionContextを使用します。
    var _context:ExtensionContext = ExtensionContext.createExtensionContext(拡張ID,生成時に渡す文字列);
    第1引数は、拡張IDを渡します。(型は文字列)※1
    第2引数は、ネイティブ側の生成時に渡す任意の文字列を渡します。
    ※1:拡張IDは、ネイティブ拡張ライブラリの一意のIDです。
    上記の引数、ネイティブ拡張の設定、
    アプリケーションのネイティブ拡張を使用する場合など。

    このIDを設定する事で、複数のネイティブ拡張が
    混在しても識別する仕組みになっています。


    今回、テキスト読み込みを行う準備として、
    ネイティブ側でTextToSpeechを生成する必要があります。

    ネイティブ側で生成処理が完了すると
    StatusEventが発行されます。
    この為、事前にStatusEventは、
    登録しておきます。

    flash.event.StatusEvent


    _context.addEventListener(StatusEvent.STATUS, StatusEvent後の処理を行うイベントハンドラ);


    ネイティブライブラリの関数にアクセスする場合、
    ExtensionContextが持つcallメソッドを使用します。

    ・ TextToSpeechを生成するcreate関数を呼び出す場合…

    _context.call("create");


    ・テキスト文字列から音声処理を行うspeak関数を呼び出す場合…

    _context.call("speak", 2.0, 0.7);

    第1引数には、関数名を「文字列」として渡します。
    第2引数以降は、関数側の仕様に従い、引数を渡します。

    ここまでが、ネイティブ機能を使用する時に
    必要な情報となります。

    ここから、Flash Pro 5.5を使用して、
    ネイティブ拡張ライブラリの作成方法に移ります。

    ネイティブ機能を呼び出すActionScriptの実装

    1. パッケージの作成
    ネイティブ機能を呼び出すActionScriptクラス用の
    パッケージを作成します。
    text2speech4ane_wsフォルダ以下に
    so/ane/extensionフォルダと
    so/ane/eventフォルダを作成します。

    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 008

    2. イベントクラスの作成
    ネイティブ側でTextToSpeech生成時と
    テキストの音声変換時には、StatusEventが発行されます。

    今回のネイティブ拡張側ではStatusEventでなく、
    「TTSEvent」というオリジナルのイベントクラスを、
    発行するようにします。

    ファイル→新規を選択。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 009

    一般タブを選択している状態にします。
    種類は、ActionScript3.0とします。
    クラス名は、so.ane.event.TTSEventとします。
    OKボタンをクリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 010

    作成されたTTSEventクラスを早速、
    保存します。
    保存先は、先程作成したso/ane/eventフォルダとします。
    ファイル名は「TTSEvent.as」として保存します。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 011

    保存が完了したら、TTSEventを以下のように
    編集して、再度保存します。

    package so.ane.event
    {
    import flash.events.Event;

    public class TTSEvent extends Event
    {

    public static const CREATE_STATUS:String = "CREATE_STATUS";
    public static const PLAY_STATUS:String = "PLAY_STATUS";

    public static const CREATE_ERROR:String = "ERROR";
    public static const CREATE_SUCCESS:String = "SUCCESS";
    public static const PLAY_COMPLETED:String = "COMPLETED";

    public function TTSEvent(event:String)
    {
    super(event);
    }
    }
    }


    3. ネイティブ拡張メインクラスの作成
    ネイティブ側のTextToSpeechとやりとりを
    行うクラスを作成します。

    ファイル→新規を選択。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 009

    一般タブを選択している状態にします。
    種類は、ActionScript3.0とします。
    クラス名は、so.ane.extension.TTSExtensionとします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 012

    作成されたTTSExtensionクラスを早速、
    保存します。
    保存先は、先程作成したso/ane/extensionフォルダとします。
    ファイル名は「TTSExtension.as」として保存します。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 013

    保存が完了したら、TTSExtensionを以下のように
    編集して、再度保存します。

    package so.ane.extension
    {
    import flash.events.EventDispatcher;
    import flash.events.StatusEvent;
    import flash.external.ExtensionContext;

    import so.ane.event.TTSEvent;

    public class TTSExtension extends EventDispatcher
    {
    private var _context:ExtensionContext;

    public function TTSExtension()
    {
    // 拡張IDは任意で決めます。
    //(ここではso.ane.tts.TTSとしています。)
    _context = ExtensionContext.createExtensionContext(
    "so.ane.tts.TTS","");
    _context.addEventListener(StatusEvent.STATUS, onStatusEventHandler);
    }

    public function create():void {
    _context.call("create");
    }

    public function shutdown():void {
    _context.call("shutdown");
    }

    public function stop():void {
    _context.call("stop");
    }

    public function speak(text:String, pitch:Number = 1.0, speechRate:Number = 1.0):void {
    _context.call("speak", text, pitch, speechRate);
    }

    private function onStatusEventHandler(event:StatusEvent):void {
    var code:String = event.code;
    var level:String = event.level;

    switch (code) {
    case TTSEvent.CREATE_STATUS:
    dispatchEvent(new TTSEvent(level));
    break;
    case TTSEvent.PLAY_STATUS:
    dispatchEvent(new TTSEvent(level));
    break;
    }
    }
    }
    }


    4. so.ane.main.TTSMainの編集
    はじめに作成したTTSMainクラスには、
    TTSExtensionとTTSEventを定義だけ
    行うように編集後、保存します。

    package so.ane.main {

    import flash.display.MovieClip;
    import so.ane.event.TTSEvent;
    import so.ane.extension.TTSExtension;


    public class TTSMain extends MovieClip {


    public function TTSMain() {
    TTSEvent;
    TTSExtension;
    }
    }
    }


    SWCファイルをパブリッシュ
    今まで作成したFLAやActionScriptを
    SWCファイルとしてパブリッシュします。

    1. パブリッシュ設定画面を開きます。
    ファイル→パブリッシュ設定を選択します。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 014

    2. SWCファイルの作成準備
    パブリッシュにあるSWCのチェックボックスを入にします。
    出力ファイル:ファイル名入力欄の右横にある
    フォルダアイコンをクリック。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 015

    3. SWCファイルのパブリッシュ先を指定
    作業(text2speech4ane_ws)フォルダ直下に
    SWCファイルをパブリッシュするようにします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 016

    保存ボタンをクリックした時点でパブリッシュされます。
    後に現れるAIR設定とパブリッシュ設定では、
    キャンセルボタンをクリック。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 018

    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 019

    作業(text2speech4ane_ws)フォルダ直下に
    SWCファイルが出力確認ができた時点で、
    Flash Proによる作業は全て完了した事になります。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 020

    ネイティブ機能が実装されたSWCファイルから
    次はネイティブ拡張用のライブラリ(ANE)の
    生成作業に入ります。

    ANEttyを使用してANE作成

    各プラットフォーム特有の機能を実装した
    ネイティブ拡張ライブラリはSWCファイルで
    なくANEというファイルになります。
    SWCファイルとは別で、
    ネイティブ拡張に必要な設定情報(extension.xml)や
    ネイティブライブラリ(.jar, .so, .a..etc)、
    ネイティブ用のlibrary.swfなどが含まれています。

    ネイティブ拡張ライブラリを作成する場合、
    AIR Developer Toolをコマンドラインで実行して、
    作成を行います。
    この機能をツールで提供されているのが「ANEtty」という
    AIRアプリケーションとなります。
    今回、使用するバージョンは0.0.3です。※1, ※2

    ※1. 0.0.3では外部リソースの取り込みに対応していません。
    ※2. ネイティブ拡張ライブラリ作成時に
    ネイティブ機能を含まないswcファイルと
    ネイティブ拡張を含むlibrary.swfを別々に設定して
    作成する事はできません。


    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 021 ANEtty

    複数のファイル設定から配備を、
    このアプリケーションで行います。
    最後にネイティブ拡張(ANE)ファイルを
    パブリッシュします。

    1. ANEttyを起動
    初期起動時は、Compileタブが
    選択している状態です。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 022 ANEtty

    まずは、ANEttyを使用する為の
    設定を行う為、ConfigSettingタブを
    選択します。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 023 ANEtty

    2. AIR Developer Toolの設定
    ADT Pathのボタンをクリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 024 ANEtty

    Flash CS 5.5 に AIR 3 SDKの設定を行った場合、
    AIR2.6フォルダに配備していれば、
    Adobe Flash CS 5.5/AIR2.6/bin/adtを選択します。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 025 ANEtty

    2. 自己証明書の作成と設定
    ネイティブ拡張ライブラリにも証明書を、
    発行しないといけません。
    今回は、自己証明書を作成します。
    「Create New Certification File」ボタンを
    クリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 026 ANEtty

    「Create Self-Singned Digital Certificate」
    ポップアップが起動します。
    「Publisher name」は、任意の文字列を入力。
    「Type」はデフォルト値。
    「Password」は、パスワードを入力。
    上記の項目が入力できた時点で、自己証明書の
    保存先を指定します。

    Save as ボタンをクリックしてください。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 027 ANEtty

    作業(text2speech4ane_ws)フォルダ直下に保存します。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 028 ANEtty

    OKボタンをクリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 029 ANEtty

    作業(text2speech4ane_ws)フォルダ直下に保存されました。
    Closeボタンをクリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 030 ANEtty

    作成した自己証明書ファイルを指定します。
    「CertificationFile Path」のボタンをクリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 031 ANEtty

    作成した自己証明書ファイルを選択します。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 032 ANEtty

    自己証明書作成時に設定した
    パスワードを「Certification Password」に
    入力します。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 033 ANEtty

    AIR Developer Toolと自己証明書の設定は
    完了しました。
    ネイティブ拡張ライブラリのパブリッシュ設定を
    行う為、Compileタブをクリックします。

    3. 拡張IDとバージョン番号の設定
    拡張IDは「ExtensionID」の入力欄に入力します。
    TTSExtensionクラス実装時、
    ExtensionContext.createExtensionContextの
    第1引数の文字列を、そのまま入力します。
    「VersionNumber」は、1.0とします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 034 ANEtty

    4. SWCファイルの設定
    ネイティブ拡張ファイルに使用する
    SWCファイルを指定します。
    「SWC Path」のボタンをクリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 035 ANEtty

    Flash Pro 5.5でパブリッシュした
    SWCファイルを選択します。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 036 ANEtty

    5. ネイティブ拡張ライブラリの設定
    ネイティブ拡張ライブラリファイルの
    パブリッシュを行うパスを設定します。
    「Export Path」のボタンをクリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 037 ANEtty

    作業(text2speech4ane_ws)フォルダ直下に
    パブリッシュするように設定します。
    (保存ボタンをクリックしてもパブリッシュは、開始しません。)
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 038 ANEtty

    「Export Path」にファイルパスが設定できました。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 039 ANEtty

    6. Android-ARMの設定
    Androidのネイティブライブラリの
    ファイルパス設定と初期化、終了時に
    実行するクラス名を設定します。

    右上にあるAndroid-ARMのチェックボックスを
    入にするとAndroid-ARMの設定情報が
    表示されます。

    まずは、ネイティブライブラリのファイルパスを
    設定します。「NativeLibraryPath」のボタンを
    クリックします。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 040 ANEtty

    作業(text2speech4ane_ws)フォルダの
    platform/android/AneLab-TTS.jarが既に用意されています。
    このファイルを選択してください。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 041 ANEtty

    ネイティブライブラリのファイルパスの
    設定後、次は「Initializer」と「Finalizer」の
    設定を行います。
    この入力値は、ネイティブライブラリの
    Extensionクラスを定義する必要があります。
    このクラス名は「so.ane.tts.extension.TTSFREExtension」です。
    そのまま「Initializer」と「Finalizer」に入力してください。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 042 ANEtty

    これで全ての設定が完了しました。
    「Start Compile」ボタンをクリックすると
    ネイティブ拡張ファイルのパブリッシュ処理が開始されます。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 043 ANEtty

    「....Success!」のメッセージが表示した時点で、
    正常にパブリッシュ完了となります。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 044 ANEtty

    作業(text2speech4ane_ws)フォルダ直下に
    ネイティブ拡張ライブラリのファイル
    「TTSMain.ane」が生成できていることを確認してください。
    ネイティブ拡張 for Adobe AIR for Android テキスト読み上げ 045 ANEtty

    以上が、Flash Pro 5.5による「ネイティブ拡張ライブラリ」の
    開発方法となります。

    次回は、Flash Pro 5.5とネイティブ拡張ライブラリ
    (TextToSpeech)を使用したAndroid
    アプリケーション開発方法を説明します。(予定)

    このライブラリでなく、別のライブラリを使用した
    Androidアプリ開発の記事もあります。
    参考にしてもらえればと思います。

    2012年3月17日(土)10時30分 ~ 18時30分まで
    Native Extension Lab in Osaka 2 を
    ホテルリブマックス大手前(会議室)で開催します。
    もし、ご興味がありましたらご参加ください。(参加費無料)

    ネイティブ拡張 for Adobe AIR Native Extension Lab Osaka 2


    スポンサーサイト

    テーマ : みんなに紹介したいこと
    ジャンル : ブログ

    コメント

    Secret

    プロフィール

    tokufxug

    Author:tokufxug
    FxUGの中の人。

    ガジェット

    最新記事
    最新コメント
    月別アーカイブ
    カテゴリ
    検索フォーム
    RSSリンクの表示
    リンク
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。