Iphone开发之音频101(part 2):转换和录音

iPhone开发之音频101(Part 2):转换和录音

译者:大侠自来也

 

免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作! 

 

原文链接地址:http://www.raywenderlich.com/233/audio-101-for-iphone-developers-converting-and-recording 

 

这篇文章是这个系列(涵盖iPhone开发者感兴趣的音频主题)的第二篇。

在这个系列的第一篇文章中,我讲解了文件格式和数据格式的区别,还有哪些格式是在iPhone上面支持的。现在,让我们讨论一下你怎么样在不同格式之间转换。 

afplay, afconvert, afinfo

转换音频在Mac是相当简单的,因为在Mac上有三条内置的命令行工具:afplay、afconvert、afinfo。

使用最简单的是afplay,仅需要在终端里输入你的音频名字,它将会播放。当在听不同比特率下的压缩音频文件有什么差别时,这是相当方便的。

接下来是afinfo, 仅需输入你音频的名字,之后就可以看到这份文件的文件格式、数据格式、比特率和其他一些有用的信息。例子如下: 

 

上面的例子向你说明了这份文件的文件类型是CAF,数据格式是16位低字节序有符号整型(LEI16),采样频率是44100Hz,比特率是705600比特/秒。

最后,让我们讨论下里面最好的工具:afconvert。afconvert使用相当简单,只需要一个像下面的命令行:

afconvert -d [out data format] -f [out file format] [in file] [out file]

因此将一份文件转化为iPhone首选的无压缩音频编码(提醒:linear PCM的低字节序整型16位转化,也就是LEI16(the little-endian integer 16-bit variant of Linear PCM)),和iPhone首选的文件格式(提醒:核心音频文件格式,也就是CAFF),你可以输入如下命令行:

afconvert -d LEI16 -f 'caff' input_file.xxx output_file.caf

注意:我没有指出这个输入文件的扩展名,因为afconvert可以智能地检测音频文件的类型并且做相应的转换,因此输入的文件可以是任何数据格式和音频文件格式的文件。

还有一点需要注意:你可以在输入或者输出文件之前增加一个“-b”的选项来设置比特率。因此就像这个例子,我们使用32bit/sec来保存这个文件,然后使用128bit/sec来保存。

afconvert -d aac -f 'caff' -b 32768 background-music-lei.caf test_32.caf

afconvert -d aac -f 'caff' -b 131072 background-music-lei.caf test_128.caf

在Mac上面录制音频文件 

我想略记下两条关于在Mac上面为你的应用制作音乐和声音的好方法。

第一,需要GarageBand。GarageBand可以轻松的把一些预先准备好的鼓声、吉他声和一些其他的乐器声音组合到一起成为一小段歌曲。假如你很喜欢音乐,你可以自己边玩边录一些音乐,并且做一些很酷的东西。

 

假如你还没准备好,还不怎么了解,你可以花一些时间来了解一下Apple 的GarageBand教程 。我发现特别是 “Using Built-In Software Instruments” 这章最有用。

假如你觉得你的歌很好,你可以将它导出上传到iTunes,然后选择”Reveal in Finder”来获取你的文件以备将来使用。

我发现GarageBand 不是一个用来记录简单音效的最好工具。因此,我更喜欢一个很棒的免费音频程序,叫 Audacity。你可以插上你的麦克风(我用我的Rock Band麦克风,它工作得刚刚好!),记录你的声效,并能很简单的保存下来。

 

 

 

  不要忘了当你像这样制作你自己的声音的时候,你们最可能使用16位高字节顺序有符号整型来存储,或者使用“BEI16”来储存。因此,不要忘了在将它们包含到你的程序之前转换到LEI16。

假如你发现你自己没得很好的艺术细胞,这里有一些音效在免费声音项目里有Creative Commons许可证,或者你可以雇佣一个专业人员。 

接下来

接下来将会是这个系列的最后一篇文章,我将演示怎么在iPhone上通过程序播放音频

 

附录1 Mac下查看文件格式

要是你想了解那些文件格式支持那些数据格式,你可以在控制台输入:afconvert -hf

然后你就可以看到一下一些信息:

$ afconvert -hf

