MCPcopy Create free account
hub / github.com/LabSound/LabSound / createByInterpolatingSlices

Method createByInterpolatingSlices

src/internal/src/HRTFPanner.cpp:380–407  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

378}
379
380std::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
409void HRTFElevation::getKernelsFromAzimuth(double azimuthBlend, unsigned azimuthIndex, HRTFKernel *& kernelL, HRTFKernel *& kernelR, double & frameDelayL, double & frameDelayR)
410{

Callers

nothing calls this directly

Calls 5

MakeInterpolatedKernelFunction · 0.85
kernelListLMethod · 0.80
kernelListRMethod · 0.80
getMethod · 0.80
elevationAngleMethod · 0.80

Tested by

no test coverage detected