How to correct the FileNotFoundException of audio files
オーディオデータを再生するためのサンプルアプリです。
ソリューションにwavフォーマットのオーディオファイルを追加します。
今回は「audio.wav」というファイルを追加しました。
このオーディオファイルを再生するだけのソースを書きます。
AppMain.cs
このままビルドして実行するとエラーが起きます。
System.IO.FileNotFoundException has been thrown
追加したオーディをファイルを右クリックして[ビルドアクション]-[コンテンツ]に設定します。
これでオーディオが再生できるようになりました。
ソリューションに複数のオーディオファイルを追加した場合は、それぞれのファイルを[ビルドアクション]-[コンテンツ]に設定する必要があります。
(画像データは追加するとビルドアクションが自動でコンテンツに設定されます)
ここまではSDKドキュメントに書いてあることです。
しかし、この手順通りに操作してもどうしてもオーディオを再生できないケースがありました。
SoundPlayer は、アシッダイズ(テンポ情報を埋め込んだwavファイル)はサポート外のようです。
アシッダイズのオーディオファイルを再生した場合もSystem.NotSupportedExceptionが起きます。
DAWでオーディオファイルを管理している開発者は特にご注意ください。DAWで扱うオーディオファイルはテンポ情報を埋め込んだ方が便利ですからね。
市販のオーディオ素材にもアシッダイズされたものがあるのでご注意ください。
Windows Media Playerで再生できるのにPS Suite SDKでSystem.NotSupportedExceptionが起きる場合は、アシッダイズされたオーディオファイルかもしれません。
Androidでオーディオデータを再生させるときの注意点も公開しています。
[Android] SoundPoolのオーディオ再生ミスをなくす
以上、参考になれば幸いです。
2012年6月23日土曜日
2012年5月26日土曜日
AndroidとPlayStation SuiteとMetroスタイルのSDKを比較する
スマートフォン/タブレット用OSのAndroid、ゲーム開発環境のPlayStation Suite(以下PSS)、PCやスマートフォンでの互換性を持つマイクロソフトのMeroスタイルはそれぞれ用途が異なるので比較しても意味がありません。
ただ、どれも開発環境が(今のところ)無償で公開されていて、今後のシェアがどのように変わるか興味深いものがあります。
そんなわけでSDKについて比較してみました。
※PSSは最近公開されたばかりなので対応が先送りされてる機能が多いです。
※Metroスタイル及びその開発環境であるVisual Studio 11の正式版が公開前のため不明な点が多数あります。
将来変更されそうな点が多数ありますのでご了承ください。
Androidの機能の利用可否は機種に依存します。
PSSのグラフィックAPIはOpenGLと呼んでよいのか分かりませんでした。
マイクロソフトはMetroスタイルの開発者を育成するための無料セミナー「Developer Camp」で情報提供を続けるようです。
以上、参考になれば幸いです。
ただ、どれも開発環境が(今のところ)無償で公開されていて、今後のシェアがどのように変わるか興味深いものがあります。
そんなわけでSDKについて比較してみました。
※PSSは最近公開されたばかりなので対応が先送りされてる機能が多いです。
※Metroスタイル及びその開発環境であるVisual Studio 11の正式版が公開前のため不明な点が多数あります。
将来変更されそうな点が多数ありますのでご了承ください。
|
|
Android SDK |
PSS SDK |
Metroスタイル SDK |
|---|---|---|---|
|
開発環境のプラットフォーム |
Windows XP/Vista/7 Mac Linux |
Windows XP/Vista/7 OpenGL2.0必須 |
Windows8 Windows7への対応予定あり |
|
実行環境(Runtime) |
DalvikVM |
Mono |
WinRT |
|
開発言語 |
Java NDKにより部分的にC/C++可 |
C# 将来他言語への対応予定あり |
C#/VB VC++ HTML5 + JavaScript |
|
高速なグラフィックAPI |
OpenGL |
nVIDIAのCg言語を使用したOpenGLっぽい独自ライブラリー? |
DirectX |
|
データの永続保存 |
SQLiteの他、独自APIにより可 |
独自APIにより可 |
独自APIにより可 |
|
ゲームパッド |
未サポート |
利用可 タブレットやスマートフォンではバーチャルゲームパッドをサポート |
ジャイロメーターと加速度計を使った方法が公開されている |
|
振動機能 |
利用可 |
無し |
不明(端末に依存?) |
|
カメラ |
利用可 |
将来対応予定 |
利用可 |
|
地理位置情報の検出 |
GPSなど利用可 |
将来対応予定 |
GPSなど利用可 |
|
動画再生 |
特定のCodecに限り利用可 |
将来対応予定 |
特定のCodecに限り利用可 |
|
ネットワークアクセス |
利用可 |
将来対応予定 HTTPやSocketのAPIはある |
利用可 |
|
他のアプリとの連携方法 |
Intent、Broadcastなど |
Shell |
コントラクト |
|
3D(立体視)機能 |
無し シャープから自社製端末専用の独自ライブラリーが公開されている |
無し |
不明 |
|
アプリをホーム画面に常駐させる機能 |
あり |
無し |
あり |
|
アプリ公開の公式サービス |
Android Market |
将来対応予定 |
Windowsストア |
PSSのグラフィックAPIはOpenGLと呼んでよいのか分かりませんでした。
マイクロソフトはMetroスタイルの開発者を育成するための無料セミナー「Developer Camp」で情報提供を続けるようです。
以上、参考になれば幸いです。
2012年5月12日土曜日
[PlayStation Suite] ウィジットにクリックイベントを持たせるには
How to make Cliclable widgets
PlayStation Suite(以下、PSS)アプリケーションは、クリックイベントを取得できるButtonウィジットがあらかじめ用意されています。
Labelでもウィジットでもクリックイベントを取得したいことがあるので作ってみました。
幸いなことにPSS StudioにはButtonクラスのソースが付属しています。
C:\Program Files (x86)\SCE\PSS\source\UI\source\Button.cs
クリックイベントの付加にあたり、このソースを参考にしました。
イベントの名前はOnClick としました。
ClickableLabel.cs
AppNMain.cs(エントリーポイントを持つクラス)
このソースをビルドするには Sce.Pss.Highlevel.UI の参照が必要です。
ソリューションエクスプローラーの[参照]を右クリックして[参照アセンブリの編集]でSce.Pss.Highlevel.UIを追加するとビルドできます。
実行するとこんな画面になります。
画面のラベルをクリック(タップ)するたびに現在時刻を表示します。
ClickableLabelはLabelを継承してクリックイベントを受け取っています。
継承するクラスをImageBoxウィジットやPanelウィジットに変えてもイベントの取得ができることを確認しています。
Sony Tabletをはじめ、PlayStation Suite CertifiedのXperia(SO-01C、SO-02C、IS11S)はゲームパッドがありません。
ゲームパッドが無い端末はタッチスクリーンにバーチャルなゲームパッドが表示されますが、Androidアプリのようにタッチスクリーンで操作できた方が便利だと思います。
このブログを書いている時点(PSS SDK0.96~0.97)ではScrollPanelはゲームパッドでスクロールできません。フリック操作でしかスクロールできません。
ゲームパッドで操作するには入力の応じて全てのウィジットをSetPositionで移動させればコードが必要です。
Sce.Pss.Highlevel.UIを使ったアプリやゲームパッド無しの端末はタップで操作できる画面設計が使いやすいと思い、このブログを書きました。
以上、参考になれば幸いです。
PlayStation Suite(以下、PSS)アプリケーションは、クリックイベントを取得できるButtonウィジットがあらかじめ用意されています。
Labelでもウィジットでもクリックイベントを取得したいことがあるので作ってみました。
幸いなことにPSS StudioにはButtonクラスのソースが付属しています。
C:\Program Files (x86)\SCE\PSS\source\UI\source\Button.cs
クリックイベントの付加にあたり、このソースを参考にしました。
イベントの名前はOnClick としました。
ClickableLabel.cs
AppNMain.cs(エントリーポイントを持つクラス)
このソースをビルドするには Sce.Pss.Highlevel.UI の参照が必要です。
ソリューションエクスプローラーの[参照]を右クリックして[参照アセンブリの編集]でSce.Pss.Highlevel.UIを追加するとビルドできます。
実行するとこんな画面になります。
画面のラベルをクリック(タップ)するたびに現在時刻を表示します。
ClickableLabelはLabelを継承してクリックイベントを受け取っています。
継承するクラスをImageBoxウィジットやPanelウィジットに変えてもイベントの取得ができることを確認しています。
Sony Tabletをはじめ、PlayStation Suite CertifiedのXperia(SO-01C、SO-02C、IS11S)はゲームパッドがありません。
ゲームパッドが無い端末はタッチスクリーンにバーチャルなゲームパッドが表示されますが、Androidアプリのようにタッチスクリーンで操作できた方が便利だと思います。
このブログを書いている時点(PSS SDK0.96~0.97)ではScrollPanelはゲームパッドでスクロールできません。フリック操作でしかスクロールできません。
ゲームパッドで操作するには入力の応じて全てのウィジットをSetPositionで移動させればコードが必要です。
Sce.Pss.Highlevel.UIを使ったアプリやゲームパッド無しの端末はタップで操作できる画面設計が使いやすいと思い、このブログを書きました。
以上、参考になれば幸いです。
2012年4月28日土曜日
[PlayStation Mobile] データを保存する汎用的なクラスを作る [PlayStation Suite]
※PersistentMemoryクラスはver0.99で廃止されました。(2012年7月15日追記)
How to save multipurpose data permanentlyPlayStation Suite SDKでデータをファイルに保存する方法について考えてみました。
まず注意点ですが、PlayStation Suite SDKは過去のバージョンアップで次のような仕様変更がありました。
0.96→0.97
HashtableクラスやDictionaryクラスのシリアライズ・デシリアライズができなくなった。
キー・バリュー型のデータをファイルに読み書きすることができなくなりました。
0.97→0.98
Storageクラスが廃止された。
このような仕様変更のおかげでファイルI/O機能を何度も作り直す羽目になりました。
今後も仕様変更により、どんな影響が出るか予想できませんのでご了承ください。
今のところ、比較的簡単で安全と思われる方法を考えてみました。
セーブはstring[]をシリアライズしてPersistentMemoryに書き込む
ロードはPersistentMemoryをデシリアライズしてstring[]に戻す
この機能を MtkPersistenMemory というクラスで作ってみました。
実際のソースです。
MtkPersistenMemory.cs
MtkPersistenMemoryクラスの説明
Publicメソッド
|
void |
SetValue (int key, string myValue) keyに対応する項目の追加・更新をする keyは0から63まで |
|
string |
GettValue (int key, string defaultValue) keyに値を取得する、該当する項目がなければdefaultValueを返す keyは0から63まで |
|
enum |
Write () SetValueメソッドで追加・更新された内容をPersistentMemoryに永続保存する 戻り値に成功(MtkPersistenMemory.Results.Successed)、または失敗を返す(MtkPersistenMemory.Results.Faild) |
※PersistentMemoryクラスを使う都合により次の制限があります。
・保存できる容量は64kB以内
・保存されるタイミングはアプリケーション終了時。アプリケーションが異常終了した場合は保存されません。
MtkStorageを実際に利用するサンプルアプリのソースです。
※このソースはSce.Pss.Highlevel.UIを参照します。
ソリューションエクスプローラーの[参照]を右クリックして[参照アセンブリの編集]でSce.Pss.Highlevel.UIを追加するとビルドできます。
AppMain.cs
MtkPersistenMemoryの使い方の解説です。
(1) PersistenMemoryのインスタンス化
MtkPersistenMemoryはインスタンス化する必要があります。前回の保存内容を自動的にロードします。
例:
MtkPersistenMemory memory = new MtkPersistenMemory();
(2) PersistenMemoryから読み取る
GetValueで第1引数にキーを指定して読み取ります。指定したキーが存在しなければ第2引数の値が返されます。
たとえば
label.Text = memory.GetValue(MtkPersistenMemory.KEY00, "nothing");
の場合、KEY00に保存された文字列があればその内容がラベルに表示されます。
KEY00に文字列が保存されていなければ「nothing」が表示されます。
その他の例:
string value1 = memory.GetValue(MtkPersistenMemory.KEY01, "文字列1");
string value2 = memory.GetValue(MtkPersistenMemory.KEY02, "文字列2");
(3) PersistenMemoryに項目を追加・更新する
SetValueでキーと値の組み合わせを追加します。既にキーが追加されている場合は値を上書きします。
たとえば storage.SetValue(MtkPersistenMemory.KEY00, "....");
の場合、第1引数のMtkPersistenMemory.KEY00に保存された項目が存在すれば、値を第2引数の内容に上書きします。何も保存されていなければ追加します。
その他の例:
memory.SetValue(MtkPersistenMemory.KEY01, "文字列1");
memory.SetValue(MtkPersistenMemory.KEY02, "文字列2");
(4) PersistenMemoryに書き込みと結果のチェック
Writeで全てのキーと値の組み合わせを永続保存します。
戻り値に永続保存の結果を返します。保存する容量が64kBを超えた場合は失敗します。
例:
int result = memory.Write();
result == MtkPersistenMemory.Results.Successed なら成功
result == MtkPersistenMemory.Results.Faild なら失敗
KEY00やKEY02という変数名は、適切な変数名(DATEなど)にリファクタリングするとソースが読みやすくなります。
保存できる項目数が64件では多すぎる・少なすぎるという場合は MtkPersistenMemory.cs のvalues = new string[64]; と MAX_SIZE を改造してください。
以上、参考になれば幸いです。
2012年4月21日土曜日
[PlayStation Suite] 中括弧(波括弧) { を改行させない
How to stop moving braces to new line.
PS Suite SDKがオープンベータに移行したので、これからはPS Suiteネタもブログに書こうと思います。
PlayStation Suite Studio(PSS Studio)は使いやすいのですが「{(波括弧、中括弧)」が勝手に改行されてしまいます。
改行されてもアプリケーションに影響はありませんが、Mtkは改行しない方が好みです。
PSS Studioの設定を変えると「{」を改行しないようにできます。
[ツール] - [Options] を開いて
左側の
ソースコード
コードフォーマッティング
C#ソースコード
を選択します。
右側の[C#フォーマット]タブのEditボタンをクリックします。
Edit Profile画面のCategoryから角括弧を選択します。
左側の項目をすべて「行末」に設定します。
OKボタンをクリックして設定終了です。
ソースの修正も簡単です。
[編集] - [フォーマット] - [ドキュメントをフォーマット]を実行すると改行を削除してくれます。
これはMono Developer共通なので、Unityでも同じ設定ができます。
以上、参考になれば幸いです。
PS Suite SDKがオープンベータに移行したので、これからはPS Suiteネタもブログに書こうと思います。
PlayStation Suite Studio(PSS Studio)は使いやすいのですが「{(波括弧、中括弧)」が勝手に改行されてしまいます。
改行されてもアプリケーションに影響はありませんが、Mtkは改行しない方が好みです。
PSS Studioの設定を変えると「{」を改行しないようにできます。
[ツール] - [Options] を開いて
左側の
ソースコード
コードフォーマッティング
C#ソースコード
を選択します。
右側の[C#フォーマット]タブのEditボタンをクリックします。
Edit Profile画面のCategoryから角括弧を選択します。
左側の項目をすべて「行末」に設定します。
OKボタンをクリックして設定終了です。
ソースの修正も簡単です。
[編集] - [フォーマット] - [ドキュメントをフォーマット]を実行すると改行を削除してくれます。
これはMono Developer共通なので、Unityでも同じ設定ができます。
以上、参考になれば幸いです。
2012年1月4日水曜日
PlayStation Suite Studioのデモで遊んでみる
How to play demo games on PlayStation Suite Studio.
あけましておめでとうございます。
今年最初のネタは「PlayStation Suite Studio」のデモで遊ぶ方法です。
まずは登録手続きからデモを動作するまでの手順について説明します。
OSはWindows7、32bit/64bitのどちらでも動作します。ビデオボードはOpenGL2.0必須です。
1.
Sony Entertainment Networkでアカウントを作る。
https://account.sonyentertainmentnetwork.com
この際、オンラインIDを登録する必要があります。
2.
Developer Program for PlayStation(R) Suite (Closed Beta Test)に申し込む。
http://www.playstation.com/pss/closedbeta/index_j.html
3.
「PS Suite Closed beta test チームからのお知らせ」というメールが届いたら、内容に従って手続きする。
Mtkは2011年10月に申し込んで、2011年12月下旬に連絡を頂きました。
4.
Developers Portal for PlayStation(R) SuiteからSDKをダウンロードしてインストールする。
http://www.playstation.com/pss/developer/index.html
たくさんのコンポーネントをインストールするので10分くらいかかります。
コンポーネントが一つでも欠けているとPlayStation Suite Studioが起動しないようです。
MtkのPCでは当初、PlayStation Suite Studioのアイコンをダブルクリックしても何も起きませんでした。原因はDirectXのインストールに失敗していたためです。
インストールするとPlayStation Suite Studioが使用できるようになります。
見た目はVisual Studioにそっくりです。ベースは「Mono Develop」だそうです。
次のパスにたくさんのデモのソースがたくさんインストールされています。32bit OSの場合、パスの「 (x86)」はつきません。
C:\Program Files (x86)\SCE\PSS\sample
Windows Vista/7ではProgram Files以下のプロジェクトを開くとビルドに失敗します。
ビルドできるようにsampleフォルダーを丸ごと「ドキュメント」フォルダーなどにコピーします。
PlayStation Suite Studioの [ファイル]-[開く]で次のファイルを開いてみます。
sample\demo\BallMazeDemo\BallMazeDemo.sln
F5を押すとゲームが起動します。
エミュレーターのはずですが、サクサク動きます。
(このエミュレーターはPCシミュレータが正式名称です)
PlayStation Suite Studioも快適に動きます。
EclipseでAndroidアプリを開発すると何をするにも遅くてストレスに感じるのですが、PlayStation Suite Studioではあまりそのようなことはなさそうです。
豊富なサンプルと日本語資のおかげで自作アプリが簡単に作れそうです。
以上、参考になれば幸いです。
あけましておめでとうございます。
今年最初のネタは「PlayStation Suite Studio」のデモで遊ぶ方法です。
まずは登録手続きからデモを動作するまでの手順について説明します。
OSはWindows7、32bit/64bitのどちらでも動作します。ビデオボードはOpenGL2.0必須です。
1.
Sony Entertainment Networkでアカウントを作る。
https://account.sonyentertainmentnetwork.com
この際、オンラインIDを登録する必要があります。
2.
Developer Program for PlayStation(R) Suite (Closed Beta Test)に申し込む。
http://www.playstation.com/pss/closedbeta/index_j.html
3.
「PS Suite Closed beta test チームからのお知らせ」というメールが届いたら、内容に従って手続きする。
Mtkは2011年10月に申し込んで、2011年12月下旬に連絡を頂きました。
4.
Developers Portal for PlayStation(R) SuiteからSDKをダウンロードしてインストールする。
http://www.playstation.com/pss/developer/index.html
たくさんのコンポーネントをインストールするので10分くらいかかります。
コンポーネントが一つでも欠けているとPlayStation Suite Studioが起動しないようです。
MtkのPCでは当初、PlayStation Suite Studioのアイコンをダブルクリックしても何も起きませんでした。原因はDirectXのインストールに失敗していたためです。
インストールするとPlayStation Suite Studioが使用できるようになります。
見た目はVisual Studioにそっくりです。ベースは「Mono Develop」だそうです。
次のパスにたくさんのデモのソースがたくさんインストールされています。32bit OSの場合、パスの「 (x86)」はつきません。
C:\Program Files (x86)\SCE\PSS\sample
| オープンベータのPS Suite SDK(バージョン0.98)ではサンプルは次の場所に保存されます C:\Users\Public\Documents\Pss\sample (2012.04.19) |
Windows Vista/7ではProgram Files以下のプロジェクトを開くとビルドに失敗します。
ビルドできるようにsampleフォルダーを丸ごと「ドキュメント」フォルダーなどにコピーします。
PlayStation Suite Studioの [ファイル]-[開く]で次のファイルを開いてみます。
sample\demo\BallMazeDemo\BallMazeDemo.sln
F5を押すとゲームが起動します。
エミュレーターのはずですが、サクサク動きます。
(このエミュレーターはPCシミュレータが正式名称です)
PlayStation Suite Studioも快適に動きます。
EclipseでAndroidアプリを開発すると何をするにも遅くてストレスに感じるのですが、PlayStation Suite Studioではあまりそのようなことはなさそうです。
豊富なサンプルと日本語資のおかげで自作アプリが簡単に作れそうです。
以上、参考になれば幸いです。
登録:
投稿 (Atom)











