`
fanfanlovey
  • 浏览: 73123 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

IOS学习——音频

    博客分类:
  • IOS
阅读更多
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应用源码——音频视频播放代码.rar

    本资源“IOS应用源码——音频视频播放代码.rar”提供了一套完整的源码,可以帮助开发者深入理解iOS平台上的多媒体播放机制。下面我们将详细探讨其中涉及的关键知识点。 1. **AVFoundation框架**: iOS中处理音频和...

    iOS话筒——SpeakHere

    在这个应用中,我们可以深入学习到iOS的音频处理技术,特别是与话筒相关的API和框架。 首先,我们要了解iOS中的核心音频框架(Core Audio)。Core Audio是苹果操作系统提供的底层音频处理框架,用于处理音频输入、...

    IOS应用源码——音频视频播放代码.zip

    本资源“iOS应用源码——音频视频播放代码.zip”提供了一个实用的示例,帮助开发者理解和实现这一功能。这里我们将深入探讨相关知识点。 1. **AVFoundation框架** AVFoundation是iOS平台的核心多媒体框架,用于...

    IOS源码——IOS欢迎界面.zip

    这个“IOS源码——IOS欢迎界面.zip”压缩包很可能是包含了实现iOS欢迎界面的一个示例项目或者模板代码。 在iOS中,欢迎界面主要有两种形式:静态图片和动态加载。静态图片是最常见的,通常是应用的启动图标,直接...

    IOS应用源码——视频音频控制器.rar

    这个压缩包"IOS应用源码——视频音频控制器.rar"显然包含了一个用于iOS应用的视频音频管理类或者模块的源代码。通过分析这个源码,我们可以学习到许多关于iOS平台上的多媒体处理技术。 首先,我们要了解iOS中的...

    IOS源码——后台获取功能.zip

    这个压缩包“IOS源码——后台获取功能.zip”很可能包含了一些示例代码或者完整的项目,用于帮助开发者理解和实现iOS应用的后台运行机制。以下是对这个主题的详细讲解: 1. **后台模式** iOS系统提供了多种后台模式...

    IOS应用源码——录制音频 demo Recording.zip

    这个源码示例可能涵盖了以上所有步骤,通过阅读和理解代码,开发者可以学习如何在自己的iOS应用中实现音频录制功能。同时,也可以根据项目需求调整录音设置,如调整音频质量、格式等,以满足不同的应用场景。

    IOS应用源码——视频音频控制器.zip

    这个“IOS应用源码——视频音频控制器.zip”包含的源代码很可能是用于构建这样一个功能丰富的控制器的实例。让我们深入探讨一下这个主题,看看它可能涉及的关键知识点。 1. **AVFoundation框架**:在iOS上处理...

    IOS应用源码——ipad英语学习.zip

    【标题】"IOS应用源码——ipad英语学习.zip" 提供的是一个iOS应用程序的源代码,专门设计用于iPad设备的英语学习应用。这个压缩包包含的资源将帮助开发者了解如何构建这样的应用,或者为那些想要改进或扩展现有英语...

    IOS应用源码——SoundEngineTest.rar

    本次我们将深入探讨一款名为"SoundEngineTest"的源码项目,这是一份用于学习和实践iOS音频编程的宝贵资源。通过分析其代码,我们可以了解iOS平台上的音频处理机制和实现技巧。 1. **音频引擎基础** iOS中的音频...

    IOS应用源码——PageViewController for iOS.rar

    "IOS应用源码——PageViewController for iOS.rar" 这个标题表明我们正在处理一个关于iOS开发的项目源代码,具体是使用PageViewController。PageViewController是苹果iOS SDK中的一个组件,用于实现类似电子书或幻灯...

    IOS应用源码——SystemSoundTest.rar

    【标签】"IOS 源码"表明了这是一份与iOS开发相关的源代码,开发者可以通过研究这份代码来学习iOS开发的特定技术,特别是音频处理部分。对于初学者或有经验的iOS开发者来说,这是一个宝贵的资源,可以帮助他们深入...

    IOS应用源码——PSBackgroundCurtain for iOS.rar

    【标题】"IOS应用源码——PSBackgroundCurtain for iOS.rar" 提供的是一个针对iOS平台的开源项目,PSBackgroundCurtain。这个项目主要关注的是如何在iOS应用中实现后台运行时的背景窗帘效果,它允许用户自定义应用...

    IOS应用源码——oalTouch.zip

    在iOS开发领域,源码学习是提升技术深度的重要途径。本文将围绕标题“iOS应用源码——oalTouch.zip”展开,深入解析其中的关键知识点,旨在帮助开发者们理解并掌握iOS应用的内部运作机制。 oalTouch是一个基于...

    IOS应用源码——收音机.zip

    总的来说,这个“iOS应用源码——收音机.zip”为我们提供了从应用结构、用户界面设计到音频流播放功能实现的全面学习材料。通过深入研究,开发者可以掌握iOS音频播放技术,了解如何结合网络请求构建动态内容的应用,...

    IOS应用源码——PageCurl for iOS.rar

    "IOS应用源码——PageCurl for iOS.rar" 这个标题指出我们正在处理一个针对iOS平台的源代码项目,名为“PageCurl”。PageCurl通常指的是苹果iOS系统中的一种视觉效果,它模拟了翻页时纸张卷曲的动画效果,常见于...

    IOS应用源码——OpenAlTest.zip

    《iOS应用源码解析——OpenAlTest》 iOS应用开发是一项技术性强且充满挑战的工作,开发者需要掌握Objective-C或Swift编程语言,以及苹果提供的各种框架和工具。在本篇文章中,我们将深入探讨一个名为"OpenAlTest"的...

    IOS应用源码——视频播放器.zip

    "IOS应用源码——视频播放器.zip"这个压缩包文件很可能包含了一个完整的iOS视频播放器应用的源代码,这对于开发者来说是一个宝贵的学习资源。让我们深入探讨一下iOS视频播放的相关知识点。 1. **AVFoundation框架**...

Global site tag (gtag.js) - Google Analytics