Как создать волну нужной формы, как работает функция создания, причем здесь преобразование Фурье, как влияет параметр нормализации(включенный и выключенный)?
Доки:
На примере функции по упомянутой ссылке это работает так:
Генерируется и суммируется набор синусоид, частота каждой из которых в (2, 3, 4, ...) - в целое число раз больше "оcновной частотой".
Эти синусоиды называются гармониками основной частоты, а то, во сколько раз её частота больше основной частоты, называют её порядковым номером.
Как результат, всё вместе (суммарный сигнал) воспринимается на слух, как звук, соответствующий основной частоте, только обогащённый разной тембровой окраской.
В массивы real и imag помещается информация о номерах гармоник, которые будут добавлены в выходной сигнал.
Таким образом - номера ячеек массивов соответствуют номерам гармоник.
Разница между этими массивами в том, что пиковые значения амплитуд гармоник в массиве real вычисляются с помощью косинуса номеров гармоник, а в массиве imag - с помощью синуса.
Для первого знакомства можно поместить данные только в один из двух массивов, на пример, imag.
В примере ниже для наглядности изменения тембровой окраски данные массивов обновляются 5 раз в секунду, благодаря чему мы слышим непрерывный тембровый перелив одной и той же основной частоты:
<button onclick="mystart()"> старт </button>
<button onclick="osc.stop(); clearInterval(b); ac.close()"> стоп </button>
<script>
var numCoeffs = 15; // максимальный порядковый номер гармоник
function mystart(){
ac = new AudioContext();
osc = ac.createOscillator();
osc.frequency.value = 100; // основная частота, т.е., гармоника №1
osc.connect(ac.destination);
b = setInterval(function(){
var real = new Float32Array(numCoeffs);
var imag = new Float32Array(numCoeffs);
var i = 0;
while(i < numCoeffs){
var myrand = Math.floor(Math.random() * 5) + 2;
i += myrand;
imag[i] = 1;
}
var wave = ac.createPeriodicWave(real, imag, {disableNormalization: false}); // нормализация включена
osc.setPeriodicWave(wave);
}, 200);
osc.start();
}
</script>
Нормализация желательно должна быть включённой, иначе в результате суммирования большого количества гармоник размах сигнала может выйти за пределы крайних значений, и тогда не избежать неприятных искажений. А Жан Батист Фурье имеет к этому отношение, как разработчик алгоритма обратного процесса - разложение сложного звукового сигнала на синусоидальнае составляющие (гармоники). К сожалению, Web Audio API пока не позволяет качественно воспроизводить гармоники с частотами, близкими к нижнему и верхнему пределам слышимого диапазона.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Результат в окне - function f(){alert(this)}Почему?
Подскажите, пожалуйста, как правильно подсчитать и вывести в <span></span> количество элементов в разных блоках (для каждого отдельно) с помощью...
Есть скрипт для страницы, который применяет методы fadeIn и fadeOut для некоторых блоков, при ширине окна браузера более 900 pxПроблема в том, что если...