当前位置:首页 > 代码 > 正文

pcm音量放大源代码(pcm 音量)

admin 发布:2022-12-19 21:14 163


今天给各位分享pcm音量放大源代码的知识,其中也会对pcm 音量进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

基于pcm音频的音量分析

声音(sound)是由物体振动产生的声波。是通过介质(空气或固体、液体)传播并能被人或动物听觉器官所感知的波动现象。最初发出振动(震动)的物体叫声源。声音以波的形式振动(震动)传播。声音是声波通过任何物质传播形成的运动。

音调的高低主要由声波频率决定。人的听觉频率范围是20Hz~20kHz,其中1kHz~4kHz赫兹是人耳最敏感的区域。

音响是由声音强度决定的一种听觉特性。声音强度大,音响就大,声音强度小,音响就小。人所能感觉到的音响范围在0~130分贝,当音响超过130分贝,人耳就会产生痛觉。研究者大多数用纯音来测查音响的感知觉。30岁的成年男子能知觉到音响只有4分贝的6 000赫兹纯音。在同是6 000赫兹的声波频率下,65岁的老年人要把声音强度提高到40分贝才能知觉到同样的声响。

波形决定了声音的音色。声音因不同物体材料的特性而具有不同特性,音色本身是一种抽象的东西,但波形是把这个抽象直观的表现。音色不同,波形则不同。每一种声音都有各自的基本波形,称为基波。不同声音的基波中混入的谐波有多有少,导致音质变化多端,也就是音色的不同。基波中混入的谐波越多,也就是泛音越多,听起来就更悦耳。

分贝dB定义为两个数值的对数比率,这两个数值分别是测量值和参考值(也称为基准值)。存在两种定义情况。

因为人耳的特性,我们对声音的大小感知呈对数关系。所以我们通常用分贝描述声音大小,分贝(decibel)是量度两个相同单位之数量比例的单位,主要用于度量声音强度,常用dB表示。在声学领域,dB经常用作为表征声压级SPL(Sound Pressure Level)的大小。声压的单位是帕斯卡,Pa,声压的参考值是20μPa,这个值表示人耳在1000Hz处的平均可听阈值,或者是人耳在1000Hz处可被感知的平均最小声压波动值。

因此使用声压计算分贝时使用下述版本的公式:

其中的pref是标准参考声压值20微帕。

人耳可听的声压幅值波动范围为2×10^-5Pa~20Pa,用幅值dB表示对应的分贝数为0~120dB。

物体通过震动发出声音

通过声波带动麦克风内的振膜一起震动来采集音频信号,振膜在震动时会有幅度,我们将振膜的震动过程记录下来,就可以还原声波的形状,以此将声波描述成模拟信号。

对模拟信号进行量化采集的操作

将模拟信号转换成为数字信号

将数字信号存储为pcm无损音频数据裸流

将pcm文件编码成wav,aac,mp3等音频格式进行传输及存储

每秒钟取得声音样本的次数

奈奎斯特定理:在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max2fmax),采样之后的数字信号完整地保留了原始信号中的信息。

人耳可听的声音20Hz~20kHz,所以CD品质的采样率为44.1kHz就可以完整的保留人耳所能听到的声音,其中1kHz~4kHz赫兹是人耳最敏感的区域,MP3品质为8kHz,就已经可以基本满足收听音乐的需求了

一个采样点所占据的位(bit)数

*1 字节(也就是8bit) 仅仅能记录 256 个数

*2 字节(也就是16bit) 能够细到 65536 个数, 这已是 CD 标准了;

*4 字节(也就是32bit) 能把振幅细分到 4294967296 个等级

一个采样点描述的是当前采集时间的能量(震动幅度),一个采样点所占的位数越多,描述声音的精确度越高,声压级为20μPa~20Pa,等级比为10^6, 4字节等级为4294 * 10^6,远远高于声压级的等计量,所以无需使用这么细致的深度来进行描述,使用2字节就可以满足需求。

记录声音的通道数量

*单声道通过一个麦克风收集声音

*立体声需要通过多个麦克风一起收集声音

每秒的数据传输速率(kbps)

比特率 = 采样频率 * 采样位数 * 通道数

PCM(Pulse Code Modulation)也被称为脉冲编码调制。PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准的数字音频数据。

PCM音频数据是未经压缩的音频采样数据裸流,是无法直接通过播放器进行播放的,因为pcm中只存储了音频采样数据裸流,采样频率、位深度、通道数等信息都没有进行存储,所以播放器不知道以什么方式来播放pcm数据。因此我们需要将pcm存储为wav格式或编码成其他音频格式进行存储及播放

WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持。WAVE文件通常只是一个具有单个“WAVE”块的RIFF文件,该块由两个子块(”fmt”子数据块和”data”子数据块)

wav的实质就是在pcm文件的前面加了一个文件头,让播放器知道该以何种方式来进行播放

1.获取pcm数据片段buff

2.分析buff数据的大小端

3.分析buff数据的符号(有符号/无符号)

4.根据位深度(8/16位)来获取每个采样点的数据

5.计算采样点的平均value

6.数字信号的分贝计算,需要使用dbFS公式,位深度计算出来的最大值(16位有符号32767,无符号65535)为分母(Pref),采样点value为分子(Prms)通过公式计算分贝。

这样计算出来的数字为负值,0为最大值。16位有符号为-93~0,16位无符号位-90~0.

7.分贝换算,通过dbFS公式计算出来的分贝为负数范围,但数字为线性关系,我们需要将结果等比映射到0~120db即为我们最终的结果

Asterisk播放mp4(1)——音频和PCM编码

本文分为四个部分:音频基本概念,PCM编码格式介绍,PCM A-law编码格式介绍,制作测试样本。

我们听到的声音是由频率(是什么)和强度(有多响)决定的。上图是一个正弦函数生成的音频,频率是441Hz,采样率是44.1kHz,采样(sample)的最大值是4095。声音的频率就是一个完整的波形没秒钟重复的次数,采样率(sample_rate)是每秒钟收集多少次声音的强度数据,这样每个完整的波形包含100个采样。

上面这个图是个单声道(channel)的音频,实际的音频很多都是多声道的。当有多个声道时,需要定义每个声道中的采样用什么方式进行排列,例如:双声道的时,可以 LRLR... ,也可以 LL...,RR... 。(这个问题会在后续讲容器的文章中在详细说明)

每个采样(sample)代表了声音的强度,但它这并不是个绝对的声音大小,只是相对的。因为,同样的声音文件通过不同的设备播放,声音的大小显然不同,这个和播放设备提供的能量有关。声音的绝对大小用分贝(dB)度量,采样只是和分贝的相对关系。

PCM(Pulse Code Modulation,脉冲编码调制)是对声音的振幅(音量的大小)进行编码,位深度为14bit,20bit,24bit等(用多少个二进制位表示)。通过每秒钟记录若干次振幅的值(采样率,8k,44.1k,48k等),把声音的波形记录下来(频率)。

计算机系统中8个二进制位对应1个字节,所以实际表示一个采样时,需要用1个,2个或4个字节进行表示;每个字节又可采用有符号或无符号的方式。当用多个字节表示一个采样时,又存在字节序的问题,就是前面的字节表示的高位还是低位,分为大字节序(big-endian,将高序字节存储在起始地址)和小字节序(little-endian,将低序字节存储在起始地址)。这样就会产生 很多编码的组合,下面是 ffmpeg 支持的 pcm 采样格式(也可以通过命令行 ffmpeg -formats | grep PCM 查看)。

PCM本身是一种无损(lossless)编码格式(我理解无损的含义是收集到什么就记录什么,不同格式间的差别在于记录的精度,并不因为方式产生的损失)。但是在电话系统中为了更有效地传递数据,提出了 PCM A-alaw 和 PCM mu-law 两种编码格式,其思路是将原始的PCM编码, 压缩成8位的编码(具体的算法不展开了,可以参考 g711原理pcm转alaw,pcm转ulaw,alaw转pcm,ulaw转pcm )。

alaw 是将13位的有符号数压缩为8位的有符号数,是有损编码(压缩),编码后的数据通过解码无法恢复到原状,数值越大的采样损失的数据就越多。(这里有个疑问,在系统中是用16位保存一个样本的,那是否又有3位数据丢掉了?)

alaw 只定义了采样的编解码方法,但是实际使用中还要注意采样率的问题,通常mp3,mp4这些音视频文件中的采样率为44.1k或48k,而电话系统中的采样率为8k,那么从高采样率到低采样率,必然又会产生损失。

上图是实现Asterisk播放mp4文件的简要流程,中间涉及到音频的编解码过程,其中任何一个环节(出现错误或者因为编解码带来损失)都可能导致最终听到的声音有问题(失真,噪音等)。我们必须找到一种方法验证在各个环节是否运行正确,例如;采样率,采样位深度等等。我采用的方法是通过 ffmpeg 这个工具生成测试数据,并按照各个环节产生的编码格式生成对应的参照数据,然后比较在各个环节实际产生的数据是否正确。

