iOS 播放音效

音效:通俗的说是短音频,音频文件必须满足下面的条件

  1、播放的时间不能超过30秒

  2、数据必须是 PCM或者IMA4流格式

  3、必须被打包成下面三个格式之一:Core Audio Format (.caf), Waveform audio (.wav), 或者 Audio Interchange File (.aiff)

1.引入框架

1 #import <AudioToolbox/AudioToolbox.h>

2.播放音效

 1 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
 2 {
 3     // 声明SoundID
 4     SystemSoundID soundID ;
 5     self.soundID = soundID;
 6     // 获取音效文件的url
 7     NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_10.wav" withExtension:nil];
 8     // 根据url创建
 9     AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);
10     AudioServicesPlaySystemSound(soundID);
11 };

  记忆技巧:

  1.播放音效的核心代码,申明音效ID,然后播放音效

   1 SystemSoundID soundID ; 2 AudioServicesPlaySystemSound(soundID);

  2.用下面这句给soundID赋值

   1 AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);

  3.赋值语句有2个参数,一个是音效文件资源路径,另外一个就是之前申明soundID了

   1 NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_10.wav" withExtension:nil];

3.播放完音效后,应该销毁

1 - (void)didReceiveMemoryWarning
2 {
3     [super didReceiveMemoryWarning];
4     AudioServicesDisposeSystemSoundID(self.soundID);
5     self.soundID = 0;
6 }


重构上述代码,提供一个播放音效的工具类,重构代码来自MJ老师

1.工具类的.h文件

 1 #import <Foundation/Foundation.h>
 2
 3 @interface MJAudioTool : NSObject
 4
 5 /**
 6  *  播放音效
 7  *
 8  *  @param filename 音效文件名
 9  */
10 + (void)playSound:(NSString *)filename;
11
12 /**
13  *  销毁音效
14  *
15  *  @param filename 音效文件名
16  */
17 + (void)disposeSound:(NSString *)filename;
18 @end

2.工具类.m文件

 1 #import "MJAudioTool.h"
 2 #import <AudioToolbox/AudioToolbox.h>
 3
 4 @implementation MJAudioTool
 5
 6 // 字典: filename作为key, soundID作为value
 7 // 存放所有的音频ID
 8 static NSMutableDictionary *_soundIDDict;
 9 + (void)initialize
10 {
11     _soundIDDict = [NSMutableDictionary dictionary];
12 }
13
14 + (void)playSound:(NSString *)filename
15 {
16     if (!filename) return;
17
18     // 1.从字典中取出soundID
19     SystemSoundID soundID = [_soundIDDict[filename] unsignedLongValue];
20     if (!soundID) { // 创建
21         // 加载音效文件
22         NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
23
24         if (!url) return;
25
26         // 创建音效ID
27         AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);
28
29         // 放入字典
30         _soundIDDict[filename] = @(soundID);
31     }
32
33     // 2.播放
34     AudioServicesPlaySystemSound(soundID);
35 }
36
37 + (void)disposeSound:(NSString *)filename
38 {
39     if (!filename) return;
40
41     SystemSoundID soundID = [_soundIDDict[filename] unsignedLongValue];
42     if (soundID) {
43         // 销毁音效ID
44         AudioServicesDisposeSystemSoundID(soundID);
45
46         // 从字典中移除
47         [_soundIDDict removeObjectForKey:filename];
48     }
49 }
50
51 @end

3.控制器的.m文件

播放音效

1 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
2 {
3     [MJAudioTool playSound:@"buyao.wav"];
4     [MJAudioTool playSound:@"m_03.wav"];
5 }

销毁音效

1 - (void)didReceiveMemoryWarning
2 {
3     [super didReceiveMemoryWarning];
4
5     [MJAudioTool disposeSound:@"m_03.wav"];
6     [MJAudioTool disposeSound:@"buyao.wav"];
7 }

  

  

时间: 2025-01-04 10:27:51

iOS 播放音效的相关文章

