【iOS+Object-Cメモ】SystemSoundIDとAudio Queue Servicesで音を鳴らす



iPhoneで音を鳴らすには少なくとも2つ方法があります(3つあった気もするけどあと1つ忘れた)。

1つはSystemSoundIDを使う方法、もう1つはAudio Queue Servicesを使う方法です。
それぞれに特性や使い方が違うので、1つずつ見て行きましょう。

SystemSoundIDの特徴と使い方

○特徴

  • 設置が比較的カンタン
  • 30秒以内の音しか鳴らせない
  • 音をループさせることはできない
  • ネットワーク通信を行うアプリで使用すると、音量がiPhone本体の左ボタンで調節できなくなる

○使い方

// ヘッダーファイル
@interface hogeViewController {
	SystemSoundID soundID;
}

- (IBAction)sounds01;

// 実装ファイル
@implementation hogeViewController

- (IBAction)sounds01 {
	
	NSString *path = [[NSBundle mainBundle]pathForResource:@"1" ofType:@"caf"];
	NSURL *url = [NSURL fileURLWithPath:path];
	AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID);
	
	//サウンドを鳴らす
	AudioServicesPlaySystemSound(soundID);
}

// あとはInterface builderでボタンなどに対してsounds01をActionとしてひもづける
// 必要なフレームワークはAudioToolbox.framework 

○コメント
とってもシンプルなSystemSoundIDですが、いろいろと制約があるので使いにくい場面があるかもしれません。
そんなときは次のAudio Queue Servicesを使いましょう。

Audio Queue Servicesの特徴と使い方

○特徴

  • 30秒以上の音でも鳴らせる
  • 音のループが可能
  • SystemSoundIDよりちょっぴり重たいかも?

○使い方

// ヘッダーファイル
@interface hogeViewController {
	AVAudioPlayer *player;
}
@property (nonatomic, retain) AVAudioPlayer *player;

- (IBAction)sounds01;

// 実装ファイル
@implementation hogeViewController

@synthesize player;

- (IBAction)sounds01 {
	
	NSString *path;
	NSURL *url;
	
	path = [[NSBundle mainBundle] pathForResource:@"0_1" ofType:@"caf"];
	url = [NSURL fileURLWithPath:path];
	self.newPlay = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
	
	// ここでループの回数を指定する。無限の場合はマイナスの数値を指定。
	self.newPlay.numberOfLoops = 0;
	self.player = self.newPlay;

	//サウンドを鳴らす	
	[self.player play];
}

// 必要なフレームワークはAVFoundation.framework

○コメント
ループの回数等も指定できるので、通常はSystemSoundIDではなくこちらを使うべきだと思います。
SystemSoundIDだとAdmob広告などを表示させるだけで、ネットワーク通信を使うので音量調節ができなくなりますしね。

今までにアプリをレビューしていただいたサイトさま一覧(確認できた分だけ)

レビューサイトさまにアプリが掲載されるとDL数や認知度が大幅に上昇するので、iPhoneアプリ開発者にとってレビューサイトさまの存在はとてもありがたいものです。
今回は、今までに私が開発したアプリをレビューして頂いたレビューサイトさまをご紹介します(いまざっと確認できた分だけ)。アプリの寄稿記事を依頼したい場合などに参考にしてください。

AppBank


いわずとしてた、iPhoneアプリレビューの大手巨大サイトさま。毎日便利だったりおもしろいアプリをウェブサイトでご紹介してます。
また、ウェブサイトだけでなくAppBankのiPhoneアプリから人気のアプリやセール中のアプリなどを見ることができます。とっても便利なのでダウンロードしてみるとよいと思います。ちなみに、AppBankさまにアプリが掲載されると、アプリのDL数がキューンと増加しますw

ぜひいま売り出し中の音DEレインボー音DEレインボー for iPadあたりもレビューしていただきたいですなw ちなみにAppBankさまは最近原宿・渋谷間にAppBank Storeの実店舗をオープンしたようです。うーん、すごい。

iPhone女史


女の子にターゲットをしぼった、女子必見のアプリレビューサイトさま。昔はスマートフォンユーザーというと男性のイメージがありましたが、いまやiPhoneはたくさんの女子に使われているので、そんなiPhone女子ユーザーはとっても便利。女の子目線だからこそ、本当に女子に便利なものがそろってます。あなたが女の子なら、とりあえずTwitterでフォローしてみてはいかがか。

あっぷりぃ


iPhoneやmixiアプリのレビューサイトさま。ユーザーがレビューやクチコミ、画像をアップできます。星印でアプリを評価もできます。新しいアプリを買うまえに、itunes app sotre以外にこちらで評判を見てみてもよいかも?

