g0l (g0l) wrote,
g0l
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
Tags: железки, математика
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments