2012-06-01
Windows 8 Release PreviewにWindows Phone SDK 7.1(7.1.1)をインストールする方法
この記事は、2012/6/1現在にリリースされている最新の「Windows 8 Release Preview(Build 8400)」、「Windows Phone SDK 7.1」及び「Windows Phone SDK 7.1.1 更新プログラム」を利用しております。「Windows 8 Release Preview」は開発中のものであり、「Windows Phone SDK 7.1」が正式にサポートするOSでないことにご留意ください。
大西さんのブログで言及されているので既にご存知の方が多いのかと思っていたのですが、意外と詰まっている方が多いので改めて書いておきます。
VS2012でWP7アプリ開発をすることはできません
2012/6/1現在、Visual Studio 2012 RCを使ってWindows Phone 7アプリケーションの開発をすることができません*1ので、Visual Studio 2012 RCとVisual Studio 2010を共存させる必要があります。
ここでは、Windows 8 Release Previewに対してWindows Phone SDK 7.1(7.1.1)をインストールする方法についてご紹介します。
*1:ただ、今のところVS2010でWindows Mobileアプリ開発を切ったように、サポートを打ち切りという宣言はされていないので、今後VS2012でWP7アプリが開発できるようになる可能性はあります
2012-05-28
iPhone、AndroidからWindows Phone 7、Metro スタイル アプリに移植するときに読む記事
Windows Phone, Metro Style Apps
僕は、Windows Phone 7だったりiOSだったり、ほんのほんの少しだけAndroidアプリの開発をしています。お仕事で開発する場合のWindows Phone 7アプリやAndroidアプリはほとんどiOSアプリからの移植であることがほとんどです。
ロジック部分に関しては言語が異なるもののアルゴリズム自体は変わることは少ないのですが、ことUI部分に関しては各プラットフォームによって大きく事情が異なります。
日本市場においてはWindows Phone 7への移植の案件はほとんど聞かなくなりましたが、これからきたるMetro スタイル アプリに関してはぽつぽつと案件のお話を聞きます。各プラットフォームのアプリからそんなWindows Phone 7とMetro スタイル アプリに移植する際に読むべき記事をまとめてみました。
Metro スタイル アプリへ移植するときに読む記事
iOS(iPad) to Metro Style Apps
ウェブアプリ/ウェブサイト to Metro Style Apps
Windows Phone to Metro Style Apps
Windows Phoneへ移植するときに読む記事
ウェブアプリ/ウェブサイト to Windows Phone
iOS(iPhone) to Windows Phone
- iPhone アプリケーション開発者のための Windows Phone ガイド(PDF,日本語)
- iPhone から Windows Phone へ: 位置情報(日本語)
- iPhone から Windows Phone へ: グループ メッセージ(日本語)
- iPhone から Windows Phone へ: アプリケーション内広告(日本語)
- AndroidとWindows Phone APIのマッピングツール(英語)
- iOSデベロッパーのためのWindows Phone 7アプリ開発講座(英語)
- iPhoneデベロッパーのためのWindows Phone 7アプリ開発(ビデオ,英語)
- Objective-C および Java からの C# 入門(英語)
Android to Windows Phone
- Android から Windows Phone へ: 位置情報(PDF,日本語)
- Android から Windows Phone へ: 10 の基本タスク(日本語)
- Android から Windows Phone へ: 位置情報(日本語)
- Android から Windows Phone へ: グループ メッセージ(日本語)
- Android から Windows Phone へ: アプリケーション内広告(日本語)
- AndroidとWindows Phone APIのマッピングツール(英語)
- AndroidデベロッパーのためのWindows Phone 7アプリ開発(ビデオ,英語)
Symbian to Windows Phone
参考
2012-05-21
AVAudioPlayerを使って再生する際の音量を取得/設定する
AVAudioPlayerクラスを使用して音を鳴らす方法は「AVaudioPlayerで音を鳴らす」でご紹介しています。
鳴らす処理の延長線上となる音量の取得/設定の方法についてご紹介したいと思います。
// 楽曲ファイルのパスからAudioPlayerオブジェクトを作成 NSString* path = path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"]; NSURL* url = [NSURL fileURLWithPath:path]; AVAudioPlayer* player= [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; // AVAudioPlayerオブジェクトのボリュームは0.0〜1.0の間で指定する player.volume *= 0.5;
蛇足1
AudioServicesCreateSystemSoundID/AudioServicesPlaySystemSoundで音を鳴らすときの、音量調整の仕方が分かりません。非公開APIを使用すれば調整出来るとのことですが、基本的には音量調整はできないと考えた方が良さそうです。
蛇足2
使い道を把握していないので蛇足ですが、MPMusicPlayerControllerクラスの音量を取得する場合のコードをご紹介します。
MediaPlayer.frameworkをリンクするとiPodライブラリを参照するMPMusicPlayerControllerクラスが使用できるようになります。
MPMusicPlayerController *iPod = [MPMusicPlayerController iPodMusicPlayer]; float volumeLevel1 = iPod.volume; MPMusicPlayerController *appMP = [MPMusicPlayerController applicationMusicPlayer]; float volumeLevel2 = appMP.volume;
MPMusicPlayerController#iPodMusicPlayerメソッドで取得したオブジェクトのvolumeプロパティはiPodライブラリから選択した楽曲やビデオの生成時の音量だとして、MPMusicPlayerController#applicationMusicPlayerメソッドで取得した音量は何の音量なのかよくわかりません。
AudioServicesCreateSystemSoundID/AudioServicesPlaySystemSoundで音を鳴らす
AudioServicesCreateSystemSoundID関数を使用する場合は、importディレクティブに以下の宣言が必要になります。
#import <AVFoundation/AVFoundation.h>
バイナリ内に含まれる楽曲ファイルを再生させる場合のサンプルコードを以下に示します。
// 楽曲ファイルのパスからNSURLオブジェクトを作成する NSString* path = path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"]; NSURL* url = [NSURL fileURLWithPath:path]; // サウンドIDを取得する SystemSoundID soundID; AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID) // 音声ファイルの再生をおこなう AudioServicesPlaySystemSound(soundID); // 読み込み済みのサウンドリソースを解放する AudioServicesDisposeSystemSoundID(soundID);
AVaudioPlayerで音を鳴らす
AVAudioPlayerクラスを使用する場合は、importディレクティブに以下の宣言が必要になります。
#import <AVFoundation/AVFoundation.h>
バイナリ内に含まれる楽曲ファイルを再生させる場合のサンプルコードを以下に示します。
// 楽曲ファイルのパスからAudioPlayerオブジェクトを作成 NSString* path = path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"]; NSURL* url = [NSURL fileURLWithPath:path]; AVAudioPlayer *player= [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; // playが呼び出されてからすぐに音を鳴らすことが出来る様に // あらかじめファイルの読み込みをおこない、バッファに保持しておく [player prepareToPlay] // 音声ファイルの再生をおこなう [player play];
楽曲ファイルをBGM的に使用したい場合は、再生前に再生回数(numberOfLoopsプロパティ)を無限に設定します。0より小さいの値を設定すれば楽曲を無限ループで再生させます。
// 無限ループで再生させたい場合 [player setNumberOfLoops:-1]; // 3回再生させたい場合 [player setNumberOfLoops:2];
2012-05-17
NSDictionaryクラスのobjectEnumeratorメソッド、keyEnumeratorメソッドを使用する
以下のようなデータを追加したNSMutableDictionaryクラスのオブエジェクトを使用する。
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
[dict setValue:[NSNumber numberWithInt:1] forKey:@"うさぎ"];
[dict setValue:[NSNumber numberWithInt:2] forKey:@"きりん"];
[dict setValue:[NSNumber numberWithInt:3] forKey:@"ねこ"];
[dict setValue:[NSNumber numberWithInt:4] forKey:@"たぬき"];
値の一覧を取得する
// オブジェクトの列挙を取得する
NSEnumerator* objEnumerator = [dict objectEnumerator];
id value = nil;
while (value = [objEnumerator nextObject]) {
NSLog(@"value: %@", value);
}
// ログ出力
//2012-05-17 16:40:26.042 otest[7085:903] value: 4
//2012-05-17 16:40:26.043 otest[7085:903] value: 3
//2012-05-17 16:40:26.043 otest[7085:903] value: 2
//2012-05-17 16:40:26.044 otest[7085:903] value: 1
キーの一覧を取得する
// キーの列挙を取得する
NSEnumerator* keyEnumerator = [dict keyEnumerator];
id key = nil;
while (key = [keyEnumerator nextObject]) {
NSLog(@"key: %@", key);
}
// ログ出力
//2012-05-17 16:40:26.044 otest[7085:903] key: たぬき
//2012-05-17 16:40:26.045 otest[7085:903] key: ねこ
//2012-05-17 16:40:26.046 otest[7085:903] key: きりん
//2012-05-17 16:40:26.046 otest[7085:903] key: うさぎ
Objective-Cで使えるBOOL型(YES/NO)とBoolean型(TRUE/FALSE)の違い
ソースコード一式にBOOL型変数とTRUE/FALSEの組み合わせで使われており、ひどく違和感を覚えたのでどこで定義されているものなのか調べてみました。
BOOL
objc.hにて定義されています。
typedef signed char BOOL; // BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" // even if -funsigned-char is used. #define OBJC_BOOL_DEFINED #define YES (BOOL)1 #define NO (BOOL)0
Boolean
CFBase.hにて定義されています。
typedef unsigned char Boolean;
#if !defined(TRUE) #define TRUE 1 #endif #if !defined(FALSE) #define FALSE 0 #endif
結論
C#における、boolがSystem.Booleanのエイリアスみたいなことはなく別物でした。型と値を見ている限りは動作に問題なさそうだけど、正しい組み合わせで使いたいですね。おわり。


CH3COOH / Kenji WadaMicrosoft MVP for Device Application Development(Jul 2010 - Jun 2012)