BAD_ACCESS

おもにiOS、ときどき変な電子工作、ガジェット話。

#3 C4で音楽を(割りと自由に)取り回すーC4でAudio Playerをつくる(1)

この記事は「一人アドベントカレンダー2013〜Lonely Advent Calender 2013〜」の2日目の記事です。

前回はC4Timerを使ったサンプルを紹介し、どれだけシンプルにつくることができるかが少しお分かりいただけたのではないかと思います。

今回から4回に渡りC4がメディアの扱いに非常に長けているということを説明するために簡単なAudio Playerを何種類か作ってみようと思います。

Audio関連を扱うC4Sampleクラス

C4でAudio関連を扱うには、C4Sampleクラスを使います。 手っ取り早く音を鳴らすためにはとにかくこのクラスということになります。

C4Sample.hの中身を見てみると、

#import "C4Object.h"
#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVFoundation.h>
//
@interface C4Sample : C4Object <AVAudioPlayerDelegate>

となっており、AVAudioPlayerをラップしたようなクラスになっているようです。

今回、C4Sampleができることを簡単に体験してもらえるようにSampleプロジェクトを用意しました。

といっても、C4WorkSpace.mを置き換えるだけです。

まず、setupメソッドにて音の再生を開始します。 音源はC4テンプレートからプロジェクトを新規作成すると勝手に含まれている"C4Loop.aif"を使います。

-(void)setup {
    sample = [C4Sample sampleNamed:@"C4Loop.aif"];
    sample.loops = YES;
    [sample play];
   

mediaのファイル名を指定してC4Sampleオブジェクトをつくってplayメソッドを呼ぶだけ。ちゃんと再生されたでしょうか?

rate(再生速度) pan(左右に振る) volume(音量) で遊ぶ

つづいて、再生しているC4Sampleオブジェクトをいじってみましょう。

いじるためのUIの設定をします。 ここでは詳細な説明は省きますが、C4Sliderをつかってrate(再生速度) pan(左右に振る) volume(音量) の値を自由に変えられるようにUIを作っていきます。

-(void)setupUI {
    //UI(rate)
    rateSlider = [C4Slider slider:CGRectMake(0, 0, 300, 44)];
    rateSlider.center = CGPointMake(self.canvas.width/2, self.canvas.height/4);
    rateSlider.value = sample.rate - 0.5;
    [self.canvas addSubview:rateSlider];

sliderに対応するメソッドchangeRate:を設定します。

//つづき
  [rateSlider   runMethod:@"changeRate:"   target:self forEvent:VALUECHANGED];
}

sliderの変更に応じて、C4Sampleのプロパティであるrateを変化させます。

-(void)changeRate:(C4Slider *)aSlider {
    sample.rate = aSlider.value + 0.5;
}

簡単ですが、主に実装する中身は以上です。 UIまわりでごちゃごちゃと書いていますがsliderの値で今再生している音源を直接操作するというサンプルができました。

今回は以上です。明日は音源のシークとUIの更新を行いたいと思います。