システムサウンドの一覧を取得する : iPhone プログラミング

PROGRAM


システムサウンドの一覧を取得する

iPhone のシステムサウンドは、iPhone の "/System/Library/Audio/UISounds" ディレクトリに音声ファイルとして用意されているようです。

このディレクトリに存在するファイルを、次のようにして取得することで、存在するシステムサウンドのファイル名の一覧を取得することができました。

// システムサウンドファイル名の一覧を取得します。

NSError* error;

NSString* path = @"/System/Library/Audio/UISounds";

 

NSArray* sounds = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];

取得された sounds 配列には、"/System/Library/Audio/UISounds" ディレクトリ内に入っているファイルのファイル名だけが、NSString 型の文字列として格納されています。

サウンドファイルではないものも混ざることもあるようですけど、ファイルの拡張子を見れば、サウンドではないファイルは分かる感じでした。

 

取得したシステムサウンドファイルを再生する

上記で取得したシステムファイルは、AudioToolbox framework を使用して、次のような感じで再生することも可能です。

なお、次のコードは ARC (Automatic Reference Counting) を前提に記載していますので、ARC が有効でない場合には retain や release などを適切なタイミングで実行するようにする必要があります。

#import <AudioToolbox/AudioToolbox.h>

 

// 指定したインデックス番号のサウンドを再生します。

- (void)playSystemSoundAtIndex:(NSUInteger)index

{

OSStatus status;

SystemSoundID sound;

 

NSURL* url;

NSString* file;

NSString* path;

 

// 上記で取得したシステムサウンド一覧から、ファイル名を取得して、フルパスを生成しています。

file = [systemSounds objectAtIndex:index];

path = [[NSString alloc] initWithFormat:@"/System/Library/Audio/UISounds/%@", file];

 

url = [[NSURL alloc] initFileURLWithPath:path];

 

// システムサウンドサービスを使ってファイルを読み込みます。

status = AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &sound);

 

if (status == kAudioServicesNoError)

{

// システムサウンドの再生完了時のコールバック関数登録と、再生処理を行います。

AudioServicesAddSystemSoundCompletion(sound, NULL, NULL, systemSoundCompletion, NULL);

AudioServicesPlaySystemSound(sound);

}

else

{

// システムサウンドを生成できなかった場合のエラー処理はここに記載します。

 

}

}

 

// システムサウンドの再生が終わった後の、リソース解放処理用コールバック関数です。

void systemSoundCompletion(SystemSoundID sound, void* clientData)

{

AudioServicesDisposeSystemSoundID(sound);

}

このようにすることで、システムサウンドを再生することができました。

[ もどる ]