系统声音服务(System Sound Services)提供了一个接口,用于播放不超过30秒的声音。它支持的文件格式有限,具体地说只有CAF、AIF和使用PCM或IMA/ADPCM数据的WAV文件。由于这些函数没有提供操纵声音和控制音量的功能,所以当你为多媒体或者游戏创建专门的配乐时,不要使用系统声音服务。

iOS使用系统声音服务来支持三种不同的通知:
1. 声音:立刻播放一个简单的声音文件。如果手机被设置为静音,用户什么也听不到
2. 提醒:播放一个声音文件,如果手机被设置为静音或震动,将通过震动提醒用户
3. 震动:震动手机,而不考虑其他设置

要在项目中使用系统声音服务,首先在自己的工程中添加AudioToolbox.framework库,在.m文件中添加头文件:要导入AudioToolbox.h

  1. #import <AudioToolbox/AudioToolbox.h>

系统声音服务并非是通过类实现的,而是使用传统的C语言函数调用来触发播放操作。要播放音频,需要使用的两个函数是AudioServicesCreateSystemSoundID 和 AudioServicesPlaySystemSound。还需要声明一个类型为SystemSoundID的变量,它表示要使用的声音文件。下面演示了如何加载并播放声音:

然后在需要打开声音的地方添加代码:AudioServicesPlaySystemSound(audioID);

其中audioID就是你需要打开系统声音的id号:附上系统对应提示音对照表:

There are some predefined system sounds, for the system sound ID in the range 1000 to 2000 (decimal), as shown below (from 2.0 to 5.0 beta). The system sounds are all stored in/System/Library/Audio/UISounds/.

