Как микрофон слышит твоё дыхание
Если звук не записывается, как приложение измеряет дыхание? Шум комнаты, порог, который движется вместе с ней, и как находятся начало и конец выдоха.
6 мин чтения
Приложение не записывает звук. Поток с микрофона никогда не пишется на диск; каждые двадцать миллисекунд вычисляется уровень звука в этот момент, и сохраняется только это число. Так что у приложения не звуковой файл, а ряд чисел: линия, которая поднимается и опускается.
Все измерения делаются из этой линии.
Сначала измеряется тишина
В начале сессии идёт трёхсекундное слушание. За это время измеряется шум комнаты: гул холодильника, машины за окном, собственный электронный шум устройства.
Это не среднее — смотрят на самые тихие моменты этих трёх секунд. Причина: если во время калибровки положить телефон на стол или если кто-то кашлянет, среднее подтягивается вверх и порог остаётся неверным на всю сессию. В одной настоящей записи это дало ошибку в четырнадцать децибел.
Шум обновляется и во время сессии. Комната стала тише — порог опускается; шум вырос — поднимается, но только в пределах, иначе приложение оглохло бы в шумной комнате.
Порог не абсолютный, он относительно шума
Чтобы звук считался «выдохом», ему не нужно перейти какой-то определённый уровень децибел. Ему нужно подняться на определённую величину над шумом. В тихой комнате этот порог низкий, в шумном кафе — высокий.
Насколько выше шума — зависит от техники. Выдох через рот (долгий выдох, сжатые губы) выходит громким. Спокойный выдох через нос (когерентное, квадратное) намного ниже. Дыхание одной ноздрёй — самое тихое из всех. Каждую технику слушают её собственным порогом; мерить всех одной меркой значило бы сделать носовые техники неслышимыми.
Начало и конец выдоха
Сырой уровень звука слишком дёрганый, чтобы пользоваться им напрямую. Сначала его сглаживают — каждое новое измерение смешивается с предыдущим, чтобы один щелчок не превратился в выдох.
Выдох начинается, когда сглаженная линия переходит порог. Чтобы он закончился, хватит любого из двух условий: линия опускается ниже порога и держится там треть секунды, либо она падает на определённую величину от собственного пика выдоха. Без второго условия слышимый вдох продлевал бы выдох, и два дыхания измерялись бы как одно.
Очень короткие события отбрасываются. Для этого берут сырое измерение, а не сглаженную линию: сглаживание растягивает короткий щелчок и делает его длиннее, чем он был.
Тихая комната и проблема планшета
То, что пороги отсчитываются от шума, работает в большинстве случаев, но есть ловушка: если шум действительно очень низкий, относительный порог становится слишком чувствительным, и любой скрип в комнате может сойти за выдох. Поэтому у того, насколько низко может опуститься шум, есть нижняя граница.
Какое-то время эта граница была слишком высокой. В одной планшетной записи настоящий шум оказался намного ниже; поскольку граница предполагала шум выше реального, запас выдоха растаял и не было слышно ничего. Человеку, выдыхавшему в ладони от планшета, говорили «поднеси устройство ближе».
Границу пересчитали на двадцати одной настоящей записи и опустили: число пойманных выдохов выросло, а число ложных срабатываний не изменилось. Такие решения принимаются по имеющимся записям, а не наугад — это и есть единственная работа передачи образцов звука.
Быстрое дыхание — отдельная задача
У этого метода есть предел: чтобы понять, что выдох закончился, нужна короткая тишина после него. В технике, где выдыхают чаще раза в секунду, такой тишины не возникает.
Поэтому капалабхати измеряется иначе. Вместо того чтобы разделять выдохи по одному, приложение считает моменты, когда звуковая линия даёт пик, и смотрит, насколько ровны промежутки. Счётчик ждёт, пока после закрытия пика линия опустится ниже порога — без этого условия он считал каждый выдох дважды.