repstosw 18 7 мая, 2019 Опубликовано 7 мая, 2019 (изменено) · Жалоба Есть аудио-сигнал, распиленный на фреймы одинаковой длины. Длина фрейма, частота семплирования, разрядность известны. Нужно понизить темп воспроизведения с сохранением тональности. Как? Нужен алгоритм, желательно на C/C++. Гугл выдаёт готовые программы, нужне сам алгоритм! Изменено 7 мая, 2019 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 7 мая, 2019 Опубликовано 7 мая, 2019 · Жалоба 34 минуты назад, __inline__ сказал: Нужно понизить темп воспроизведения с сохранением тональности. Я так понимаю - для симулятора? А зачем понижать? Частоты не сходятся? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 7 мая, 2019 Опубликовано 7 мая, 2019 (изменено) · Жалоба 21 minutes ago, jcxz said: Я так понимаю - для симулятора? А зачем понижать? Частоты не сходятся? Для GBA эмулятора. Выходит 25-30 FPS, вместо нужных 60 FPS. Звук тарахтит - фрагмент проигрыается дважды, так как звуковая подсистема требует данные чаще, чем эмулятор успевает заполнить буфер. Звук там "мягкий" - зависит от растактовок процессора приставки (программные задержки). Сделал ресемплинг, просто растянув отсчёты - темп понизился, тарахтение исчезло, но и тон снизился , что не нужно. Хочется чтоб именно был звук как на распев без снижения частоты (tempo stretching with pitch saving) Нашёл пару алгоритмов на гитхабе, но они ппц какие сложные. Хочется проще... А что если исходный фрейм повторять дважды, а склеивать с нахлёстом? Нахлест взять 1/4 длины фрейма. Начальный и конечный нахлест усреднить... Изменено 7 мая, 2019 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 10 мая, 2019 Опубликовано 10 мая, 2019 · Жалоба Начитался теории, приступил к практике. Алгоритм удлинения аудио-записи с сохранением тона: 1) Делаем ресемплинг - частота снижается, запись удлиняется 2) Делаем БПФ 3) Сдвигаем спектр вверх (для восстановления исходного тона) 4) Делаем обратное БПФ На деле оказалось, что фреймы плохо стыкуются - много артефактов и в целом появляется неприятный звон или эхо. Оконными функциями пробовал по краям уменьшать амплитуды и с нахлёстом брать, но ниче не выходит пока. Должне быть способ проще растянуть звук с сохранением тона. Однако же, по отсутствию ответов - неужели никто этим не занимался? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 мая, 2019 Опубликовано 10 мая, 2019 · Жалоба Аудиоплеер АIMP умеет замедлять воспроизведение без понижения тональности. Поинтересуйтесь у автора, как. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
majorka65 1 10 мая, 2019 Опубликовано 10 мая, 2019 · Жалоба Простого алгоритма не существует. Объясню, почему. Данные не периодичны в принципе. Перестановка, подстановка, перекрещивание, т.е. комбинаторные операции будут сопровождаться скачками фаз для всех остальных составляющих, кроме основного тона, даже если ее первый и второй кадр состыкованы без скачков фазы. Был бы один синус, например, или любая другая, но одна периодическая, тогда, возможно, упростилось бы. Ваш алгоритм проще вокодера не будет, по ряду причин, 1 - последнему не нужен буфер. Не спец, просто интересуюсь, но мне каацо, что ресурсов не мало понадобится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 4 10 мая, 2019 Опубликовано 10 мая, 2019 · Жалоба википедия занималась: https://en.wikipedia.org/wiki/Audio_time_stretching_and_pitch_scaling Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 12 мая, 2019 Опубликовано 12 мая, 2019 (изменено) · Жалоба Добавил всё-же звук к эмулятору GBA. Использовал алгоритм растяжки темпа с сохранением тона. Задача нетривиальная и требует академического кубатуренья. Хорошо, что уже давно всё проработано. )) За основу взял эту программу (с открытыми исходниками): http://www.surina.net/soundtouch Она позволяет много чего делать со звуком: изменять темп с сохранением тона, подымать тон с сохранением темпа, ресемплинг, вычисления BPM. Куча фильтров-интерполяторов: Шеннона, Кубический, Линейный. Антиалиасинговый фильтр. Темп звука в эмуляторе растягивается в 2...3 раза (30 - 20 FPS), при этом тональность остаётся той же. Видео: https://www.youtube.com/watch?v=ulLPALpHOGk Свой вариант билда сорцов прикрепил ниже: sound_stretch.rar Отлаживал алгоритм конечно же на ПК вначале Изменено 12 мая, 2019 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться