【问题标题】:Conceptual problems - Trim "silence" at beginning/end of wav概念问题 - 在 wav 的开头/结尾修剪“静音”
【发布时间】:2013-03-19 05:43:08
【问题描述】:

我需要通过修剪文件开头和结尾的“相对”静音来计算 wav 文件的长度,然后以毫秒为单位返回持续时间。我知道您可以这样找到 wav 文件的持续时间:

[w,fs] = wavread('file.wav');
length = length(w)/fs;

我的逻辑是使用波形矩阵的第一列(左通道),得到一个任意阈值,然后通过采样窗口遍历矩阵。如果这些窗口的最大值大于阈值,那么我开始计算时间。当这个窗口的最大值小于我停在那里的值时。这是我目前所拥有的:

%Just use the first column in the waveform matrix, 2 gives strange results
w = w(:,1);
%Get threshold value by multiplying max amplitude of waveform and
%predetermined percentage (this varies with testing)
thold = max(w) * .04;

只需要有关如何通过采样窗口实际遍历矩阵的帮助。

【问题讨论】:

  • 所以我可以这样做:silenceInd = find(abs(w) < thold)?那不会在矩阵中找到小于阈值的值吗?
  • 嗯,你必须识别几个连续沉默的样本(例如,1/2 秒的沉默)才能声明真正的沉默。

标签: matlab


【解决方案1】:

我不完全确定您想要实现什么,但我认为您可以使用自己的建议(有点):

soundIdx                      = find(abs(w) > thold)
total_time_w_sound            = sum(abs(w) > thold)/fs;
time_from_first_sound_to_last = (soundIdx(end)-soundIdx(1))/fs;

它是您要查找的其中之一吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2021-05-12
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    相关资源
    最近更新 更多