iOS开发拓展篇—音乐的播放

iOS开发拓展篇—音乐的播放

一、简单说明

  音乐播放用到一个叫做AVAudioPlayer的类,这个类可以用于播放手机本地的音乐文件。

注意:

  (1)该类(AVAudioPlayer)只能用于播放本地音频。

  (2)时间比较短的(称之为音效)使用AudioServicesCreateSystemSoundID来创建,而本地时间较长(称之为音乐)使用AVAudioPlayer类。

二、代码示例

  AVAudioPlayer类依赖于AVFoundation框架,因此使用该类必须先导入AVFoundation框架,并包含其头文件(包含主头文件即可)。

  

  

导入必要的,需要播放的音频文件到项目中。

代码示例:

 1 //
 2 //  YYViewController.m
 3 //  15-播放音乐
 4 //
 5
 6 #import "YYViewController.h"
 7 #import <AVFoundation/AVFoundation.h>
 8
 9 @interface YYViewController ()
10
11 @end
12
13 @implementation YYViewController
14
15 - (void)viewDidLoad
16 {
17     [super viewDidLoad];
18
19 }
20
21 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
22 {
23
24     //1.音频文件的url路径
25     NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
26
27     //2.创建播放器(注意:一个AVAudioPlayer只能播放一个url)
28     AVAudioPlayer *audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
29
30     //3.缓冲
31     [audioPlayer prepareToPlay];
32
33     //4.播放
34     [audioPlayer play];
35 }
36
37 @end

代码说明:运行程序,点击模拟器界面,却并没有能够播放音频文件,原因是代码中创建的AVAudioPlayer播放器是一个局部变量,应该调整为全局属性。

可将代码调整如下,即可播放音频:

 1 #import "YYViewController.h"
 2 #import <AVFoundation/AVFoundation.h>
 3
 4 @interface YYViewController ()
 5 @property(nonatomic,strong)AVAudioPlayer *audioplayer;
 6 @end
 7
 8 @implementation YYViewController
 9
10 - (void)viewDidLoad
11 {
12     [super viewDidLoad];
13
14 }
15
16 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
17 {
18
19     //1.音频文件的url路径
20     NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
21
22     //2.创建播放器(注意:一个AVAudioPlayer只能播放一个url)
23     self.audioplayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
24
25     //3.缓冲
26     [self.audioplayer prepareToPlay];
27
28     //4.播放
29     [self.audioplayer play];
30 }
31
32 @end

注意:一个AVAudioPlayer只能播放一个url,如果想要播放多个文件,那么就得创建多个播放器。

三、相关说明

新建一个项目,在storyboard中放三个按钮,分别用来控制音乐的播放、暂停和停止。

  

程序代码如下:

 1 #import "YYViewController.h"
 2 #import <AVFoundation/AVFoundation.h>
 3
 4 @interface YYViewController ()
 5 @property(nonatomic,strong)AVAudioPlayer *player;
 6 - (IBAction)play;
 7 - (IBAction)pause;
 8 - (IBAction)stop;
 9 @end
10
11 @implementation YYViewController
12
13 - (void)viewDidLoad
14 {
15     [super viewDidLoad];
16
17     //1.音频文件的url路径
18     NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
19
20     //2.创建播放器(注意:一个AVAudioPlayer只能播放一个url)
21     self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
22
23     //3.缓冲
24     [self.player prepareToPlay];
25
26 }
27
28 - (IBAction)play {
29     //开始播放/继续播放
30     [self.player play];
31 }
32
33 - (IBAction)pause {
34     //暂停
35     [self.player pause];
36 }
37
38 - (IBAction)stop {
39     //停止
40     //注意:如果点击了stop,那么一定要让播放器重新创建,否则会出现一些莫名其面的问题
41     [self.player stop];
42 }
43 @end

注意:如果点了“停止”,那么一定要播放器重新创建,不然的话会出现莫名其妙的问题。

  点击了stop之后,播放器实际上就不能再继续使用了,如果还继续使用,那么后续的一些东西会无法控制。

推荐代码:

 1 #import "YYViewController.h"
 2 #import <AVFoundation/AVFoundation.h>
 3
 4 @interface YYViewController ()
 5 @property(nonatomic,strong)AVAudioPlayer *player;
 6 - (IBAction)play;
 7 - (IBAction)pause;
 8 - (IBAction)stop;
 9 @end
10
11 @implementation YYViewController
12
13 #pragma mark-懒加载
14 -(AVAudioPlayer *)player
15 {
16     if (_player==Nil) {
17
18         //1.音频文件的url路径
19         NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
20
21         //2.创建播放器(注意:一个AVAudioPlayer只能播放一个url)
22         self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
23
24         //3.缓冲
25         [self.player prepareToPlay];
26     }
27     return _player;
28 }
29
30 - (void)viewDidLoad
31 {
32     [super viewDidLoad];
33 }
34
35 - (IBAction)play {
36     //开始播放/继续播放
37     [self.player play];
38 }
39
40 - (IBAction)pause {
41     //暂停
42     [self.player pause];
43 }
44
45 - (IBAction)stop {
46     //停止
47     //注意:如果点击了stop,那么一定要让播放器重新创建,否则会出现一些莫名其面的问题
48     [self.player stop];
49     self.player=Nil;
50 }
51 @end

如果点击了停止按钮,那么音乐会从头开始播放。

四、播放多个文件

  

  点击,url,按住common建查看。

可以发现,这个url是只读的,因此只能通过initWithContentsOfUrl的方式进行设置,也就意味着一个播放器对象只能播放一个音频文件。

那么如何实现播放多个音频文件呢?

可以考虑封装一个播放音乐的工具类,下一篇文章将会介绍具体怎么实现。

时间: 2024-10-13 23:25:59

iOS开发拓展篇—音乐的播放的相关文章

iOS开发拓展篇—音效的播放

iOS开发拓展篇—音效的播放 一.简单介绍 简单来说,音频可以分为2种 (1)音效 又称“短音频”,通常在程序中的播放时长为1~2秒 在应用程序中起到点缀效果,提升整体用户体验 (2)音乐 比如游戏中的“背景音乐”,一般播放时间较长 框架:播放音频需要用到AVFoundation.framework框架 二.音效的播放 1.获得音效文件的路径 NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_03.wav" withExten

iOS开发拓展篇—音频处理(音乐播放器2)

iOS开发拓展篇—音频处理(音乐播放器2) 说明:该文主要介绍音乐播放界面的搭建. 一.跳转 1.跳转到音乐播放界面的方法选择 (1)使用模态跳转(又分为手动的和自动的) (2)使用xib并设置跳转 2.两种方法的分析 可以使用模态的方法,添加一个控制器,让这个控制器和音乐播放控制器类进行关联,脱线,设置标识符且在cell的点击事件中执行segue即可. 步骤说明: (1)在storyboard中新拖入一个控制器,然后设置和playing控制器类相关联. (2)设置手动跳转 (3)设置segue

iOS开发拓展篇—音频处理(音乐播放器5)

iOS开发拓展篇—音频处理(音乐播放器5) 实现效果: 一.半透明滑块的设置 1 /** 2 *拖动滑块 3 */ 4 - (IBAction)panSlider:(UIPanGestureRecognizer *)sender { 5 6 //1.获得挪动的距离 7 CGPoint t=[sender translationInView:sender.view]; 8 //把挪动清零 9 [sender setTranslation:CGPointZero inView:sender.view

iOS开发拓展篇—音频处理(音乐播放器3)

iOS开发拓展篇—音频处理(音乐播放器3) 说明:这篇文章主要介绍音频工具类和播放工具类的封装. 一.控制器间数据传递 1.两个控制器之间数据的传递 第一种方法:self.parentViewController.music=self.music[indexPath.row];不能满足 第二种做法:把整个数组传递给它 第三种做法:设置一个数据源,设置播放控制器的数据源是这个控制器.self.parentViewController.dataSource=self;好处:没有耦合性,任何实现了协议

iOS开发拓展篇—音频处理(音乐播放器6)

iOS开发拓展篇—音频处理(音乐播放器6) 一.图片处理 说明: Aspect表示按照原来的宽高比进行缩放. Aspectfit表示按照原来的宽高比缩放,要求看到全部图片,后果是不能完全覆盖窗口,会留有空白. Aspectfill表示按照原来的宽高比缩放,但只能看到部分图片.引发的问题:可能会有一部分超出屏幕. 所以,如果选择了Aspectfill模式,那么需要剪切超出的图片,在storyboard中也可以进行设置. 下面的两种设置是等效的. (1)在storyboard中进行设置 (2)使用代

iOS开发拓展篇—音频处理(音乐播放器4)

iOS开发拓展篇—音频处理(音乐播放器4) 说明:该文主要介绍音乐播放器实现过程中的一些细节控制. 实现的效果: 一.完整的代码 YYPlayingViewController.m文件 1 // 2 // YYPlayingViewController.m 3 // 20-音频处理(音乐播放器1) 4 // 5 // Created by apple on 14-8-13. 6 // Copyright (c) 2014年 yangyong. All rights reserved. 7 //

iOS开发拓展篇—音频处理(音乐播放器1

iOS开发拓展篇—音频处理(音乐播放器1) 说明:该系列文章通过实现一个简单的音乐播放器来介绍音频处理的相关知识点,需要重点注意很多细节的处理. 一.调整项目的结构,导入必要的素材 调整后的项目结构如下: 二.新建两个控制器 (1)新建一个控制器,用于展示音乐文件列表界面,其继承自UITableViewController (2)新建一个控制器,用于展示播放界面,其继承自UIViewController (3)在storyboard中,把之前的控制器删除,换上一个导航控制器,设置tableVie

iOS开发拓展篇—音效播放

iOS开发拓展篇—音效播放 一.简单介绍 简单来说,音频可以分为2种 (1)音效 又称“短音频”,通常在程序中的播放时长为1~2秒 在应用程序中起到点缀效果,提升整体用户体验 (2)音乐 比如游戏中的“背景音乐”,一般播放时间较长 框架:播放音频需要用到AVFoundation.framework框架 二.音效的播放 1.获得音效文件的路径 NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_03.wav" withExtens

iOS开发拓展篇—静态库

iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworking (2)闭源库 不公开源代码,是经过编译后的二进制文件,看不到具体实现 主要分为:静态库.动态库 二.静态库和动态库 1.静态库和动态库的存在形式 静态库:.a 和 .framework 动态库:.dylib 和 .framework 2.静态库和动