PZ>А пропуск/добавление как реализовано ?
Если надо сдвинуть тон звука на целое число октав то надо изменить скорость
его воспроизведения в соответствующее число раз.(2^(число октав))
Например для сдвига на октаву вверх скорость надо удвоить,
каждую пару отсчетов заменить средним арифметическим.
Для сдвига на октаву вниз скорость надо уменьшить в два раза,
соответственно, надо каждый отсчет повторить два раза.
Для сдвига на нецелое число октав по-видимому понадобится
аппроксимировать отсчеты многочленом и затем уже пропускать/добавлять их.
Но как можно решить проблему с длиной я не смог придумать.
PZ>Имеем время Tres = t*n, для каждого времени нужно заново расчитать амплитуду. для этого берем из новой шкалы PZ>два ближайших значения для времени ...т.е. находим n' такое чтобы t'*n'<Tres<t'*(n'+1). для этих двух точек мы PZ>имеем амплитуду An и An+1 ...соотв. нужно для Tres запомнить амплитуду Ares=((A(n'+1)-A(n'))/t')*(Tres-t'*n')
Спасибо за этот способ!
Вроде бы он позволяет решить проблему с длиной.
Только последняя формула, как я понимаю, это линейное приближение ?
Тогда она не совсем верна.
Вывод этой формулы:
x — n'*t y — A(n')
--------------- = ---------------
(n'+1)*t — n'*t A(n'+1) — A(n')
Подставляя x = Tres,получаем
Tres — n'*t
Ares = y = A(n')+ ------------- * ( A(n'+1) — A(n') )
t'