Как отследить отсутствие звуковой области в файле WAV? - PullRequest
2 голосов
/ 27 ноября 2009

Как отследить участки без звуков в wav-файле? Небольшое программное обеспечение, которое я хочу разработать, делит файл WAV, и оно рассматривает область без тома как точку разделения. Как программа может узнать, что объем файла WAV низкий? Я буду использовать Java или MFC.

Ответы [ 3 ]

8 голосов
/ 27 ноября 2009

Я успешно обнаружил тишину, рассчитав среднеквадратичное значение сигнала. Это делается следующим образом (при условии, что у вас есть массив аудиосэмплов):

    long sumOfSquares = 0;
    for (int i = startindex; i <= endindex; i++) {
        sumOfSquares = sumOfSquares + samples[i] * samples[i];
    }
    int numberOfSamples = endindex - startindex + 1;
    long rms = Math.sqrt(sumOfSquares / (numberOfSamples));

если среднеквадратичное значение ниже определенного порога, вы можете считать его молчаливым.

3 голосов
/ 27 ноября 2009

Ну, волновой файл - это в основном список значений, который представляет звуковую волну, незаметно разделенную с некоторой частотой (обычно 44100 Гц). Тишина в основном, когда значения близки к 0. Просто установите некоторое пороговое значение и ищите непрерывные (скажем, длина 100 мс) области, где значение ниже этого порога.

0 голосов
/ 27 ноября 2009

Простое обнаружение тишины выполняется путем последовательного сравнения фрагментов звука с некоторым значением (которое выбирается в зависимости от качества записи).

Что-то вроде:

abs(track[position]) < 0.1

или

(track[position]) < 0.1) && (track[position]) > -0.1)

если мы предположим, что чанк равен [-1, 1] с плавающей точкой.

Было бы лучше, если бы звук нормализовался.

...