@egtraイグトランスの頭の中(のかけら)ActiveBasicを中心にプログラミングの話をぼちぼちと。ATNDの7日目の記事です。(TTA)という可逆圧縮の音声形式があります。PhoneでTTAの再生ができるかどうかちょっと試してみました。結論から言うと、ハマりどころもなく簡単にできました(まだいろいろと工夫の余地はありますが)。Downloadsを見ると、CとC++で書かれたライブラリがあるようです。ダウンロードしました。中身を確認すると、静的LIBを作るVC++プロジェクトとサンプルのコンソールアプリのVC++プロジェクトが入っていました。7.1ネイティブコードプログラミングのおさらいです。DTKターゲットのDLLプロジェクトで、普通のCOMコンポーネントを作る要領でコードを書く(参考)。7.1プロジェクトを作る。VS2010プロジェクト側、C#上で1.で作ったインタフェースやクラスに対応する宣言を書く。RegisterComDllの呼び出しを行う。ネイティブDLLで作ったCOMクラスをnewする。今回はlibtta++の静的LIBをビルドするプロジェクトを作成、1.のDLLプロジェクトでその静的LIBをリンクするようにしました。DTKターゲットの空のプロジェクト(スタティックライブラリ)を新規に作ってやりました。そのプロジェクトに、libtta.cppを追加。CPU_X86の行をコメントアウト。Releaseビルドしたら、libtta.libが得られました。DTKの構成を追加する方法はリンク時によく分からないエラーがでてどうしようもなかったので諦めました。次にDLLのプロジェクトです。libtta.libのほか、libtta++からconfig.hとlibtta.hを持ってきて使用しています。最後にソースファイル一式ダウンロードのリンクを置くので、詳しくはそちらを見てください。なんの工夫もなく、libtta++付属サンプルを改造し「TTAデコード→WAVをメモリに書き出す→そのメモリを呼び出し元に返す」というプログラムです。インタフェースの宣言だけここに載せます。};IDebugについては、OutputDebugStringの代替です(参考:WP7.1ネイティブとOutputDebugString)。これもReleaseビルドします。CycmNativeという名前のVC++プロジェクトだったので、CycmNative.dllが出来上がります。7.1プロジェクトの作成です。CycmNative.dllと適当なTTAファイルをプロジェクトに追加します(今回は、TTAファイルを「ビルドアクション:コンテンツ」で埋め込みました)。あと、WPInteropManifest.xmlは以下の内容です。して、空っぽでもイケるんですかね?<Interop/><Interop/>C#側のメイン部分のコードは短いのですべてここに載っけてしまいます(もちろん、この記事の最後にプロジェクト一式アーカイブのリンクを用意しています)。}デコードしたらWAVデータが得られるようになっているので、あとはSoundEffectで再生させているだけです。はい、一気にデコードさせるのではなく、デコードしつつ再生するようにしたいですね。MediaStreamSourceを使えばできるのだと思います。7.1ネイティブコードプログラミングでした。コメントをキャンセルメールアドレスが公開されることはありません。WPThemes.Info。