简单做一个播放音乐的小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