播放系统音效、自定义音效工具类
需求大致分为三种:
1.震动
2.系统音效(无需提供音频文件)
3.自定义音效(需提供音频文件)
我的工具类的封装:
01 | // |
02 | // WQPlaySound.h |
03 | // WQSound |
04 | // |
05 | // Created by 念茜 on 12-7-20. |
06 | // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. |
07 | // |
08 |
09 | #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 |
01 | // |
02 | // WQPlaySound.m |
03 | // WQSound |
04 | // |
05 | // Created by 念茜 on 12-7-20. |
06 | // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. |
07 | // |
08 |
09 | #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]; |
转自:http://blog.csdn.net/yiyaaixuexi/article/details/7870328