Android音频数据格式概述

本文介绍了Android音频数据格式,重点探讨了定点数和浮点数的概念、表示方法及精度。定点数在计算机中用于表示整数和小数,其精度受限,而浮点数通过科学计数法表示,具有更大的表示范围和精度,常用于高精度小数。Android系统中,音频数据格式包括定点和浮点表示,根据需求进行转换和处理。
摘要由CSDN通过智能技术生成

        音频在计算机中保存的数据格式在采集、声学前处理、后期编辑、保存的各个阶段其格式是不一样的,这个其实困扰了我比较久,如果需要做HAL层或者更底层的音频相关开发,一定要了解音频在各个环节的数据格式,这个数据格式也称为音频的表示,通常来讲:

        首先,在音频的采集环节,把模拟信号变换成数字信号的ADC通常只输出整数,这个时候16比特或者24/32比特;

        为了防止录音的时候clip,一般都要留出12dB的head room,你要用16比特ADC的话就只用了11-12比特了。所以用24比特甚至更高的ADC会大大提高采样的精度。

        录音采集取样的数据格式跟后续声学前处理、编辑制作期间的格式并不需要保持一致。在制作过程中使用32位浮点/定点格式什么的都很正常,尽最大可能保留原始素材数据的精度,并给各种数据运算留下计算的余量和空间。

        最后各种处理完后,再搞一次归一化,把最高电平调整到0dBFS,也就是把32位浮点数映射变换成16比特整数,送去保存或者其他处理。

        对Android系统来讲,采用了多种音频的数据格式,例如原始PCM通常是整数,因为定点值通常作为整数值存储和操作的默认方式,所以可以默认整数就是用定点数保存。下面就讲下定点数和浮点数,如果还记得当年的计算机基础,其实就不用看了。

        之所以用到浮点数,是因为浮点数在运算的时候有更大的表示范围。

1 定点数

1.1 定点数概念

        定点数是在计算机中表示数字的一种方式,它既可以表示整数,也可以表示小数。

        但是为什么我们平时说到整数,我们就说它是一个定点数,说到小数,就说它是一个浮点数,这种说法是正确的吗?

        要想理解什么是“定点数”,首先,我们需要理解“定点”究竟是什么意思?

        我们都知道,数字既包括整数,又包括小数,而小数的精度范围要比整数大得多,所以如果我们想在计算机中,既能表示整数,也能表示小数,关键就在于这个小数点如何表示?

        于是人们想出一种方法,即约定计算机中小数点的位置,且这个位置固定不变,小数点前、后的数字,分别用二进制表示,然后组合起来就可以把这个数字在计算机中存储起来,这种表示方式叫做“定点”表示法,用这种方法表示的数字叫做“定点数”。

        也就是说“定”是指固定的意思,“点”是指小数点,小数点位置固定即定点数名字的由来。

1.2 定点数的表示

        在固定 bit 下,约定小数点的位置,然后把整数部分和小数部分分别转换为二进制,就是定点数的结果,既然定点数只是表示数字的一种方式,它既可以表示整数,也可以表示小数。

        定点数如果要表示整数或小数,分为以下三种情况:

        1)纯整数:例如整数100,小数点其实在最后一位,所以忽略不写;

        2)纯小数:例如:0.123,小数点固定在最高位;

        3)整数+小数:例如1.24、10.34,小数点在指定某个位置;

        对于前两种情况,纯整数和纯小数,因为小数点固定在最低位和最高位,所以它们用定点数表示时,原理是相同的,只需要把整数部分、小数部分,按照十进制转二进制的规则,分别转换即可。

        而对于整数 + 小数的情况,用定点表示时,需要约定小数点的位置,才能在计算机中表示。

        对于纯整数100,由于小数点固定在最低位,假定我们以 1 个字节(8 bit)表示,用定点数表示如下(D为十进制缩写,B为二进制缩写):

        100(D) = 01100100(B)

        对于纯小数 0.125,由于小数点固定在最高位,同样以 1 个字节(8 bit)表示,用定点数表示如下:

        0.125(D) = 0.00100000(B)

        从以上例子可以看出,这 2 种情况用定点数表示都比较简单,按照十进制转为二进制规则,即可得到结果。

        对于整数 + 小数的数字,这种情况下,我们需要先约定小数点的位置。

        依旧以 1 个字节(8 bit)为例,我们可以约定前 5 位表示整数部分,后 3 位表示小数部分。对于数字 1.5 用定点数表示就是这样:

        1.5(D) = 00001 100(B)

        数字 25.125 用定点数表示就是这样:

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值