2012年9月18日火曜日

WindowsPhone7 アプリで効果音を出す方法

タイマーアプリで効果音を出す必要があって、結構悩んだのでメモしておきます

まず参考にしたページ

Windows Phone 7 で効果音を鳴らす c#研究室



PlaySoundAction ビヘイビア を使う
一番簡単な方法だと思う、ただし短時間に連続してイベントを起こすと、なんか?詰まってならなくなる。一旦音が鳴らなくなるとアプリを起動しなおさないと音は復帰しない
ダイアル操作時のクリック音をカリカリ鳴らすのには使えない


MediaElement を使う
アプリの画面上のどこかにMediaElementを配置する。基本、配置していないとだめ、コードからMediaElementを実行時に生成しても音は鳴らない
Sourceの指定は割と処理が重いみたい、短時間に連続して鳴らす事ができない。そのうち鳴らなくなる。Source指定しないで同じ音を Play するだけなら連続して鳴らす事が出来る。


MediaElementで何とかなると思いましたが、問題発覚。
PlaySoundActionやMediaElementでPlayするとバックグラウンドで再背中の音楽プレイヤーが止まる。

確かバックグランドMusicに影響を与えてはいけないような (下記リンク6.5のあたり)




じゃあ裏で音楽再生中なら効果音ださない様にすれば良いんじゃない?


ただし Xna を利用すると、そのうち例外が起きます


dispatcherのupdateを定期的にする必要があるらしい。

リンク先を参考にupdate処理を追加する



とりあえず例外で落ちる問題は解決、でも、
どうせXna使うならSoundEffect を使えば、裏で再生中の音楽を止めずに効果音の再生が出来る?



se = Microsoft.Xna.Framework.Audio.SoundEffect.FromStream(Microsoft.Xna.Framework.TitleContainer.OpenStream("click.wav"));

こんな感じでSoundEffectクラスを生成して、Play出来る。音楽再生にも影響なし。すばらしい。
ただし、wmaやmp3は再生できないので長めの効果音にはむいていない


Microsoft.Xna.Framework.Media.Song

を使えばwmaでも再生できるけど、MediaElement使った方がいいかな?



結局、タイマーの操作時の効果音はSoundEffectを使って、長いアラーム音はMediaElementを使うことにしました。





あとは、何故かTrophyだとSoundEffectが鳴ったり鳴らなかったりする問題が残ってます









2012年9月16日日曜日

Windows Phone アプリケーション トライアスロン 参加

現在開催中の Windows Phone アプリケーション トライアスロン に参加すべくアプリを3本開発しました


アプリケーショントライアスロンとはナンゾ?というと詳しくはリンクを見てもらって、簡単にいうと、3つのお題に沿ったアプリを指定期間内に公開してコンテストに応募しよう!って内容です


3つのお題と作ったアプリ

[第1種目]  写真加工アプリケーション


  • 写真を撮影、もしくは読み込む機能を有する
  • 取り込んだ写真に何らかの加工を施す機能を有する
  • 取り込んだ写真を加工し Picture Hub に保存する機能を有する
上記3つの条件を全て満たす必要があります

公開したアプリ


お店のタイムセールとか特売情報をスマホで写真を撮ってクーポン画像として簡単に作成してTwitterやFaceBookに情報発信するという内容です。

もともとは、近所のケーキ屋さんに使ってもらいたくてアイデアとして考えていた事をアプリにしてみました。
”今日はショートケーキを売り切りたいから20%オフにします。”みたいな情報がFacebookとかで見れたら会社帰りに買って帰ったりとかできるのにね。って発想です

本来この様な事はソーシャルネットワークを使えば、大手広告代理店主導で無くても出来る事じゃないかなと思います



[第2種目]  タイトルを更新するアプリケーション

  • アプリケーション自身のタイルの内容を変更する機能を有する
  • セカンダリ タイルを追加作成する機能を有する
  • スケジュール機能を使ってタイルの内容が更新される機能を有する
上記のどれか一つを満たす必要があります


公開したアプリ




スタート画面にならんだタイル4枚に4択クイズが書いてあって、タイルを選択して回答するクイズアプリです。

Wp7のタイルの使い方として面白いアイデアじゃないかな?と思って作りました
表に問題、裏に選択肢が書いてあるので、"タイル裏がえるのマダー"って待つ必要があり、UIの操作の流れをワザと乱す感じが面白いです

