1.iOS 编码方式参数介绍
采样率
简单地说就是通过波形采样的方法记录1秒钟长度的声音,需要多少个数据。44KHz采样率的声音就是要花费44000个数据来描述1秒钟的声音波形。原则上采样率越高,声音的质量越好
编码格式
可以理解为每种音频格式不同的编解码方式,而IOS下这些编码方式被集中到一个枚举中,而我们本次代码中所使用的编码格式是WAV文件的格式,想要使用其他的编码格式就在成功导入AVFouncation框架之后即可通过Xcode的自动提示找到以kAudioFormat开头的各种枚举的名称。
封装格式和编码的关系,就是和酒瓶与酒的关系差不多,而播放器就是开酒器。为了可以喝更好的酒,最好先了解酒是什么酒,酒瓶是什么酒瓶,怎么使用开酒器开酒瓶,码率或者可以比喻做酒的原料。对于同一个酒瓶和做同一种酒的情况下,如果原料太少,又要要求用酒把酒瓶灌满,此时只好兑水了,酒的品质就会变差了。然而,如果原料太多,又会造成原料浪费。所以要做好酒,我们就需要充足的原料。同样道理,压制一个视频,充足的码率是非常需要的。如果码率过高,画质提升不上去的同时还使视频体积过大。如果码率不足,视频容易出各种各样的问题,导致压崩。当然,码率不是画质的唯一指标,压制的时候的各种参数设置,各种滤镜也是非常重要的。如果码率给得足够高,理论上各编码的画质是一样的,不过体积完全不一样,封装格式的辨认很简单,大多数情况下,拓展名就是封装格式的名字。比如一个文件“金刚狼.avi”,那它就是属于avi的封装格式,“钢之炼金术师.Mkv”,那它就属于mkv封装格式, “喜羊羊与灰太狼.rmvb”就是rmvb封装格式。简而言之,视频文件后缀名就是封装格式的名字。不过wmv和rmvb就比较特殊,后面编码器部分再说。封装格式就是酒瓶。酒瓶就不影响酒的口感,同样,封装格式一样不影响视频画质。它只负责把内部的视频轨和音频轨集成在一起,只起到一个文件夹(或者压缩包)的作用,并没有对视频轨和音频轨造成影响
2.音频播放方式
System Sound Services
是最底层也是最简单的声音播放服务,调用 AudioServicesPlaySystemSound 这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有很多限制;
■ 声音长度要小于 30 秒
■ In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的
■ 打包成 .caf, .aif, 或者 .wav 的文件
■ 不能控制播放的进度
■ 调用方法后立即播放声音
■ 没有循环播放和立体声控制
另外,它还可以调用系统的震动功能,方法也很简单。具体的代码可以参考官方的示例 SysSound,但是官方的示例只有一些简单的用法,从文档中我们发现可以通过 AudioServicesAddSystemSoundCompletion 方法为音频播放添加 CallBack 函数,有了 CallBack 函数我们可以解决不少问题,比如可以克服 System Sound Services 本身不支持循环播放的问题
AVAudioPlayer
是 AVFoundation.framework 中定义的一个类,所以使用要先在工程中引入 AVFoundation.framework。我们可以把 AVAudioPlayer 看作是一个高级的播放器,它支持广泛的音频格式,主要是以下这些格式:
■ AAC
■ AMR(AdaptiveMulti-Rate, aformatforspeech)
■ ALAC(AppleLossless)
■ iLBC(internetLowBitrateCodec, anotherformatforspeech)
■ IMA4(IMA/ADPCM)
■ linearPCM(uncompressed)
■ μ-lawanda-law
■ MP3(MPEG-1audiolayer3
AVAudioPlayer 可以播放任意长度的音频文件、支持循环播放、可以同步播放多个音频文件、控制播放进度以及从音频文件的任意一点开始播放等,更高级的功能可以考 AVAudioPlayer 的文档 。要使用 AVAudioPlayer 的对象播放文件,你只需为其指定一个音频文件并设定一个实现了 AVAudioPlayerDelegate 协议的 delegate 对象。只要将 AVAudioPlayer 的 numberOfLoops 属性设为负数,音频文件就会一直循环播放直到调用 stop 方法。AVAudioPlayer 同样支持 Callback,这是 AVAudioPlayerDelegate 的一个可选 delegate 方法,你可以随时控制 AVAudioPlayer 对象的播放、暂停以及停止,通过判断对象的状态,分别调用 play、pause 和 stop 方法。
要在iOS设备上播放和录制音频,苹果推荐我们使用AVFoundation框架中的AVAudioPlayer和AVAudioRecorder类。虽然用法比较简单,但是不支持流式;这就意味着:在播放音频前,必须等到整个音频加载完成后,才能开始播放音频;录音时,也必须等到录音结束后,才能获取到录音数据。这给应用造成了很大的局限性
Audio Queue Services
如果以上两种音频播放的解决方案都无法满足你的需求,那么我想你肯定需要使用 Audio Queue Services。使用 Audio Queue Services 对音频进行播放,你可以完全实现对声音的控制。例如,你可以在声音数据从文件读到内存缓冲区后对声音进行一定处理再进行播放,从而实现对音频的快速/慢速 播放的功能。因为 Audio Queue Services 相对复杂很多,Apple 官方已经把它整理为一本书了
OpenAL
是一套跨平台的开源的音频处理接口,与图形处理的 OpenGL 类似,它为音频播放提供了一套更加优化的方案。它最适合开发游戏的音效,用法也与其他平台下相同
3.播放音频对象介绍
AVAudioSession 用来控制audio会话的,控制其是用来录音还是播放等等功能。
AVAudioRecorder 录音 默认封装格式是caf,录音对象,目前录音都使用这个对象
AVAudioPlayer 播放
4.播放音频对象介绍
AudioToolbox framework
使用AudioToolbox framework。这个框架可以将比较短的声音注册到 system sound服务上。被注册到system sound服务上的声音称之为 system sounds。它必须满足下面几个条件。
1、播放的时间不能超过30秒
2、数据必须是 PCM或者IMA4流格式
3、必须被打包成下面三个格式之一:Core Audio Format (.caf), Waveform audio (.wav), 或者 Audio Interchange File (.aiff),声音文件必须放到设备的本地文件夹下面。通过AudioServicesCreateSystemSoundID方法注册这个声音文件,AudioServicesCreateSystemSoundID需要声音文件的url的CFURLRef对象
AVFoundation framework
对于压缩过Audio文件,或者超过30秒的音频文件,可以使用AVAudioPlayer类。这个类定义在AVFoundation framework中
MediaPlayer framework
播放电影文件:iOS sdk中可以使用MPMoviePlayerController来播放电影文件。但是在iOS设备上播放电影文件有严格的格式要求,只能播放下面两个格式的电影文件。
• H.264 (Baseline Profile Level 3.0)
• MPEG-4 Part 2 video (Simple Profile)
5.ios音频与Android音频互转解决方案
安卓的格式苹果全不支持,苹果的格式安卓也不怎么支持,解决方案有下面三种:
第一种 方案对于服务器负荷较大,不论是安卓端亦或是IOS端都将音频传输到服务器,通过服务器进行转换再进行转发。这种做法可以不受系统限制,但是信息量较大时对服务器负荷较大,对服务器端的要求很高。据传闻,微信就是采用这种方式进行的语音IM交互
第二种 方案是不论IOS端还是安卓端都统一使用相同的第三方音频库进行编解码处理,然后再进行网络传输,优点是可供选择的音频库非常多,可以根据自己不同的需求选择各种各样的音频格式,但是因为不论是IOS端还是安卓端都需要对其进行编码解码处理,而项目初期并没有设计这方面的需求,所以如果双端都进行修改修改量实在太大。同样据传闻,同为语音IM的成熟案例微米就是依靠Speex的三方开源库来完成的,这种格式体积小,能降噪,是目前比较受推崇的方式。
第三种 amr格式的音频文件是安卓系统中默认的录音文件,也算是安卓支持的很方便的音频文件,IOS系统曾经是支持这种格式的文件,自4.3以后才取消了对amr的支持(原因应该不需要我多说。。。),可见,amr格式的音频文件并非IOS处理不了的,需要实现在iOS端完成wav和amr的互转,这样修改全部放在ios端进行处理
分享到:
相关推荐
IOS应用源码——音频视频播放代码.zip
IOS应用源码——音频视频播放代码.rar
IOS应用源码——录制音频 demo Recording.zip
IOS应用源码——视频音频控制器.zip
IOS应用源码——视频音频控制器.rar
ios基础,比较基础的通知例子,适合初学者研究一下
iOS录音后转MP3并且实现音频拼接的示例程序 使用了iOS自带的AVFoundation和C语言的开源库lame实现pcm转aac 适合学习/练手、毕业设计、课程设计、期末/期中/大作业、工程实训、相关项目/竞赛学习等。 项目具有较高的...
———————————————— 版权声明:本文为CSDN博主「iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:...
全书分为9章:开篇综述、手势识别、加速度计与陀螺仪、指南针与磁力计、照相机与摄像头、音频设备访问、使用蓝牙、定位和iOS敏捷开发项目实战——增强现实版本铅锤应用。 第2章介绍了手势识别,通过两种方式实现...
通过利用在本修订手册中列出的新的和校正过的实例,你将快速掌握编写完成ios应用所需的各个步骤——包括存储和保护数据、增强和动画化图形、管理文件和目录以及使用passbook。 本手册针对ios 6 sdk做了完整的更新...
为了让开发语音的Android开发者节省语音开发时间,特上传语音SDK,大家可以直接使用。 使用Speex压缩,语音文件录制、播放,语音文件在IOS设备上也能播放。
现在各种小程序风靡,这边H5的需求还没有搞定,产品又要求做小程序版本,做可以,关键是618前上线,...UA的有一个很大的问题,iOS判断不了,它是没有miniProgram这个字段的。在开发工具和Android中是可以的。 而__wxjs
邮政是一种私人共享的社会服务,学习现实世界中的邮政元素。 它旨在防止过度分享,并且用户之间只有一对一的交流,所有期刊都是用户自己的私有。 用户相互发送邮件,并以笔记、视频、图像、音频和 Web 部件的形式...
隆起Bearwaves 的第一款游戏,一款多平台科幻动作角色扮演游戏。 Uplift 是一款主要为 Android 平台构建的动作 RPG... 资产(这里是指音频、图块集、图形——本质上是任何形式的文本之外的任何东西)在许可下获得许可。
《flash+flex+air移动开发入门经典——适用于android、ios和blackberry》 第1章 flash、flex和air简介 1 1.1 adobe flash 1 1.2 actionscript 3.0 2 1.2.1 ecmascript 2 1.2.2 关键概念 3 1.3 flex框架 11 ...
该项目的目标是开发用户友好且具有视觉吸引力的多设备 Web 应用程序,该应用程序与 Android 和 iOS 设备兼容,将为一系列选择提供补充音频、视频和书面内容。博物馆里的物品。 目录 设置测试环境 要设置与在此项目中...
后台能对学员ID、学习进度、测试成绩等进行全面统计,掌控学员状态。 互动视频连麦 小班课中,学员可申请上台与讲师视频连麦,最多支持16名学员同时连麦。 万岳在线教育系统源码产品参数如下: 万岳在线教育系统...
硬件——蓝牙模块设计。 软件 – Android、iOS 应用程序。 固件 – 蓝牙模块固件。 许多家庭娱乐设备都带有某种遥控器。 如果我们有几个这样的设备,我们最终会得到很多又大又丑的遥控器。 也许只通过智能手机作为一...