キッズアプリCOM


幼児から使える、子供向けのアプリのレビューサイトさま。私の開発したアプリはけっこう子供に喜ばれるものが多いので、こちらに掲載していただけるととてもうれしいですね。

Apple Fan


女性目線、男性目線の2つの切り口でアプリをレビューされているサイトさま。寄稿文を掲載していただいたときのメールがとても丁寧だったのが印象的でした。

とりあえず今ざっと調べた感じではこんな感じです。

アプリを紹介していただいたサイトさまは他にもたくさんありますが、実際にアプリを使ってレビューをして頂いている、もしくは寄稿文を掲載して頂いたサイトはこれくらいかなという感じです。

他にも下記のようなサイトさまが有名ですね。こちらにも私の開発したアプリは紹介されています(レビューではないと思います。)

meet i
Touch Lab
iPhone 研究室
iphone女子部

そういえば、iPhoneアプリやiPadアプリを紹介している書籍や雑誌はたくさんあると思うのですが、私のアプリも掲載してほしいなぁw 

予想以上にiAdは儲からなかった

前回の記事でAdwirlにiAdとAdmobを組み込む方法を説明しました。

実際に私のアプリに組み込んでAppleに申請し、iAdとAdmobの2つを表示できるようにしましたので、その結果をご報告します。

広告表示率が低すぎてズコーー!

とりあえず、あいづちんプラス、音DEレインボー、音DEぬりえにAdwirlを組み込みました。iAdは1クリック$1くらい入るとの噂を聞いていたので、これでガッポガッポは間違いないでしょう!

というわけで結果発表。

3日間の広告収入合計!!!

$0.54(30円くらい)。

ズコーーーーーー!!!

なんじゃそりゃー。
なんでこんなに安いのか調べてみたところ、広告表示率が10%以下!ひどいのになると1%を切る感じです。

詳細なデータは下記。

【音DEレインボー】リクエスト2766件に大して 219回広告を表示(表示率7.92%)
【音DEぬりえ】リクエスト3811件に対して11回広告を表示(表示率0.29%)
【あいづちんプラス】リクエスト3322件に対して40回広告を表示(表示率1.20%)

国内ユーザーの多いアプリでは収益は見込めないかも

私のアプリはほぼ日本国内のユーザーなのでこんな数字ですが、海外のユーザーをターゲットにしているアプリであればもっと収益は見込めるかもしれませんね。

とはいえど、私のアプリも海外で全くDlされていないわけではなく、そこそこDLされているにも関わらずこの数字では困っちゃいますねぇ。
また、すべてのクリックが$1くらいの収益を得ることができるわけではないようです。$0.2とかもあるようですね。単価だけでみればAdmobなどよりもずっと高いですけれども。

というわけで結論としては、「国内ユーザー主流のアプリでは現状iAdで収益は見込めない(かも!)。」です。
海外でもめっさDLされている場合は別。

日本でも電通と組んで2011年の早い時期からスタートするといわれているのに、もう6月になっちゃいますね。早くはじまってほしいです。

iPhoneアプリにAdwhirlを設置してiAdとAdmobを切り替える方法

2012年3月11日更新:リンクしていたブログが消滅していたため、内容を更新しました。

さて、前回の記事から少し・・・いえ、とてもとても時間があきましたが、Adwhirl設置についてのチュートリアルをようやく公開しようと思います。

ではいってみましょう。
まずAdwhirlのサイトに行きます。Adwhirlってなんじゃらほいな方は前回の記事を見ておくれやす。

Adwhirlに登録する

サイト中央の「Get Started」ボタンから新規にアカウント登録をしてください。
特に何もむずかしいことはありませんね。登録完了したらログインしてください。

あなたのアプリを登録する

ログインすると、下記のような画面が出るのでAdd applicationをクリックし、追加するiPhoneアプリの情報を入力します。

入力する項目の内容は下記の通り。

  • Name:アプリの名前
  • URL:アプリのダウンロードURL
  • Platform:iPhoneアプリかAndroidアプリかを選択(iPadは今のところ未対応)
  • Background Color:背景色。デフォルトのままでよし
  • Text Color:文字色。デフォルトのままでよし
  • Refresh Rate:広告を切り替える秒数
  • Transition Animation:広告を切り替える時のアニメーション
  • Allow Location Access:?

アプリに表示する広告会社の種類を設定する

「Add app」でアプリが登録されるのでクリック。すると下記のようにiAdやAdmobなど表示させたい広告の種類一覧が出ます。

表示させたい広告の「Ad Serving」をONにし、右の「%」に表示する割合を入力します。表示させたい広告の種類が複数ある場合、こちらの合計パーセンテージが100になるようにしないと設定完了できないのでご注意ください。

