You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于sampleRate等参数计算Dart合成器的声音播放时长?

如何计算DartMeltySoundFont合成音频的播放时长?

核心计算公式

播放时长的计算逻辑非常直接,公式如下:

播放时长(秒) = (块数量 × 块大小) ÷ 采样率

参数说明

  • 采样率(sampleRate):每秒输出的音频样本总数,你的代码中设置为44100(即每秒44100个音频样本)
  • 块大小(blockSize):每个合成块包含的样本数,对应你的980
  • 块数量(blockCount):你生成的音频块总个数

结合你的代码实例计算

在你的_getMoreSound()方法中,blockCount = sampleRate ~/ blockSize,代入数值得到44100 // 980 = 45块。

把参数代入公式:

(45 × 980) ÷ 44100 = 44100 ÷ 44100 = 1秒

这和你创建的left/right缓冲区长度(sampleRate个样本,对应1秒音频)完全匹配。

额外说明

  • 如果你在_playPCMF32()中循环feed同一个dataBlock,总播放时长会是单次块时长 × 循环次数。单次块时长为blockSize / sampleRate = 980/44100 ≈ 0.0222秒。
  • 注意区分「合成的总音频时长」和「实际有音符的时长」:你的MIDI音符从第15块到第45块,实际发声时长为(45-15)×980/44100 ≈ 0.667秒,但总音频时长还是1秒,剩余部分为静音。

内容的提问来源于stack exchange,提问作者lukassteiner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:50:36