Sound ID File name (iPhone) File name (iPod Touch) Category Note
1000 new-mail.caf new-mail.caf MailReceived  
1001 mail-sent.caf mail-sent.caf MailSent  
1002 Voicemail.caf Voicemail.caf VoicemailReceived  
1003 ReceivedMessage.caf ReceivedMessage.caf SMSReceived  
1004 SentMessage.caf SentMessage.caf SMSSent  
1005 alarm.caf sq_alarm.caf CalendarAlert  
1006 low_power.caf low_power.caf LowPower  
1007 sms-received1.caf sms-received1.caf SMSReceived_Alert  
1008 sms-received2.caf sms-received2.caf SMSReceived_Alert  
1009 sms-received3.caf sms-received3.caf SMSReceived_Alert  
1010 sms-received4.caf sms-received4.caf SMSReceived_Alert  
1011 - - SMSReceived_Vibrate  
1012 sms-received1.caf sms-received1.caf SMSReceived_Alert  
1013 sms-received5.caf sms-received5.caf SMSReceived_Alert  
1014 sms-received6.caf sms-received6.caf SMSReceived_Alert  
1015 Voicemail.caf Voicemail.caf - Available since 2.1
1016 tweet_sent.caf tweet_sent.caf SMSSent Available since 5.0
1020 Anticipate.caf Anticipate.caf SMSReceived_Alert Available since 4.2
1021 Bloom.caf Bloom.caf SMSReceived_Alert Available since 4.2
1022 Calypso.caf Calypso.caf SMSReceived_Alert Available since 4.2
1023 Choo_Choo.caf Choo_Choo.caf SMSReceived_Alert Available since 4.2
1024 Descent.caf Descent.caf SMSReceived_Alert Available since 4.2
1025 Fanfare.caf Fanfare.caf SMSReceived_Alert Available since 4.2
1026 Ladder.caf Ladder.caf SMSReceived_Alert Available since 4.2
1027 Minuet.caf Minuet.caf SMSReceived_Alert Available since 4.2
1028 News_Flash.caf News_Flash.caf SMSReceived_Alert Available since 4.2
1029 Noir.caf Noir.caf SMSReceived_Alert Available since 4.2
1030 Sherwood_Forest.caf Sherwood_Forest.caf SMSReceived_Alert Available since 4.2
1031 Spell.caf Spell.caf SMSReceived_Alert Available since 4.2
1032 Suspense.caf Suspense.caf SMSReceived_Alert Available since 4.2
1033 Telegraph.caf Telegraph.caf SMSReceived_Alert Available since 4.2
1034 Tiptoes.caf Tiptoes.caf SMSReceived_Alert Available since 4.2
1035 Typewriters.caf Typewriters.caf SMSReceived_Alert Available since 4.2
1036 Update.caf Update.caf SMSReceived_Alert Available since 4.2
1050 ussd.caf ussd.caf USSDAlert  
1051 SIMToolkitCallDropped.caf SIMToolkitCallDropped.caf SIMToolkitTone  
1052 SIMToolkitGeneralBeep.caf SIMToolkitGeneralBeep.caf SIMToolkitTone  
1053 SIMToolkitNegativeACK.caf SIMToolkitNegativeACK.caf SIMToolkitTone  
1054 SIMToolkitPositiveACK.caf SIMToolkitPositiveACK.caf SIMToolkitTone  
1055 SIMToolkitSMS.caf SIMToolkitSMS.caf SIMToolkitTone  
1057 Tink.caf Tink.caf PINKeyPressed  
1070 ct-busy.caf ct-busy.caf AudioToneBusy There was no category for this sound before 4.0.
1071 ct-congestion.caf ct-congestion.caf AudioToneCongestion There was no category for this sound before 4.0.
1072 ct-path-ack.caf ct-path-ack.caf AudioTonePathAcknowledge There was no category for this sound before 4.0.
1073 ct-error.caf ct-error.caf AudioToneError There was no category for this sound before 4.0.
1074 ct-call-waiting.caf ct-call-waiting.caf AudioToneCallWaiting There was no category for this sound before 4.0.
1075 ct-keytone2.caf ct-keytone2.caf AudioToneKey2 There was no category for this sound before 4.0.
1100 lock.caf sq_lock.caf ScreenLocked  
1101 unlock.caf sq_lock.caf ScreenUnlocked  
1102 - - FailedUnlock  
1103 Tink.caf sq_tock.caf KeyPressed  
1104 Tock.caf sq_tock.caf KeyPressed  
1105 Tock.caf sq_tock.caf KeyPressed  
1106 beep-beep.caf sq_beep-beep.caf ConnectedToPower  
1107 RingerChanged.caf RingerChanged.caf RingerSwitchIndication  
1108 photoShutter.caf photoShutter.caf CameraShutter  
1109 shake.caf shake.caf ShakeToShuffle Available since 3.0
1110 jbl_begin.caf jbl_begin.caf JBL_Begin Available since 3.0
1111 jbl_confirm.caf jbl_confirm.caf JBL_Confirm Available since 3.0
1112 jbl_cancel.caf jbl_cancel.caf JBL_Cancel Available since 3.0
1113 begin_record.caf begin_record.caf BeginRecording Available since 3.0
1114 end_record.caf end_record.caf EndRecording Available since 3.0
1115 jbl_ambiguous.caf jbl_ambiguous.caf JBL_Ambiguous Available since 3.0
1116 jbl_no_match.caf jbl_no_match.caf JBL_NoMatch Available since 3.0
1117 begin_video_record.caf begin_video_record.caf BeginVideoRecording Available since 3.0
1118 end_video_record.caf end_video_record.caf EndVideoRecording Available since 3.0
1150 vc~invitation-accepted.caf vc~invitation-accepted.caf VCInvitationAccepted Available since 4.0
1151 vc~ringing.caf vc~ringing.caf VCRinging Available since 4.0
1152 vc~ended.caf vc~ended.caf VCEnded Available since 4.0
1153 ct-call-waiting.caf ct-call-waiting.caf VCCallWaiting Available since 4.1
1154 vc~ringing.caf vc~ringing.caf VCCallUpgrade Available since 4.1
1200 dtmf-0.caf dtmf-0.caf TouchTone  
1201 dtmf-1.caf dtmf-1.caf TouchTone  
1202 dtmf-2.caf dtmf-2.caf TouchTone  
1203 dtmf-3.caf dtmf-3.caf TouchTone  
1204 dtmf-4.caf dtmf-4.caf TouchTone  
1205 dtmf-5.caf dtmf-5.caf TouchTone  
1206 dtmf-6.caf dtmf-6.caf TouchTone  
1207 dtmf-7.caf dtmf-7.caf TouchTone  
1208 dtmf-8.caf dtmf-8.caf TouchTone  
1209 dtmf-9.caf dtmf-9.caf TouchTone  
1210 dtmf-star.caf dtmf-star.caf TouchTone  
1211 dtmf-pound.caf dtmf-pound.caf TouchTone  
1254 long_low_short_high.caf long_low_short_high.caf Headset_StartCall  
1255 short_double_high.caf short_double_high.caf Headset_Redial  
1256 short_low_high.caf short_low_high.caf Headset_AnswerCall  
1257 short_double_low.caf short_double_low.caf Headset_EndCall  
1258 short_double_low.caf short_double_low.caf Headset_CallWaitingActions  
1259 middle_9_short_double_low.caf middle_9_short_double_low.caf Headset_TransitionEnd  
1300 Voicemail.caf Voicemail.caf SystemSoundPreview  
1301 ReceivedMessage.caf ReceivedMessage.caf SystemSoundPreview  
1302 new-mail.caf new-mail.caf SystemSoundPreview  
1303 mail-sent.caf mail-sent.caf SystemSoundPreview  
1304 alarm.caf sq_alarm.caf SystemSoundPreview  
1305 lock.caf sq_lock.caf SystemSoundPreview  
1306 Tock.caf sq_tock.caf KeyPressClickPreview The category was SystemSoundPreview before 3.2.
1307 sms-received1.caf sms-received1.caf SMSReceived_Selection  
1308 sms-received2.caf sms-received2.caf SMSReceived_Selection  
1309 sms-received3.caf sms-received3.caf SMSReceived_Selection  
1310 sms-received4.caf sms-received4.caf SMSReceived_Selection  
1311 - - SMSReceived_Vibrate  
1312 sms-received1.caf sms-received1.caf SMSReceived_Selection  
1313 sms-received5.caf sms-received5.caf SMSReceived_Selection  
1314 sms-received6.caf sms-received6.caf SMSReceived_Selection  
1315 Voicemail.caf Voicemail.caf SystemSoundPreview Available since 2.1
1320 Anticipate.caf Anticipate.caf SMSReceived_Selection Available since 4.2
1321 Bloom.caf Bloom.caf SMSReceived_Selection Available since 4.2
1322 Calypso.caf Calypso.caf SMSReceived_Selection Available since 4.2
1323 Choo_Choo.caf Choo_Choo.caf SMSReceived_Selection Available since 4.2
1324 Descent.caf Descent.caf SMSReceived_Selection Available since 4.2
1325 Fanfare.caf Fanfare.caf SMSReceived_Selection Available since 4.2
1326 Ladder.caf Ladder.caf SMSReceived_Selection Available since 4.2
1327 Minuet.caf Minuet.caf SMSReceived_Selection Available since 4.2
1328 News_Flash.caf News_Flash.caf SMSReceived_Selection Available since 4.2
1329 Noir.caf Noir.caf SMSReceived_Selection Available since 4.2
1330 Sherwood_Forest.caf Sherwood_Forest.caf SMSReceived_Selection Available since 4.2
1331 Spell.caf Spell.caf SMSReceived_Selection Available since 4.2
1332 Suspense.caf Suspense.caf SMSReceived_Selection Available since 4.2
1333 Telegraph.caf Telegraph.caf SMSReceived_Selection Available since 4.2
1334 Tiptoes.caf Tiptoes.caf SMSReceived_Selection Available since 4.2
1335 Typewriters.caf Typewriters.caf SMSReceived_Selection Available since 4.2
1336 Update.caf Update.caf SMSReceived_Selection Available since 4.2
1350 - - RingerVibeChanged  
1351 - - SilentVibeChanged  
4095 - - Vibrate There was no category for this sound before 2.2.
In the SDK this is the constant kSystemSoundID_Vibrate.

