Удалите все файлы, но сохраните все каталоги в сценарии удара?

Смотря на снимки экрана исходных звуковых файлов, один простой способ обнаружить изменение на уровне звука состоял бы в том, чтобы сделать численное интегрирование из образцов для обнаружения "энергии" волны в определенное время.

А грубый алгоритм был бы:

  1. Делятся, образцы в разделы
  2. Вычисляют, энергия каждого раздела
  3. Берут отношение энергий между предыдущим окном и текущим окном
  4. , Если отношение превышает некоторый порог, решите, что был внезапный громкий шум.

Псевдокод

samples = load_audio_samples()     // Array containing audio samples
WINDOW_SIZE = 1000                 // Sample window of 1000 samples (example)

for (i = 0; i < samples.length; i += WINDOW_SIZE):
    // Perform a numerical integration of the current window using simple
    // addition of current sample to a sum.
    for (j = 0; j < WINDOW_SIZE; j++):
        energy += samples[i+j]

    // Take ratio of energies of last window and current window, and see
    // if there is a big difference in the energies. If so, there is a
    // sudden loud noise.
    if (energy / last_energy > THRESHOLD):
        sudden_sound_detected()

    last_energy = energy
    energy = 0;

я должен добавить правовую оговорку, что я не попробовал это.

Этот путь должен быть возможен быть выполненным, не имея образцов все зарегистрированные сначала. Пока существует буфер некоторой длины (WINDOW_SIZE в примере), численное интегрирование может быть выполнено для вычисления энергии раздела звука. Это действительно означает однако, что будет задержка обработки, зависящей от длины WINDOW_SIZE. Определение хорошей длины для раздела звука является другим беспокойством.

, Как Разделить на Разделы

В первом звуковом файле, кажется, что продолжительность звука дверного закрытия составляет 0,25 секунды, таким образом, окно, используемое для численного интегрирования, должно, вероятно, быть самое большее половиной из этого или еще большим количеством likeгЂЂa десятой части, таким образом, различие между тишиной и внезапным звуком может быть замечено, даже если окно накладывается между тихим разделом и шумовым разделом.

, Например, если окно интеграции составляло 0,5 секунды, и первое окно покрывало 0,25 секунды тишины и 0,25 секунды дверного закрытия, и второе окно покрывало 0,25 секунды дверного закрытия и 0,25 секунды тишины, может казаться, что два раздела звука имеют тот же уровень шума, поэтому, не инициировав звуковое обнаружение. Я предполагаю иметь короткое окно, облегчил бы эту проблему несколько.

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

я верю WINDOW_SIZE, и THRESHOLD оба оказываются перед необходимостью быть определенным опытным путем для звука, который будет обнаруженным.

Ради определения, сколько образцов, которые этот алгоритм должен будет сохранить в памяти, скажем, эти WINDOW_SIZE, является 1/10 звука дверного закрытия, которое составляет приблизительно 0,025 секунды. На частоте дискретизации 4 кГц, которая является 100 образцами. Это, кажется, не слишком много требования к памяти. Используя 16-разрядные образцы это составляет 200 байтов.

Преимущества / Недостатки

преимущество этого метода состоит в том, что обработка может быть выполнена с простой целочисленной арифметикой, если исходное аудио подается как целые числа. Выгода уже, как упомянуто, та обработка в режиме реального времени будет иметь задержку, в зависимости от размера раздела, который интегрируется.

существует несколько проблем, о которых я могу думать к этому подходу:

  1. , Если фоновый шум является слишком громким, различие в энергии между фоновым шумом и дверным закрытием легко не отличат, и это не может обнаруживать дверное закрытие.
  2. Любой резкий шум, такой как хлопок, мог быть расценен, поскольку дверь закрывается.

, Возможно, комбинируя предложения в других ответах, таких как попытка проанализировать подпись частоты дверного закрытия с помощью анализа Фурье, который потребовал бы большего количества обработки, но сделает ее менее подверженной ошибке.

Это, вероятно, собирается взять некоторое экспериментирование прежде, чем найти способ решить эту проблему.

21
задан kjfletch 21 August 2009 в 10:18
поделиться

4 ответа

find dir -type f -print0 | xargs -0 rm

find рекурсивно перечисляет все файлы, которые соответствуют определенному выражению в данном каталоге. -тип f соответствует обычным файлам. -print0 предназначен для вывода имен с использованием \ 0 в качестве разделителя (поскольку любой другой символ, включая \ n , может быть в имени пути). xargs предназначен для сбора имен файлов из стандартного ввода и помещения их в качестве параметров. -0 - убедиться, что xargs распознает разделитель \ 0 .

xargs достаточно мудр, чтобы вызвать rm ] несколько раз, если список параметров станет слишком большим. Так что это намного лучше, чем пытаться позвонить кому-нибудь. например rm $ ((find ...) . Также это намного быстрее, чем вызов rm для каждого файла отдельно,

41
ответ дан 29 November 2019 в 06:28
поделиться

С помощью GNU find вы можете использовать действие -delete :

find dir -type f -delete

Со стандартным find вы можете использовать -exec rm :

find dir -type f -exec rm {} +
10
ответ дан 29 November 2019 в 06:28
поделиться
find dir -type f -exec rm '{}' +
8
ответ дан 29 November 2019 в 06:28
поделиться
find dir -type f -exec rm {} \;

где каталог - это верхний уровень, на котором вы хотите удалить файлы из

. Обратите внимание, что при этом будут удалены только обычные файлы, а не символические ссылки, не устройства и т. Д. Если вы хотите удалить все, кроме каталогов, используйте

find dir -not -type d -exec rm {} \;
8
ответ дан 29 November 2019 в 06:28
поделиться