AVAudioPlayer播放音乐

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

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

下面是实现代码:
ViewController.m

#import "ViewController.h"
#import 

/**
 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

你可能感兴趣的:(AVAudioPlayer播放音乐)