Hatena::Groupiphone-dev

Ni chicha, ni limona - 平均から抜けられない僕

2009-06-16

[iPhone][Develop] アプリ起動と同時にサウンドを鳴らす方法 22:19  [iPhone][Develop] アプリ起動と同時にサウンドを鳴らす方法 - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iPhone][Develop] アプリ起動と同時にサウンドを鳴らす方法 - Ni chicha, ni limona - 平均から抜けられない僕  [iPhone][Develop] アプリ起動と同時にサウンドを鳴らす方法 - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

アプリを幾つか触っていると、起動直後の画面(default.png)が表示されているときに音が鳴るものがあります。同じことを実現する方法が分かったので記録しておきます。


最初は「いいなぁ、かっこいいなぁ」と指を加えて色々悩んでいだのですが、気付けば簡単なことでした。

main()関数の、UIApplicationMain()を呼ぶ前に音を鳴らす処理を入れるだけでした。


以下は、AppleのサンプルにあるMetronome.xcodeprojに手を入れたソースです。


int main(int argc, char *argv[]) {
	NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

	// アプリ起動と同時に音を鳴らす
	NSAutoreleasePool * innerPool = [[NSAutoreleasePool alloc] init];
	SoundEffect *tickSound = [[SoundEffect alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tick" ofType:@"caf"]];
	[tickSound play];
	[innerPool release];
	// ここまで

	int retVal = UIApplicationMain(argc, argv, nil, nil);
	[pool release];
	return retVal;
}

これだけで起動と同時に音が鳴るようになります。


ちなみにSoundEffectクラスはこのプロジェクト内で定義された、中で単にAudioServicesCreateSystemSoundID()を呼んで再生するだけのクラスです。なのでベタ書きで同関数とAudioServicesPlaySystemSound()を使う方法でも大丈夫。またAutoReleaseプールも念のために入れているだけで、無しでも動くことを確認しています。

(AVFoundationやOpenALなども試せれば良かったのですが・・・すみません)


実際に音を鳴らしてみると、けっこう待たされる感じのするスプラッシュスクリーンでも短く感じる効果が得られました。例えば「Now loading...」とか「気にしない気にしない、一休み一休み*1」と喋らせておくのも面白いと思いますが、いかがでしょう?


サウンドといえば、こんな本を買いました

C言語ではじめる音のプログラミング―サウンドエフェクトの信号処理」という本。大学で学ぶ信号処理の関連本ではあるものの、なんとこの本にはリバーブディストーション、ファズ、ワウ、ビブラート、コーラス、早送り/スロー再生などなど、様々なエフェクトの説明と実現方法がCソースコード付きで載っていました。


この本で扱っているデータがWAVEファイルなので少しの修正は必要ですが、なかなかに夢の広がる本でした。おすすめです。


 − Website Temporarily Unavailable

*1:元ネタを知っている人が少ないことが切ない・・・