iOS系统声音ID

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

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

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

#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传递给它:

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)不能暂停音乐
因此,我们可以考虑综合两者的功能!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容