通常mp4文件中的音频解码出的裸流是 pcm_s16le (有符号,2字节,小字节序),那么我们先生成一个该格式的10秒钟的裸流。

ffmpeg 告诉我们生成的文件的编码格式 pcm_s16le ,采样率是 44100 ,单声道 mono 。通过查看源码(libavfilter/asrc_sine.c)可以知道:1、正弦波的频率是441Hz,那么 每周期包含100个采样(44100/441) ,这个有助于我们理解生成的数据的变化规律;2、 采样的最大值等于4095(0xfff) ,并不是有符号16位数的最大值32767(0x8000),这个最大值正好是12bit,加上1位符号位是13,正好和 alaw 将13位有符号数转为8位对应上了。

生成文件的大小是 882000 字节,44100个采样/秒 * 10秒 * 2字节/采样。

读取生成文件的前200个采样(400个字节)生成图形如下:

按16进制格式打开文件(vi sine-10s.s16le,打开后 :%!xxd ),查看数据:

可以看到在第26个采样达到最大值 ff0f ,第76个采样达到最小值 01f0 。因为是小字节序,要调换字节顺序,所以最大值对应的是 0x0fff(4095) ,最小值对应的是 0xf001(-4095) 。

用上面的 ffmpeg 命令生成一段10秒钟的 pcm_s16le 格式音频文件(裸流,没有进行封装)。我们既可以用耳朵听,也可以用眼睛看这个音频。

下面我们把同样的声音做 alaw 编码。

生成文件的大小 441000 ,44100个采样/秒 * 10秒 * 2字节/采样。

读取生成文件的前200个采样(200个)字节,生成图形:

alaw 采样的符号位和原始pcm数据符号位是相反的,所以波峰和波谷和 s16le 是相反的;因为数据进行了编码压缩,所以编码后的数据并不能体现出原始波形,但是频率并没有发生改变。

直接打开文件查看数据:

可以看到在波峰波谷位置数据的差异变小了。

如果需要设置采样率(默认是44.1k),例如:8k,可以通过 ar 参数实现。

alaw 是一种压缩格式,需要解压缩才能播放,按 alaw 算法解码出来的采样时13位有符号数,对应的存储格式就是 pcm_s16le ,所以我们看看alaw转s16le会是什么样?

这次是用之前生成好的 alaw 文件作为输入。

取前200个样本生成图形。

从图形上可以看到整体波形并没有发生改变,但是在波峰波谷的位置存在失真,这表明 alaw 的编解码过程带来了损失。

查看原始数据我们也可以看到已经和原始 s16le 数据不同,数据精度下降了。

生成一段空白10秒裸流,采样全是0。

ffmpeg -lavfi anullsrc=r=44100:cl=mono -t 10 -f s16le -c:a pcm_s16le null-10s.raw

生成一段指定内容的裸流(并不能设定为特定值,如果指定的是0,输出的是0,否则是最大值)。

ffmpeg -lavfi aevalsrc=1 -t 1 -f s16le -c:a pcm_s16le eval-1s.raw

执行如下命令,可以查看音频文件的音量:

获得输出内容:

n_samples: 441000

mean_volume: -21.1 dB

max_volume: -18.1 dB

histogram_18db: 128000

看这个数据仍然不太明白音量到底是什么,通过看源码,形成大体上的理解,0dB被当作音量的极大值,对应16位有符号数的最大值就是32767(0x8000),等于91dB的音量。(目前并不确切知道为什么选91分贝这个值,似乎是再高的值人就受不了。)

参考:

参考:

参考:

参考:

参考:

参考:

音频输出模式pcm与透传哪个好

pcm代表播放设备自己解码,然后把经过处理的声音输出,如果设备支持该音轨编码,那么就是有声音的,但如果不支持dts或者杜比的某些音轨,那么就会出现静音无声的情况,那这个时候就需要hdmi透传。hdmi透传相当于播放设备不去解码音轨,而是把音轨数字信号直接输出给dac或功放,它不管也不做处理,直通输出,外部功放或者回音壁负责解码,这时之前不能解码的dts或杜比就可以让功放来解码,从而实现有声音的正常状态。合并功放还有种情况就是播放器虽然解码也回放了声音,但是降解,有损播放,比如dtshdmaster降解为dts,损失了很多音轨信息,但透传是源码直通,只要功放识别就不会有损耗。如何区分是pcm还是透传播放器调高音量,听到的声音也变大了就是pcm,但如果声音没变化,说明就是直通。如果自己具备先进的前端解码器或者合并式功放或优秀的回音壁,建议直通,这样可以确保正常解码。如果功率放大器足够好,选择raw!因为PCM可能会从DVD中重新编码。

