iOS 多媒体(一)音频播放

iOS提供播放音频的方法:

  1. System Sound Services
  2. AVAudioPlayer
  3. MPMusicPlayerController

1 System Sound Services

System Sound Services 方式只适合播放一些很小的提示或警告音频。有一些限制:

  • 声音长度不超过30s。
  • 不能控制播放进度
  • 声音文件必须是PCM或IMA4格式。
  • 打包成.caf、.aif或.wav的文件
  • 无循环播放和立体声控制
  • 调用方法后立即播放声音
System Sound Service使用很简单。
1 由于System Sound Service 需要AudioToolbox框架的支持,所以需要导入AudioToolbox.framework
2 并在需要的地方导入头文件     #import <AudioToolbox/AudioToolbox.h>
/*
 *System Sound Service
 */
- (void)systemSound {
    NSLog(@"systemSound");
    // 1.获得音效文件的路径
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"brid.caf" withExtension:nil];
    // 2.加载音效文件,得到对应的音效ID  只需加载一次
    SystemSoundID soundID = 0;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID);
    //添加回调,播放完成后回调complemention 这一步可加可不加。
    AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, (void *)complemention, NULL);
    // 3.播放音效
    AudioServicesPlaySystemSound(soundID);
    //携带震动功能
    //AudioServicesPlayAlertSound(soundID);
}
不用的时候可以释放音效资源:

AudioServicesDisposeSystemSoundID(soundID);

2 AVAudioPlayer

1 导入AVAudioPlayer.framework
2 引入头文件  #import <AVFoundation/AVFoundation.h>
如果为audio player设置代理,则需实现协议 AVAudioPlayerDelegate
AVAudioPlayer有许多方法不一一说了。
<pre name="code" class="objc">- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"1201111234" withExtension:@".mp3"];
    _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    //准备播放(缓冲,提高播放的流畅性)
    [_audioPlayer prepareToPlay];
    //循环次数
    [_audioPlayer setNumberOfLoops:1];
    //时长
    NSLog(@"audio player duration:%f",[_audioPlayer duration]);
    
    //为AudioPlayer设置代理,监听播放事件
    _audioPlayer.delegate = self;
}
- (IBAction)palyAudioPlayer:(id)sender {
    if(!_audioPlayer.isPlaying){
        [_audioPlayer play];
    }
}
- (IBAction)pauseAudioPlayer:(id)sender {
    if(_audioPlayer.isPlaying){
        [_audioPlayer pause];
    }
}
- (IBAction)stopAudioPlayer:(id)sender {
    [_audioPlayer stop];
}
//监听播放完
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
    NSLog(@"finish playing flag:%d",flag);
}
 
 

3 MPMusicPlayerController

播放器类型两种:
  • applicationMusicPlayer:该播放器是一种内置播放器,当程序退出后停止播放。
  • iPodMusicPlayer:该播放器与iPod播放器内的信息相关,退出后不会停止播放。

使用其播放音乐步骤:

  1. 创建MPMusicPlayerController对象。(导入#import <MediaPlayer/MediaPlayer.h>
  2. 调用MPMusicPlayerController对象的setQueueWithQuery:或setQueueWithItemCollection:方法设置将要播放的音乐队列。
  3. 调用MPMusicPlayerController对象的play、pause、stop控制播放。

对于其中的音乐队列,我们首先可以通过MPMediaPickerController选择系统音乐。

MPMediaPickerController继承了ViewController,可以当成视图控制器使用。

使用MPMediaPickerController步骤:

  1. 实现协议MPMediaPickerControllerDelegate。
  2. 创建MPMediaPickerController对象。
  3. MPMediaPickerController显示出来。

- (void)viewDidLoad
{
	[super viewDidLoad];
	UIBarButtonItem* bn = [[UIBarButtonItem alloc] initWithTitle:@"选择音乐"
		style:UIBarButtonItemStyleBordered
		target:self action:@selector(choose:)];
	self.navigationItem.rightBarButtonItem = bn;
	// 创建音乐播放器
    //[MPMusicPlayerController applicationMusicPlayer]; 内部播放器,程序退出后停止播放
	musicPlayer = [MPMusicPlayerController iPodMusicPlayer]; // 该播放器与iPod播放器内的信息相关,退出后不会停止播放。
	// 创建MPMediaPickerController对象
	mpc = [[MPMediaPickerController alloc]
		initWithMediaTypes:MPMediaTypeAnyAudio];
	// 为MPMediaPickerController设置委托
	mpc.delegate = self;
	// 设置选择音乐的提示文字。
	mpc.prompt = @"请选择您喜欢的音乐";
	// 设置是否允许进行多选
	mpc.allowsPickingMultipleItems = YES;
	// 设置是否允许选择云端音乐
	mpc.showsCloudItems = YES;
}
显示方法:

// 必须以modal方式显示MPMusicPlayerController视图控制器
[self presentViewController: mpc animated:YES completion:NULL];
当选择音乐文件会激发协议的方法。

// 当用户选择指定音乐时激发该方法,mediaItemCollection代表用户选择的音乐
- (void)mediaPicker: (MPMediaPickerController *)mediaPicker
	didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection
{
    NSLog(@"did pick mediaItems");
	// 保存用户选择的音乐列表
	itemList = mediaItemCollection;
	// 将用户选择的音乐列表设置为musicPlayer的播放列表
	[musicPlayer setQueueWithItemCollection:mediaItemCollection];
	[self.tableView reloadData];
	[mpc dismissViewControllerAnimated:YES completion:NULL];
}
- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker
{
	NSLog(@"用户取消了选择");
}

选择成功后,就可以选择音乐进行 播放了。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
	(NSIndexPath *)indexPath
{
	// 获取表格行的行号
	NSUInteger rowNo = indexPath.row;
	// 设置播放器正要播放的音乐
	musicPlayer.nowPlayingItem = [itemList.items objectAtIndex:rowNo];
	// 开始播放
	[musicPlayer play];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值