iOS多媒体播放音乐AVAudioPlayer和AVPlayer
1 iOS系统的音频播放方式
AVAudioPlayer AVPlayer 系统声音音频排列
AVAudioPlayer
使用简单方便,但只能播放本地音频,不支持流媒体播放
AVPlayer
iOS4.0以后,可以使用AVPlayer播放本地音频和支持流媒体播放,但是提供接口较少,处理音频不够灵活
音频队列
音频队列主要处理流媒体播放,提供了强大且灵活的API接口(C行数的接口),但是处理起来较为复杂。
2 AVAudioPlayer的使用
使用AVAudioPlayer和AVPlayer需要引用AVFoundation类库
ViewController.h
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface ViewController :UIViewController
{
AVAudioPlayer *audioplayer;
}
@end
在.m文件中的loadview方法中添加以下方法
#import "ViewController.h"
@interfaceViewController ()
@end
@implementation ViewController
@synthesize label;
@synthesize textField;
- (void)viewDidLoad
{
[superview DidLoad];
//方法一:
//NSURL *url = [NSURL fileURLWithPath:[NSString
//stringWithFormat:@"%@/想你的夜.mp3", [[NSBundle mainBundle] resourcePath]]];
//方法二
NSBundle *bundle = [NSBundlemainBundle];
NSString *urlString = [bundlepathForResource:@"想你的夜" ofType:@"mp3"];
NSURL *url = [NSURLfileURLWithPath:urlString];
NSError *error;
audioplayer = [[AVAudioPlayeralloc]initWithContentsOfURL:urlerror:&error];
//音量的控制
audioplayer.volume=0.8;//0.0~1.0之间
//循环次数,只要将AVAudioPlayer的numberOfLoops属性设为负数,音频文件就会一直循环播放直到调用stop方法
audioplayer.numberOfLoops = 3;//默认只播放一次
//播放位置
audioplayer.currentTime = 15.0;//可以指定从任意位置开始播放
//声道数
NSInteger channals = audioplayer.numberOfChannels;//只读属性
//持续时间
NSTimeInterval duration = audioplayer.duration;//获取采取的持续时间
if (audioplayer==nil) {
NSLog([error description]);
}
else{
[audioplayer play];
}
}
@end
播放声音
- [ player prepareToPlay];//分配播放所需的资源,并将其加入内部播放队列
- [player play];//播放
- [player stop];/
代理方法
加入播放出现异常,或者被更高级别的系统任务打断,我们的程序还没来得及收场就挂了,怎么办?不急,我们可以通过几个委托方法很好地处理所有的情形。
首先给player设置委托是必须的:
- player.delegate = self;
- - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag{
- //播放结束时执行的动作
- }
- - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer*)player error:(NSError *)error{
- //解码错误执行的动作
- }
- - (void)audioPlayerBeginInteruption:(AVAudioPlayer*)player{
- //处理中断的代码
- }
- - (void)audioPlayerEndInteruption:(AVAudioPlayer*)player{
- //处理中断结束的代码
- }