iOS 播放系統(tǒng)音效

播放系統(tǒng)音效需要使用 AudioToolBox.framework(一套基于 C 語言的框架),其本質(zhì)是將短音頻注冊到系統(tǒng)的聲音服務(wù)中來播放,其特點(diǎn)是簡單,太底層,支持震動(dòng),但也有許多限制:

  • 音效持續(xù)時(shí)間不能超過30秒
  • 音頻數(shù)據(jù)必須是PCM或IMA4(IMA/ADPCM)格式
  • 音頻文件必須打包成.caf、.aif或.wav格式

播放系統(tǒng)音效

播放系統(tǒng)音效的只需要調(diào)用這個(gè)方法:

void AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID);

當(dāng)調(diào)用這個(gè)方法的時(shí)候需注意:

  • 聲音在當(dāng)前系統(tǒng)音頻卷中播放,沒有編程音量控制可用
  • 聲音會立即播放
  • 循環(huán)和立體定位是不可用的
  • 每次只能播放一個(gè)聲音,不支持同時(shí)播放多個(gè)聲音
  • 聲音在設(shè)備揚(yáng)聲器上播放,不使用音頻路由

播放系統(tǒng)音效最簡單,只需要知道音效的id(SoundID)就可以了。

// 系統(tǒng)聲音
AudioServicesPlaySystemSound(1007);
// 震動(dòng) 只有iPhone才能震動(dòng)而且還得在設(shè)置里開啟震動(dòng)才行,其他的如touch就沒有震動(dòng)功能
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)

系統(tǒng)音效的ID保存在/System/Library/Audio/UISounds/(不知道怎樣查看),但是可以在這里參考 http://iphonedevwiki.net/index.php/AudioServices 。

播放自定義音效

播放自定義音效的關(guān)鍵也是在 SoundID 上,主要方法有:

// 創(chuàng)建 SoundID
OSStatus AudioServicesCreateSystemSoundID ( CFURLRef __nonnull inFileURL,SystemSoundID * __nonnull outSystemSoundID );

// 銷毀 soundID
OSStatus AudioServicesDisposeSystemSoundID ( SystemSoundID inSystemSoundID);

// 添加播放完成回調(diào)
OSStatus AudioServicesAddSystemSoundCompletion ( SystemSoundIDinSystemSoundID, CFRunLoopRef __nullable inRunLoop, CFStringRef __nullableinRunLoopMode, AudioServicesSystemSoundCompletionProc __nonnullinCompletionRoutine, void * __nullable inClientData );

// 播放音效
// 無振動(dòng)
void AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID);
void AudioServicesPlaySystemSoundWithCompletion(SystemSoundID inSystemSoundID, void (^__nullable inCompletionBlock)(void));

// 有震動(dòng)
void AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID);
void AudioServicesPlayAlertSoundWithCompletion(SystemSoundID inSystemSoundID,
                                 void (^__nullable inCompletionBlock)(void));

以下是具體代碼

// 獲取音頻文件路徑
NSURL *url = [[NSBundle mainBundle] URLForResource:@"in.caf" withExtension:nil];
    
// 加載音效文件并創(chuàng)建 SoundID
SystemSoundID soundID = 0;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);
    
// 設(shè)置播放完成回調(diào)
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, soundCompleteCallback, NULL);
    
// 播放音效
// 帶有震動(dòng)
//    AudioServicesPlayAlertSound(_soundID);
// 無振動(dòng)
AudioServicesPlaySystemSound(soundID);
    
// 銷毀 SoundID
//    AudioServicesDisposeSystemSoundID(_soundID);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容