В настоящее время я разрабатываю приложение, в котором кадры аудиосэмплов обрабатываются с помощью следующего обратного вызова.
void Eav07AudioProcessor::processBlock (AudioSampleBuffer& buffer)
{
for (int channel = 0; channel < getNumInputChannels(); ++channel)
{
float* channelData = buffer.getSampleData (channel);
// ..do something to the data...
DoSomeHeavyweightDSPon(&channelData[0]); // in the header, DoSomeHeavyweightDSPon(double data[somebignumber])
}
}
Функция, которая будет находиться вместо процесса усиления, указанного выше, ожидает, что channelData будет иметь двойную точность.Параметр channelData имеет точность с плавающей точкой.Нужно ли как-то приводить channelData из float в double, а затем из double в float после обработки, или мне не хватает трюка.
Если необходимо явное преобразование, каков наиболее эффективный способ сделать это, учитывая, что этот метод вызывается 100 с раз в секунду.