当然你可以定义自己的提示音,打开自己工程中的音频文件,代码如下:

static SystemSoundID _ringSystemSoundID;

static void ringAudioServicesSystemSoundCompletionProc(SystemSoundID ssID, void *clientData)

{

AudioServicesPlayAlertSound(ssID);

}

void ringStartRing()

{

// 获取文件所在的路径
    NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], @"/jad0007a.wav"];

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient

error:nil];

//利用打开的文件创建一个soundID

AudioServicesCreateSystemSoundID((__bridge CFURLRef) path, &_ringSystemSoundID);

//当声音播放完后的回调函数,完成后将调用ringAudioServicesSystemSoundCompletionProc函数进行循环播放

AudioServicesAddSystemSoundCompletion(_ringSystemSoundID, NULL, NULL, ringAudioServicesSystemSoundCompletionProc, NULL);

//通过创建的soundID打开对应的音频文件

AudioServicesPlayAlertSound(_ringSystemSoundID);

}

通过调用AudioServicesAddSystemSoundCompletion 添加可选的系统声音完成回调,通知你的程序声音已经播放完毕。如果你不使用一个接一个的短声音,那么一般可以跳过该步骤。

void ringStopRing()

{

if (_ringSystemSoundID != 0) {

//移除系统播放完成后的回调函数

AudioServicesRemoveSystemSoundCompletion(_ringSystemSoundID);

//销毁创建的SoundID

AudioServicesDisposeSystemSoundID(_ringSystemSoundID);

_ringSystemSoundID = 0;

}

}

