解説/アルゴリズム
const f0: number = 440; 
const samplingRate: number = 44100; 
const duration: number = 2; 
const len: number = samplingRate * duration; 
const amp: number = 1; 
const audioContext: AudioContext = new AudioContext();
const buffer: AudioBuffer = audioContext.createBuffer(1, len, samplingRate);
const array: Float32Array = buffer.getChannelData(0);
for (let i: number = 0; i < len; i++) {
  array[i] = generateSample(i);
}
function generateSample(i: number): number {
  return amp * Math.sin((i * f0 * Math.PI * 2) / samplingRate);
}
const src: AudioBufferSourceNode = audioContext.createBufferSource();
src.buffer = buffer;
src.connect(audioContext.destination);
src.start();
- 周波数
- 1 秒間あたりの振動数。
- この値で、音の高さ(ドレミ…)が決まる。
 
- 標本化周波数
- 1 秒間に何回値を取り出すかの数。
- 人間の耳だと 1 秒間に 20,000 回の振動数があれば十分で、標本化定理から 2 倍以上である 44,100 を指定している。
 
- サンプリング数
- 標本化周波数が 1 秒間に値を取り出す回数なので、それに実際の音の長さを掛けたものがサンプリング数になる。
 
- 振幅
- サイン波の振動を拡縮させるもので、音の大きさを表す。