
PCM
我们经常在音频处理过程中接触PCM数据: 它是由模数转换(A / D转换)后的模拟音频信号直接形成的二进制序列. 该文件没有其他文件头和文件结尾标记.
声音本身是模拟信号,计算机只能识别数字信号. 要在计算机中处理声音,您需要数字化声音. 此过程称为模数转换(A / D转换). 最常见的方法是通过脉冲编码调制PCM(Pulse Code Modulation).
其工作原理如下: 首先,我们认为声音通过麦克风传递并转换为一系列电压变化信号,如下图所示. 该图片的水平坐标是秒,垂直坐标是电压的大小.

将此类信号转换为PCM时,需要对声音进行量化. 我们通常从以下维度描述声音:
1. 通道数2.采样位数3.采样频率4.持续时间
采样频率: 采样频率是指每秒获取声音采样的次数. 采样频率越高,声音质量越好,声音恢复越真实,但同时占用更多资源. 由于人耳的分辨率有限,无法分辨出太高的频率. 16位声卡中有22KHz,44KHz和其他级别. 其中22KHz相当于普通FM广播的声音质量,44KHz已经相当于CD的声音质量,并且当前的通用采样频率不超过48KHz.
采样位数: 采样值或采样值(即采样的采样幅度被量化). 它是用于测量声音波动变化的参数,也可以称为声卡的分辨率. 值越大,分辨率越高,发出声音的能力越强.
声道数: 这很容易理解,有单声道和立体声,单声道声音只能使用一个扬声器(有些也可以处理成两个扬声器输出相同的声道声音),立体声PCM可以使两个扬声器声音(通常左右声道之间存在分工),您可以感受到更多的空间效果.
持续时间: 采样持续时间
让我们看一下采样位数和采样频率的概念. 让我们看看这些图片.
图中的黑色曲线表示PCM文件记录的自然声波,
红色曲线表示从PCM文件输出的声波,
在该图中,采样点是离散的,每个点对应于一个单位pcm的数据.
采样频率越高,x轴采样点越密集,声音越接近原始数据
采样位数越多,y轴采样点越密集,声音越接近原始数据

采样频率单位为Hz,表示每秒采样的次数:
通常有三种类型: 11025HZ(11KHz)pcm 采样率转换 算法,22050HZ(22KHz),44100Hz(44KHz).
采样比特的单位是比特(bit),通常是8bit和16bit. 8位表示8位空间用于在特定时间量化声音. 这基本上与用图片中的r,g和b量化24bit的颜色相同.
总而言之,我们可以获得用于计算pcm文件容量的公式(此处我们采用采样位数/ 8,因为计算机将位转换为字节):
存储
存储容量=(采样频率×采样位数/ 8)×通道×时间.
记录每个采样数据的幅度,采样精度取决于存储空间的大小.
一个字节(8位)只能记录256个数字,即振幅只能分为256个电平.
可以记录2个字符(16位)
将振幅分为65536个级别的数字是CD的标准.

4个字节(32位)细分为
该数字不是必需的,它太好了.
以8k 16bit音频为例,采样率为8k = 8000个采样点/秒.
16位音频是16位. 每8位1个字节,所以16位是2个字节.
上面是单声道(nomo),如果是两个通道,则所有信息均为×2
时间是该音频的秒数
例如,数字激光转盘的标准采样频率(CD-DA,红皮书标准)为44.l kHz,采样数为16位,立体声(2声道)可以广播的频率高达22 kHz几乎没有失真的声音,这也是人类可以听到的最高频率的声音. 激光转盘上一分钟的音乐所需的存储容量为:
(44.1 * 1000 * l6 * 2)* 60/8 = 10,584,000(字节)= 10.584 M字节
此值是硬盘中PCM声音文件占用的磁盘空间量.
数据以二进制顺序存储在文件中
单声道8位(1字节): 声音
双通道8bit(2字节): 左通道右通道
单声道8位(2字节): 声音低字节声音高字节
单声道16位(4字节): 左声道低字节左声道高字节右声道低字节右声道高字节
两声道音频的存储方法是LRLRLRLR. 每个通道16bit音频是16bit(2个字节)吗? PCM以交错方式存储. 在存储过程中存在littleendian和bigendian问题. 通用存储区为little-endian,为2字节,低位在前,高位16位采样点. 当存储0x 1234时,分别为0x34和0x12. 如果是big-endian,则相反.
单声道pcm无头音频1M在转换为两个通道时将变为2M,即使一个通道中没有信息(或微弱的信号噪声),但在转换为两个通道时也将被考虑为静音,数据大小为0x0000,他还需要占用位数,所以无论如何,只要两个通道的大小都将变为原来的两倍.
WAV和PCM之间的关系
如前所述,PCM数据本身只是一个裸码流,它由通道,采样位数,采样频率和持续时间确定,因此我们必须至少知道其中三个来表示PCM数据被提取.
因此,不能播放纯PCM数据,因此需要描述数据. 计算机系统中的一种相对普遍的做法是将pcm代码流和描述信息封装在一起以形成音频文件. 所以您可以直接播放.
一种常见的方法是使用wav格式定义的规范封装pcm代码流和描述信息. 查看与wav文件对应的pcm和hex(十六进制)文件,您会发现wav文件在pcm文件的开头仅多了44个字节,以表征其信息,例如通道数,采样频率和采样位数. 这实际上与bmp非常相似.
WAV,G729,G723,MP3和其他音频格式均为8k 16bitwav音频压缩格式.
因为有许多制造商,并且出现了许多音频格式,例如,Nice生产的nmf实际上是音频,它实际上是多层重新包装的g729; vox格式由华为生产.
vox格式是华为格式,他的后缀之一是V3. 您可以通过将后缀更改为vox来直接收听;还有另一个后缀是vox.
由于没有标题信息,因此无法看到vox格式,因此我不知道采样率不会被转码. 这时,请使用coolitit打开它并收听. 选择8k的采样率. 如果语速很快,则音频实际上为6k;选择6k的采样率打开. 如果语速很快,则音频实际上为8k. 现在您知道了采样率,您可以使用该工具进行代码转换. 下面将提到ffmpeg工具及其轻量级的sox.
G729使用10个字节作为解码单位. 对G729进行转码时,请先删除标头pcm 采样率转换 算法,然后再进行转换.
G729被压缩16倍. 8k 16bit 8kb / s(通常是128kb / s压缩16倍)
压缩是g729的16倍,但是由于压缩算法不同,G729的频谱很平滑,MP3音频的损失也很大. 这是最差的音频格式.
8k 8bitstereo 128kb / s音频格式,应为未压缩格式

