读取wav音频文件,并在飞镖和颤振中获得与时间相关的振幅数据,用于绘图



我想读取wav文件,获得与时间相关的幅度数据,以便在省道中使用,并使用颤振在图表中绘制

起初,我使用flatter_ffmpeg将.mp3和.m4a文件转换为wav文件,但我想读取这些文件并获得采样率和振幅并尝试将现有文件绘制为y轴振幅和x轴时间的图表

我的问题是从.wav或.pcm文件中提取振幅和其他wav信息,因为我在网上找不到任何文档。

野外的自然音频是曲线的连续摆动。。想想你的耳鼓、麦克风膜或鼓头。。。数字音频是作为音频样本的级数记录的相同曲线。。。通常每秒记录44100个样本,每个样本记录该曲线高度的16位分辨率,这意味着原始音频曲线上给定点的2^16==65536个可能的不同高度值(更详细地研究PCM音频(。。。因此,单个音频采样幅度表示特定时间点的曲线高度,让我们称之为s1。。。绘制在原始音频曲线上的这个高度是该样本的振幅

当读取WAV格式文件时,前44个字节是后面跟着有效载荷的报头,该有效载荷包含音频的每个声道(单声道一声道、立体声二声道等(的原始音频曲线。。。通常使用许多麦克风来录制音频,然而为了创建音频CD,音乐工作室将多音轨音频(最初可能有几十个声道(混合为两个声道的音频(一个用于左扬声器,一个用于右扬声器,这意味着立体声是两个声道(。。。此标头将告诉您有效负载中出现的关键细节:samplerate(每个通道每秒捕获的音频样本数(、每个样本的bit_depth(用于存储给定通道的每个音频样本的数据位数(、以字节为单位的有效负载大小和通道数。。。您可以自己编写WAV解析器(大约需要两页代码(,也可以使用库来检索这些数据结构。。。一旦解析,在WAV文件有效载荷中找到的原始音频将为您提供每个通道的原始音频曲线s1、s2、s3等。。。

通常,当人们需要识别振幅时,他们指的是许多音频样本的曲线高度的总和。。。s1、s2、s3。。。对这只猫进行剥皮的一种方法是计算一组音频样本的均方根,以生成一个currAmplitude聚合振幅值,然后在时间上向前滑动,重复另一组音频采样点。。。给定RMS计算中的样本数量取决于您对CPU消耗的需求和该聚合振幅测量的分辨率,可能会增加或减少1k或2k

currAmplitude = square_root_of(  (  s1*s1 + s2*s2 + s3*s3 + ... sn*sn ) / n )  // this is the RMS forumula

请记住,每个音频样本都有自己的振幅,也许你可以简单地绘制这些(s1,s2,s3,…(,或者重复地绘制高于RMS的振幅,以获得一组聚合振幅,如果需要一个通用的大致振幅而不是每个样本的瞬时振幅,这将更有帮助

最新更新