短いオーディオを再生する

2010/05/29

CoreAudioは使わずに、AudioToolboxで音を再生してみる。 ToolboxってOSX以前のレガシーなライブラリっすよね。

Resources/sound.wavを再生してみます。 まず、AudioToolboxライブラリを追加。 AudioToolboxライブラリ 次にXcode ■SoundViewController.h

#import 
#import   

@interface SoundViewController : UIViewController {
        CFURLRef soundURL;
        SystemSoundID soundId;
}

@property (readwrite) CFURLRef soundURL;
@property (readonly) SystemSoundID soundId;
-(IBAction) buttonPressed;
-(void) playSound;
-(void) loadSound:(NSString *)soundName;

AudioToolboxをimportして、CFURLRef、SystemSoundIDを定義。 汎用的に音の読み込み関数「loadSound」、音再生用関数「playSound」も用意しておく。

■SoundViewController.m

#import "SoundViewController.h"

@implementation SoundViewController

@synthesize soundURL;
@synthesize soundId;

- (IBAction) buttonPressed {
        [self playSound];
}
-(void)loadSound:(NSString *)soundName {
    NSString *soundPath = [[NSBundle mainBundle] pathForResource:soundName ofType:@"wav"];
    soundURL = (CFURLRef)[NSURL fileURLWithPath:soundPath];
    AudioServicesCreateSystemSoundID (soundURL, &soundId); 
    CFRelease(soundURL);    
}
-(void)playSound {
    AudioServicesPlaySystemSound (soundID);
}
- (void)viewDidLoad {
    [self loadSound:@"sound"];
}
- (void)dealloc {
    AudioServicesDisposeSystemSoundID (soundId); 
    [super dealloc];
}

(1)viewDidLoadでファイル名を引数にloadSoundを実行して、Resources/sound.wavを読み込む。 ※wav限定 (2)IBActionでbuttonPressedされたら、playSoundを実行する。 (3)loadSoundでは、AudioServicesDisposeSystemSoundIDを利用してsoundIdを解放する。

サウンドファイル管理はまだ汎用化できそうですが、とりあえずこんな感じで。