feat: synthesize trajectory analysis windows

This commit is contained in:
Codex
2026-08-28 16:05:22 +09:00
parent a20b55e8e2
commit 6280fa4dfd
4 changed files with 198 additions and 11 deletions
+11 -3
View File
@@ -23,6 +23,7 @@ export function synthesizeMicrophoneSignals(options) {
referenceDistance = 1,
minimumDistance = 0.01,
maximumBufferBytes = 512 * 1024 * 1024,
signalOffsets,
} = options;
const sampleCount = Math.ceil(scene.duration * scene.sampleRate);
const retainedBufferCount = arrayDefinition.microphones.length + scene.sources.length + 1;
@@ -46,9 +47,13 @@ export function synthesizeMicrophoneSignals(options) {
);
}
const channels = arrayDefinition.microphones.map(() => new Float32Array(sampleCount));
const renderedSources = scene.sources.map((source) => ({
const sceneSampleOffset = signalOffsets?.sceneSampleOffset ?? 0;
const renderedSources = scene.sources.map((source, sourceIndex) => ({
definition: source,
samples: renderSignal(source, scene, assetBuffers),
samples: renderSignal(source, scene, assetBuffers, 0, {
sceneSampleOffset,
...(signalOffsets?.sources?.[sourceIndex] ?? {}),
}),
}));
renderedSources.forEach(({ definition, samples }) => {
@@ -77,7 +82,10 @@ export function synthesizeMicrophoneSignals(options) {
channels.forEach((channel, microphoneIndex) => {
const microphone = arrayDefinition.microphones[microphoneIndex];
const seedSalt = Math.imul(ambientIndex + 1, 0x45d9f3b) ^ Math.imul(microphoneIndex + 1, 0x27d4eb2d);
const ambientSamples = renderSignal(ambient, scene, assetBuffers, seedSalt);
const ambientSamples = renderSignal(ambient, scene, assetBuffers, seedSalt, {
sceneSampleOffset,
...(signalOffsets?.ambient?.[ambientIndex] ?? {}),
});
const spectrum = prepareDelaySpectrum(ambientSamples, 0);
addFrequencyDomainDelay({
output: channel,