Audio file and data formats:

    '3gpp' = 3GP Audio (.3gp)

               data_formats: 'aac ' 'aace' 'aach' 'aacl' 'aacp' 'samr'

    '3gp2' = 3GPP-2 Audio (.3g2)

               data_formats: 'aac ' 'aace' 'aach' 'aacl' 'aacp' 'samr'

    'adts' = AAC ADTS (.aac, .adts)

               data_formats: 'aac ' 'aach' 'aacp'

    'ac-3' = AC3 (.ac3)

               data_formats: 'ac-3'

    'AIFC' = AIFC (.aifc, .aiff, .aif)

               data_formats: I8 BEI16 BEI24 BEI32 BEF32 BEF64 UI8 'ulaw'

                             'alaw' 'MAC3' 'MAC6' 'ima4' 'QDMC' 'QDM2'

                             'Qclp' 'agsm'

    'AIFF' = AIFF (.aiff, .aif)

               data_formats: I8 BEI16 BEI24 BEI32

    'amrf' = AMR (.amr)

               data_formats: 'samr'

    'caff' = Apple CAF (.caf)

               data_formats: '.mp1' '.mp2' '.mp3' 'QDM2' 'QDMC' 'Qclp'

                             'Qclq' 'aac ' 'aace' 'aach' 'aacl' 'aacp'

                             'alac' 'alaw' 'dvi8' 'ilbc' 'ima4' I8 BEI16

                             BEI24 BEI32 BEF32 BEF64 LEI16 LEI24 LEI32

                             LEF32 LEF64 'ms\x00\x02' 'ms\x00\x11' 'ms\x001'

                             'samr' 'ulaw'

    'm4af' = Apple MPEG-4 Audio (.m4a)

               data_formats: 'aac ' 'aace' 'aach' 'aacl' 'aacp' 'alac'

    'MPG1' = MPEG Layer 1 (.mp1, .mpeg, .mpa)

               data_formats: '.mp1'

    'MPG2' = MPEG Layer 2 (.mp2, .mpeg, .mpa)

               data_formats: '.mp2'

    'MPG3' = MPEG Layer 3 (.mp3, .mpeg, .mpa)

               data_formats: '.mp3'

    'mp4f' = MPEG-4 Audio (.mp4)

               data_formats: 'aac ' 'aace' 'aach' 'aacl' 'aacp'

    'NeXT' = NeXT/Sun (.snd, .au)

               data_formats: I8 BEI16 BEI24 BEI32 BEF32 BEF64 'ulaw'

    'Sd2f' = Sound Designer II (.sd2)

               data_formats: I8 BEI16 BEI24 BEI32

    'WAVE' = WAVE (.wav)

               data_formats: UI8 LEI16 LEI24 LEI32 LEF32 LEF64 'ulaw' 'alaw'

 

 

 

转载于:https://www.cnblogs.com/bandok123/archive/2012/03/02/2377023.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习笔记(十三)——隐马尔科夫模型

一、隐马尔科夫模型 在马尔科夫模型中,每一个状态代表了一个可以观察的事件,所以,马尔科夫模型有时称为可视马尔科夫模型(visible Markov model,VMM),这在某种程度上限制了模型的适应性。在隐马…

elasticsearch基本查询三(英文分词)match查询

#match查询 #match query知道分词器的存在,会对filed进行分词操作, 然后再查询 GET /ib3/user/_search { "query":{ "match":{ "name": "zhaoliu" }} } GET /lib3/user/_search { "query":{ "match"…

solr 3.5 配置及应用(二)

在 solr 3.5 配置及应用(一) 讲过一了 solr 3.5的详细配置,本节我们讲利用solr 的客户端调用solr的应用了! 一、利用SolrJ操作solr API 使用SolrJ操作Solr会比利用httpClient来操作Solr要简单。SolrJ是封装了httpClient方法,来操作solr的API的…

elasticsearch控制返回字段查询三(英文分词)match查询

#_source指定查询返回的字段信息 #_source指定查询返回的字段信息 GET /lib3/user/_search {"from":0, "size": 2, "_source": ["address" , "name"] ,"query": {"match": {"interests": &…

通过日志恢复MSSQL数据例子

这段时间看了关于在SQL server 中通过日志和时间点来恢复数据。也看了一些网上的例子,看如何通过日志来恢复数据。 前提条件: 数据库的故障恢复改为非简单模式,去掉自动关闭和自动收缩两个选项 如果是简单模式: 类似下面的语…

最优化学习笔记(十一)——对偶问题的例子

某线性规划问题为: mincTxst.Ax≤b\min \boldsymbol{c}^T\boldsymbol{x} \\ st. \boldsymbol{Ax} \le \boldsymbol{b}这个例子和上节中的表2非对称形式的对偶关系比较接近,将上式改写为: maxxT(−c)st.xTAT≤bT\max \boldsymbol{x^T(-c)}\\ …

ElasticSearch查询返回信息根据字段排序(英文检索)

