iOS 播放系统音效

作者: Magician | 来源:发表于2016-12-28 11:12 被阅读956次

播放系统音效需要使用 AudioToolBox.framework(一套基于 C 语言的框架),其本质是将短音频注册到系统的声音服务中来播放,其特点是简单,太底层,支持震动,但也有许多限制:

  • 音效持续时间不能超过30秒
  • 音频数据必须是PCM或IMA4(IMA/ADPCM)格式
  • 音频文件必须打包成.caf、.aif或.wav格式

播放系统音效

播放系统音效的只需要调用这个方法:

void AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID);

当调用这个方法的时候需注意:

  • 声音在当前系统音频卷中播放,没有编程音量控制可用
  • 声音会立即播放
  • 循环和立体定位是不可用的
  • 每次只能播放一个声音,不支持同时播放多个声音
  • 声音在设备扬声器上播放,不使用音频路由

播放系统音效最简单,只需要知道音效的id(SoundID)就可以了。

// 系统声音
AudioServicesPlaySystemSound(1007);
// 震动 只有iPhone才能震动而且还得在设置里开启震动才行,其他的如touch就没有震动功能
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)

系统音效的ID保存在/System/Library/Audio/UISounds/(不知道怎样查看),但是可以在这里参考 http://iphonedevwiki.net/index.php/AudioServices

播放自定义音效

播放自定义音效的关键也是在 SoundID 上,主要方法有:

// 创建 SoundID
OSStatus AudioServicesCreateSystemSoundID ( CFURLRef __nonnull inFileURL,SystemSoundID * __nonnull outSystemSoundID );

// 销毁 soundID
OSStatus AudioServicesDisposeSystemSoundID ( SystemSoundID inSystemSoundID);

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

// 播放音效
// 无振动
void AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID);
void AudioServicesPlaySystemSoundWithCompletion(SystemSoundID inSystemSoundID, void (^__nullable inCompletionBlock)(void));

// 有震动
void AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID);
void AudioServicesPlayAlertSoundWithCompletion(SystemSoundID inSystemSoundID,
                                 void (^__nullable inCompletionBlock)(void));

以下是具体代码

// 获取音频文件路径
NSURL *url = [[NSBundle mainBundle] URLForResource:@"in.caf" withExtension:nil];
    
// 加载音效文件并创建 SoundID
SystemSoundID soundID = 0;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);
    
// 设置播放完成回调
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, soundCompleteCallback, NULL);
    
// 播放音效
// 带有震动
//    AudioServicesPlayAlertSound(_soundID);
// 无振动
AudioServicesPlaySystemSound(soundID);
    
// 销毁 SoundID
//    AudioServicesDisposeSystemSoundID(_soundID);

相关文章

  • iOS 播放系统音效

    播放系统音效需要使用 AudioToolBox.framework(一套基于 C 语言的框架),其本质是将短音频注...

  • 系统音频调用(转)

    iOS开发——播放系统音效、自定义音效需求大致分为三种:1.震动2.系统音效(无需提供音频文件)3.自定义音效(需...

  • iOS音频播放(系统音效播放)

    昨天遇到了系统提示音的播放(类似于系统短音提示音,按键提示音),最终发现其实系统声音的播放其实很简单,在这里做一个...

  • IOS15之音效播放

    IOS15之音效播放

  • iOS开始之制作音乐播放器

    一、音频播放与音效播放的基础知识 音效播放 1、音效播放《1》功能介绍用于播放比较短小的音效 常用作系统的提示音...

  • iOS App内短音效设置

    一. 系统音效(短音效播放)AudioToolbox framework使用AudioToolbox framew...

  • App播放短音效

    一. 系统音效(短音效播放) 引用 AudioToolbox framework使用AudioToolbox fr...

  • 音视频

    音效 1.iOS中音乐可以暂停,音效不能操作;而且音效可以立即播放,加载到本地,而音乐需要缓冲,边下边播.在iOS...

  • iOS音效播放

    当开始播放时压低其他app的声音,播放结束后恢复正常 更详细的文章请看http://www.jianshu.com...

  • ios音效播放

    概述: AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注册到...

网友评论

  • sajiner:音频文件为mp3格式也可以播放。但是如果使用系统的推迟时间后执行的api时,音频文件必须打包成.caf、.aif或.wav格式

本文标题:iOS 播放系统音效

本文链接:https://www.haomeiwen.com/subject/sfryvttx.html