Думайте об этом с чисто акустической точки зрения. Это просто, и я уверен, что вы уже понимаете, как это работает. Вот синусоида 100 Гц.
Вы можете изменить высоту звуковой волны, просто повышая или понижая ее частоту, верно? Поэтому, если мы «сжимаем» эту синусоидальную волну с коэффициентом 2, мы получаем синусоидальную волну 200 Гц, которая звучит более высоко.
То, что делает пример кода, становится немного понятнее с учетом этого. Для каждых 2 звуковых сэмплов в оригинальном звуке мы записываем этот сэмпл в новый целевой звук. Таким образом, мы полностью отбрасываем каждый второй образец. Это делает последовательность на 1/2 длины, увеличивая тем самым ее частоту и повышая высоту тона.
Чтобы удлинить / уменьшить / уменьшить частоту звука, вам нужно сделать обратное, т. Е. Вам нужно продублировать данные в каждой точке выборки. Пройдите каждую выборку, а не каждые две, и запишите эту выборку дважды.
Этот процесс называется преобразование частоты дискретизации , и его тезка довольно ясна. Преобразование частоты дискретизации - это самая простая форма растяжения звука, которую вы можете выполнить.