IOS中有三种播放音频的方式:AVAudioPlayer、音频服务、音频队列。
AVAudioPlayer在AVFoundation框架下,所以我们要导入AVFoundation.framework。
AVAudioPlayer类封装了播放单个声音的能力。播放器可以用NSURL或者NSData来初始化,要注意的是NSURL并不可以是网络url而必须是本地文件URL,因为 AVAudioPlayer不具备播放网络音频的能力,不过我们可以用过一点小手段使其具备这个能力,留待稍后讲解。
一个AVAudioPlayer只能播放一个音频,如果你想混音你可以创建多个AVAudioPlayer实例,每个相当于混音板上的一个轨道。
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设置委托是必须的: