【发布时间】:2021-09-14 20:52:59
【问题描述】:
我正在尝试将 Float32 转换为 Int16。但到目前为止,还没有效果。因为输出音频会产生大量剪辑(因此,音频输出非常差)。我正在使用这个功能:
function convertoFloat32ToInt16(buffer) {
var l = buffer.length; //Buffer
var buf = new Int16Array(l/3);
while (l--) {
if (l==-1) break;
if (buffer[l]*0xFFFF > 32767)
buf[l] = 32767;
elseif (buffer[l]*0xFFFF < -32768)
buf[l] = -32768;
else
buf[l] = buffer[l]*0xFFFF;
}
return buf.buffer;
}
如果我之前实现了gainNode(),那么剪辑效果就不太明显了。但并不是一个可取的方式,因为目的是在每个麦克风中都有效。在这个 Matlab 图中可以看到剪裁效果:
【问题讨论】:
-
你需要展示更多你在做什么。此外,WebAudio 期望数据在 -1 到 1 的范围内,所以我不明白您为什么要将浮点样本转换为 int16。
-
我想这可能与 PCM 需要 Int16 的事实有关。
-
16 位 PCM (LINEAR16) 通常用作音频处理管道(语音转文本、语音活动检测、扬声器标签等)的输入。