【发布时间】:2022-07-11 16:10:25
【问题描述】:
我正在使用flutter_sound 包从麦克风录制音频。它在Uint8List 的流中提供数据。那么如何从中计算振幅。我找到了很多其他语言的答案,但我很难将其解释为dart。
供参考,
Reading in a WAV file and calculating RMS
how can i translate byte[] buffer to amplitude level
如果有人可以将其解释为飞镖,以便我可以计算振幅
【问题讨论】:
-
您的音频是什么字节格式和编解码器?看起来您可以控制
startRecorder中的编解码器,例如codec: Codec.pcm16。选择 pcm16 或 float32,然后你得到的每一块字节,用ByteData.asXXX解释为短裤或浮点数。然后根据需要执行您的 RMS。我建议使用 float32 只是因为这样你会得到介于 -1 和 +1 之间的数字,并且不需要自己规范化。 -
@RichardHeap 我有 pcm16 编解码器。正如你所说,我做了
data!.buffer.asByteData().getFloat32()但 getFloat32() 需要byteOffset作为参数,所以我应该传递什么? -
第一个是 0,第二个是 4,然后是 8、12、16 等
-
但使用api.flutter.dev/flutter/dart-typed_data/ByteBuffer/…将缓冲区转换为浮点列表可能更简单
-
请注意,您也需要先将编解码器切换为float32