首先,音频格式之间的转码,例如从g729到mp3的转换是g729-> 8k,16位wav-> mp3,所有这些都必须首先通过wav.
<1> 8k8bit nist-> 8k16bit pcm
sox -r 8000 -b 8 -c 1 -t nist 1.nist -s -r 8000 -b 16 1.wav抖动
<2> wav-> amr-> wav
ffmpeg -i inFile1.wav -ab 12.2k outFile.amr
ffmpeg -i outFile.amr outFile.wav
或
ffmpeg -acodec libopencore_amrnb -i outFile.amr outFile.wav
<3> wav-alaw-> wav
ffmpeg -i inFile1.wav -acodec pcm_alaw -ar 8000 outFile1.wav
ffmpeg -i outFile1.wav outFile.wav
<4> mulaw-> wav
ffmpeg -i inFile.wav outFile.wav
<5> mp3-> wav
ffmpeg -i inFile.mp3 outFile.wav
<6> alaw-> wav
sox -e a-law alaw.wav -r 8000 -b 16 out.wav
<7> music.mp3-> wav
ffmpeg -i music.mp3 -ar 8000 -ac 1 outFile.wav
<8> pcm添加标题-> wav
sox -s -t raw -r 8000 -c 1 -2 in.pcm out.wav
ffmpeg -acodec pcm_s16le -f s16le -ar 8000 -i in.pcm -ar 8000 -ac 1 -ab 128k out.wav
<9>球形-> wav(wsj数据)
sph2pipe 1.WV1 -f wav 1.wav
<10> vox-> wav
./ ffmpeg -acodec adpcm_ima_oki -f s16le -ar 6000 -i 1211452.V3 12.wav
<11>两条路径->单声道注意: mono.wav->单声道立体声.wav->双声道(立体声)
ffmpeg -i left.wav -i right.wav -filter_complex amix =输入= 2 mono.wav
ffmpeg -i left.wav -i right.wav -filter_complex“ amovie = left.wav [l]; amovie = right.wav [r]; [l] [r] amerge” stereo.wav

<12>立体声滤波器
ffmpeg -i fa.mp3 -map_channel 0.0.0 -ar 8000 -ab 128k left.wav -map_channel 0.0.1 -ar 8000 -ab 128k right.wav
<13>波形加速#声音加速
ffmpeg -i 16k.wav -filter: 一个“ atempo = 1.75” 16k_fast.wav
<14> g729转移
removeHead xx.V3 58 xx.g729
ffmpeg -acodec g729 -f g729 -i xx.g729 xx.wav
<15> nmf-> g729-> wav
./ nmf2g729 1.nmf 1.nmf.g729ffmpeg -acodec g729 -f g729 -i xx.g729 xx.wav
内置的轻量级ffmpeg工具.
sox 1.wav 2.wav 3.wav 1_2_3.wav
hexdump -Cvin.wav |少
标准音频的第一个字节为44位
检查音频字节信息是: hexdump -C in.wav

看红色部分
可以从第40位到第43位(从第0位开始)查看音频大小,并且音频大小为0x 00 02 53 a0
转换为十进制是152480,标准标头字节44是152524字节

所观看音频的文件大小为152524字节,与计算结果一致
实际上,可以查看4到7位数字. 4-7位数字是152516字节
152516 + 8 = 152524字节. 实际上,这152516是除第一个字节之外的八个字节之后的字节数

看看蓝色部分
位24-25为0x 40 1f = 8k. 此位置标记了音频的采样率. 标准音频标头字节为44位
如果没有领先的信息,也不知道采样率和其他相关信息,播放器将无法播放PCM格式的音频数据. 以下是默认的标头信息格式:
//音频标题格式
struct wave_pcm_hdr
{

char riff [4]; // =“ RIFF”
SR_DWORD size_8; // = FileSize-8
焦炭波[4]; // =“ WAVE”
char fmt [4]; // =“ fmt”
SR_DWORD dwFmtSize; // =下一个结构的大小: 16
SR_WORD format_tag; // = PCM: 1
SR_WORD频道; // =频道数: 1
SR_DWORD samples_per_sec; // =采样率: 8000 | 6000 | 11025 | 16000
SR_DWORD avg_bytes_per_sec; // =每秒字节数: dwSamplesPerSec * wBitsPerSample / 8
SR_WORD block_align; // =每个采样点的字节数: wBitsPerSample / 8
SR_WORD bits_per_sample; // =量化位数: 8 | 16
char数据[4]; // =“数据”;
SR_DWORD data_size; // =纯数据长度: FileSize-44
};
//默认音频标头数据
struct wave_pcm_hdr default_pcmwavhdr =
{
{'R','I','F','F'},
0,
{'W','A','V','E'},
{'f','m','t',''},
16,
1
1
16000,
32000,
2
16,
{'d','a','t','a'},
};
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-218425-1.html
算我哟个
恋爱给人以智慧