【发布时间】:2018-07-21 05:34:33
【问题描述】:
试图将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_ACCESSbuf1[i] = info.data[i] << 8|info.data[i + 1];
更新:
音频采样率为 8000。1 通道。 16bit PCMU mulaw。
【问题讨论】:
-
缓冲区的大小为
audio_size / 2,但您将其索引到audio_size-1索引,因此您可能会遇到缓冲区溢出。我怀疑你应该使用i/2作为索引而不是i。 -
我将上面的“可能”升级为“保证”。
-
@Yunnosch 是的 :) 我说的可能只是以防 audio_size 为 0 或 1 ...
-
为什么是垃圾标签?它是哪种语言,C 还是 C++? minimal reproducible example 在哪里?输入、输出、预期结果?阅读How to Ask,调试请求应在问题中包含所有必需的信息。哦,你不转换任何类型。
-
你应该使用
unsigned short而不是short
标签: c++ c audio signal-processing