关于iPhone音频的那些事
音频文件(Audio File)
1、有两个概念
(1)、文件格式(File Format or Audio Containers)——描述文件本身的格式,里面的音频数据可以用不同的编码格式。
例如:caf文件就是一种文件格式。这种文件里面包含的音频数据可以是MP3编码,线性PCM编码或者其他的编码格式。
(2)、数据格式(Data Format or Audio Encoding)——音频数据的编码格式。
2、数据格式(Data Format or Audio Encoding)
(1)、AAC
(2)、HE-AAC
(3)、AMR
(4)、ALAC
(5)、iLBC
(6)、IMA4
(7)、linear PCM
(8)、u-law and a-law
(9)、MP3
3、我应该选择那种数据格式?
实际上,只有少数的数据格式更适合使用,在选择数据格式时,要了解下面两个方面
(1)、你可以又快又好的播放line PCM、IMA4和一些其他的无压缩或简单压缩的数据格式。
(2)、对于一些高级的数据格式,例如AAC、MP3和ALAC等,iPhone有硬件来支持快速解码,但问题在于,硬件解码每一次只能处理一个文件。当有多个文件要处理时,其他的解码会放在软件中解码,速度会变得很慢。
所以,选择数据格式,需要考虑以下两个方面:
(1)、如果空间不是问题:所有的数据格式都采用linear PCM,不仅仅因为它解码最快,而且可以同时播放多个同样的数据格式,而不会引起CPU资源消耗过度。
(2)、如果空间是问题:那么如果是背景音乐文件,请选择AAC数据格式,如果是音效文件,选择IMA4数据格式。
4、Linear PCM的几种变种
Linear PCM是iPhone上最喜欢的无压缩数据格式。
根据音频数据如何存储,Linear PCM有几个变种。例如,数据可以存储成大端格式,小端格式;数据可以存储成浮点型,整型,和各种位宽。
iPhone上最喜欢的linear PCM变种是小端,整型,16-bit或者LEI16。
MAC OSX上最喜欢的linear PCM变种是native-endian floating point 32-bit
因为音频文件经常在MAC上创建,所以在iPhone上使用时最好先检查一下,最好转换成iPhone喜欢的格式后再用。
5、文件格式(File formats or Audio Containers)
iPhone支持许多文件格式,包括MPEG-1(.mp3),MPEG-2 ADTS(.aac),AIFF,CAF和WAVE。这里的重点是,通常情况下,你只需要使用CAF,因为它可以包含iPhone支持的任何数据格式(编码格式),而且它是iPhone最喜欢的文件格式。
6、Bit Rates
bit rates是和数据格式(编码格式)相关的一个技术指标。bit rate是指音频文件每秒占用(takes up)的字节数(bytes)。
一些数据格式例如AAC和MP3让你指定音频文件压缩成的字节数。越低的bite rate,音频质量越差。
你应该根据实际情况选择合适的bit rate,尝试不同的bit rates,试图在file size和quality之间找一个最合适的平衡点。如果你的文件大部分是speech,你可能get away with a lower bit rate。
下表给出通用的bit rate
32kbit/s: AM Radio quality
48kbit/s: Common rate for long speech podcasts
64kbit/s: Common rate for normal-length speech podcasts
96kbit/s: FM Radio quality
128kbit/s: Most common bit rate for MP3 music
160kbit/s: Musicians or sensitive listeners prefer this from 128kbit/s
192kbit/s: Digital radio broadcasting quality
320kbit/s: Virtually indistinguishable from CDs
500kbit/s-1,411kbit/s: Lossless audio encoding such as linear PCM
7、采样率
采样率也是和数据格式相关的一个技术指标。
当把一个模拟信号转换成一个数字信号的时候,采样率描述了 波形被采样的频率 (即每秒钟采样多少次波形)。
大部分情况下,44100Hz会被采用,因为它和CD Audio的采样率是一样的。
FAA:
1、how to record audio as mp3 file by using AvAudiorecorder
http://stackoverflow.com/questions/10314510/how-to-record-audio-as-mp3-file-by-using-avaudiorecorder
2、The Problem is kAudioFormatMPEGLayer3 which is not supported by AVAudioRecorder.
Alternatively you can use kAudioFormatAppleIMA4 for your recording purpose.
Finally you can write your own encoding logic to convert kAudioFormatAppleIMA4 in to MP3 Format.
The other supported encoding for Recording purpose are
kAudioFormatMPEG4AAC
kAudioFormatAppleLossless
kAudioFormatAppleIMA4
kAudioFormatiLBC
kAudioFormatULaw
kAudioFormatLinearPCM
For more info you can refer to this post of SO.
关于iPhone音频的那些事的更多相关文章
- WebRTC 系列之音频会话管理
WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音对话或视频对话的 API.W3C 和 IETF 在2021年1月26日共同宣布 WebRTC 1. ...
- IOS 音频开发文件大小计算
音频基础知识 音频文件计算大小 音频转码 标签(空格分隔): 调查 IOS音频 https://developer.apple.com/library/ios/documentation/MusicA ...
- iOS 音频开发
音频基础知识 组成 音频文件的组成:文件格式(或者音频容器) + 数据格式(或者音频编码). 文件格式(或音频容器)是用于形容文件本身的格式. 我们可以通过多种不同的方法为真正的音频数据编码.例如 ...
- [工具推荐]_iOS音频批量转换
通常为了便于市场推广和获得更高的下载量,产品安装包的体积是越小越好.那么问题来了,要如何才能做到使安装包的体积最小化呢.根据产品的组成成分,最终可以大概分为,代码,图片,视频,音频等这几部分,今天我们 ...
- html5手机常见问题与工具分享
mobileTech A useful tools or tips list for mobile web application developing 这个项目收集移动端开发所需要的一些资源与小技巧 ...
- mobileTech
A useful tools or tips list for mobile web application developing 这个项目收集移动端开发所需要的一些资源与小技巧 工具类网站 HTML ...
- (任寒韬)WebApp群主 - MobileTech 资料
web app : http://www.lightapp.cn/brand/index/4101 https://github.com/jtyjty99999/mobileTech/blob/mas ...
- mobilehack -转
# mobileHack##工具类网站 [HTML5 与 CSS3 技术应用评估](http://html5please.com/ "html5与css3技术应用评估") [各种奇 ...
- 笔记- iphone手机音频AAC视频H264推流(一) iphone手机推流最佳方案
这几个月一直在做iphone手机音视频的东西,由于个人比较懒,所以一直没整理,现在闲的蛋疼,并且以后项目要搁置了,在这里记录一下我做的iphone手机推流的东西. 项目都是个人的调研与实验,可能很多不 ...
随机推荐
- ibatis中#和$如何当作字符使用?
1.情景展示 在plsql中,可以正常执行 但是在ibatis的sqlMap文件中,报错信息如下: 2.原因分析 ibatis中 #.$ 是功能符号,用来取值的,当sql中出现这类字符时便会造成冲 ...
- Solidworks 2016中导出URDF文件
安装SolidWorks to URDF exporter插件 下载SolidWorks to URDF Exporter插件后按照网站上的步骤进行安装(目前该插件已经在Win 7 64位系统+Sol ...
- GNU Linux系统变量(sysctl配置命令)综合使用
查看全部kernel变量的值 sysctl -a 怎样查看一个系统变量的值 1).cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 2).s ...
- ibatis和myBatis打印sql语句的log4j配置文件
1/ibatis: log4j.rootLogger=debug, stdout, logfile log4j.logger.com.ibatis=DEBUG log4j.logger.com. ...
- java struts2入门学习--OGNL语言常用符号和常用标签学习
一.OGNL常用符号(接上一篇文章): 1.#号 1)<s:property value="#request.username"/> 作用于struts2的域对象,而不 ...
- 【LeetCode】4. Median of Two Sorted Arrays (2 solutions)
Median of Two Sorted Arrays There are two sorted arrays A and B of size m and n respectively. Find t ...
- Python学习笔记(九)—— 函数
一.函数调用: 1.python内部函数查询:http://docs.python.org/3/library/functions.html#abs 2.注意调用函数的参数个数和类型. 3.函数名其实 ...
- 编码 GBK 的不可映射字符
一般做项目公司都会统一要求文件编码类型,很多为了实现应用国际化和本地化和更高的性能,而选用UTF-8而非GBK. 但在开发过程中我们都用的是IDE,只要更改了配置就不用操心了,但有时我们也会用命令行来 ...
- SmartUpload类实现上传和下载
实现文件的上传与下载,可以使用Java的I/O流的类来实现,也可以使用专业的上传.下载组件.这些组件提供了现成的类,程序员只需调用这些类中的方法即可实现文件的上传与下载.本章将向读者介绍如何应用jsp ...
- 认识LINQ的第一步---从查询表达式开始
学习和使用C#已经有2个月了,在这两个月的学习中,深刻体会到,C#这门语言还真不适合编程初学者学习,因为它是吸取了很多其他语言,不仅是面向对象,还包括函数式语言的很多特性,导致它变成特性大爆炸的语言. ...