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 
系统声音服务并非是通过类实现的,而是使用传统的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)不能暂停音乐
因此,我们可以考虑综合两者的功能!

你可能感兴趣的:(iOS系统声音ID)