Files
2026-05-27 23:47:53 +01:00

64 lines
1.5 KiB
TypeScript

import { AudioDocument } from "@suaveplan/audio-core";
export function buildSineDoc(
freq: number,
sampleRate: number,
durationSamples: number,
channels = 1
): AudioDocument {
const data: Float32Array[] = [];
for (let c = 0; c < channels; c++) {
const arr = new Float32Array(durationSamples);
for (let i = 0; i < durationSamples; i++) {
arr[i] = Math.sin((2 * Math.PI * freq * i) / sampleRate);
}
data.push(arr);
}
const doc = new AudioDocument({
sampleRate,
channels,
sourceLength: 0,
});
doc.push(data);
return doc;
}
export function buildSilentDoc(
sampleRate: number,
durationSamples: number,
channels = 1
): AudioDocument {
const data: Float32Array[] = [];
for (let c = 0; c < channels; c++) {
data.push(new Float32Array(durationSamples));
}
const doc = new AudioDocument({
sampleRate,
channels,
sourceLength: 0,
});
doc.push(data);
return doc;
}
export function buildChordDoc(
pitches: number[],
sampleRate: number,
durationSamples: number
): AudioDocument {
const arr = new Float32Array(durationSamples);
for (let i = 0; i < durationSamples; i++) {
let s = 0;
for (const f of pitches)
s += Math.sin((2 * Math.PI * f * i) / sampleRate);
arr[i] = s / pitches.length;
}
const doc = new AudioDocument({
sampleRate,
channels: 1,
sourceLength: 0,
});
doc.push([arr]);
return doc;
}