iOS 的音频播放
一、Audio Toolbox
1.使用代码
#import <AudioToolbox/AudioToolbox.h>
AudioServicesPlaySystemSound(1106);
2.如果想用自己的音频文件创建系统声音来播放的同学可以参考如下代码。
//Get the filename of the sound file:
NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], @"/jad0007a.wav"];
// declare a system sound
id SystemSoundID soundID;
//Get a URL for the sound file
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
//Use audio sevices to create the sound
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
//Use audio services to play the sound
AudioServicesPlaySystemSound(soundID);
3.系统提示音对应的列表
AudioServices - iPhone Development Wiki(http://iphonedevwiki.net/index.php/AudioServices)
二、AVAudioPlayer
1.声音播放
#import <AVFoundation/AVFoundation.h>
NSURL* url = [[NSBundlemainBundle] URLForResource:@"five"withExtension:@"mp3"];
AVAudioPlayer* audioPlay = [[AVAudioPlayeralloc] initWithContentsOfURL:url error:nil];
[audioPlay play];
三、AVAudiosession
三、AVAudiosession
三、AVAudiosession
AVAudiosession是AVFoundation框架提供的一个单例类,可以用来为我们的APP设置一个合适的音频环境。通过对他进行配置,我们可以为自己的音乐播放APP设置合适的特征。
1.category属性,默认值是AVAudioSessionCategorySoloAmbient
| Category | 说明 | 场景 | 输入 | 输出 | 混合 | 遵从静音 |
|---|---|---|---|---|---|---|
| AVAudioSessionCategoryAmbient | 可以与其他APP同时播放 | 背景音效 | NO | YES | YES | YES |
| AVAudioSessionCategoryPlayback | 不可与其他APP同时播放 | 音乐播放器 | NO | YES | NO | NO |
| AVAudioSessionCategoryOptionMixWithOthers | ||||||
| AVAudioSessionCategorySoloAmbient | 默认,独占,设置后其他APP就停止播放 | NO | YES | NO | YES | |
| AVAudioSessionCategoryRecord | YES | NO | NO | NO | ||
| AVAudioSessionCategoryPlayAndRecord | YES | YES | NO | NO | ||
| AVAudioSessionCategoryAudioProcessing | 使用硬件解码器处理音频,该音频会话使用期间,不能播放或录音 | |||||
| AVAudioSessionCategoryMultiRoute | YES | YES | NO | NO |
2.静音状态下播放
[[AVAudioSession sharedInstance] setActive:YES
error:nil];
四、音频中断
手机上不止我们一款APP,在听歌的时候,如果有人给我们打电话;或者之前定的一个闹钟到时间了;或者使用了siri功能。这些会使用手机音频的应用,就会跟我们的APP音频起冲突。称作音频中断。
iOS系统的音频服务优先级高于第三方APP。当有电话进入、系统闹钟响起,都会导致第三方APP的audiosession中断。
有两种方式来处理这种中断
1.通过注册观察者来获取AVAudioSessionInterruptionNotification事件的通知来响应中断的开始和结束。
2.设置AVAudioSession代理
//设置代理 可以处理电话打进时中断音乐播放
[[AVAudioSession sharedInstance] setDelegate:self];
五、远程控制
1.iOS7.1之后
Media Player framework 加入了MPRemoteCommandCenter这个类。使用block类实现远程控制回调。
要让APP支持RemoteControl,我们需要用到MPRemoteCommandCenter单例类。它提供了处理 remote control events所需要的对象。它的属性中包括了众多MPRemoteCommand类对象,代表着iOS所支持的不同类型的remote control evnt。为MPRemoteCommand对象添加target和action来响应其控制事件。
2.iOS7.1之前
需要在UIApplication中实现remoteControlReceivedWithEvent来处理。
六、锁屏界面显示歌曲信息
为了在锁屏界面和控制中心显示当前歌曲的信息,需要用到Media Player Framework的MPNowPlayingInfoCenter类。把需要显示的信息组织成Dictionary并赋值给nowPlayingInfo属性就完成了。
一些常见的属性值如下:
// MPMediaItemPropertyAlbumTitle 专辑标题
// MPMediaItemPropertyAlbumTrackCount 声道个数
// MPMediaItemPropertyAlbumTrackNumber 左右声道
// MPMediaItemPropertyArtist 艺术家(歌曲作者)
// MPMediaItemPropertyArtwork 锁屏界面的封面
// MPMediaItemPropertyComposer
// MPMediaItemPropertyDiscCount
// MPMediaItemPropertyDiscNumber
// MPMediaItemPropertyGenre
// MPMediaItemPropertyPersistentID
// MPMediaItemPropertyPlaybackDuration 播放时长
// MPMediaItemPropertyTitle
除了上面的Item Property,还有一些播放信息的属性值,Playing Info Property,其中需要特别注意的是MPNowPlayingInfoPropertyPlaybackRate 和MPNowPlayingInfoPropertyElapsedPlaybackTime。前者表示播放速率,后者表示已播放时间,即上图中进度条左边的时间。当设置了这两个值,并且当前正在播放,就会自动地根据前一个时间和播放速率来计算。
在iOS11之前,当歌曲暂停时,其实该值还是在增加。为了保证该值的精确,需要在暂停和重新开始播放时,重新设置MPNowPlayingInfoPropertyPlaybackRate的值。
特别在iOS 11时,我们需要指定playbackState的值,当不是MPNowPlayingPlaybackStatePlaying时,并不会在锁屏界面显示当前播放信息。
参考1:http://www.samirchen.com/ios-avaudiosession-3/
参考2:http://msching.github.io/blog/2014/11/06/audio-in-ios-8/
iOS 的音频播放的更多相关文章
- iOS 9音频应用播放音频之iOS 9音频播放进度
iOS 9音频应用播放音频之iOS 9音频播放进度 iOS 9音频应用开发播放进度 音频文件在播放后经过了多久以及还有多久才可以播放完毕,想必是用户所关注的问题.为了解决这一问题,在很多的音乐播放器中 ...
- iOS开发----音频播放、录音、视频播放、拍照、视频录制
随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...
- iOS - AVAudioPlayer 音频播放
前言 NS_CLASS_AVAILABLE(10_7, 2_2) @interface AVAudioPlayer : NSObject @available(iOS 2.2, *) public c ...
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
--iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制, ...
- IOS开发之简单音频播放器
今天第一次接触IOS开发的UI部分,之前学OC的时候一直在模拟的使用Target-Action回调模式,今天算是真正的用了一次.为了熟悉一下基本控件的使用方法,和UI部分的回调,下面开发了一个特别简易 ...
- iOS开发系列--音频播放(音效和音乐)播放本地的
音频 在iOS中音频播放从形式上可以分为音效播放和音乐播放.前者主要指的是一些短音频播放,通常作为 点缀音频,对于这类音频不需要进行进度.循环等控制.后者指的是一些较长的音频,通常是主音频,对于这些音 ...
- iOS 微信 音频 视频自动播放
iOS 微信 音频 视频自动播放 http://www.w3ctech.com/topic/1165
- ios开发——实用技术篇&网络音频播放
网络音频播放 在日常的iOS开发中,我们通常会遇到媒体播放的问题,XCode中已经为我们提供了功能非常强大的AVFoundation框架和 MediaPlayer框架.其中AVFoundation框架 ...
- 音频播放(iOS开发)
音频处理 一.录音 录音应用场景 语音聊天 即时通讯软件中,都包含语音发送功能 语音备忘录 录一段音频,来记录某件事情 录音功能实现 导入AVFoundation框架 作用:一些多媒体的处理,基本上都 ...
随机推荐
- 高性能 Socket 组件 HP-Socket v3.2.1-RC3 公布
HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统.提供 C/C+ ...
- 【[SDOI2014]数表】
求 \[\sum_{i=1}^N\sum_{j=1}^Mσ(gcd(i,j))[σ(gcd(i,j))<=a]\] \(σ\)表示约数和函数 感觉非常难求的样子 先把套路搞出来 \[f(n)=\ ...
- 从getshell到提权
从getshell到提权 一.起因 学校推出新的党建系统,之前党建系统还参与开发,后来因为一些原因没有开发,主要想看看这届工作室的学弟.学妹代码水平,把源码撸下来审计一下,工作室用git开发的,记着上 ...
- windows ionic bash: command not found
安装好了node.js和npm后,执行npm install -g cordova ionic后,成功安装,但是执行ionic命令后,返回 command not found. 配置好了环境变量后,仍 ...
- ListView的优化问题
listview算是我们app中较为常用的控件之一了.而如何优化也是一个问题. listview的优化一般分为两类. 一布局优化. 对布局的优化是大家了解的. 1.复用convertview.andr ...
- iOS:通信录(完成)(18-01-18更)
1.读取通信录 1).9.0以前:AddressBook 2).9.0以后:Contacts 2.调用通信录UI(不弄) 1).9.0以前:AddressBookUI 2).9.0以后:Contact ...
- iOS 类似微博或朋友圈的信息流
1.先上图: image.png image.png 因为做过了好几次这样的需求,所以这次想到把它拿出来,下次再需要做的时候直接拿过来改改就能用了,节约时间. 2.功能 文字收起和展开,行高自 ...
- [iOS]AVSpeechSynthesizer语音合成
#import <AVFoundation/AVFoundation.h> // 初始化方法 AVSpeechSynthesizer *speech = [[AVSpeechSynthes ...
- mysql 5.7设置密码无效
我现在MySQL的版本时8.0.12,以前一直没有给MySQL设置密码. 今天因为需要,给MySQL设置,密码,但是上网搜了好久.....命令都不对.最后搜到csdn的Bpazy大佬的博客.他使用5. ...
- 数组的定义和使用,理解多维数组和Array类
数组的作用 在执行程序的过程中,通常会需要存储大量数据.如果只有少量数据,那么通过声明变量,存储到变量中即可.但当我们的数据是20个.40个甚至是100以上时,就意味着需要声明很多变量,这是不现实的, ...