Самое большое улучшение, которое вы можете получить из этого кода, - это не использовать арифметику с плавающей запятой. Хотя арифметика сама по себе быстрая, преобразования, которые происходят во вложенных циклах, занимают много времени, особенно на процессоре ARM в iPhone. Вы можете достичь точно таких же результатов, используя 'SInt32' вместо 'float' для переменной 'tempValue'.
Также посмотрите, можете ли вы избавиться от memcpy () в последней строке: возможно, вы можете создать «буфер» напрямую, без использования временного буфера под названием «значения». Это сохраняет одну копию, что было бы значительным улучшением для такой функции.
Другие примечания: последние две строки цикла, вероятно, принадлежат за пределами цикла, и тело вложенного цикла должно использовать «k» в качестве второго индекса вместо «packetNumber», но я не уверен в этом логика.
И последнее замечание: вы подавляете пики полученного звука. Хотя это кажется хорошей идеей, она будет звучать довольно грубо. Вы, вероятно, хотите уменьшить результат, а не обрезать его. Вот так: вместо этого кода
for (j=0; j<numFiles; j++)
{
tempValue += files[j][packetNumber];
}
if (tempValue > 32767.f) tempValue = 32767.f;
else if (tempValue < -32768.f) tempValue =- 32768.f;
Вы, вероятно, хотите что-то вроде этого:
for (j=0; j<numFiles; j++)
{
tempValue += files[j][packetNumber] / numFiles;
}
Изменить: и, пожалуйста, не забудьте измерить производительность до и после, чтобы увидеть, какое из улучшений дало наибольшее влияние. Это лучший способ узнать производительность: испытание и измерение