AudioServicesAddSystemSoundCompletion(//目標聲音的SystemSoundID
SystemSoundID,
//main run loop
CFRunLoopRef,
//kCFRunLoopDefaultMode
CFStringRef,
//聲音播放完成之後會呼叫的函式
AudioServicesSystemSoundCompletionProc,
//user data
*void);
AudioServicesAddSystemSoundCompletion(soundID,
NULL,
NULL,
afterPlaySound,
NULL);
而被呼叫的函式寫法如下。
static void afterPlaySound (SystemSoundID sound_id, void* user_data) {
//聲音播放完成時的處理
}
特別注意這裡的函式必須是 Static 型態,因為他只能被內部呼叫,也就是只能被位於相同檔案的函式呼叫。此外,如果我們在此函式中又播放一次相同 System Sound ID 的聲音時,則會進入無窮迴圈。
另外如果要移除 Resources 裡的聲音檔與 System Sound ID 的連結時,可以考慮使用以下指令。
AudioServicesDisposeSystemSoundID(SystemSoundID);
執行此指令之後,原本 System Sound ID 將會呈現 NULL 的情況,也就無法透過 System Sound ID 播放聲音或執行相關指令。
沒有留言:
張貼留言