iOS提供播放音频的方法:
System Sound Services 方式只适合播放一些很小的提示或警告音频。有一些限制:
/* *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);
<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); }
- applicationMusicPlayer:该播放器是一种内置播放器,当程序退出后停止播放。
- iPodMusicPlayer:该播放器与iPod播放器内的信息相关,退出后不会停止播放。
使用其播放音乐步骤:
- 创建MPMusicPlayerController对象。(导入#import <MediaPlayer/MediaPlayer.h>)
- 调用MPMusicPlayerController对象的setQueueWithQuery:或setQueueWithItemCollection:方法设置将要播放的音乐队列。
调用MPMusicPlayerController对象的play、pause、stop控制播放。
对于其中的音乐队列,我们首先可以通过MPMediaPickerController选择系统音乐。
MPMediaPickerController继承了ViewController,可以当成视图控制器使用。
使用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]; }