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; }