そして、それぞれの広告の行にカーソルを合わせると「Edit Setting」の文字が表示されるので、そちらをクリックしてそれぞれの広告でのそのアプリのIDを登録してください。

iAdの場合はここに表示されてるこれ。

Admobの場合はここに表示されてるこれ。

最後に「Save Chaging」をクリックして登録します。

表示させる広告の優先順位を設定する

Backfill priorityをクリックし、広告の優先順位を設定します。右の入力スペースで数字が低いほど優先度が高くなります。

AdwirlSDKをアプリに組み込む

これで基本設定はすべて完了なので、次に実際にアプリにSDKを組み込みます。

ページ右の「Dev Resources」をクリックし、「Download the latest version」から最新バージョンをダウンロードしてください。

組み込み方は、基本的にこちらの説明ページを見れば分かると思います。1~4章は、AdmobとiAdを切り替える場合はAdmobとAdwirlのファイルを突っ込んでフレームワークを追加するだけです。

具体的に説明すると、

1、AdWhirlフォルダのREAD ME以外をまるごとプロジェクトにつっこむ

2、TouchJSONフォルダをまるごとプロジェクトにつっこむ

3、フレームワークを追加する

  • AddressBook
  • AudioToolbox
  • AVFoundation
  • CoreLocation
  • libsqlite3
  • libz
  • MapKit

iAdが表示したい広告に含まれてる場合は下記のフレームワークも。

  • iAd
  • QuartzCore
  • SystemConfiguration

admobが表示したい広告に含まれてる場合は下記のフレームワークも。

  • MessageUI(2011年5月21日追加)
  • SystemConfiguration(上のiAdの項目ですでに追加してる場合は新たに追加しなくてOK)
※ムラモトタケシさま、フレームワークの間違いをご指摘ありがとうございました!
ちなみにムラモトさまの開発された素敵なiPhoneアプリたちはこちら。パンダピアノ素敵。

(3-2)、組み込まない広告ネットワークのアダプターを削除する

「AdWhirlのフォルダの中に「adapters」フォルダがあり、その中に各社ネットワークを表示するプログラムが入っています。

組み込まないものをそのまま残しておくとエラーが出るので、組み込まないものは削除してしまいましょう。

今回はiAdとAdMobの4ファイルおよびAdWhirlAdNetworkAdapter.h(これ間違って消さないように注意)の5つだけを残します。

4、Admobフォルダをまるごとつっこむ

さて、ここまでは上記に貼ったAdwhirlのサイト通りでしたが、ここからがちょっと違います。
下記のようにプログラムを変更してください。

まずヘッダーファイル(.h)にインポートを追加。あと、後で使うための定数も追加。

#import "AdWhirlView.h"
#import "AdWhirlDelegateProtocol.h"

#define GAD_SIZE_320x50     CGSizeMake(320, 50)

次にヘッダーファイル(.h)のインターフェースにデリゲートの宣言を追加し、変数とプロパティを追加

@interface SampleViewController : UIViewController<AdWhirlDelegate> {
	AdWhirlView *awView;
}
@property (nonatomic, retain) AdWhirlView *awView;

次に、実装ファイル(.m)の@implementation のあたりを下記のように変更。

@implementation SampleViewController
@synthesize awView;

- (NSString *)adWhirlApplicationKey{
	return @"ここにAdwhirl管理画面のアプリのページ上部に記載されているSDK Keyをコピペ";
}
- (UIViewController *)viewControllerForPresentingModalView{
	return self;
}

次に、viewDidLoadに下記を追加。

//adwirl----------
        self.awView = [AdWhirlView requestAdWhirlViewWithDelegate:self];
        [self.view addSubview:awView];
        
        awView.frame = CGRectMake(0.0, self.view.frame.size.height - 
                                  GAD_SIZE_320x50.height,GAD_SIZE_320x50.width, GAD_SIZE_320x50.height);
        
        awView.delegate = self;
//adwirl----------

広告を受信したタイミングでなにかアクションを起こしたい場合は下記の関数の中にプログラムを追加。


- (void)adWhirlDidReceiveAd:(AdWhirlView *)adWhirlView{
}

最後にdealloc関数の中に下記を追加。

[awView release];

おつかれさまでした!これですべて完了です

これですべての作業は完了です。Xcodeのシュミレーターで確認し、それぞれの広告が表示されれば成功です。
iAdについてはシュミレーターではテスト用の広告が表示されますが、itunes connectにアップして無事リリースされたら本物の広告が表示されるのでご安心ください。