PCM:非线性脉冲编码调制。PCM是解码后下一个设备的输出。如果玩家很强大,选择这个。PCM有时采用相应的技术来降低数字信号源的数据速率,方便存储和数据传输。

Raw:简单的描述就是设备不解码,直接输出到下一个设备,让下一个设备解码。如果是外部功率放大器,请选择raw。

声音输出pcm和raw哪个好?

都可以。PCM和原始音频输出之间的唯一区别是是否解码。Raw支持源代码输出,PCM可以自行解码和播放。相对而言,PCM对设备的要求更高。

5.1pcm音频声音小

声音的本质是一种能量波,由振动而产生的能量波,通过传输介质传输出去。声音有三个属性:

音调(Pitch):声音频率的高低。表示人的听觉分辨一个声音的调子高低的程度。音调主要由声音的频率决定,同时也与声音强度有关

音量:人主观上感觉声音的大小,由“振幅”(amplitude)和人离声源的距离决定,振幅越大响度越大,人和声源的距离越小,响度越大。(单位:分贝dB)

音色:又称声音的品质,波形决定了声音的音色。声音因不同物体材料的特性而具有不同特性,音色本身是一种抽象的东西,但波形是把这个抽象直观的表现。音色不同,波形则不同。典型的音色波形有方波,锯齿波,正弦波,脉冲波等。不同的音色,通过波形,完全可以分辨的。

波长是决定音调高低;振幅是决定音量高低;波纹是决定音色。

PCM(Pulse Code Modulation,脉冲编码调制)音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。

描述PCM数据主要有以下6个参数:

Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。

Sample Size : 量化位数,描述数字信号所使用的位数。8位(8bit)代表2的8次方=256,16 位(16bit)则代表2的16次方=65536;采样位数越高,精度越高。

Number of Channels : 通道个数。常见的音频有立体声(stereo)和单声道(mono)两种类型,立体声包含左声道和右声道。另外还有环绕立体声等其它不太常用的类型。

Sign : 表示样本数据是否是有符号位,比如用一字节表示的样本数据,有符号的话表示范围为-128 ~ 127,无符号是0 ~ 255。

Byte Ordering : 字节序。字节序是little-endian还是big-endian。通常均为little-endian。

Integer Or Floating Point : 整形或浮点型。大多数格式的PCM样本数据使用整形表示,而在一些对精度要求高的应用方面,使用浮点类型表示PCM样本数据。

对于16位,单声道的音频,采样点幅值为2^15-1和-2^15,即32767和-32768,当乘以放大倍数后,需要对超出此范围的数据进行溢出处理,但是如果一个音频帧中溢出数据过多,就会造成音频失真,故要合理的动态的选择放大倍数。

下面是两种对16位,单声道的音频调节音量算法

语音编解码的PCM编码(原始数字音频信号流)

类型:Audio

制定者:ITU-T

所需频宽:1411.2 Kbps

特性:音源信息完整,但冗余度过大

优点:音源信息保存完整,音质好

缺点:信息量大,体积大,冗余度过大

应用领域:voip

版税方式:Free

备注:在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用。因此,PCM约定俗成了无损编码,因为PCM代表了数字音频中最佳的保真水准,并不意味着PCM就能够确保信号绝对保真,PCM也只能做到最大程度的无限接近。要算一个PCM音频流的码率是一件很轻松的事情,采样率值×采样大小值×声道数bps。一个采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的WAV文件,它的数据速率则为 44.1K×16×2=1411.2 Kbps。我们常见的Audio CD就采用了PCM编码,一张光盘的容量只能容纳72分钟的音乐信息。

snd_pcm_write最终的音量

一。方法一:直接放大缓存中的数据

1. 基本原理

2. 相关尝试和结果

2.1 在播放前放大音频缓存数据

2.2 在录制前放大缓存

二。方法二:在linux终端直接设置alsa的参数。

1. 基本原理

2. 过程

2.1 获取可以设置的参数

2.2 获取各个参数当前的值

2.3 设置`播放音量参数`和`录音音量参数`

关于pcm音量放大源代码和pcm 音量的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/24402.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载