独立游戏开发效率4 分钟阅读

Web Audio 循环点截错位置?先统一秒、毫秒与采样帧

把文件时间、采样帧和解码后buffer分开记录,再设置循环位置,不从文件大小猜播放范围。

Web Audio 循环点截错位置?先统一秒、毫秒与采样帧

封面为 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体积与采样率、声道,不要混用两个验收目标。

推荐使用本站工具

准备好实践「Web Audio 循环点截错位置?先统一秒、毫秒与采样帧」了吗?

使用本站在线工具,将教程中的步骤立刻应用到你的独立游戏项目。