fix: expose physical aliasing and delayed arrivals
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { dbToLinear, TAU } from "./math.js";
|
||||
import { ceilSampleIndex, dbToLinear, TAU } from "./math.js";
|
||||
import { hashString, pinkNoiseAt, whiteNoiseAt } from "./noise.js";
|
||||
|
||||
function sampleAsset(signal, assetBuffers, time) {
|
||||
@@ -25,16 +25,20 @@ function sampleAsset(signal, assetBuffers, time) {
|
||||
* Omitting it keeps the historical whole-scene behaviour exactly unchanged.
|
||||
*/
|
||||
export function renderSignal(entry, scene, assetBuffers = new Map(), seedSalt = 0, timeMapping = {}) {
|
||||
const sampleCount = Math.ceil(scene.duration * scene.sampleRate);
|
||||
const sampleCount = ceilSampleIndex(scene.duration, scene.sampleRate);
|
||||
const output = new Float32Array(sampleCount);
|
||||
const startTime = entry.startTime ?? 0;
|
||||
const duration = entry.duration ?? scene.duration;
|
||||
const gain = dbToLinear(entry.gainDb ?? 0);
|
||||
const startSample = Math.max(0, Math.ceil(startTime * scene.sampleRate));
|
||||
const endSample = Math.min(sampleCount, Math.ceil((startTime + duration) * scene.sampleRate));
|
||||
const startSample = Math.max(0, ceilSampleIndex(startTime, scene.sampleRate));
|
||||
const endSample = Math.min(
|
||||
sampleCount,
|
||||
ceilSampleIndex(startTime + duration, scene.sampleRate),
|
||||
);
|
||||
const sceneSampleOffset = timeMapping.sceneSampleOffset ?? 0;
|
||||
const signalStartTime = timeMapping.signalStartTime ?? startTime;
|
||||
const signalStartSample = timeMapping.signalStartSample ?? Math.ceil(startTime * scene.sampleRate);
|
||||
const signalStartSample =
|
||||
timeMapping.signalStartSample ?? ceilSampleIndex(startTime, scene.sampleRate);
|
||||
if (!Number.isSafeInteger(sceneSampleOffset) || sceneSampleOffset < 0) {
|
||||
throw new RangeError("sceneSampleOffset must be a non-negative safe integer.");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user