实例解析iOS app开发中音频文件播放工具类的封装

2020-01-14 19:45:20王振洲

        //如果当前没处于播放状态,那么就播放
        return [player play];
    }

    return YES;//正在播放,那么就返回YES
}

+(void)pauseMusic:(NSString *)filename
{
    if (!filename) return;//如果没有传入文件名,那么就直接返回
    
    //1.取出对应的播放器
    AVAudioPlayer *player=[self musicPlayers][filename];
    
    //2.暂停
    [player pause];//如果palyer为空,那相当于[nil pause],因此这里可以不用做处理

}

+(void)stopMusic:(NSString *)filename
{
    if (!filename) return;//如果没有传入文件名,那么就直接返回
    
    //1.取出对应的播放器
    AVAudioPlayer *player=[self musicPlayers][filename];
    
    //2.停止
    [player stop];
    
    //3.将播放器从字典中移除
    [[self musicPlayers] removeObjectForKey:filename];
}

//播放音效
+(void)playSound:(NSString *)filename
{
    if (!filename) return;
    //1.取出对应的音效
    SystemSoundID soundID=[[self soundIDs][filename] unsignedIntegerValue];
    
    //2.播放音效
    //2.1如果音效ID不存在,那么就创建
    if (!soundID) {
        
        //音效文件的URL
        NSURL *url=[[NSBundle mainBundle]URLForResource:filename withExtension:nil];
        if (!url) return;//如果URL不存在,那么就直接返回
        
        OSStatus status = AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID);
        NSLog(@"%ld",status);
        //存入到字典中
        [self soundIDs][filename]=@(soundID);
    }
    
    //2.2有音效ID后,播放音效