Обнаружение звука хлопка в C#

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

Статистика

New results

  • В самой левой панели вы можете увидеть распределение, которое заставило меня усомниться в оценках времени, которые я получал.
  • Средняя панель показывает, чего я достиг после кэширования селекторов, переупорядочения некоторых вызовов, использования некоторого большего количества цепочек, минимизации перекомпоновок с использованием visibility и абсолютного позиционирования вместо display.
  • Крайняя правая панель показывает, что я получил после использования адаптированной функции Джо Ламберта с использованием requestAnimationFrame. Я сделал это после чтения блога о том, что rAF теперь тоже имеет точность до миллисекунды . Я думал, что это только поможет мне сгладить анимацию, но, очевидно, это также поможет улучшить фактическую длительность отображения .

Результаты

На последней панели среднее значение для времени «отрисовки к краске» составляет ~ 500 мс, среднее значение для разброса времени выполнения в линейном режиме реально (имеет смысл, потому что я использую то же самое временная метка для завершения внутреннего цикла ниже) и коррелирует с синхронизацией «от краски к краске».

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

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

window.requestTimeout с использованием window.requestAnimationFrame

window.requestTimeout = function(fn, delay) {
    var start = performance.now(),
        handle = new Object();
    function loop(){
        var current = performance.now(),
            delta = current - start;

        delta >= delay ? fn.call() : handle.value = window.requestAnimationFrame(loop);
    };
    handle.value = window.requestAnimationFrame(loop);
    return handle;
};

Редактировать:

Ответ на другой мой вопрос связан с хорошей новой статьей . [одна тысяча сто двадцать-два]

10
задан jamesrom 11 June 2009 в 11:51
поделиться

4 ответа

Ранее задавался аналогичный вопрос:

Определить, когда звук хлопает дверью (расчет уровня звукового давления?)

Хотя вопрос не относился конкретно к C #, у него есть некоторые идеи для использования алгоритмов. (Раскрытие информации: Да, я ответил на этот вопрос.)

7
ответ дан 4 December 2019 в 01:57
поделиться

Не уверен, поможет ли это, но все же: MERL - Распознавание звука . Или еще лучше, Обнаружение хлопка с микрофоном .

1
ответ дан 4 December 2019 в 01:57
поделиться

Я бы сосредоточился не на языке как таковом, а на алгоритме.

Какие характеристики звука позволяют идентифицировать его как хлопок? Продолжительность? Интенсивность? Изменение интенсивности с течением времени?

Когда у вас есть алгоритм, затем решите, как лучше всего его реализовать.

1
ответ дан 4 December 2019 в 01:57
поделиться

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

0
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: