Как повысить тон голоса без увеличения скорости (например, как в приложении Talking Tom Cat)?

Наткнулся на приложение Talking Tom Cat — кот на экране Android'а слушает микрофон и, если что-нибудь сказать, то он повторяет эту фразу, но повышает тон голоса. Получается забавный «мультяшный» голос, как у бурундучков. Очевидный способ добиться такого — воспроизвести звук немного быстрее, но тогда увеличится темп, чего не хотелось бы.


Вопрос: как добиться такого же эффекта? Интересуют алгоритм(ы), но и готовая библиотека для такого рода фигни будет полезна. Буду рад, если посоветуете литературу/статьи/сайт, где можно подсмотреть решение этой задачи.


Что-то слышал про применимость преобразования Фурье. Попытался сделать следующее: применяю прямое преобразование ко всему куску звука, «сдвигаю» результат (data[i — off] = data[i]), заполняя пустоты нулями, делаю обратное преобразование и воспроизвожу вещественную часть (округлив). Получилось что-то похожее, но с кучей искажений. Если применять не к куску, а разделить на несколько непересекающихся и применить по отдельности, результат не лучше.
  • Вопрос задан
  • 5953 просмотра
Решения вопроса 1
merlin-vrn
@merlin-vrn
rubberband

есть консольная утилита, есть либа

А вообще, для голоса — теория такая: там есть тон, а есть форманты. При смещении тона форманты смещаться не должны. Они отрезаются формантным фильтром, остаток смещается, потом старые (несмещённые) форманты накладываются. Если хотите поменять «пол» голоса, то форманты тоже придётся преобразовать — у мужчин и женщин они чуть разные.

По-моему, в rubberband это встроено. Если нет, могу назвать gvst, в котором есть gsnap, который умеет правильно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы