Web Audio 循环点截错位置?先统一秒、毫秒与采样帧
把文件时间、采样帧和解码后buffer分开记录,再设置循环位置,不从文件大小猜播放范围。

封面为 AI 生成的耳机与声波示意,不是采样波形、循环点界面或无缝播放测试。
一段2秒音效接入网页游戏后,循环总在不对的位置返回。先确认程序需要秒、毫秒还是采样帧,再核对它实际使用哪份缓冲。相同数字在不同单位里不是同一位置。
先限定本次API,不推断所有引擎
MDN官方loopEnd说明将Web Audio的该属性定义为秒单位的偏移,并说明只有loop为true时才使用。不能把2000毫秒或某个采样帧索引不加转换地当成同一参数。
这里讨论AudioBufferSourceNode,不代表所有引擎、音频中间件或Tooliva界面采用相同单位。先看实际API契约,不猜某个生成参数JSON必然带有loopEnd字段。
用一份条件明确的换算记录
假设音频恰好2秒,采样率为每秒48,000采样帧,则包含96,000采样帧;这段时长也等于2000毫秒。对于要求秒的参数,2.0、2000和96000不能互换。
这里的采样帧不是把左右声道的样本数量相加;双声道不会仅因声道更多就把同一段声音时长变成两倍。数字只是条件算例,不是对Tooliva当前默认导出的规格声明。
解码后的采样率可能已经不同
MDN官方decodeAudioData资料说明,解码得到的AudioBuffer会重采样到AudioContext的采样率。因此,不能默认原文件帧索引可以直接当作新buffer的帧索引。
在理想的、起点和内容时长保持不变的2秒模型中,44,100采样帧每秒对应88,200帧,而不是96,000帧。把旧96,000帧除以新44,100,会得到约2.177秒,这是混用了两份数据的单位关系。
实际结果应读取当前缓冲的属性确认。AudioBuffer.duration文档使用秒表示PCM数据时长,不需要从WAV磁盘字节数倒猜。若还裁剪或改速,旧时间标记也需重新核对,单纯换单位不能覆盖所有变化。
先验收边界,再听循环接缝
- 记录原文件、解码后buffer及其真实采样率和时长。
- 写出循环起止值和单位,以及是否实际启用循环。
- 确认起止针对当前buffer,而非另一变体或旧导出。
- 按实际播放速度检查返回位置,再单独听是否有空白、突变或不自然接缝。
边界值正确不保证声音本身无缝;本文没有执行实际浏览器音频测试,也不提供能修复所有接缝的一组常量。
在音效工具保留本次实际变体与导出文件,再交给项目集成人员核对循环配置。若问题是文件大小而非位置,可另看WAV体积与采样率、声道,不要混用两个验收目标。
推荐使用本站工具

AI Game SFX Generator: A Practical Guide for Indie Game Developers
Learn how an AI game SFX generator helps indie developers create fast, usable sound effects for UI, coins, weapons, magic, horror, retro games, and rapid prototypes.

AI SFX Generator vs Sound Library: Which Is Better for Game Audio?
Compare AI SFX generators and traditional sound libraries for indie game audio. Learn when to generate custom effects, when to use libraries, and how to combine both workflows.

Best Sound Effects to Create First for an Indie Game Prototype
A practical checklist of the most important game sound effects indie developers should create first, including UI clicks, pickups, hits, rewards, errors, transitions, and completion cues.
