iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
楽器の練習用にiOSのiPod Libraryに格納されている曲をスロー再生するアプリケーションが欲しくなり自作する事にした。
はるか昔、放送局向けの録音再生アプリケーションを製作した事があって、その時は、再生速度を上げる場合、音声データを間引いた事があったのだが、最新のCoreAudioのAVFoundationでは、自由に再生速度が変更できるようになっているようで、せっかくなので、それを利用しない手はない。
iOSのオーディオ関連のフレームワークは多数あり、かつ、変化も激しく、そして、似た名前の物があるので、一つ一つ、確認しながら作業を進める事にする。
いきなり、主要な機能の曲の再生に取りかかりたいのが人情だが、アプリケーションとしては、曲の選択のUIも重量な機能なので、どんな事が出来るのか、Appleのサンプルコードで確認する事にする。
このサンプルコードから、曲のリストを表示できるようにしてみた。
曲の一覧を取得し、それ表題を配列に格納する。
- (void)viewDidLoad
{
[super viewDidLoad];
self.songsList = [[NSMutableArray alloc] init];
self.musicPlayerController = [MPMusicPlayerController iPodMusicPlayer];
MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
NSArray *mediaItems = [songsQuery items];
for (MPMediaItem *mediaItem in mediaItems) {
NSURL *URL = (NSURL*)[mediaItem valueForProperty:MPMediaItemPropertyAssetURL];
if (URL) {
NSString *title = (NSString*)[mediaItem valueForProperty:MPMediaItemPropertyTitle];
[self.songsList addObject:title];
}
}
}
配列に格納した情報をテーブルに表示する。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.songsList.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"SongsCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
NSString *title = [self.songsList objectAtIndex:indexPath.row];
cell.textLabel.text = title;
return cell;
}
一覧が表示できた。