张慧的博客

张慧的博客

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

需求大致分为三种:
1.震动
2.系统音效(无需提供音频文件)
3.自定义音效(需提供音频文件)
我的工具类的封装:

  1. //  
  2. //  WQPlaySound.h  
  3. //  WQSound  
  4. //  
  5. //  Created by 念茜 on 12-7-20.  
  6. //  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.  
  7. //  
  8.   
  9. #import <UIKit/UIKit.h>  
  10. #import <AudioToolbox/AudioToolbox.h>  
  11.   
  12. @interface WQPlaySound : NSObject  
  13. {  
  14.     SystemSoundID soundID;  
  15. }  
  16.   
  17. /** 
  18.  *  @brief  为播放震动效果初始化 
  19.  * 
  20.  *  @return self 
  21.  */  
  22. -(id)initForPlayingVibrate;  
  23.   
  24. /** 
  25.  *  @brief  为播放系统音效初始化(无需提供音频文件) 
  26.  * 
  27.  *  @param resourceName 系统音效名称 
  28.  *  @param type 系统音效类型 
  29.  * 
  30.  *  @return self 
  31.  */  
  32. -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type;  
  33.   
  34. /** 
  35.  *  @brief  为播放特定的音频文件初始化(需提供音频文件) 
  36.  * 
  37.  *  @param filename 音频文件名(加在工程中) 
  38.  * 
  39.  *  @return self 
  40.  */  
  41. -(id)initForPlayingSoundEffectWith:(NSString *)filename;  
  42.   
  43. /** 
  44.  *  @brief  播放音效 
  45.  */  
  46. -(void)play;  
  47.   
  48. @end  


  1. //  
  2. //  WQPlaySound.m  
  3. //  WQSound  
  4. //  
  5. //  Created by 念茜 on 12-7-20.  
  6. //  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.  
  7. //  
  8.   
  9. #import "WQPlaySound.h"  
  10.   
  11. @implementation WQPlaySound  
  12.   
  13. -(id)initForPlayingVibrate  
  14. {  
  15.     self = [super init];  
  16.     if (self) {  
  17.         soundID = kSystemSoundID_Vibrate;  
  18.     }  
  19.     return self;      
  20. }  
  21.   
  22. -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type  
  23. {  
  24.     self = [super init];  
  25.     if (self) {  
  26.         NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:resourceName ofType:type];  
  27.         if (path) {  
  28.             SystemSoundID theSoundID;  
  29.             OSStatus error =  AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &theSoundID);  
  30.             if (error == kAudioServicesNoError) {  
  31.                 soundID = theSoundID;  
  32.             }else {  
  33.                 NSLog(@"Failed to create sound ");  
  34.             }  
  35.         }  
  36.           
  37.     }  
  38.     return self;  
  39. }  
  40.   
  41. -(id)initForPlayingSoundEffectWith:(NSString *)filename  
  42. {  
  43.     self = [super init];  
  44.     if (self) {  
  45.         NSURL *fileURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];  
  46.         if (fileURL != nil)  
  47.         {  
  48.             SystemSoundID theSoundID;  
  49.             OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &theSoundID);  
  50.             if (error == kAudioServicesNoError){  
  51.                 soundID = theSoundID;  
  52.             }else {  
  53.                 NSLog(@"Failed to create sound ");  
  54.             }  
  55.         }  
  56.     }  
  57.     return self;  
  58. }  
  59.   
  60. -(void)play  
  61. {  
  62.     AudioServicesPlaySystemSound(soundID);  
  63. }  
  64.   
  65. -(void)dealloc  
  66. {   
  67.     AudioServicesDisposeSystemSoundID(soundID);  
  68. }  
  69. @end  


调用方法步骤:
1.加入AudioToolbox.framework到工程中
2.调用WQPlaySound工具类

2.1震动

  1. WQPlaySound *sound = [[WQPlaySound alloc]initForPlayingVibrate];  
  2. [sound play];  

2.2系统音效,以Tock为例

  1. WQPlaySound *sound = [[WQPlaySound alloc]initForPlayingSystemSoundEffectWith:@"Tock" ofType:@"aiff"];  
  2. [sound play];  

2.3自定义音效,将tap.aif音频文件加入到工程

  1. WQPlaySound *sound = [[WQPlaySound alloc]initForPlayingSoundEffectWith:@"tap.aif"];  
  2. [sound play];  

tap.aif音频文件样例下载点击

posted on 2012-08-16 22:26 张慧 阅读(7745) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: