AudioPlayerを使っての音を鳴らしてみた

AudioPlayerを使って「笛」の音を鳴らしてみたので調べたことをメモ。
肝心の笛(ホイッスル)の音声をどう作ったかはそのうち書きます。






今回使うAudioPlayerはAVFoundationというフレームワークに入っています。
(上の画像で赤い所にあたります。)
音楽再生のプログラミングはC言語で書かなければいけないものが多くて、コードが複雑になりがちです。
「AVAudioPlayer」はそんなオーディオ再生を「Objective-C」で扱えるようにしたクラスです。



Appleの「Multimedia Programing Guide」を読んだら、
ステレオ再生とか正確な同期、ネットからストリーム再生をしないなら、
これ使ったらいいよ的な内容の文がありました。

If your application does not require stereo positioning or precise synchronization, and if you are not playing audio captured from a network stream, Apple recommends that you use this class for playback.



ざっくりとできること

topへ
・持続時間を指定した再生

・ファイルまたはメモリバッファからの音声の再生

・音楽のループ

・複数の音声の同時再生(正確な同期でなくてよければ)

・相対的な音声の再生レベルのコントロール

・音声ファイル内の指定位置へのシーク、早送りや巻き戻しとか

・オーディオレベルのメータリングに使えるオーディオパワーの取得


なにはなくとも早速準備してみます。
まず以下の画像のように音源ファイルをiTuensから適当に取り出して、
プロジェクトにドロップします。

次にボタンを一つおいて「Action」をつなげます。(.mファイルにつなげています)
(参考:OutletとActionの作成


今回試したコード

topへ
簡単に試すために全部.mファイルの中に突っ込んでます。
動かすためにはAVFoundationフレームワークを追加しないとだめです。
(参考:フレームワークを追加する。

#import "WhistleViewController.h"
//フレームワークのインポート文
#import <AVFoundation/AVFoundation.h>

@interface WhistleViewController ()
{
    AVAudioPlayer *player;
}
@property (nonatomic, retain) AVAudioPlayer *player;
- (IBAction)playWhistle:(id)sender;
@end


@implementation WhistleViewController
@synthesize player;

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *soundFilePath =
    [[NSBundle mainBundle] pathForResource: @"whistle1"
                                    ofType: @"mp3"];
    
    NSURL *fileURL = 
    [[NSURL alloc] initFileURLWithPath: soundFilePath];
    
    AVAudioPlayer *newPlayer =
    [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
                                           error: nil];    
    self.player = newPlayer;
    
    [player prepareToPlay];
}

//笛をならすボタン
- (IBAction)playWhistle:(id)sender{
   [player play];
}


iOSで音声を再生するプログラミングをするには以下のドキュメントが参考になりそう。
(Multimedia Programing Guideは英語です。)

CoreAudioの概要

AVFoundationプログラミングガイド

Multimedia Programing Guide

System Sound Service Reference