iOS音效

来源:互联网 发布:淘宝美工字体 编辑:程序博客网 时间:2024/04/29 08:53
 //1. 获取音频文件的URL地址/** 提供工具类方法, 传入文件名及是否需要振动*/+ (void)playSoundWithName:(NSString *)name alert:(BOOL)alert{    /**     1. 以name为Key, SoundID为Value     2. 先判断缓存字典对一个的Value是否有值 --> soundID == 0 就代表没有值/没有缓存     3. 没有值就创建, 有的话直接播放     */            //1. 获取缓存的SoundID值    SystemSoundID soundID = [_cacheDict[name] unsignedIntValue];        //2. 如果SoundID为0, 就需要创建    if (soundID == 0) {                //3.1 URL地址 --> 音频文件地址        NSURL *url = [[NSBundle  mainBundle] URLForResource:name withExtension:nil];                //3.2 创建SystemSoundID        //传入URL只会, 会和SoundID进行绑定. 之后需要播放的时候, 只需要调用SoundID, 就能找到对应的URL地址        AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID);                //3.3 将soundID和URL添加到缓存字典中        _cacheDict[name] = @(soundID);    }        //4. 播放音效    if (alert) {        AudioServicesPlayAlertSound(soundID);    } else {        AudioServicesPlaySystemSound(soundID);    }    }/** 释放音效文件, 避免内存占用过大*/+ (void)clearMemory{    /**     1. 遍历缓存池, 获取SoundID, 清除SoundID的内存     2. 清除缓存字典     */        //1. 清除SoundID的内存    [_cacheDict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {                SystemSoundID soundID = [obj unsignedIntValue];                AudioServicesDisposeSystemSoundID(soundID);    }];        //2. 清除缓存字典    [_cacheDict removeAllObjects];}