播放本地音乐的小呆萌

作者: ali_vera | 来源:发表于2016-05-05 14:24 被阅读109次

    简单做一个播放音乐的小demo:

    • 搭建界面,放三个按钮,播放、暂停、停止
    • 播放音效,因为文件小,所以不需要进行什么控制。音乐文件的时间比较长,那就会有暂停播放、继续播放这些控制的需求。那就不能简单的搞一个soundID去播放,而是需要用到AVAudioPlayer这个类。
    • 创建的时候,需要指定url,一个url对应一个对象,并且是只读的,不能修改。所以说,如果你想播放一首新的音乐,就需要重新创建一个AVAudioPlayer对象
    • prepareToPlay,准备播放,把音频文件加载到内存中。也可以直接调用play 方法,它就会隐式调用prepareToPlay方法
    • pause,暂定;stop,停止。
      苹果这里有一个非常不爽的地方,停止的时候,默认也会继续播放,如果需要真正挺值得话,就要将时间进行归零操作。
      • isPlaying 是否正在播放
      • duration 当前播放音乐的总时长
      • currentTime 当前播放的时间点

    下面是实现代码:
    ViewController.m

    #import "ViewController.h"
    #import <AVFoundation/AVFoundation.h>
    
    /**
     1. 需要使用AVFoundatiaon框架
     2. 创建音乐播放器
     3. 根据需求, 进行播放/暂停/停止
     */
    
    @interface ViewController ()
    @property (nonatomic, strong) AVAudioPlayer *player;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 创建音乐播放器
        
        //1. 获取URL路径
        NSURL *url = [[NSBundle mainBundle] URLForResource:@"xxx.mp3" withExtension:nil];
        
        //2. 创建一个error对象
        NSError *error;
        
        //3. 创建音乐播放器
        self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
        
        if (error) {
            NSLog(@"有错误产生是的逻辑判断");
        }
    }
    
    - (IBAction)playClick:(id)sender {
        //1. 准备播放 --> 将音频文件加载到内存中 --> 这句话可以不写 --> play会隐式调用prepareToPlay方法. 但是规范来说, 还是会写上
        [self.player prepareToPlay];
        
        //2. 开始播放
        [self.player play];
    }
    
    - (IBAction)pauseClick:(id)sender {
        // 暂停播放
       [self.player pause];
    }
    
    - (IBAction)stopClick:(id)sender {
        // 停止播放
        [self.player stop];
        
        // 归零操作 / 时间重置 currentTime--> 秒为单位
        self.player.currentTime = 0;
    }
    
    @end
    

    相关文章

      网友评论

        本文标题:播放本地音乐的小呆萌

        本文链接:https://www.haomeiwen.com/subject/lmedrttx.html