Как сделать транспонирование звука? Смещение тональности, оно же Pitch Shift.
Сижу вот, пишу сервер звуковых эффектов для виртурилки, нужен для эмитации звука движка машинки (а также клаксона и прочих звуков). Всё на базе ALSA.
Есть буфер, в который помещаю сэмпл звука двигателя. С микшированием звуков (например, бибикание одновременно со звуком двигателя) разобрался — тупо побайтовое сложение двух буферов сэмплов, двигателя и клаксона (с последующим ограничением по амплитуде чтоб треска не было). А вот сделать транспонирование звука двигателя что-то не получается. Транспонирование — изменение тональности, т.е. чем быстрее машинка едет — тем выше звук. Пробовал оставлять только каждый 2-й (или 3-й, 4-й) байт из буфера сэмпла, но получается какая-то фигня.
Всё это дело должно производиться на лету. В голову лезут смутные воспоминания о FFT (быстрое преобразование Фурье), но конкретно не пойму как применить.
частота ноты ля малой октавы вдвое ниже частоты ноты ля в первой октаве. воспроизвести его вдвое быстрее, но не за счет выкидывания байтов, а хз за счет чего)) может, проще понапихать сэмплов на каждый диапазон оборотов? (доли секунды)
2 Гость: Не, частоту тут задолбаешься увеличивать, это ж не генерация звука по частоте а изменение сэмпла. Напихать сэмплов - очень коряво, не наш метод.
Гость Воскресенье, 3 Февраля, 2013 01:53 цитировать ссылка на коммент
Гость Воскресенье, 3 Февраля, 2013 01:58 цитировать ссылка на коммент
может, проще понапихать сэмплов на каждый диапазон оборотов? (доли секунды)
Gol Воскресенье, 3 Февраля, 2013 16:49 цитировать ссылка на коммент
Не, частоту тут задолбаешься увеличивать, это ж не генерация звука по частоте а изменение сэмпла. Напихать сэмплов - очень коряво, не наш метод.
Gol Воскресенье, 3 Февраля, 2013 16:50 цитировать ссылка на коммент