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的方式进行设置,也就意味着一个播放器对象只能播放一个音频文件。

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

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

目录
相关文章
|
2天前
|
移动开发 开发工具 Android开发
探索安卓与iOS开发的差异:技术选择的影响
【8月更文挑战第17天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各领风骚。本文通过比较这两个平台的编程语言、开发工具及市场策略,揭示了技术选择对开发者和产品成功的重要性。我们将从开发者的视角出发,深入探讨不同平台的技术特性及其对项目实施的具体影响,旨在为即将步入移动开发领域的新手提供一个清晰的指南,同时给予资深开发者新的思考角度。
|
3天前
|
vr&ar Android开发 iOS开发
探索安卓和iOS开发的未来趋势
在移动应用开发的广阔天地里,安卓和iOS两大平台如同双子星座般璀璨夺目。随着技术的不断进步,这两个平台的开发趋势也在悄然发生着变化。本文将带你一探究竟,看看未来安卓和iOS开发将会迎来哪些令人激动的新特性和挑战。让我们一起跟随技术的脚步,开启这场探索之旅吧!
|
4天前
|
移动开发 Java Android开发
安卓与iOS开发:异同探析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据半壁江山。本文旨在深入探讨这两个平台在开发环境、编程语言、用户界面设计、性能优化及市场分布等方面的异同,为开发者提供实用的比较视角和决策参考。通过对比分析,我们不仅能更清晰地认识到各平台的特性,还能洞察未来移动开发的可能趋势。
|
5天前
|
Java 开发工具 Android开发
探索Android和iOS开发的差异与挑战
在移动应用开发的广阔天地中,Android和iOS两大平台如同两座高峰,各自拥有独特的风景。本文将深入探讨这两个平台的开发差异,包括编程语言、开发工具、用户界面设计等方面,并分析开发者面临的挑战。无论你是初涉移动应用开发的新手,还是已经在这条路上走了很远的老手,这篇文章都将为你提供新的视角和思考。让我们一起走进这个充满创新与挑战的世界,发现那些隐藏在代码背后的秘密。
|
3天前
|
Java Android开发 iOS开发
探索安卓与iOS开发的差异:从新手到专家的旅程
本文将带你走进移动应用开发的两大平台——安卓和iOS,揭示它们之间的主要差异。我们将从新手的视角出发,逐步深入到更复杂的技术层面,帮助你理解这两个平台的开发环境、编程语言和用户界面设计等方面的不同。无论你是刚入门的新手,还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和建议。现在,让我们一起开始这段探索之旅吧!
|
3天前
|
搜索推荐 Android开发 iOS开发
探索安卓与iOS开发的差异之美
在数字时代的浪潮中,移动应用开发如同一场精心编排的交响乐,安卓和iOS这两大平台扮演着不同乐器的角色,各自以独特的方式奏响。本文将带领读者走进这场音乐盛宴,感受两大平台在开发过程中所展现的不同韵律,从设计理念到用户体验,从市场占有率到生态系统,我们将一探究竟,欣赏它们如何在竞争激烈的市场中和谐共存,共同推动技术的进步与创新。
12 0
|
4天前
|
开发工具 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的关键考量
在数字时代,选择正确的开发平台是成功的一半。本文深入探讨了安卓与iOS两大移动操作系统的开发差异,并分析了各自对创新、用户体验和市场需求的响应。通过比较两者的设计哲学、开发工具、市场覆盖和用户参与度,我们揭示了每个平台的独特优势和潜在挑战,旨在为开发者提供决策时的洞见,帮助他们在竞争激烈的应用市场中做出明智的选择。
|
物联网 Android开发 iOS开发
iOS开发 - 蓝牙学习的总结
iOS开发 - 蓝牙学习的总结
160 0
|
iOS开发
IOS开发---菜鸟学习之路--(九)-利用PullingRefreshTableView实现下拉刷新
本章主要讲解如何利用PullingRefreshTableView实现下拉(上拉)刷新的操作  PullingRefreshTableView 实现上下拉刷新的例子百度有很多,大家可以自己搜索下,先看下那些例子(一般搜索过来的都是一样的大家反正先把那部分内容先了解一下,然后再看本文档比较好。
868 0
|
iOS开发 Android开发 存储
IOS开发---菜鸟学习之路--(十)-实现新闻详细信息浏览页面
前面已经将了上下拉刷新 实现了上下拉刷新后我们的第一级界面就做好,接下来我们就需要实现 新闻详细信息浏览了 我个人认为一般实现新闻详细页面的方法有两种(主要是数据源的不同导致了方法的不同) 第一种是本身新闻就是一个链接地址,同时是已经处理好的适应手机浏览的网页 对于这种类型的数据源,我们直接在页面中放一个WebView控件,然后将URL传递过去就好了 另一种则是普通的包含标题、时间、内容、图片等数据结构的新闻内容(我们要实现的也是这种新闻,因为实现了这种之后, 我们就可以实现任何自定义的详细信息的页面了。
863 0