• IOS开发之音效/音频播放


     

    音频播放:

         1.音效播放

         2.音乐播放

     

    (1)音频播放 :

            《1》系统声音 短小的声音 使用的框架 AudioToolBox

            《2》1、AudioServicesPlaySystemSound 播放系统声音

                2、AudioServicesPlayAlertSound播放系统声音有震动

            《3》使用:

                1.声明声音的ID  通过声音的id来区分是哪一个音效  无符号整形

                2.创建声音的服务 (告诉系统有一个可以使用的soundID) 需要声音文件路径和声音的ID

                3.播放声音   声音ID

      代码如下:

    -(void)playSound{
        
        //    根据这个数字来区分是哪一个系统声音的
        SystemSoundID soundID = 1;
        //    创建一个系统声音的服务
        AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)([[NSBundle mainBundle]URLForResource:@"胜利.aiff" withExtension:nil]), &soundID);
        //    播放系统声音
        AudioServicesPlaySystemSound(soundID);
        AudioServicesPlayAlertSound(soundID);
        
     
    }

        注意:这里只是播放短的音效,比如提示音,较长的音乐不能播放,使用的是纯C语言写的,    

    (2)音频播放 :音乐 音频  指的是那些音乐类似的长文件

            《1》介绍

                1.   使用框架  AVFoundation框架  AVaudioplayer

                2.注意:

                         (1)必须声明属性、全局变量的音乐对象才可以播放

                         (2)在退出播放页面的时候 一定要把播放对象制空 同时把delegate制空

                3.属性

            《2》使用

                1.资源文件路径

                2.初始化播放器

                3.设置播放器

                4.预播放

                5.播放

    -(void)playMusicWithName:(NSString *)name{
        NSError *error;
    //    创建一个音乐播放对象
        avplayer = [[AVAudioPlayer alloc]initWithContentsOfURL:[[NSBundle mainBundle]URLForResource:name withExtension:nil]  error:&error];
    //   如果有错误  打印出来
        if (error) {
            NSLog(@"%@",error);
        }
        
    //    预播放
        [avplayer prepareToPlay];
        NSLog(@"%lu",(unsigned long)avplayer.numberOfChannels);
        
    //    如果想设置播放速率  必须得先开启允许设置
    avplayer.enableRate = YES;
    //    速率rate
    //    player.rate = 10;
        
    //    峰值  获得峰值  必须设置enableMeters=YES;
    //    更新峰值
    //    [avplayer updateMeters];
        NSLog(@"%f",[avplayer peakPowerForChannel:2]);//当前峰值
        NSLog(@"%f",[avplayer averagePowerForChannel:2]);//获得平均峰值
    
    //    声道 (-1.0 左声道  0.0中间  1.0右声道)
    //    player.pan = -1.0;
    
    //    循环次数 0播放一次  负数循环播放 正数设置数字+1
    avplayer.numberOfLoops = 0;
    
    //avplayer.delegate = self;
    
    //    设置音乐播放器 当前播放的时间
    //    player.currentTime = 50;
    
    //    duration 总时长  只读
    NSLog(@"乐音的总时长%f",avplayer.duration);
    
    NSLog(@"通道的数量%ld",avplayer.numberOfChannels);
        
    NSLog(@"设备当前时间%f",avplayer.deviceCurrentTime);
    
    //    设置播放次数
        avplayer.numberOfLoops = -1;
    
        
        
    //     播放
    //    [avplayer play];
    }


         这里也需要提示一下几个代理方法在音乐播放的时候可以调用:

    //播放完成的时候调用

    - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{}

    //解码错误的时候调用

    - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError * __nullable)error{}

    //被打扰开始中断的时候调用

    - (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{}

    //中断结束的时候调用

    - (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags{}

              好了,感觉自己理解的可以试着去做一个音乐播放器了 ,尝试一下

  • 相关阅读:
    妹妹
    小猴和北极熊
    盛趣->盛大
    运维
    操之过急
    修马路
    博人传
    醉酒
    【跨域】SpringBoot跨域,拦截器中,第一次获取的请求头为NULL,发送两次请求的处理方式
    【Linux】Linux安装Tomcat
  • 原文地址:https://www.cnblogs.com/Biaoac/p/5308437.html
Copyright © 2020-2023  润新知