Android之音频开发基础

相信不少人在音频采集处理的时候,会遇到这样的设置界面,那采样率、比特率、通道这样的术语,代表的是什么意思呢?

图1

1、基本常识

  • 频率的单位是HZ,中文为赫兹,是电,磁,声波和机械振动每秒的周期次数(周期/秒)。
  • 人类的耳朵能听到的声音频率范围为20Hz~20000Hz,如果低于这个范围的话就叫做次声波,而若是高于这个范围的则是叫做超声波。无论次声波和超声波,耳朵都觉察不到
  • 人发出的声音信号为模拟信号,想要在计算机上处理的话,必须把它们转为数字信号,这个转换过程叫模数转换。

    (模拟信号示例)



    (数字信号示例)

     
  •  对于人声信号而言,处理一般经过以下步骤:
           人嘴说话——>声电转换——>采样(模数转换)——>量化(将数字信号用适当的数值表示)
            ——>编码(数据压缩)——>传输(网络或者其他方式)——>解码(数据还原)
            ——>反采样(数模转换)——>电声转换——>人耳听声。

 

2、采样率是什么?(即图1的44100Hz)

    采样率,又叫采样频率、取样频率。我们把人声模拟信号(简单理解为正弦波或余弦波)转为计算机识别得到的数字信号(可以理解为0101010101比特位),需要对声音样本进行采样(即模数转换)。根据耐奎斯特(NYQUIST)采样定理,用两倍于一个正弦波的频繁率进行采样就能完全真实地还原该波形。
 

    因此,我们在单位时间内,对原始声音读取采样的次数越多,得到声音数据就越多,对信号波形的表示也越精确。在后续数字化处理中,声音还原就越真实、自然。所以采样率就是:录音设备在一秒钟内对声音信号的采样次数

  • 采样率越高,声音的质量越好,所表现的频率范围越大。
  • 高采样率,会使文件变得很大,加上人耳的分辨率非常有限,高了也几乎听不出区别,没什么意义。
  • 采样频率一般共分为22.05KHz、44.1KHz、48KHz三个等级。
    22.05 KHz 只能达到FM广播的声音品质,
    44.1KHz    理论上的CD音质界限(可以表现的频率范围:0Hz - 22050Hz
    48KHz       可达到DVD音质         (可以表现的频率范围:0Hz - 24000Hz)

PS:为什么CD采样率会采用44.1KHz 这个数值呢?
最早期的数码录音设备,就是一个PCM编码器加一部录像机!世界上的录像机主要有两大制式:欧洲的PAL制式和美国日本的NTSC制式。PAL制式,场频50Hz,行频15625Hz,每一场625条扫描线。NTSC制式,场频59.94Hz(接近但不是60Hz),行频15575Hz,每一场525条扫描线。

适用于PAL制式录像机的编码器,其采样频率就是44.1kHz。适用于NTSC制式录像机的编码器,其采样频率就是44.056。早期,日本确有一些采用44.056kHz采用频率的数码录音,但后来统一到44.1kHz了。

    那么44.1和44.056kHz这二个数字是怎么来的呢?
44,100=294 x 50 x 3
44,056=245 x 59.94 x 3

     50Hz和59.94Hz分别是PAL和NTSC的场频, 294和245是从PAL和NTSC的线数上来的,因为是隔行扫描的,所以扫描线数要除2。故此PAL的扫描线就变成312.5而NTSC则变成262.5。但在模拟电视时代,为确保电视画面内容完整,所以摄像机,录像机,电视机都采用过扫描技术,最上,最下,最左,最右的部分都给舍去了。因此,无论PAL还是NTSC制式的实际扫描线,都比625和525少。PAL制式下可用扫描线数是294线,而NTSC则是245线。至于x3,则是在一条视频扫描线的磁迹中,纪录三个数码音频数据块。于是,就有了上面的式子,就有了44.1kHz。

至于采样频率是44.1kHz可以表现的频率范围是0Hz - 22050Hz,根据耐奎斯特采样理论,采样频率必须是信号最高频率的两倍,才能保证不失真。例如:音频信号频率为20KHz的话,其采样频率一般需要40KHz。人耳所能听到的频率范围是20Hz - 20000Hz,20KHz * 2 = 40KHz,考虑到一定的余量采用44.1KHz。

 

3、采样位数是什么?(即图1中的"16位")

也叫采样值、取样值。它客观地反映了数字声音信号对输入声音信号描述的准确程度。8位代表2的8次方--256,16位则代表2的16次方--64K。一段相同的音乐信息,8位声卡只能处理256个精度单位,而16位声卡能把它分为64K个精度单位进行处理。8位采样的差别在于动态范围的宽窄,动态范围宽广,音量起伏的大小变化就能够更精细的被记录下来,如此一来不论是细微的声音或是强烈的动感震撼,都可以表现的淋漓尽致,而CD音质的采样规格正式16位采样的规格。

 

4、通道数是什么?(即图1中的“2通道”)

即声音的通道的数目。常有单声道和立体声之分,单声道的声音仅仅能使用一个喇叭发声(有的也处理成两个喇叭输出同一个声道的声音),立体声能够使两个喇叭都发声(一般左右声道有分工) ,更能感受到空间效果,当然还有很多其它的通道数,如5.1声道、7.1声道等。

 

5、比特率是什么?

比特率,也叫码率、位速。
是指在一个数据流中每秒钟能通过多少比特的数据量。如705kbps,705---k---bit---per---second,表示每秒705600bit的容量。

对于音频信号而言,必须进行编码(即数据压缩)。如果,未经过数据压缩,直接量化进行传输则被称为PCM(脉冲编码调制)。计算一个PCM音频流的比特率公式为:比特率 = 采样率值 × 采样位数 × 声道数 bps。

16K 16比特 8声道 数据速率 = 16K * 16 * 8 = 2048Kbps = 2M/秒,也就是:1秒生成的声音文件大小是2M,10秒是20MB,依此类推。

如:一个采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的WAV文件,它的数据速率则为 44.1K×16×2 =1411.2 Kbps。我们常说128K的MP3,对应的WAV的参数,就是这个1411.2 Kbps,这个参数也被称为数据带宽,它和ADSL中的带宽是一个概念。

将比特率除以8,就可以得到这个WAV的数据速率,即176.4KB/s。这表示存储一秒钟采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的音频信号,需要176.4KB的空间,1分钟则约为10.34M,这对大部分用户是不可接受的,尤其是喜欢在电脑上听音乐的朋友,要降低磁盘占用,只有2种方法,降低采样指标或者压缩。降低采样指标是不可取的,因此专家们研发了各种压缩方案。最原始的有DPCM、ADPCM,其中最出名的为MP3。所以,采用了数据压缩以后的比特率远小于原始码。

原则上,音频位速越高质量越好。不过,对于有损压缩音频,不同的压缩算法,即使比特速相同,也会导致音质结果完全不同。

典型代表:96kbps的WMA音频格式的音质明显要比96kbps的MP3音质好。为什么会这样呢?因为不同的压缩算法,对数据的利用率不同而造成的差异。再举例,假如MP3压缩至48kbps以下,已经惨不忍睹,而如果是AAC音频格式,同样是48kbps的比特率下,音质明显比MP3好。

而对于无损压缩音频,即使比特率完全不同,但是最后的音质却相同。比如把同一个WAV文件分别压缩成FLAC格式和APE格式,得到的文件,比特率是不太相同的,但是音质却是一样的。即使是同一种格式,压缩级别不同,比特率也完全不同,可是最后的结果,音质还是一样(但编码解码时,CPU占用率不同,编码时间也不同)。


6、PCM 分别是什么?

PCM(Pulse Code Modulation)也被称为 脉码编码调制,用于模拟信号的数字化,简单点理解,它是录音后得到的音频文件格式,特点是声音数据没有被压缩。当然,它可以通过编码压缩,变成有损格式的音乐文件(如:amr、MP3、AAC)

常见的PCM音频数据参数描述方式
    44100HZ 16bit stereo:每秒钟有 44100 次采样,采样数据用 16 位(2字节)记录,双声道(立体声)
    22050HZ  8bit   mono:每秒钟有 22050 次采样,采样数据用 8 位(1字节)记录,单声道

 

7、Android的SDK提供了哪些音频采集API?有什么区别?

Android SDK 中有两套音频采集的API,分别是:MediaRecorder 和 AudioRecord。两者区别如下:

  • 输出文件格式不同
    a)AudioRecord 输出的是最原始、没有经过压缩、PCM格式的音频文件。

    b)MediaRecorder 会对麦克风录入的音频数据,设置编码器,进行编码压缩(如AMR、MP3等),最终输出的是
         对应编码   器(*.anr、*.mp3)格式的文件。
     
  • 代码逻辑结构不同
    MediaRecorder 是对AudioRecord的封装,内部会创建AudioRecord 用来与AudioFlinger 进行交互。 C++ 层MediaRecorder 创建AudioRecord 类的代码位于AudioSource 类构造函数中。
     
  • 使用的播放器不同
    a)AudioRecord 对应的播放器是AudioTrack。AudioTrack只能播放已经解码的PCM流或wav格式的音频文件,因为wav格式的音频文件大部分都是PCM流。AudioTrack不创建解码器,所以只能播放不需要解码的wav文件。

    b)MediaRecorder 对应的播放器是MediaPlayer。可以播放多种格式的声音文件(MP3、AAC、WAV、OGG、MIDI等)。MediaPlayer会在framework层创建对应的音频解码器

    c)两个播放器的区别:MediaPlayer 是对AudioTrack 的封装。
         MediaPlayer在framework层还是会创建AudioTrack,把解码后的PCM数流传递给AudioTrack,AudioTrack再传递
         给AudioFlinger进行混音,然后才传递给硬件播放。

建议:
     1、如果只是想简单地做一个录音机,录制音频文件,就使用 MediaRecorder;
     2、如果需要对音频做进一步的算法处理、或者编码压缩、以及网络传输、直播等应用,则建议使用 AudioRecord。

 

部分参考资料源自互联网,如有侵权,请联系作者删除。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值