前言

	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 音频播放的更多相关文章

  1. iOS 9音频应用播放音频之iOS 9音频播放进度

    iOS 9音频应用播放音频之iOS 9音频播放进度 iOS 9音频应用开发播放进度 音频文件在播放后经过了多久以及还有多久才可以播放完毕,想必是用户所关注的问题.为了解决这一问题,在很多的音乐播放器中 ...

  2. iOS开发----音频播放、录音、视频播放、拍照、视频录制

    随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...

  3. AVAudioPlayer音频播放器-备用

    IOS中有三种播放音频的方式:AVAudioPlayer.音频服务.音频队列. 此文主要讲AVAudioPlayer,其他两个请见相关文章. AVAudioPlayer在AVFoundation框架下 ...

  4. iOS 的音频播放

    一.Audio Toolbox 1.使用代码 #import <AudioToolbox/AudioToolbox.h> AudioServicesPlaySystemSound(1106 ...

  5. OCiOS开发:音频播放器 AVAudioPlayer

    简单介绍 AVAudioPlayer音频播放器可以提供简单的音频播放功能.其头文件包括在AVFoudation.framework中. AVAudioPlayer未提供可视化界面,须要通过其提供的播放 ...

  6. 音频播放AVFoundation框架

    一.系统声音 ios应用中的提醒声音.游戏背景音乐等.可以播放的格式有CAF.AIF.WAV. 系统声音服务提供了一个API,但是没有操作声音和控制音量的功能,因此如果为多媒体或者游戏创建专门的声音, ...

  7. iOS AvPlayer AvAudioPlayer音频的后台播放问题

    iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了.如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,Av ...

  8. iOS AVAudioPlayer播放音频时声音太小

    iOS AVAudioPlayer播放音频时声音太小 //引入AVFoundation类库,设置播放模式就可以了 do { try AVAudioSession.sharedInstance().ov ...

  9. iOS开发之音频播放AVAudioPlayer 类的介绍

    主要提供以下了几种播放音频的方法: 1. System Sound Services System Sound Services是最底层也是最简单的声音播放服务,调用 AudioServicesPla ...

随机推荐

  1. Java读写文件的几种方式

    自工作以后好久没有整理Java的基础知识了.趁有时间,整理一下Java文件操作的几种方式.无论哪种编程语言,文件读写操作时避免不了的一件事情,Java也不例外.Java读写文件一般是通过字节.字符和行 ...

  2. Linux服务器通过rz/sz轻松上传下载文件

    Linux服务器通过命令行远程访问时,上传文件还需要ftp所以不太方便,可以使用rz这个小工具来上传不太大的文件,方法如下: 输入rz,如果提示命令不存在,证明还没有安装,以CentOS为例,安装命令 ...

  3. php中static静态关键字的使用

    php中除了常规类和方法的使用,访问控制之外,还有静态关键字static,静态变量可以是局部变量也可以是全局变量,当一个程序段执行完毕时,静态变量并没有消失,它依然存在于内存中,下次在定义时还是以前的 ...

  4. 六间房PK同时观看两方视频(绕过VIP限制)+直播状态批量监测

    可交换两个视频位置,记住最后播放记录,游客VIP限制也能观看视频等功能. 使用方法: 1.先运行 6.cn.live.exe 分别打开两个主播房间的网页(VIP限制也能获取视频的文件名) (房间已满提 ...

  5. CodeForces - 407A

    Triangle Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Sta ...

  6. java类初始化优先级

    父类静态变量.父类静态代码块.子类静态变量.子类静态代码块.父类非静态变量.父类非静态代码块.父类构造函数.子类非静态变量.子类非静态代码块.子类构造函数

  7. Mysql 自动化任务

    Mysql自动化任务,有两种:基于事件,基于时间. 基于事件,可由触发器来实现.具体触发器的编写比较简单,其语法规范可参照:http://www.jb51.net/article/59552.htm. ...

  8. solr6.0学习

    solr6.0学习(一)环境搭建准备工作:目前最新版本6.0.下载solr 6.0:Solr6.0下载JDK8 下载jdk1.8:jdk1.8[solr6.0是基于jdk8开发的]tomcat8.0 ...

  9. 查看nginx版本号

    # ./nginx -v Tengine version: Tengine/ (nginx/)

  10. 对线程调度中Thread.sleep(0)的深入理解

    在Java或者C#中,都会用到 Thread.Sleep()来使线程挂起一段时间.那么你有没有正确的理解这个方法的用法呢?思考下面这两个问题: 1.假设现在是 2014-8-13 17:00:00.0 ...