Конверт ADSR - формула, необходимая для постепенного увеличения и уменьшения полноты, четверти, восьмой ноты (dsp.js) - PullRequest
0 голосов
/ 10 января 2011

Я применяю конверт ADSR для постепенного увеличения и уменьшения заметок, поэтому после каждой заметки я не слышу треск.Я программирую на JavaScript с помощью API Firefox 4 Audio Data.Используемая мной библиотека dsp.js (https://github.com/corbanbrook/dsp.js) имеет функцию огибающей ADSR, например: ADSR (атака, затухание, SustainLevel, Sustain, Release, sampleRate) (измеряется в секундах).

следующие звуки довольно хороши для четвертной ноты (при условии 120 ударов в минуту):

var envelope = new ADSR(0.01, 0.1, 0.5, 0.1, 0.2, 44100);

Какую формулу я могу использовать, чтобы определить правильные параметры ADSR для применения к целой, половине, четверти или восьмой ноте?

Я новичок в цифровой обработке сигналов, и мне нужны расчеты для увеличения / уменьшения атаки, затухания, сустейна и выброса в зависимости от длительности ноты.

Ответы [ 3 ]

1 голос
/ 10 января 2011

Я не брал уроки игры на фортепиано с младших классов, но, насколько я помню, единственная разница между целыми, половинными, четвертными и восьмыми нотами - это длина, которую вы слышите.Поэтому я подумаю, что вам нужно скорректировать sustain.. Если вас устраивает значение четвертной ноты, удвойте его вдвое, удвойте его в целом и уменьшите вдвое на восьмую.1003 * Вы можете обнаружить, что для более естественного звучания вы хотите изменить некоторые другие параметры, но я думаю, что вам нужно будет поэкспериментировать, чтобы понять это.Возможно, вы захотите сократить время выпуска и восьмой ноты, но это должно быть незначительным изменением.С другой стороны, Стаккато потребуется очень короткий релиз, а также, возможно, короткая атака и, возможно, более высокий сустейн-уровень.

0 голосов
/ 12 января 2011

Две удобные функции
- SyncToSamples преобразует музыкальное время в сэмплы с частотой дискретизации X.
- SamplesToSeconds конвертируется, как следует из названия.

function SyncToSamples(SyncFactor, BPM, SampleRate: single): single; 
begin
  result := (SyncFactor * 4) * SampleRate * 60 / BPM;
end;

function SamplesToSeconds(Samples, SampleRate: single): single; 
begin
  result := Samples / SampleRate;
end;

Для расчета длины
- целая нота использует SyncFactor = 1
- половинная нота использует SyncFactor = 1/2
- четвертная нота использует SyncFactor = 1/4

Вышеуказанные функции могут быть использованы для расчета длины четвертной ноты в секундах. Оттуда отдельные этапы ADSR могут быть скорректированы в соответствии с требованиями времени.

Как и предполагали другие, только корректировка времени выдержки с изменениями темпа будет звучать более естественно. Изменение времени атаки, затухания и выпуска изменит характер ноты.

0 голосов
/ 10 января 2011

Если вы хотите, чтобы ноты звучали примерно одинаково, но менялись только по продолжительности между четвертью, половиной, восьмой нотой и т. Д., Попробуйте изменить только время выдержки на такую ​​величину, чтобы сумма атаки, затухания и Время сустейна удваивается, уменьшается вдвое и т. д. Это примерно соответствует времени нажатия пальца на палец вверх при нажатии на инструмент.

...