调用 AudioServicesDisposeSystemSoundID 以及相应的声音可以清除你的声音,该操作可以释放声音对象以及相关的所有资源

对于提醒音来说,与系统声音之间的差别在于,如果手机处于静音状态,提醒音将自动触发震动。提醒音的设置和用法与系统声音相同,区别在于系统声音调用AudioServicesPlaySystemSound,而提醒音调用AudioServicesPlayAlertSound。

震动更容易实现,只需要调用AudioServicesPlaySystemSound,并将常量kSystemSoundID_Vibrate传递给它:

  1. AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

如果视图震动不支持震动的设备(如iPad2),将静默失败。因此将震动代码留在应用程序中不会有任何害处,而不管目标设备是什么。

////////////

AVAudioPlayer和SystemSoundService。这两种功能在一定程度上都适合作为游戏音效的播放方式。而两者也各有其优缺点。下面我们来总结一下有哪些:

1)AVAudioPlayer的优点

(1)可以播放任意长度音乐;

(2)可以循环播放;

(3)可以控制播放的时间;

(4)可以控制声道的音量实现立体声效果;

(5)可以调整音量。

2)AVAudioPlayer的缺点

(1)播放之前必须先加载,不能立即播放;

(2)一次一个AudioPlayer只能播放所加载的音乐,不能同时播放好几次同样的音乐。

(3)没有振动效果

3)SystemSoundService的优点:

(1)能够立即播放

(2)能够在同一时间播放多次音乐

(3)可以加上振动效果

4)SystemSoundService的缺点:

(1)不能循环播放

(2)不能控制播放时间

(3)不能控制声道

(4)不能控制音量

(5)不能暂停音乐

因此,我们可以考虑综合两者的功能!

