Finite-order shoebox propagation, multichannel room impulse responses and recording simulation in MoonBit
$env:MOON_HOME='D:\CodexProjects\.tools\moon'
$env:PATH="$env:MOON_HOME\bin;$env:PATH"moon update
moon check --deny-warn
moon test --deny-warn
moon run cmd/main
moon build --target js --release --deny-warn
node bin/boxrir.mjs rir examples/stereo.json generated/stereo
node bin/boxrir.mjs rir examples/wall-before.json generated/wall-before
node bin/boxrir.mjs rir examples/wall-after.json generated/wall-after
node bin/boxrir.mjs simulate examples/array.json examples/probe.wav generated/arraynode scripts/build-demo.mjs
node scripts/serve-demo.mjs| 使用者与问题 | 输入和操作 | 真实输出与验证 |
|---|---|---|
| 游戏音频开发者需要与位置对应的双接收点空间响应 | stereo.json,6×4×3 m房间,两接收点,6阶反射;执行rir或浏览器生成 | 每通道377条保留路径,4032帧RIR;直接声分别约7.658和8.090 ms。检查到达时间差、球面扩散增益和共享时间轴 |
| 声学教学人员比较单面墙处理前后变化 | wall-before.json、wall-after.json,只将x低墙能量吸声系数从0.1改为0.9 | 两份2912帧响应;该墙一阶反射的压力增益变为1/3,到达时间和其他一阶反射不变。独立脚本计算核对,不从有限窗口宣称准确RT60 |
| 语音/阵列算法开发者需要可复现的多通道模拟录音 | array.json 与16000 Hz单声道 probe.wav,执行simulate | 三通道1952帧RIR和17951帧模拟录音,包含完整卷积尾部。SciPy独立卷积和WAV读取对照,报告误差与通道数量 |
{"room":[6,4,3],"source":[1.5,1,1.5],"receivers":[[4,1.8,1.4],[4,2.2,1.4]],"absorption":[0.15,0.3,0.25,0.4,0.35,0.2],"sample_rate":16000,"max_order":6,"duration_ms":250,"speed":343,"half_width":16}moon check --target all --deny-warn
moon test --target wasm --deny-warn
moon test --target wasm-gc --deny-warn
moon test --target js --deny-warn
moon build --target js --release --deny-warn
node --test tests/*.test.mjs
python -m pip install numpy==2.5.4 scipy==1.18.1
python scripts/verify_artifacts.pypub struct Audio {
sample_rate : Int
latency_samples : Int
// private fields
}pub struct Response {
// private fields
}pub struct Scene {
// private fields
}pub(all) struct Vec3 {
x : Double
y : Double
z : Double
}Install
Download zipFinite-order shoebox propagation, multichannel room impulse responses and recording simulation in MoonBit