iosavaudioplayer音频播放

yjand615 贡献于2016-11-25

作者 杨十郎  创建于2016-11-08 09:30:00   修改者杨十郎  修改于2016-11-08 09:30:00字数6467

文档摘要:
关键词:

iOS - AVAudioPlayer 音频播放 本文目录 · 前言 · 1、本地音乐播放 · 2、本地音乐播放设置 · 3、本地音乐文件解析 · 4、AVAudioPlayerDelegate 协议方法 回到顶部 前言 NS_CLASS_AVAILABLE(10_7, 2_2) @interface AVAudioPlayer : NSObject @available(iOS 2.2, *) public class AVAudioPlayer : NSObject · 本地音乐播放: · 添加库文件:AVFoundation.framework · 包含头文件:#import 回到顶部 1、本地音乐播放 · Objective-C · // 添加库文件:AVFoundation.framework · // 包含头文件:#import · // 声明音乐播放控件,必须声明为全局属性变量,否则可能不会播放,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 · // 设置代理,需遵守 协议 · 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?) { · }

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档