iOS系统声音服务(System Sound Services)的更多相关文章

  1. iOS系统声音列表

    iOS系统声音列表 效果 说明 1. 点击cell就能发出声音 2. 只需要给出声音编号,就可以,非常简单易用 源码 https://github.com/YouXianMing/iOS-Utilit ...

  2. Swift - 系统声音服务的使用(播放声音,提醒,震动)

    1,系统声音服务介绍: 系统声音服务提供了一个Api,用于播放不超过30秒的声音.它支持的文件格式有限,具体的说只有CAF.AIF和使用PCM或IMA/ADPCM数据的WAV文件. 但此函数没有提供操 ...

  3. 使用System Sound Services 播放音效(最简单,比较底层),调用AudioServicesPlaySystemSound()

    1.适用范围:一些很小的提示或警告音频. 2.使用限制: 声音长度不能超过30秒 声音文件必须是PCM或IMA4(IMA/ADPCM)格式.(有时候可播放一些特殊的.mp3) 打包成.caf..aif ...

  4. iOS 之播放系统声音

    导入框架: 代码: #import <UIKit/UIKit.h> #import <AudioToolbox/AudioToolbox.h> @interface MsgPl ...

  5. OSX/iOS 播放系统声音

    方法1: 系统会自带了些声音,有时候一些操作用必要自己播放一下声音提醒一下,用bash的直接say something就ok了,写代码的时候呢?原来很简单的,一句: [[NSSound soundNa ...

  6. 检测iOS系统的定位服务

    [CLLocationManager locationServicesEnabled]检测的是整个iOS系统的位置服务开关

  7. IOS调用系统声音(键盘声音)

    #import <AudioToolbox/AudioToolbox.h> AudioServicesPlaySystemSound(1106); 注:括号中为系统声音的id,详见 htt ...

  8. ios开发——实用技术篇Swift篇&系统声音

    系统声音 // MARK: - 系统声音 /*----- 系统声音 ------*/ @IBAction func systemSound() { //建立的SystemSoundID对象 var s ...

  9. iOS调用系统声音与振动

    如何调用系统声音?[iphone 调用系统铃声与震动功能] 首先要在工程里加入Audio Toolbox framework这个库,然后在需要调用的文件里#import <AudioToolbo ...

随机推荐

  1. mysql_表_操作

    1.创建表 # 基本语法: create table 表名( 列名 类型 是否可以为空 默认值 自增 主键, 列名 类型 是否可以为空 )ENGINE=InnoDB DEFAULT CHARSET=u ...

  2. Java线程的5种状态及切换

    ava中的线程的生命周期大体可分为5种状态. 1. 新建(NEW):新创建了一个线程对象. 2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方 ...

  3. The JVM found at JAVA_HOME is damaged.Please reinstall or define EXE4J_JAVA_HOME to point to an installed 32-bit JDK or JRE

    一.介绍 exe4j是一个很棒的工具,可以把jar包打包成exe进行运行.他可以把jre环境和打包的exe进行集成,使得打包后的exe应用程序可以在没有安装java的机器上运行(前提是要把exe和jr ...

  4. DumpBinary

    stdafx.h #include "targetver.h" #include <stdio.h> #include <tchar.h> #include ...

  5. Python 中星号作用:解包&打散

    python中’*’和’**’的使用分两个方面,一个是计算,另一个是参数传递过程中元素的打包和解包.  计算方面 ‘*’和’**’在python中最常见的作用分别是‘相乘’和‘乘幂’,如下: > ...

  6. Android系统移植与调试之------->如何修改Android手机NFC模块,使黑屏时候能够使用NFC

    我们都知道在不修改源代码的情况下,只能是解锁之后才能使用NFC功能.而在锁屏和黑屏2个状态下是没办法用NFC的,但是最近有个客户要求手机在黑屏状态下能够使用NFC,因此我们需要去修改Android源代 ...

  7. 000-mysql小技巧

    1.使用Navicat 链接5.7版本出现 mysql 5.7.9 [Err] 1055报错解决,[Err] 1055 – Expression #1 of ORDER BY clause is no ...

  8. 解决网络 下载 句柄无效。 (异常来自 HRESULT:0x80070006 (E_HANDLE))

    首先要共享该文件 其次 在安全里加IISSHARED 是IIS账号 下载代码 #region 下载        /// <summary>        /// 下载        // ...

  9. Python之异常处理(Day27)

    一.错误和异常 part1: 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def test: pass #语法错 ...

  10. HackerRank - lonely-integer 【水】

    题意 给出一系列数字,输出那个出现次数为奇数次的数字 思路 用MAP标记一下,在输入的时候判断一下 之前有没有输入过,如果有,就抹掉 最后剩下的那个 就是出现次数为奇数的 或者可以用 位运算 AC代码 ...