Я сейчас работаю на iPhone с Аудиоустройства и я , одновременно играющий на четырех дорожках. Для улучшить производительность моей установки, я подумал, что было бы неплохо свести к минимуму количество аудио-единиц/потоков, используя , смешивая четыре трека в одном.Эффективный способ создания программного аудио Mixdown
С помощью следующего кода я обрабатываю следующий буфер, добавляя образцы четырех дорожек, сохраняя их в диапазоне SInt16 и добавляя их во временный буфер, который позже будет скопирован в ioData.mBuffers аудиоустройства.
Хотя это работает, У меня нет впечатления, что это самый эффективный способ сделать это.
SInt16* buffer = bufferToWriteTo;
int reads = bufferSize/sizeof(SInt16);
SInt16** files = circularBuffer->files;
float tempValue;
SInt16 values[reads];
int k,j;
int numFiles=4;
for (k=0; k<reads; k++)
{
tempValue=0.f;
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;
values[k] = (SInt16) tempValue;
values[k] += values[k] << 16;
packetNumber++;
if (packetNumber >= totalPackets) packetNumber=0;
}
memcpy(buffer,values,bufferSize);
Любые идеи или указатели, чтобы ускорить этот процесс? Я прав?
Спасибо! Эти советы помогли. :) – Kriem
memcopy, определенно. :) – Kriem
Итак, как выглядел окончательный оптимизированный код микширования? – coneybeare