尝试将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。
答案 0 :(得分:2)
缓冲区的大小为audio_size / 2
,但是您将其索引到audio_size-1
索引,因此会遇到缓冲区溢出。
您应该使用i/2
而不是i
作为索引。
此外,此循环中的另一个错误是
if(i + 1 > audio_size)
应替换为
if(i + 1 >= audio_size)
这是缓冲区溢出的另一个原因,但是这次是在另一个(源)缓冲区中