无法在 wav 文件中找到 2 个声音帧之间的差异

Posted

技术标签:

【中文标题】无法在 wav 文件中找到 2 个声音帧之间的差异【英文标题】:Trouble in finding difference between 2 sound frames in a wav file 【发布时间】:2013-04-19 21:19:37 【问题描述】:

我想比较两个声音帧的相似程度,以便区分它们。

我这样做是因为,通常当我们播放视频并出现广告时,通常会出现声音下降或声音增加。

所以我想比较 wav 文件中的声音帧以找出差异。

以下代码求出每帧视频的声波幅度

1 个视频帧对应 2000 个声音帧。

代码---->

for (offset=waveFileHeaderOffset; ((offset < raf.length()) && (videoFrames < VideoFile.MAX_POSSIBLE_FRAMES)); offset+=2*AUDIO_PER_FRAME) 

          audioAmplitude = 0.0;    
          for (offset2=0; offset2 < 2*AUDIO_PER_FRAME; offset2+=2 )
           
                double temp = 0.0;
                raf.seek(offset+offset2);
                raf.read(bytes);
                temp = (double) Math.abs((double)( ( ( bytes[1]  << 8 ) | ( bytes[0] & 0xff ) ) / 32768.0 ));
                audioAmplitude += temp;

            
            audioAmplitude /= AUDIO_PER_FRAME;//we are taking average of all frames corresponding to video frame

            ArrayList<Double> tempFrameData = new ArrayList<Double>();
            (VideoFile.frameHashMap.get(videoFrames).clone());
            tempFrameData.add(audioAmplitude);


            VideoFile.frameHashMap.put(videoFrames, tempFrameData);

            videoFrames++;

     

问题在于,由于幅度除以 32768 以对其进行归一化。我无法确定区分它们的阈值。

所有幅度都非常接近。我想我在计算幅度时犯了一些错误。

任何人都可以评论我如何使用这些幅度比较两个帧以在视频之间出现广告时发现显着差异。

谢谢

【问题讨论】:

对你来说有什么显着的不同? 就像在视频之间插播广告一样,通常广告中声音的幅度远大于视频。其次,假设有一段视频,其中一个人正在采访另一个人。在这里,采访的整体声音响度是相同的,除非中间突然出现一些其他广告。我想衡量这种变化。但是当我使用上面的代码找到幅度时。所有值都非常接近。找不到区分的门槛。也找不到错误 我认为取两个声音帧的幅度之间的差异就可以了。但这行不通。这无助于区分它们 使用 RMS(均方根)求差有用吗? 我们只能推测,我怀疑我们中的任何人以前都尝试过这样做,唯一的方法就是测试 【参考方案1】:

http://en.wikipedia.org/wiki/Loudness_war 这篇文章主要是关于音乐的,但它也适用于广告。 最有趣的部分是动态范围缩小。

研究发现,人类听觉更喜欢“响亮​​”的信号而不是“微弱”的信号。 当你想卖东西时,它会派上用场。

【讨论】:

“更喜欢‘响亮’的信号”——除非你有宿醉或头痛,我想,或者只是喜欢和平与安静

以上是关于无法在 wav 文件中找到 2 个声音帧之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

如何将声音字节转换为可以在变量中访问的 .wav 文件?

无法保存麦克风的声音

用 Qt 的 QAudioOutput 类播放 WAV 音频文件

计算 2 个时间跨度 DSP 之间的差异

使用 C 绕过声音/音频文件 (WAV)

如何在 .wav 文件中查找特定声音的时间戳?