short v = 0;
for (unsigned int sample = 0; sample < length; sample++)
{
v = (short)(inbuffer[sample * 2] * 32767.0f);
// The problem is not here-------^^^^^^^^^^^
fwrite(&v, 2, 1, file);
// it is here ^^^^^^^
}
Типичный Mac (тег target-c, или мы говорим здесь об iphone?) Может делать миллиардов умножений с плавающей точкой в секунду. fwrite, однако, является библиотечным вызовом, который следует некоторым косвенным указаниям, чтобы записать свои данные в некоторый буфер и, возможно, очистить его. Лучше заполнить свой собственный буфер в пакете:
short v[SZ] = 0;
// make sure SZ is always > length, or allocate a working buffer on the heap.
for (unsigned int sample = 0; sample < length; sample++)
{
v[sample] = (short)(inbuffer[sample * 2] * 32767.0f);
}
fwrite(v,sizeof(v),1,file);