アプリ自体は単純なのですが、問題を作るのに結構時間が掛かって疲れました。クイズ研のオンラインクイズとリンクできたら面白いのですが、今回は頑張って子供の参考書を片手に歴史問題を作りました。

歴史は4択クイズとしては作りやすいだろうと思いましたが、間違った答えを考えるのにかなり苦労しました

プログラム的にはタイルを配置する時に、一度におけるタイルが一枚だけという事にアプリ製作の終盤に気が付いて困りましたが、なんとか誤魔化しながら4枚タイルを並べることに成功しました


その他、タイルを書き換えた後にアプリを終了する必要があるのですが、MSのエバンジェリストの高橋さんが紹介していた内部で例外をわざと起こして終了する方法を採用しました

ただ、公開後のクラッシュレポートがやたら多いのが、これが原因なのか?ちょっと怖いです


アプリ中に出てくるキャラクターは嫁さんに描いてもらいました、ツキネコです

[第3種目]  回る・回すアプリケーション

  • 画面上で何かが回る、反転する
  • デバイスを回したり、返したりして何か操作する
  • 画面上を指で回して何か操作する
上記のどれか一つを満たす必要があります

現在申請中でまだ公開されていません

DialTimer



ダイアルをクリクリっと回して時間設定するタイマーです。キッチンタイマー的な感じです。
アイデアは........まぁ平凡かな.........クリクリ回す操作感に拘ってみることにしました

キッチンタイマーアプリは既存のものが結構ありますが、ダイアル式は無いかなと思いました。直観的な操作と視覚的なイメージで時間経過を感じられると思います


ほぼ全ての動作をダイアル操作でできます。ダイアルを回すとカリカリとクリック音が鳴るのが気持ちいいのですが、プログラムは結構苦労しました。いまだに解決していない問題もあります
(IS12Tではちゃんと鳴るのに、Trophyでは稀にしか鳴りません、謎です。)


Silverlightでの音声再生は扱いが難しくて、そのままではマーケットに申請できるアプリがつくれない様に思います。



プログラム的には殆どビヘイビアで処理してます、BlendでUIデザインを考える時間が一番長かった。Blend最高。


タッチ操作の角度の求め方とか、効果音の再生の仕方とか纏めた記事を書こうかなと思ってます。(当たり前すぎていらない?)










Ponca

久しぶりのブログ更新です。

ComponentOne Studio for Windows Phone無償利用プログラム を利用して作ったWindowsPhone7アプリを先月末に公開しました.


Wp7アプリとしては5本目の公開になります


Ponca 
http://www.windowsphone.com/ja-jp/store/app/ponca/106de6d4-a5ea-4a8a-b140-3f5f8a23d899

です。
アプリ名は Ponca ポイントカードをWindowsPhone7で管理しちゃおうと言う趣旨のアプリです。アメリカの先住民族とは何の関係もありません。

これで財布がポイントカードでパツンパツンにならなくても済むぞ!と息巻いて作りましたが、実際にお店でアプリ画面を提示する勇気はまだありません。
うまくすれば、携帯画面からバーコードを読み取ってもらえるかもしれません。

ナイスアイデアで売れるかも?と思いましたが、既に同じようなアプリは海外製であるようです。しかも無料!



メイン画面



アプリに登録したカードを一覧で表示します。この一覧表示にComponentOne StudioのWrapPanelを使っています。WrapPanelはComponentOneに同梱されているライブラリと比べると地味ですが、Wp7に標準でついてても良いと思うぐらいの機能です。
ただで使わせてもらえて超ラッキーです。去年ポストイットみたいなアプリのStickyItを作った時に使えたらもっと楽にアプリが作れたと思います。

カード登録画面


登録できるポイントカード情報は

  1. カードの表面の写真
  2. カードの裏面の写真
  3. バーコード

です。バーコードさえキッチリと読み取れれば裏面の写真なんて不要でしょう。ただ世の中には読み取れないバーコードというものが結構あります

おまけで QRコードも読めます


カード情報画面



お店でカードありますか?って聞かれたら、この画面を見せます。


思うにポイントカードのバーコードって簡単に読み取れるのに、現金に準ずるような扱いもできたりして結構大事な個人情報じゃないかな?
だから扱いには慎重にすべきだと思います。

ちなみに、この写真の番号は出鱈目です






バーコードの読み取りと表示には Zxing barcode Scanning Library を使用しました