音频帧包含什么?

Jas*_*n94 17 python wav

我正在做一些关于如何比较声音文件(波)的研究.基本上我想比较存储的声音文件(wav)和麦克风的声音.所以最后我想预先存储我自己的一些语音命令,然后当我运行我的应用程序时,我想将预先存储的文件与麦克风的输入进行比较.

我的想法是在比较时加入一些余地,因为我想,以同样的方式连续两次说某些话会很困难.

所以经过一些谷歌搜索,我发现python有这个名为wave的模块和Wave_read对象.该对象有一个名为readframes(n)的函数:

读取并返回最多n帧音频,作为一串字节.

这些字节包含什么?我想通过一帧的波形文件循环比较它们逐帧.

Sov*_*iut 39

音频帧或样本包含该特定时间点的幅度(响度)信息.为了产生声音,按顺序播放数万帧以产生频率.

在CD质量音频或未压缩波形音频的情况下,每秒大约有44,100帧/样本.这些帧中的每一帧都包含16位分辨率,允许相当精确地表示声级.此外,由于CD音频是立体声,实际上有两倍的信息,左声道为16位,右声道为16位.

当你在python中使用声音模块来获取一个帧时,它将作为一系列十六进制字符返回:

  • 8位单声道信号的一个字符.
  • 8位立体声的两个字符.
  • 16位单声道的两个字符.
  • 16位立体声的四个字符.

为了转换和比较这些值,您必须首先使用python wave模块的函数来检查位深度和通道数.否则,您将比较不匹配的质量设置.


Mar*_*tos 8

一个简单的逐字节比较几乎没有成功匹配的机会,即使有一些容忍度.语音模式识别是一个非常复杂和微妙的问题,仍然是许多研究的主题.

  • 要添加到这个答案......问题与我们通常如何以数字方式表示音频与我们如何感知声音有很大关系.我们听到频率和他们的互动.我们并不直接感知波浪的每一次上升和下降.然而,当我们以PCM数字方式捕获音频时,我们只是每秒数千次记录压力水平测量值.我们在频域中听到,但PCM音频属于时域.为了开始比较,我们首先需要运行傅立叶变换以将我们的数字音频带入频域. (2认同)

Kon*_*ner 6

您应该做的第一件事是将数据转换为频率的傅里叶变换.然而,它相当复杂.我不会在这里使用语音识别库,因为它听起来像你不仅仅录制声音.然后,您将尝试不同的时移(如果声音未完全对齐)并使用提供最佳相似性的那个 - 您必须定义相似度函数.哦,你应该标准化两个信号(相同的最大响度).


bob*_*obo 6

我认为接受的描述略有不正确.

甲帧似乎有点像步幅在图形格式.对于交错立体声@ 16比特/采样,帧大小2*sizeof(short)= 4字节.对于非交错立体声@ 16比特/样本,左声道的样本都是一个接一个,所以帧大小正好sizeof(short).