iOS 用 AVPlayer 播放一个本地音频文件
iOS 用 AVPlayer 播放一个本地音频文件
步骤
- 第一步:在 Project - TARGETS - Project名 - Build Phases - Link Binary With Libraries,添加 AVFoundation.framework。
- 第二步:创建一个 UIViewController 的子类 PlayerViewController。
- 第三步:在 PlayerViewController 中添加一个属性 AVPlayer。
- 第四步:在 PlayerViewController 的 viewDidLoad 方法中实现最主要的代码。
关键代码
.h
?123456789<code>#
import
<uikit uikit.h=
""
>
#
import
@interface
PlayViewController: UIViewController
@property
(strong, nonatomic) AVPlayer *player;
@end
</avfoundation></uikit></code>
.m
?12345678910111213141516171819202122232425262728293031323334353637<code>#
import
"PlayerViewController.h"
@interface
PlayerViewController ()
@end
@implementation
PlayerViewController
- (
void
) viewDidLoad
{
[
super
viewDidLoad];
AVAudioSession *session = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
[audioSession setActive:YES error:nil];
NSString *audioPath = [[NSBundle mainBundle] pathForResource:@
"rem"
ofType:@
"wav"
];
NSURl *audioUrl = [NSURL fileURLWithPath:audioPath];
NSError *playerError;
_player = [[AVPlayer alloc] initWithContentsOfURL:audioUrl error:&playerError];
if
(_player === NULL)
{
NSLog(@
"fail to play audio :("
);
return
;
}
[_player setVolume:
1
];
[_player play];
}
- (
void
) didReceiveMemoryWarning
{
[
super
didReceiveMemoryWarning];
}
@end
</code>
几个重要的点:
- 1.必须要用 AVAudioSession,否则木有声音啊。
- 2.不要把 AVPlayer 当做局部变量(具体说在这个例子中,不要在 viewDidLoad 中定义)。
- 3.要找好路径,这里用 mainBundle,不要搞错。
AVAudioSession类由AVFoundation框架引入。每个IOS应用都有一个音频会话。这个会话可以被AVAudioSession类的sharedInstance类方法访问,如下:
- AVAudioSession *audioSession = [AVAudioSession sharedInstance];
复制代码
在获得一个AVAudioSession类的实例后,你就能通过调用音频会话对象的setCategory:error:实例方法,来从IOS应用可用的不同类别中作出选择。下面列出了可供使用的音频会话类别:
AVAudioSessionCategorySoloAmbient这个类别非常像AVAudioSessionCategoryAmbient类别,除了会停止其他程序的音频回放,比如iPod程序。当设备被设置为静音模式,你的音频回放将会停止。
AVAudioSessionCategoryRecord
这会停止其他应用的声音(比如iPod)并让你的应用也不能初始化音频回放(比如AVAudioPlayer)。在这种模式下,你只能进行录音。使用这个类别,调用AVAudioPlayer的prepareToPlay会返回YES,但是调用play方法将返回NO。主UI界面会照常工作。这时,即使你的设备屏幕被用户锁定了,应用的录音仍会继续。AVAudioSessionCategoryPlayback
这个类别会静止其他应用的音频回放(比如iPod应用的音频回放)。你可以使用AVAudioPlayer的prepareToPlay和play方法,在你的应用中播放声音。主UI界面会照常工作。这时,即使屏幕被锁定或者设备为静音模式,音频回放都会继续。AVAudioSessionCategoryPlayAndRecord
这个类别允许你的应用中同时进行声音的播放和录制。当你的声音录制或播放开始后,其他应用的声音播放将会停止。主UI界面会照常工作。这时,即使屏幕被锁定或者设备为静音模式,音频回放和录制都会继续。AVAudioSessionCategoryAudioProcessing
这个类别用于应用中进行音频处理的情形,而不是音频回放或录制。设置了这种模式,你在应用中就不能播放和录制任何声音。调用AVAPlayer的prepareToPlay和play方法都将返回NO。其他应用的音频回放,比如iPod,也会在此模式下停止。AVAudioSessionCategoryAmbient
这个类别不会停止其他应用的声音,相反,它允许你的音频播放于其他应用的声音之上,比如iPod。你的应用的主UI县城会工作正常。调用AVAPlayer的prepareToPlay和play方法都将返回YES。当用户锁屏时,你的应用将停止所有正在回放的音频。仅当你的应用是唯一播放该音频文件的应用时,静音模式将停止你程序的音频回放。如果正当iPod播放一手歌时,你开始播放音频,将设备设为静音模式并不能停止你的音频回放。
iOS 用 AVPlayer 播放一个本地音频文件相关推荐
- iOS Dev (21) 用 AVPlayer 播放一个本地音频文件
iOS Dev (21) 用 AVPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 前言 这篇文章与上一篇极其相似,要注 ...
- html同时播放多个文件夹,ios – 如何同时播放多个音频文件
以下格式的文件可以在iPhone上同时播放. AAC,MP3和ALAC(Apple Lossless)音频:有CPU资源问题. 线性PCM和IMA / ADPCM(IMA4音频):没有CPU资源问题. ...
- python播放wav文件_python3 写一个WAV音频文件播放器的代码
环境:ubuntu 16.04 python3.5 pycharm 包 : wave pyaudio sys 上代码:AudioPlayer.py # coding:utf-8 # author:ki ...
- iOS】AVPlayer 播放音视频
1.常见的音视频播放器 iOS开发中不可避免地会遇到音视频播放方面的需求. 常用的音频播放器有 AVAudioPlayer.AVPlayer 等.不同的是,AVAudioPlayer 只支持本地音频的 ...
- 【iOS】AVPlayer 播放音视频
1.常见的音视频播放器 iOS开发中不可避免地会遇到音视频播放方面的需求. 常用的音频播放器有 AVAudioPlayer.AVPlayer 等.不同的是,AVAudioPlayer 只支持本地音频的 ...
- Mediaplay:Android后台同时播放多个音频文件第一弹:读取并播放音频文件
Mediaplay:Android后台同时播放多个音频文件 设备/引擎:Mac(11.6)/cocos 开发工具:Android studio(4.1.2) 开发语言:java/c++ 开发需求:an ...
- html怎么播放下一首,javascript – HTML5音频播放列表 – 第一个结束后如何播放第二个音频文件?...
这是一个JSLinted,不引人注目的 Javascript示例,演示如何处理和使用结束的 mediaevent.在您的特定情况下,您将触发在您的结束事件处理程序中播放第二个音频文件. 单击播放列表中 ...
- java播放mp3格式音频文件
下载第三方jar包,网址:http://www.javazoom.net/javalayer/javalayer.html 下载完成之后解压提取jl1.0.0.1.jar 将jl1.0.0.1.jar ...
- SDM450+android8.1播放左声道音频文件和右声道音频文件,左右喇叭都有声音问题
正常的现象是播放左声道音频文件,左喇叭播放:播放右声道音频文件,右喇叭播放,但问题是不管播放左还是右音频文件,左右喇叭都有播放 原理图设计 经过排查,原来是当时产品为了兼容,hardware\qcom ...
最新文章
- numpy.random.randn()与numpy.random.rand()的区别(转)
- 浅析网站SEO优化用户体验值包括什么后续又该如何进行提升?
- thinkcmf搭建教程_5分钟快速入门
- leetcode 303. 区域和检索 - 数组不可变
- Windows Sysinternals Desktops v1.0 发布 - 超简单的虚拟桌面程序
- Android 8.0学习(18)--- Android8.0运行时权限策略变化和适配方案
- 【免费】某机构最新3980元机器学习/大数据课程高速下载,限量200份
- 尝试实现手势控制计算机(持续跟进)
- 每天一道剑指offer-把数组排成最小的数
- 2021年上半年软考真题网络工程师真题及答案解析
- 甩一个Microsoft office visio 2013的百度云连接
- 研究人性弱点的黑客?聊聊社会工程学与网络安全
- 线性调频(LFM信号)脉冲压缩雷达matlab仿真- 脉冲压缩 测距 测速 距离速度三维像(附matlab代码)
- 【译】2021年十大热门编程语言
- 【Python表白小程序】七夕表白神器(赶紧收藏起来)
- Win10系统自带的虚拟机怎么打开教学
- 华为手机鸿蒙更新时间,华为手机版鸿蒙系统更新时间介绍
- php 搜索引擎 分词_PHP 实现中文分词搜索功能
- 经纬度换算数值_经纬度转换-----度分秒以及经纬度和米
- 我为什么坚信光触媒的未来?