Re[2]: Сдвиг высоты тона звука
От: Khalal  
Дата: 11.07.03 12:20
Оценка:
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'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.