IOS播放音乐和音效

1.播放音效 1.1 首先获取到音效文件路径 1 NSString *path = [[NSBundle mainBundle] pathForResource:soundFileName ofType:nil]; 1.2 将音效文件路径转换为NSURL NSURL *url = [NSURL fileURLWithPath:path]; 1.3 加载音效文件,并返回SystemSoundID(用于播放此音效) SystemSoundID soundId ; //如下方式是C语言的框架,是将音频

iOS 播放音频的几种方法

iOS 播放音频的几种方法 iPhone OS 主要提供以下了几种播放音频的方法: System Sound Services AVAudioPlayer 类 Audio Queue Services OpenAL 1. System Sound Services System Sound Services 是最底层也是最简单的声音播放服务,调用 AudioServicesPlaySystemSound 这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有

ios 短音效的使用

1.通用短音效ID的获取 #import <Foundation/Foundation.h> @interface MJAudioTool : NSObject /** * 播放音效 * * @param filename 音效文件名 */ + (void)playSound:(NSString *)filename; /** * 销毁音效 * * @param filename 音效文件名 */ + (void)disposeSound:(NSString *)filename; @end

android SoundPool播放音效

MediaPlayer的缺点: 资源占用量高,延时时间较长 不支持多个音效同时播放 SoundPool主要用于播放一些较短的声音片段,CPU资源占用率低和反应延时小,还支持自行色设置声音的品质,音量,播放比率等参数,避免使用SoundPool来播放歌曲或者做游戏背景音乐,只有那些短促的密集的声音才考虑使用SoundPool播放 构造器: public SoundPool (int maxStreams, int streamType, int srcQuality) Parameters max

Cocos2d 播放音效

Cocos2D对音乐/音效播放的封装已经很好了,下边是例子: 定义2个文件: [cpp] view plaincopy #define MUSIC_FILE        "LOLBgMusic.mp3" #define EFFECT_FILE      "Attack.wav" 在初始化的时候预加载音乐/音效文件: [cpp] view plaincopy //预加载 CocosDenshion::SimpleAudioEngine::sharedEngine()

Android设备 cocos2dx 骨骼动画注册事件播放音效,退到后台再返回黑屏问题

最近遇到一个cocos2dx 骨骼动画注册事件播放音效,在骨骼动画播放的时候,按HOME键退到桌面,再次打开游戏的时候,会黑屏. 解决办法如下,可能不是太完美,至少解决了大部分问题. 1.在org.cocos2dx.lib下的 Cocos2dxRenderer.java 中添加native方法 public static native void setIsPause(boolean isPause); 2.在Cocos2dxRenderer.java对应的Java_org_cocos2dx_li

iOS 播放系统声音

准备工作: 找到需要的声音(不要大于30秒),如果是mp3格式,则直接将其后缀名改为.wav: 将声音文件添加到系统中. 第一步:导入  AudioToolbox.framework  文件 第二步:在需要声音的类的.h文件中添加     #import <AudioToolbox/AudioToolbox.h> 同时,声明如下语句 static SystemSoundID shake_sound_male_id = 0; 第三步:编码,如下: 1. 播放震动 AudioServicesPla

iOS播放音乐

http://www.jianshu.com/p/ce279bc773dd iOS播放音乐.后台播放.控制台控制相关的一些TIPS,基于StreamingKit 字数963 阅读595 评论0 喜欢9 首先给大家放一个StreamingKit的链接 简单的播放使用例子,可以看开源作者的演示demo. 由于整个播放器涉及到UI啊数据啊比较多,所以就不全抠下来当demo了,就在这里列一点TIPS,希望能帮助到大家. 歌曲播放形式我是这么写的: .h里: /** 歌曲播放形式 */ typedef e

安卓播放音效

public class MyActivity extends Activity {       /** Called when the activity is first created. */       SoundPool sp;                           //得到一个声音池引用       HashMap<Integer,Integer> spMap;           //得到一个map的引用       Button b1;