gpt4 book ai didi

ios - 将带符号的 16 位 PCM 样本转换为无符号的 8 位 PCM 样本时进行裁剪

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:04:11 27 4
gpt4 key购买 nike

我已将已签名的单声道 16 位 PCM 音频样本存储在 SInt16 缓冲区中,我正在尝试将它们转换为存储在 UInt8 缓冲区中的未签名的单声道 8 位 PCM 样本。我编写了以下基本工作代码:

for (int i=0; i < numSamples; i++) { 
SInt8 tempSigned8Bit = signed16BitBuffer[i]/127; // In 2 passes
unsigned8BitBuffer[i] = tempSigned8Bit + 127; // for clarity
}

但是,我可以在生成的音频中听到最大幅度的削波,或者至少这是我对失真发生位置的印象。这是重新量化的产物,还是我需要像这个关于类似转换但没有任何符号转换的问题中所描述的那样包含某种钳位:

Convert 16 bit pcm to 8 bit

按位优化是不必要的,但我当然不会拒绝它们。

最佳答案

对于较大的值,这将失败,因为您需要除以 256 而不是 127。此外,偏移量需要为 128,而不是 127。

for (int i = 0; i < numSamples; i++) { 
SInt8 tempSigned8Bit = signed16BitBuffer[i] / 256;
unsigned8BitBuffer[i] = tempSigned8Bit + 128;
}

+/- 满刻度和零的转换如下所示:

Signed    Divide    Add
16 bit by 256 128
sample

32767 -> 127 -> 255 ; Full scale +
0 -> 0 -> 128 ; 0
-32768 -> -128 -> 0 ; Full scale -

关于ios - 将带符号的 16 位 PCM 样本转换为无符号的 8 位 PCM 样本时进行裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11617791/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com