Python 音频帧包含什么?

Python 音频帧包含什么?,python,wav,Python,Wav,我正在研究如何比较声音文件(wave)。基本上,我想比较存储的声音文件(wav)和来自麦克风的声音。因此,最后我想预先存储一些我自己的语音命令,然后当我运行我的应用程序时,我想将预先存储的文件与麦克风的输入进行比较 我的想法是在比较时留一些余地,因为我想用完全相同的方式连续两次说某件事是很困难的 所以在谷歌搜索之后,我看到python有一个名为wave的模块和wave_read对象。该对象有一个名为readframes(n)的函数: 读取并返回最多n帧的 音频,作为一个字节字符串 这些字节包含什

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

我的想法是在比较时留一些余地,因为我想用完全相同的方式连续两次说某件事是很困难的

所以在谷歌搜索之后,我看到python有一个名为wave的模块和wave_read对象。该对象有一个名为readframes(n)的函数:

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


这些字节包含什么?我在考虑一帧一帧地对wave文件进行循环比较。

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

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

对于CD质量音频或未压缩的wave音频,每秒大约有44100帧/采样。这些帧中的每一帧包含16位分辨率,允许相当精确地表示声级。此外,由于CD音频是立体声的,因此实际上有两倍的信息,16位用于左声道,16位用于右声道

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


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

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

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

我认为公认的描述有点不正确


在图形格式中似乎有点像步幅。对于交错立体声@16位/样本,帧大小为
2*sizeof(short)
=4字节。对于非交错立体声@16位/采样,左声道的采样都是一个接一个的,因此帧大小仅为
sizeof(short)

字节包含PCM数据。你想做语音识别吗?听起来你有点不知所措。你应该研究这个话题。啊,该死的:)谢谢你的回复。你可以称之为语音识别,但我的想法是简单的文件比较,这会简单得多。在我的例子中,这只是一个发出相同声音的问题,而不是分析和试图解释仍然是语音识别的单词。即使你的声音中有一点小的变化或速度差异,也会产生截然不同的音频数据,所以你不能一帧一帧地比较。嗯。。。那是一个令人沮丧的人。是否有一个python库可以满足我的需要?没有,但是还有其他库具有python绑定。如果你在Windows上。如果不是:每秒75帧?你不是说44100吗?是的,我本来有这个(见编辑),但它已经在我身上修改了。除非编辑人员能够解释他们对音频帧的解释,否则我将把它改回去。红皮书CD播放机每秒从光盘读取75个扇区,这可能会引起一些混乱,但这与本次讨论的目的无关。我认为python最常见的“声音模块”wave是
:但请参见“8位单信号的一个字符”=>一个十六进制字符=8位?8位分辨率的信号当然需要两个十六进制字符。如何检查是否交错?更常见的是什么?要补充这个答案。。。这个问题与我们通常如何以数字方式表示音频与我们如何感知声音有很大关系。我们听到频率及其相互作用。我们无法直接感知波浪的每一次起伏。然而,当我们以PCM的形式数字捕获音频时,我们只是每秒记录数千次压力级测量值。我们在频域中听到,但PCM音频在时域中。为了开始比较,我们首先需要运行傅里叶变换,将数字音频转换到频域。