| 378 | } |
| 379 | |
| 380 | std::unique_ptr<HRTFElevation> HRTFElevation::createByInterpolatingSlices(HRTFDatabaseInfo * info, HRTFElevation * hrtfElevation1, HRTFElevation * hrtfElevation2, float x) |
| 381 | { |
| 382 | ASSERT(hrtfElevation1 && hrtfElevation2); |
| 383 | if (!hrtfElevation1 || !hrtfElevation2) |
| 384 | return nullptr; |
| 385 | |
| 386 | ASSERT(x >= 0.0 && x < 1.0); |
| 387 | |
| 388 | std::unique_ptr<HRTFKernelList> kernelListL = std::unique_ptr<HRTFKernelList>(new HRTFKernelList(NumberOfTotalAzimuths)); |
| 389 | std::unique_ptr<HRTFKernelList> kernelListR = std::unique_ptr<HRTFKernelList>(new HRTFKernelList(NumberOfTotalAzimuths)); |
| 390 | |
| 391 | HRTFKernelList * kernelListL1 = hrtfElevation1->kernelListL(); |
| 392 | HRTFKernelList * kernelListR1 = hrtfElevation1->kernelListR(); |
| 393 | HRTFKernelList * kernelListL2 = hrtfElevation2->kernelListL(); |
| 394 | HRTFKernelList * kernelListR2 = hrtfElevation2->kernelListR(); |
| 395 | |
| 396 | // Interpolate kernels of corresponding azimuths of the two elevations. |
| 397 | for (uint32_t i = 0; i < NumberOfTotalAzimuths; ++i) |
| 398 | { |
| 399 | (*kernelListL)[i] = MakeInterpolatedKernel(kernelListL1->at(i).get(), kernelListL2->at(i).get(), x); |
| 400 | (*kernelListR)[i] = MakeInterpolatedKernel(kernelListR1->at(i).get(), kernelListR2->at(i).get(), x); |
| 401 | } |
| 402 | |
| 403 | // Interpolate elevation angle. |
| 404 | double angle = (1.0 - x) * hrtfElevation1->elevationAngle() + x * hrtfElevation2->elevationAngle(); |
| 405 | |
| 406 | return std::unique_ptr<HRTFElevation>(new HRTFElevation(info, std::move(kernelListL), std::move(kernelListR), (int) angle)); |
| 407 | } |
| 408 | |
| 409 | void HRTFElevation::getKernelsFromAzimuth(double azimuthBlend, unsigned azimuthIndex, HRTFKernel *& kernelL, HRTFKernel *& kernelR, double & frameDelayL, double & frameDelayR) |
| 410 | { |
nothing calls this directly
no test coverage detected