Web Audio: метод cancelAndHoldAtTime практически исключает выталкивание из конверта ADSR - PullRequest
0 голосов
/ 10 декабря 2018

Я строю конверт ADSR с использованием API Web Audio и хотел использовать новый метод cancelAndHoldAtTime, чтобы устранить попсовый звук, который можно услышать при переходе от заметки к заметке.Это связано с тем, что невозможно получить текущее значение автоматизации audioParam, поэтому при воспроизведении новой ноты она начинается с 0, а не с того места, где прервалась старая нота

Например: этот пример от ChrisLowis прекрасно работает с меньшим временем атаки / выпуска, но как только вы увеличите это время, чтобы увеличить его (т. Е. 100), вы сможете отчетливо услышать щелчок при изменении каждой ноты: http://blog.chrislowis.co.uk/demos/ar-envelope-synth/synth.html

Я экспериментировал изаменили код в методе trigger здесь: https://github.com/chrislo/web-audio-synth-experiments/blob/ar-envelope-blog-post/synth.js#L104

на следующее:

this.param.cancelAndHoldAtTime(context.currentTime);
        this.param.linearRampToValueAtTime(1, context.currentTime + this.attackTime);
        this.param.linearRampToValueAtTime(0, context.currentTime + this.attackTime + this.releaseTime);

Кажется, это почти работает.Время атаки / выпуска 100 не приводит к появлению хлопков, если я не играю по-настоящему быстро.Есть ли что-то еще, что я должен сделать, чтобы я мог полностью устранить появление?

...