DarkKnight125
Алгоритм решения задачи очень прост (см ответ от l1pton17): проигрываем в колонки звук и одновременно записываем звук с микрофона. Изучаем полученный входной сигнал и ищем момент начала получения нашего звука. Получаем задержку в миллисекундах. Умножаем на скорость звука и получаем искомое расстояние. Все просто. А теперь объясняю, почему это не сработает с обыкновенным компьютером:
1. Микрофон выдает аналоговый сигнал, который звуковая карта оцифровывает. Звуковая карта использует внутренний буфер, как промежуточное хранилище, и пока он не заполнится - наружу сигнал не пойдет. Задержка небольшая и неощутимая для человеческого уха, но она есть (а на встроенных звуковухах этот лаг иногда даже на слух различим).
2. Это нам только кажется, что на компьютере все работает одновременно. На самом деле, процессы выполняются по очереди и сменяют друг друга. И достаточно одного небольшого svchost, чтобы добавить еще пару милисекунд задержки для нашего звука.
3. У меня расстояние от колонок до микрофона меньше полуметра. Задержка в прохождении звука по воздуху составит (с учетом скорости звука = 331 м/с) 0,5/331 = 1,5*10^(-3)с = 1,5мс. Лаг из-за всех вышеперечисленных обстоятельств составит в лучшем случае 5*10^(-3)c = 5мс, т.е. ошибка более чем в 3 раза превысит непосредственно измеренное значение!