この記事はiPhoneの上部スピーカーと近接センサーの機能を組み合わせてみようというお話です.
知り合いから「iPhoneの上部スピーカーを使ってアプリを作っている」という話を聞きました.
それを聞いたとき,普段から拝聴している声優さんのラジオ番組にて,たまたま声優さんが素敵なくしゃみをしていたことを思い出しました.
そこでティンと閃いた僕は「iPhoneを耳に近づけたらこの素敵なくしゃみ音声を聴けるアプリを作れないかなぁ」と思いました.
アプリのUIとかは別として簡単にObjective-C
で機能の実装をしてみました.
再生したい音声ファイル(声優さんの◯◯な音声等)は自分の好きなものを各自調達してきたという前提で話を進めます.
##近接センサー
iPhoneには近接センサーというものがあります.端末画面に顔が近付くことで反応するセンサーで,通話中などタッチを無効にすることで誤操作をなくすなどの用途があります.
###実装方法
まずはviewDidLoad
で近接センサーをオンにします。
[UIDevice currentDevice].proximityMonitoringEnabled = YES;
次に、近接センサーを監視します。
近接センサーが反応すると、UIDeviceProximityStateDidChangeNotification
が飛んでくるので、それを監視します。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(proximitySensorStateDidChange:)
name:UIDeviceProximityStateDidChangeNotification
object:nil];
通知が飛んで来た時に呼ばれるメソッドを定義し,今回はその中にやりたい処理(くしゃみ音声再生)を書きます.
- (void)proximitySensorStateDidChange:(NSNotification *)notification {
if ([UIDevice currentDevice].proximityState == 1) {
//近接センサーがOnになった時にやりたい処理
}
}
##iPhoneの上部スピーカー
iPhoneの上部(図参照)にあるスピーカーからくしゃみ音声を流します.
こちらのサイトを参考に上部スピーカーから音声を出力するコードを書きます.
参考サイト:http://www.eln.ne.jp/iphone/iphone-app/use-audiotoolbox.html
###実装方法
まず,既存のフレームワークからAudioToolbox
とAVFoundation
をプロジェクトに追加、importします.
次に,ViewController.h
を以下のように記述します.
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVFoundation.h>
@interface ViewController : UIViewController<AVAudioPlayerDelegate>{
AVAudioPlayer *Do;
}
@end
そして,viewDidLoad
で音声データを読み込む処理を書き加えます.
- (void)viewDidLoad {
[super viewDidLoad];
[UIDevice currentDevice].proximityMonitoringEnabled = YES;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(proximitySensorStateDidChange:)
name:UIDeviceProximityStateDidChangeNotification
object:nil];
//ここから先を書き加える
NSString *path= [[NSBundle mainBundle] pathForResource:@"音声ファイル名" ofType:@"mp3"];
Do = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path ] error:nil];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
}
あとは先程,近接センサーが反応したときに呼ばれるメソッドの中に音声再生のコードを書いてあげればおしまいです.
- (void)proximitySensorStateDidChange:(NSNotification *)notification {
if ([UIDevice currentDevice].proximityState == 1) {
//近接センサーがOnになった時にやりたい処理
[Do play];
}
}
ちなみに参考にしたサイトではたしかiOS7あたりでサポート外になった書き方になっていたのでiOS7以降の書き方に直しました.
##まとめ
iPhoneを耳元に近付けると音声が出力されるアプリができました.
iPhoneには近接センサーの他にも面白いセンサーがあったりするのでまたアイディアを閃いたら色々とアプリを作ってみたいと思います.
今回は完全に趣味で作ったのでアレですが,音声ファイル(声優さんの声)の扱いは気をつけましょう.
##P.S.
声優さんのくしゃみ音声について語っていたときの僕は大分気持ち悪かったらしいですが,それはまた別のお話.