(iOS 4) バックグラウンド動作するラジオアプリを作ってみる

プログラム関係の仕事をするときはたいてい、ネットラジオを使って部屋の中にBGMを流している。最近のお気に入りはSomaFMのチルアウト/アンビエント専門チャンネル"Groove Salad"だ。いい感じで生活の邪魔にならない音楽を絶え間なく提供してくれる。

つい先日ようやくiPhone 4を導入したので、できればバックグランドで動作するネットラジオアプリを入れてGroove Saladを垂れ流しにしたい。ただ、「バックグラウンドで動作するネットラジオアプリ」で無料かつ使いやすいものというのは、なかなか存在しないようだ。

まあ、無いなら自分で作ってしまおう。

ストリーミング再生

iOS 4を使ってネットラジオ的なものを作るのは難しくない。AV Foundation FrameworkAVPlayerクラスを使えば簡単に実現できる。例えばGroove Saladを再生するのだったら、以下のようにすればいい。

#import <AVFoundation/AVFoundation.h>

AVPlayer *player;

NSURL *url = [NSURL URLWithString:@"http://ice.somafm.com/groovesalad"];
player = [[AVPlayer playerWithURL:url] retain];

[player play];

基本的にはこれだけだ。

バッググラウンド再生

これもググれば必要な情報はすぐに見つかる。今回はとりあえず以下の2点をおさえておけばいいようだ。

Info.plistの設定

Info.plistの項目に"Required background modes"を追加し、"Item 0"として"App plays audio"を指定する。


オーディオセッションのカテゴリー設定

今回のアプリのようにバックグラウンドで垂れ流し再生を行う場合は、オーディオセッションのカテゴリーを「プレイバック」にしておく必要があるらしい。具体的には以下のようにする。

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];

見た目

基本的にはこれだけで用件を満たすことができるのだけれど、せっかくだから見た目の体裁も最低限整えておこう。ちょうど都合のよいことに、Groove Saladの素材を制作している人がいた。

http://www.teknoel.com/desktops/

今回は個人用途なので、これを利用させていただくことにしよう。

UIは……まあこんな感じでいいか。

ビューはUIImageViewにして、画像をはめ込むことにしよう。

Retina対応のアイコンなども用意して、なんとかアプリらしく見えるようにした。


まとめ

AV Foundation Frameworkは、メディアファイルやメディアストリームを扱うのに便利なインフラだ。今回は音しか扱わなかったけれど、動画を使って遊んでみるのも面白いと思う。

iOS 4から導入されたマルチタスキングは、なんだかんだ言って便利な仕組みだ。iOS 3系との共存はちょっと面倒かもしれないけれど、とりあえずでも対応しておけば今までとは異なった体験が生み出されるかもしれない。それをスルーするのは勿体無いことだと思う。