根据年龄降序排序 #排序 GET /lib3/user/_search {"query": {"match_all": {}},"sort":[{"age": {"order" :"desc"}}] } {"took" : 1,"timed_out" : false,"_shards" : {"t…

机器学习笔记(十四)——HMM估计问题和前向后向算法

一、隐马尔科夫链的第一个基本问题 估计问题:给定一个观察序列OO1O2…OT和模型u(A,B,π),如何快速地计算出给定模型u情况下,观察序列O的概率, 即P(O|u)? 二、求解观察序列的概率 其实,求解这个问题就是一个解码问题。 对于任意的状态序列Q…

windows中架设基于Apache的svn服务器

1.安装apache及svn的windows版我安装的版本是:httpd-2.2.22-win32-x86-openssl-0.9.8t.msi 和svn-win32-1.5.0.zipsvn是解压就可以了2. 解svn安装目录下\bin下的mod_authz_svn.so、mod_dav_svn.so拷贝到apache/modules下3.将 svn安装目录下\bin下的libdb44.dll拷贝到apache/bin…

ElasticSearch通配符 * 查询(英文检索)

#如果你要查询的字段信息记得不太清楚, 我们也可以使用通配符 * GET /lib3/user/_search {"from":0, "size": 2,"_source": {"includes": "addr*","excludes": ["name" , "bir*"]},"…

sqlserver agent不能启动

我启动了 event log 服务 ,就好了,不知什么原因转载于:https://www.cnblogs.com/laogao/archive/2012/03/11/2390794.html

机器学习笔记(十五)——HMM序列问题和维特比算法

一、引言 这篇blog主要讲序列问题和其解法——维特比算法。 二、HMM中的第二个基本问题 序列问题:给定一个观察序列OO1O2…OT和模型u(A,B,π),如何快速有效地选择在一定意义下”最优”的状态序列Qq1q2…qT,使得该状态序列“最好地解释”观察序列&#…

ElasticSearch范围查询(英文检索)

#根据日期范围查询 #范围查询 GET /lib3/user/_search {"query": {"range": {"birthday": {"from": "1990-10-10","to": "2020-03-15"}}} }{"took" : 24,"timed_out" : false,&qu…

(转)CDN是如何工作的?

转载自:CDN是如何工作的? CDN是互联网中使用较频繁的一种技术。你也许常听人说:“我们的网站使用了CDN技术”,但可能他们对CDN的了解并不多,也许只局限于--用了以后网站访问速度会变快。 其实,CDN的原理非常…

ElasticSearch前缀匹配查询(英文检索)

#前缀匹配查询 #前缀匹配查询 GET /lib3/user/_search {"query": {"match_phrase_prefix": {"name":{"query":"zhao"}}} }{"took" : 59,"timed_out" : false,"_shards" : {"total&quo…

机器学习笔记(十六)——EM算法概述

一、引言 按照计划,这周应该学习HMM中的第三个基本问题:参数估计问题,但是其中的内容涉及到了EM算法,所以打算先把EM算法搞定之后再去继续HMM的问题。EM算法的推导过程比较复杂,这节我只给出简述和计算公式&#xff0c…

c# 日期函数[string.Format----GetDateTimeFormats] --转载

c# 日期函数[string.Format----GetDateTimeFormats] c# 日期函数 DateTime dt DateTime.Now;Label1.Text dt.ToString();//2005-11-5 13:21:25Label2.Text dt.ToFileTime().ToString();//127756416859912816Label3.Text dt.ToFileTimeUtc().ToString();//12775670485991281…

ElasticSearch wildcard查询(英文检索)

wildcard查询 允许使用通配符*和?来进行查询 *代表0个或多个字符 工代表任意1个字符 GET /ib3/user/ search { "query": { "wildcard":{ "name": *zhao* }}} GET /ib3/user/ search { "query": { "wildcard":{ *name"…

机器学习笔记(十七)——EM算法的推导

一、Jensen 不等式 在EM算法的推导过程中,用到了数学上的Jensen不等式,这里先来介绍一下。 若Ω是有限集合{x1,x2,…,xn}{x1,x2,…,xn},而μ是Ω上的正规计数测度,则不等式的一般形式可以简单地用和式表示: φ(∑i1ng(xi)λi)≤…

CCTextureCache的多线程加载原理和使用

做引擎的时候,遇到一个texture的异步加载,这里将具体的原理和使用方法贴出来,后面根据浏览器的特性做修改移植。 voidCCTextureCache::addImageAsync(constchar *path, CCObject *target, SEL_CallFuncO selector) { CCAssert(path ! NULL, …