Как они повидлу в карамельки засовывают

В детстве у меня был проигрыватель для виниловых пластинок с изменяемой скоростью проигрывания. Обычный диск на 33 оборота можно было запустить на 45 — уже получалось смешно. А можно было зафигачить аж на 78 оборотов — тогда пластинка проигрывалась очень быстро, и всё звучало по-мультяшному. По башке, конечно, надо было мне дать, чтобы пластинки не портил, но что было, то прошло. У меня сейчас тоже проигрыватель пластинок есть, но такой дурью я больше не маюсь. Просто играю пластинки и всё.

Так вот, всегда мучал вопрос — как это ютупчик и прочие сервисы видео- и аудиоконтента, типа подкастов, могут убыстрять (или замедлять) проигрывание звука без изменения его высоты?

Оказалось, что делают так:

1. Разбивают цифровой звук на маленькие блоки в 512-2048 байт. На частоте дискретизации в 44.1 килогерца эти блоки имеют длину всего несколько миллисекунд.
2. На каждом блоке запускают преобразование Фурье. Для тех, кто вдруг не знает — это математический способ разбить звук на индивидуальные составляющие частоты.
3. Воссоздают те же частоты, но просто укорачивают или увеличивают им длину проигрывания в нужное количество раз по желанию пользователя. Склеивают звук назад.

PROFIT!

Ну, немного посложнее, конечно (обычно там не тупо дискретные блоки по 512 байт, а т.н. “скользящее окно” (sliding window) размером в 512 байт, например, но основа алгоритма Phase Vocoder (“фазовый вокодер”, что ли?) именно такая.

Прикольно. Неужели всё это делается прямо в браузере, джаваскриптом? Обалдеть. Наврядли на сервере хранятся сто разных версий одного и того же видеофайла.

Leave a Reply

Your email address will not be published. Required fields are marked *