iOS - AVAudioPlayer 音频播放
前言
NS_CLASS_AVAILABLE(10_7, 2_2) @interface AVAudioPlayer : NSObject
@available(iOS 2.2, *) public class AVAudioPlayer : NSObject
- 本地音乐播放:
- 添加库文件:AVFoundation.framework
- 包含头文件:#import <AVFoundation/AVFoundation.h>
1、本地音乐播放
Objective-C
// 添加库文件:AVFoundation.framework
// 包含头文件:#import <AVFoundation/AVFoundation.h> // 声明音乐播放控件,必须声明为全局属性变量,否则可能不会播放,AVAudioPlayer 只能播放本地音乐
@property(nonatomic, retain)AVAudioPlayer *musicPlayer; // 获取音乐文件路径
NSURL *musicUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"蓝莲花" ofType:@"mp3"]]; // 实例化音乐播放控件
musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:musicUrl error:nil]; // 准备(缓冲)播放
[musicPlayer prepareToPlay]; // 开始播放音乐
[musicPlayer play];
Swift
// 添加库文件:AVFoundation.framework
// 包含头文件:import AVFoundation // 声明音乐播放控件,必须声明为全局属性变量,否则可能不会播放,AVAudioPlayer 只能播放本地音乐
var musicPlayer:AVAudioPlayer! // 获取音乐文件路径
let musicUrl = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("蓝莲花", ofType: "mp3")!) // 实例化音乐播放控件
musicPlayer = try? AVAudioPlayer(contentsOfURL: musicUrl) // 准备(缓冲)播放
musicPlayer.prepareToPlay() // 开始播放音乐
musicPlayer.play()
2、本地音乐播放设置
Objective-C
// 设置代理,需遵守 <AVAudioPlayerDelegate> 协议
musicPlayer.delegate = self; // 判断播放状态
BOOL isPlaying = musicPlayer.isPlaying; // 获取音乐通道数
NSUInteger numberOfChannels = musicPlayer.numberOfChannels; // 获取音乐时长
/*
获取音乐的长度,单位秒
*/
NSTimeInterval duration = musicPlayer.duration; // 获取与输出设备相关联的当前播放进度
NSTimeInterval deviceCurrentTime = musicPlayer.deviceCurrentTime; // 获取当前音乐文件的路径
/*
音乐文件播放控件由 url 创建,returns nil if object was not created with a URL
*/
NSURL *currentMusicUrl = musicPlayer.url; // 获取当前音乐文件的数据
/*
音乐文件播放控件由 data 创建,returns nil if object was not created with a data object
*/
NSData *currentMusicData = musicPlayer.data; // 设置声道
/*
-1.0:左声道, 0.0:左右声道(默认), 1.0:右声道
*/
musicPlayer.pan = 1.0; // 设置音量
/*
音量范围是 0.0 ~ 1.0,默认为 1.0
*/
musicPlayer.volume = 0; // 设置是否允许控制播发速度
/*
设置播放速度时必须设置此项为 YES,必须在 [musicPlayer prepareToPlay] 之前设置,默认为 NO
*/
musicPlayer.enableRate = YES; // 设置播放速度
/*
enableRate 必须设置为 YES,1.0 is normal, 0.5 is half speed, 2.0 is double speed
*/
musicPlayer.rate = 1; // 设置当前播放位置
/*
设置音乐从指定的时间处开始播放
*/
musicPlayer.currentTime = 30; // 设置循环播放次数
/*
= 0:只播放一次(默认),> 0:播放设置的次数,< 0:循环播放
*/
musicPlayer.numberOfLoops = 1; // 缓冲音乐
[musicPlayer prepareToPlay]; // 开始播放
[musicPlayer play]; // 定时播放
/*
在指定的时间播放音乐
*/
[musicPlayer playAtTime:[[NSDate dateWithTimeIntervalSinceNow:10] timeIntervalSince1970]]; // 暂停播放
[musicPlayer pause]; // 停止播放
[musicPlayer stop];
Swift
// 设置代理
/*
需遵守 AVAudioPlayerDelegate 协议
*/
musicPlayer.delegate = self // 判断播放状态
let isPlaying:Bool = musicPlayer.playing // 获取音乐通道数
let numberOfChannels:Int = musicPlayer.numberOfChannels // 获取音乐时长
/*
获取音乐的长度,单位秒
*/
let duration:NSTimeInterval = musicPlayer.duration // 获取与输出设备相关联的当前播放进度
let deviceCurrentTime:NSTimeInterval = musicPlayer.deviceCurrentTime // 获取当前音乐文件的路径
/*
音乐文件播放控件由 url 创建,returns nil if object was not created with a URL
*/
let currentMusicUrl:NSURL = musicPlayer.url! // 获取当前音乐文件的数据
/*
音乐文件播放控件由 data 创建,returns nil if object was not created with a data object
*/
let currentMusicData = musicPlayer.data // 设置声道
/*
-1.0:左声道, 0.0:左右声道(默认), 1.0:右声道
*/
musicPlayer.pan = 1.0 // 设置音量
/*
音量范围是 0.0 ~ 1.0,默认为 1.0
*/
musicPlayer.volume = 0 // 设置是否允许控制播发速度
/*
设置播放速度是必须设置此项为 YES,必须在 [musicPlayer prepareToPlay] 之前设置,默认为 NO
*/
musicPlayer.enableRate = true // 设置播放速度
/*
enableRate 必须设置为 YES,1.0 is normal, 0.5 is half speed, 2.0 is double speed
*/
musicPlayer.rate = 1 // 设置当前播放位置
/*
设置音乐从指定的时间处开始播放
*/
musicPlayer.currentTime = 30 // 设置循环播放次数
/*
= 0:只播放一次(默认),> 0:播放设置的次数,< 0:循环播放
*/
musicPlayer.numberOfLoops = 1 // 缓冲音乐
musicPlayer.prepareToPlay() // 开始播放
musicPlayer.play() // 定时播放
/*
在指定的时间播放音乐
*/
musicPlayer.playAtTime(NSDate(timeIntervalSinceNow: 10).timeIntervalSince1970) // 暂停播放
musicPlayer.pause() // 停止播放
musicPlayer.stop()
3、本地音乐文件解析
Objective-C
/*
注意观察 commonKey 和 value: commonKey = title 歌曲名称
commonKey = artist 歌手名称
commonKey = albumName 专辑名称
commonKey = artwork 专辑图片
*/
NSString *titleString = nil;
NSString *artistString = nil;
NSString *albumNameString = nil;
UIImage *artworkImage = nil; // 获取音乐文件路径
NSURL *musicUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"蓝莲花" ofType:@"mp3"]]; // 加载音乐文件
AVURLAsset *URLAsset = [AVURLAsset URLAssetWithURL:musicUrl options:nil]; // 解析音乐文件
/*
获取音乐文件中的信息,固定格式 org.id3
*/
NSArray *musicInfoArray = [URLAsset metadataForFormat:@"org.id3"]; for (AVMetadataItem *item in musicInfoArray) { // 解析歌曲名称
if ([item.commonKey isEqualToString:@"title"]) { titleString = (NSString *)item.value;
} // 解析歌手名称
if ([item.commonKey isEqualToString:@"artist"]) { artistString = (NSString *)item.value;
} // 解析专辑名称
if ([item.commonKey isEqualToString:@"albumName"]) { albumNameString = (NSString *)item.value;
} // 解析专辑图片
if ([item.commonKey isEqualToString:@"artwork"]) { // value 值为 NSData 时,直接取值
NSData *data = (NSData *)item.value; artworkImage = [UIImage imageWithData:data];
}
} // 显示解析值 musicInfoLabel.text = [NSString stringWithFormat:@"歌曲名称: %@\n歌手名称: %@\n专辑名称: %@",
titleString, artistString, albumNameString]; musicInfoImageView.image = artworkImage;
Swift
/*
注意观察 commonKey 和 value: commonKey = title 歌曲名称
commonKey = artist 歌手名称
commonKey = albumName 专辑名称
commonKey = artwork 专辑图片
*/
var titleString:String!
var artistString:String!
var albumNameString:String!
var artworkImage:UIImage! // 获取音乐文件路径
let musicUrl:NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("蓝莲花", ofType: "mp3")!) // 加载音乐文件
let URLAsset = AVURLAsset(URL: musicUrl, options: nil) // 解析音乐文件
/*
获取音乐文件中的信息,固定格式 org.id3
*/
let musicInfoArray = URLAsset.metadataForFormat("org.id3") for item in musicInfoArray { let itemCommonKey:String? = (item as! AVMutableMetadataItem).commonKey // 解析歌曲名称
if itemCommonKey == "title" { titleString = (item as! AVMutableMetadataItem).value as! String
} // 解析歌手名称
if itemCommonKey == "artist" { artistString = (item as! AVMutableMetadataItem).value as! String
} // 解析专辑名称
if itemCommonKey == "albumName" { albumNameString = (item as! AVMutableMetadataItem).value as! String
} // 解析专辑图片
if itemCommonKey == "artwork" { // value 值为 NSData 时,直接取值
let data = (item as! AVMutableMetadataItem).value as! NSData artworkImage = UIImage(data: data)
}
} // 显示解析值 musicInfoLabel.text = "歌曲名称: \(titleString)\n歌手名称: \(artistString)\n专辑名称: \(albumNameString)" musicInfoImageView.image = artworkImage
4、AVAudioPlayerDelegate 协议方法
Objective-C
// 播放完成
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { } // 播放失败
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error { }
Swift
// 播放完成
func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) { } // 播放失败
func audioPlayerDecodeErrorDidOccur(player: AVAudioPlayer, error: NSError?) { }
iOS - AVAudioPlayer 音频播放的更多相关文章
- iOS 9音频应用播放音频之iOS 9音频播放进度
iOS 9音频应用播放音频之iOS 9音频播放进度 iOS 9音频应用开发播放进度 音频文件在播放后经过了多久以及还有多久才可以播放完毕,想必是用户所关注的问题.为了解决这一问题,在很多的音乐播放器中 ...
- iOS开发----音频播放、录音、视频播放、拍照、视频录制
随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...
- AVAudioPlayer音频播放器-备用
IOS中有三种播放音频的方式:AVAudioPlayer.音频服务.音频队列. 此文主要讲AVAudioPlayer,其他两个请见相关文章. AVAudioPlayer在AVFoundation框架下 ...
- iOS 的音频播放
一.Audio Toolbox 1.使用代码 #import <AudioToolbox/AudioToolbox.h> AudioServicesPlaySystemSound(1106 ...
- OCiOS开发:音频播放器 AVAudioPlayer
简单介绍 AVAudioPlayer音频播放器可以提供简单的音频播放功能.其头文件包括在AVFoudation.framework中. AVAudioPlayer未提供可视化界面,须要通过其提供的播放 ...
- 音频播放AVFoundation框架
一.系统声音 ios应用中的提醒声音.游戏背景音乐等.可以播放的格式有CAF.AIF.WAV. 系统声音服务提供了一个API,但是没有操作声音和控制音量的功能,因此如果为多媒体或者游戏创建专门的声音, ...
- iOS AvPlayer AvAudioPlayer音频的后台播放问题
iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了.如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,Av ...
- iOS AVAudioPlayer播放音频时声音太小
iOS AVAudioPlayer播放音频时声音太小 //引入AVFoundation类库,设置播放模式就可以了 do { try AVAudioSession.sharedInstance().ov ...
- iOS开发之音频播放AVAudioPlayer 类的介绍
主要提供以下了几种播放音频的方法: 1. System Sound Services System Sound Services是最底层也是最简单的声音播放服务,调用 AudioServicesPla ...
随机推荐
- swift 中delegate的使用
今天写了delegate,遇到以下问题: 这里protocol的写法有问题,如果delegate指向一个实现了某个协议对象的引用,在oc里是这样写delegate的类型 id<protocol& ...
- JavaScript设计模式 - 代理模式
代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问 代理模式的用处(个人理解):为了保障当前对象的单一职责(相对独立性),而需要创建另一个对象来处理调用当前对象之前的一些逻辑以提高代码的效 ...
- Find them, Catch them(poj 1703)
题目大意: 在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙输入D x y代表x于y不在一个团伙里输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里 思路 ...
- python基础——列表生成式
python基础——列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4 ...
- java中值类型和引用类型的区别
[定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变. 值类型表示复制一个当前变量传给方法,当你 ...
- charles使用教程指南(抓包工具)
0x01 前言: Charles是一款抓包修改工具,相比起burp,charles具有界面简单直观,易于上手,数据请求控制容易,修改简单,抓取数据的开始暂停方便等等优势!下面来详细介绍下这款强大好用的 ...
- Linux命令自己总结
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...
- Spring MVC笔记 使用JdbcTemplate
Spring提供了 JdbcTemplate 来封装数据库jdbc操作细节, 包括: 数据库连接[打开/关闭] ,异常转义 ,SQL执行 ,查询结果的转换, 其中体现了 模板模式 的设计模式思想. 使 ...
- linux下php增加curl扩展,生成curl.so文件
进入php源代码目录 cd /php5.6.9/ext/curl 执行生成so文件编译模式 /usr/local/php/bin/phpize 编译curl扩展 ./configure --with- ...
- hrbustoj 1429:凸多边形(计算几何,判断点是否在多边形内,二分法)
凸多边形 Time Limit: 2000 MS Memory Limit: 65536 K Total Submit: 130(24 users) Total Accepted: 40(1 ...