?

Log in

No account? Create an account

Previous Entry Share Next Entry
Щщас буду ругацо плохими словами
g0l
Как сделать транспонирование звука? Смещение тональности, оно же Pitch Shift.

Сижу вот, пишу сервер звуковых эффектов для виртурилки, нужен для эмитации звука движка машинки (а также клаксона и прочих звуков). Всё на базе ALSA.

Есть буфер, в который помещаю сэмпл звука двигателя. С микшированием звуков (например, бибикание одновременно со звуком двигателя) разобрался — тупо побайтовое сложение двух буферов сэмплов, двигателя и клаксона (с последующим ограничением по амплитуде чтоб треска не было). А вот сделать транспонирование звука двигателя что-то не получается. Транспонирование — изменение тональности, т.е. чем быстрее машинка едет — тем выше звук. Пробовал оставлять только каждый 2-й (или 3-й, 4-й) байт из буфера сэмпла, но получается какая-то фигня.

Всё это дело должно производиться на лету. В голову лезут смутные воспоминания о FFT (быстрое преобразование Фурье), но конкретно не пойму как применить.

Если кто может помочь - велкам в комменты.

Нарытый материал:
ЕРЕСЬ ЗВУКОЗАПИСИ
http://dafx.labri.fr/main/papers/p007.pdf
http://www.dspdimension.com/admin/time-pitch-overview/
http://soundprogramming.net/programming_and_apis/calculating_sample_shift
http://gamedev.tutsplus.com/tutorials/implementation/noise-creating-a-synthesizer-for-retro-sound-effects-introduction/

Оффтоп: онлайн синтезатор

Заметка закросспостена с блога www.g0l.ru