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

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

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

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

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

PROFIT!

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

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