Воспроизведение музыкального фрагмента с более медленной скоростью уменьшит его высоту (частоту). Есть ли инструмент и теория, чтобы замедлить воспроизведение песни, сохраняя частоту? Я полагаю, что можно сделать оконное преобразование Фурье или вейвлет-преобразование. Кажется, нужно либо предварительно выбрать размер окна, либо динамически выбрать основу вейвлета. Есть ли конкретная и подробная теория и применение для этого?
10
Ответы:
Да, некоторые из нас могут это сделать, вы можете ускорить или замедлить, не влияя на высоту, некоторые ребята называют это приложениями Time Stretch, есть разные способы сделать это, вы можете сделать это в частотной области или во временной области, вам нужно будет выбрать что лучше для вас, вы найдете некоторые преимущества и недостатки каждого из них.
Область времени:
В Time Domain вы можете попробовать некоторые методы, такие как:
Плюсы: это быстро, некоторые алгоритмы просты для понимания, хорошего качества в монофонических звуках.
Минусы: Как правило, вам понадобится очень хорошая дорожка основного тона, чтобы соединить в правильном положении, это трудно сделать :-(, поэтому, если ваш дорожка основного тона не работает или не работает в полифонических звуках, эти алгоритмы будут давать много глюков / артефактов. в выходной звук.
Частотная область:
Все временные интервалы, которые я знаю в частотной области, основаны на методах фазового вокодера .
Плюсы: будут работать в полифонических или монофонических звуках.
Минусы: Может быть больно понимать всю математику, реализация немного сложна, не так быстро, как коды временной области, для голоса я предпочитаю результаты во временной области, некоторые приемы по улучшению результата стандартного фазового вокодера не передаются.
Я могу сказать, что окно и размер прыжка являются одними из ключевых для качества фазового вокодера, обычно мы выбираем
4x
перекрытие для повторного синтеза4096
, мне достаточно одного окна размера Hann (конечно, если у вас есть вычислительная мощность для этих размеров) стандартный вокодер фазы может добавить некоторые реверберирующие эффекты, чтобы попытаться избежать такого рода проблем, которые вам, возможно, понадобятся для блокировки фазы.Для datailed взглянуть в Миллер Пакетт и Portnoff бумаги
источник
44100 * 60 = 2646000
точках сразу и обрабатывать, поэтому забудьте о любой попытке обработки в реальном времени, такой как это ,Инструмент / теория, которую вы описываете, является действительно большой областью исследований в области музыкальных технологий, широко называемой аудио-временной шкалой. Большим компонентом этого поля является то, как вы можете предотвратить слышимые изменения частоты после растяжения времени. Этого можно достичь с помощью методов как в частотной, так и во временной области, в зависимости от ограничений или целей вашего приложения. Хорошая отправная точка - запись в Википедии о модификации времени / высоты звука.
Если вы заинтересованы в применении подхода, использующего частотно-вейвлетный базис, размер вашего окна и выбор базиса будут влиять на то, насколько хорошо вы сможете локализовать сигнал. Чтобы использовать STFT в качестве примера, длинное окно будет хорошо работать для стационарных синусоид, но разрушит ваши переходные процессы. Более короткое окно обеспечит предпочтительный переходный отклик за счет локализации в частотной области. Производительность других вейвлет-баз будет зависеть от характера проекции вашего сигнала на базу.
источник
Ниже приведена ссылка на простую и полезную учебную функцию в C ++ (smbPitchShift.cpp) Стефана М. Бернзее, которая может замедлять или ускорять музыку, не меняя ее высоту.
Он выпустил этот код под широко открытой лицензией (WOL). В моем приложении я смог адаптировать его функцию для замедления музыки в режиме реального времени - то есть во время воспроизведения mp3-файла и, в то же время, дополнительно определяя высоту звука для этого mp3-сигнала.
Я также включил ссылку на веб-сайт Бернзее, который содержит его подробные описания о растяжении по времени и смещении звука звуковых сигналов, таких как музыка.
https://github.com/AndyA/BatPhone/blob/master/pitchshift.c
http://blogs.zynaptiq.com/bernsee/time-pitch-overview/
источник
time stretch
, оригинальный код применяетсяPitch Shift
, в этом случае, чтобы применить модификацию шкалы времени, которую вам нужно будет объединитьPitch Shifit + Resample (interpolation)
, код Бернси работает хорошо, используя окно размера, которое4096
вы сможете изменить на одну октаву (выше или ниже) , это означает, что соответственно вы сможете создавать временную шкалу только с хорошим качеством, используя коэффициенты от 2,0x до 0,5x, хорошо построенный фазовый вокодер может достигать лучших результатов, используя тот же размер окна, и вы сможете экстраполировать эти факторы с лучшим качеством8192
в кодах со страницы загрузки, так что вам придется в 4 раза больше обрабатывать Я возвращаюсь, чтобы сказать, что с половиной размера окна8192/2=4096
вы можете сделать то же самое, используя некоторые секреты фазового вокодера, суть в том, что вы можете сохранить качество с гораздо меньшей обработкой.