将未签名的char音频转换为short

时间:2018-07-21 05:34:34

标签: c++ c audio signal-processing

尝试将unsigned char转换为缩写。数据是音频。我的系统是Little Endian。我正在做的是这样:

    short buf1[audio_size / 2];
    for(size_t i = 0; i < audio_size; i += 2) {
        if(i > audio_size) {
            break;
        }

        if(i + 1 > audio_size) {
            buf1[i] = audio_data[i] << 8;
        } else {
            buf1[i] = audio_data[i] << 8|audio_data[i + 1];
        }
    }

结果是音频不良,并且EXC_BAD_ACCESS处的buf1[i] = info.data[i] << 8|info.data[i + 1];

更新

音频采样率为8000。1通道。 16位PCMU mulaw。

1 个答案:

答案 0 :(得分:2)

缓冲区的大小为audio_size / 2,但是您将其索引到audio_size-1索引,因此会遇到缓冲区溢出。

您应该使用i/2而不是i作为索引。

此外,此循环中的另一个错误是

if(i + 1 > audio_size)

应替换为

if(i + 1 >= audio_size)

这是缓冲区溢出的另一个原因,但是这次是在另一个(源)缓冲区中