トップ «前の日記(2012-03-19) 最新 次の日記(2012-03-21)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|

2012-03-20 [iOS]Looping Recorderの基礎(System Sound Services)

_ System Sound Services

30秒以下の音声ファイルを再生するサービスで、主に警告音や操作音に使用される。

追加するフレームワークは『AudioToolbox.framework』。インポートするヘッダ・ファイルは『AudioToolbox/AudioToolbox.h』だ。

beep.aifファイルを再生するコードは、以下のとおり。

NSString    *path = [[NSBundle mainBundle] pathForResource:@"beep" ofType:@"aif"];
NSURL       *fileURL = [NSURL fileURLWithPath:path];
SystemSoundID	systemSoundID;
AudioServicesCreateSystemSoundID((CFURLRef)fileURL, &systemSoundID);
AudioServicesPlaySystemSound(systemSoundID);

beep.aif ファイルのパスから NSURL 変数を生成して、 AudioServicesCreateSystemSoundID() でNSURL 変数に関連づけられた SystemSoundID 変数を取得する。この SystemSoundID 変数を AudioServicesPlaySystemSound() に渡すと再生される。

一度、再生したら停止するのではなくて、ループ再生させたい場合は、再生の停止時に呼ばれるコールバック関数を設定すれば行える。

- (void)viewDidLoad
{
	:
    AudioServicesAddSystemSoundCompletion(self.systemSoundID,
                                          NULL,
                                          NULL,
                                          MyAudioServicesSystemSoundCompletionProc,
                                          self);
	:
}
 
static void MyAudioServicesSystemSoundCompletionProc(SystemSoundID ssID, void *clientData)
{
    SystemSoundServicesViewController   *systemSoundServicesViewController
        = (SystemSoundServicesViewController *)clientData;
	:
    AudioServicesPlaySystemSound(systemSoundServicesViewController.systemSoundID);
	:
}

System Sound Services はループ再生をすることは出来るが、録音機能はなく、正確に指定された周期で、指定したタイミングに再生するという観点からは、ループペダルの実装は難しいと思われる。

_ ソースコード

GitHubからどうぞ。
https://github.com/murakami/DemoAudio - GitHub

_ 関連情報

Cocoa Life KOF2011特別編 - Facebook
Cocoa勉強会 関西の会誌。

トップ «前の日記(2012-03-19) 最新 次の日記(2012-03-21)» 編集