0

我正在尝试将 HTML5 音频上下文(例如buffer.getChannelData(0)...)的 PCM 输出转换为“FLAC__stream_encoder_process_interleaved”所需的 PCM 数据

奇怪的是 FLAC 需要数据作为 int32 缓冲区(const FLAC__int32 buffer[])但是 audiocontext 的输出是标准化的 float32 数组。我不确定如何将音频上下文的规范化缓冲区转换为 FLAC 所需的格式。

关联

有人可以解释为什么 FLAC 需要 int32 中的缓冲区而不是普通的 float32 数组吗?

4

1 回答 1

0

出色地。前段时间我写了一个 C# FLAC 解码器,因为文档没有涵盖所有内容,我不得不阅读 libFlac 代码的一些部分。Int32 经常在内部使用。除了性能提升之外,我不知道有什么好的理由。int32 ist 比使用浮点数更快。但是,如果您有 ieeefloat 样本,您可以简单地将它们乘以 [(2^BitsPerSample) / 2] 以获得您的整数。为什么输出是 float32。我不知道。总而言之,该库的代码很奇怪,而且通常很难理解开发人员的概念。

于 2013-12-02T17:41:38.713 回答