//I'm instantiating AudioContext
var audio_context = new AudioContext();
//creating oscillator
var oscillator = audio_context.createOscillator();
//hooking up the oscillator
oscillator.connect(audio_context.destination);
Я знаю, что air_pressure=sin(2pi·frequency·time)
представляет стандарт oscillator.type="sine"
поэтому волновая таблица для синуса будет:
real = [0, 0], imaginary = [0, 1];
Я хочу, чтобы мой генератор воспроизводил частоту 'частоты' и большую треть звука над ней одновременно, то есть 'frequency'·2^(4/12)'
, затем
air_pressure=sin(2pi·frequency·time)+sin(2pi·2^(4/12)·frequency·time)
Как должен выглядеть волновой стол сейчас?
Должен ли я преобразовать в ряд Фурье, чтобы получить уравнение в виде
air_pressure=a_0·cos(0)+b_0·sin(0)+a_1·cos(1)+b_1·sin(1)+a_2·cos(2)+b_2·sin(2)+...+a_n·cos(n)+b_n·sin(n)?
Как мне это сделать?
или есть более простой способ?
Примечание: я не хочу создавать несколько осцилляторов, я хочу установить собственный тип одного осциллятора для достижения полифонии
/*'real' is an array of cosine coefficients,
'imaginary is an array of sine coefficients in Fourier series representation of a soundwave */
var wave = audio_context.createPeriodicWave(real, imaginary);
//setting custom type of the oscillator:
oscillator.setPeriodicWave(wave);
//frequency manipulation:
oscillator.frequency.value = 110;
//making the oscillator sound:
oscillator.start();