なお、iAdは今のところ日本未対応なので日本のiPhoneでは表示されません。しかし海外のユーザーが多いアプリならば入れるメリットは大きそうです。
2012年01月19日修正
iAdも日本で開始されています。

次は、日本国内の大手スマートフォン広告であるAdmakerをAdwhirlに組み込む方法をご紹介します。記事はこちら。

それではまた。

今年の3分の1が過ぎ去ったので、ちょいと振り返りを・・・

音DEレインボーをリリースしてから、はや半月がたちました。

その間、大阪いったりいろいろしていましたが、トーンと開発から離れてしまい、このままではいけねぇぜということで今後の予定をまとめようと思います。

思えば1月~4月が過ぎ、1年の3分の1が終わっちゃいましたね。次の5月(もう半分過ぎてるけど)~8月の4ヶ月でどこまで進められるか、フンバリどころです。

そういえば今年の予定ってなんだっけ?

あぁ・・・そういえば昨年末に2011年度の予定というか目標をちゃんと立てたのに、まったく意識していませんでした。

昔上司に「目標の達成確率は、目標を見た(意識した)回数に比例する」と言われたので、やっぱりちゃんと紙だったりに書いて手帳にはさんだりせなあきまへんね。

○健康

【目標】 毎週日曜日に運動をする。スーパースポーツマンの奥さんに一緒に付き合ってもらおうっと。

まったく達成してませんがな!!おぉう・・・運動どころか、机の上においてあるペン立てくらい動かない生活してますがなw
でもねーやっぱりITでやってく以上運動は必要なわけですよ。やっぱ空手やりたいよ空手。うーん、空手をやさしく教えてくれる場所を探そう。週1回で。

○精神

【目標】 悩んでもポジティブ。自分以外の人間は関係ない。まわりの情報に精神を左右されずに行動する

あ、これは結構改善されたかも。やっぱね、笑顔でラクに考えることが一番コトがうまくいく秘訣ですわぃ。難しく考えてもよい方向にはいかないね。

○教養

【目標】 1週間に1冊本を読む。アウトプットをブログに書く。

ああぁあぁぁあぁぁぁ。もう救いようがない。アウトプットどころか読んでさえいない。3日坊主どころか1日坊主だよ。もう。

○プライベート

【目標】 毎朝7時置き、12時就寝、2日に1回なんかしらのブログを更新

これもぜんっぜん改善されていないな。ブログはなー、書く事ないからなw
やっぱり何か情報ブログを公開して、そのブログを毎日更新するようにしたほうがよいな。このブログを毎日更新はネタなさすぎ。

○仕事

【目標】 iphoneアプリを年間40本リリースする、会社所有のiphoneアプリ10本

現在リリースしたアプリは、えーっと今年だけだと7個か。あいづちんプラスも大幅にアップデートしたからそれも合わせると8つ。
このペースでは年間40本はムリですね、はいむりですね。

でもよいんです。1本あたりから得る収入が当初予定より大幅に上がったので、まぁ数打ちつつもクオリティの高いものを出すということで。

それをふまえて5月~8月末でやること

○健康

・7月に向けてダンスの練習をするため友人KとGに連絡を取る(5月19日まで)
・ダンスの練習を週に1回する(7月23日まで)
・7月24日以降は空手の道場を探して週1で通う

○精神

【目標】特になし

○教養

・読みたい本を探せるサイトを探す(5月23日まで)
・まとめて買っちゃう
・会社の行き帰りで本を読む(特に期限なし)

○プライベート

・毎朝7時半時に起きて13時に寝る
・前日の夜に手帳に予定を書く。

○仕事

・5月中にアニマルポコポコをリリースする
・6月中に通信系アプリを含め2つリリースする
・7月中にアプリを2つリリースする
・8月中にアプリを2つリリースする
・8月末までにObject-Cの全容理解、iOSの初めて本とオライリーに書いてあることを全て理解する

今年中に達成すること(追加)

・○○○(わけあって秘密)を開始
・現在の【広告収入+会社の給料】の金額を【広告収入+○○○】で実現する
・Object-CおよびiOS全容理解
・会社を設立

次こそは3日坊主もとい1日坊主にならぬよう気をつけなくては。。。

プロフィール

PICxPIC
1983年生まれ。2010年からiOSアプリを開発し、2012年に法人化。メディア掲載やランキング、ダウンロード数などの詳しい実績などはこちら

PICxPICのアプリ

赤ちゃんの大冒険

おさるランド

動物オーケストラ2

子どもゲームランド

おしゃべりボタン

天空までのぼれ!

ジャンプで川下り

ひよこランド

動物オーケストラ

ポコポコアニマル

キラキラお絵かき

音が出るお絵かき

あいづちん