如何基于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
相关产品推荐
相关产品推荐

