diff options
author | Chris Robinson <chris.kcat@gmail.com> | 2019-09-23 18:37:36 -0700 |
---|---|---|
committer | Chris Robinson <chris.kcat@gmail.com> | 2019-09-23 18:37:36 -0700 |
commit | e01b32f8e02730b9e4474bbfcdbf2b88fc6c16f5 (patch) | |
tree | f2fb99cd581703450f722e41a9f896bb55cd0b8e /utils/makemhr/loadsofa.cpp | |
parent | 34a0fad6cd2513f640c58dcff16817d00cf00456 (diff) |
Use istream for makemhr input
Diffstat (limited to 'utils/makemhr/loadsofa.cpp')
-rw-r--r-- | utils/makemhr/loadsofa.cpp | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/utils/makemhr/loadsofa.cpp b/utils/makemhr/loadsofa.cpp index 219eb558..e0c08349 100644 --- a/utils/makemhr/loadsofa.cpp +++ b/utils/makemhr/loadsofa.cpp @@ -21,13 +21,20 @@ * Or visit: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ +#include "loadsofa.h" + +#include <algorithm> +#include <cmath> +#include <cstdio> +#include <iterator> #include <memory> #include <numeric> -#include <algorithm> +#include <string> +#include <vector> -#include "mysofa.h" +#include "makemhr.h" -#include "loadsofa.h" +#include "mysofa.h" static const char *SofaErrorStr(int err) @@ -216,10 +223,11 @@ static bool PrepareLayout(const uint m, const float *xyzs, HrirDataT *hData) { float ev{90.0f + elems[ei]}; float eif{std::round(ev / step)}; + const uint ei_start{static_cast<uint>(eif)}; - if(std::fabs(eif - static_cast<uint>(eif)) < (0.1f / step)) + if(std::fabs(eif - static_cast<float>(ei_start)) < (0.1f/step)) { - evStart = static_cast<uint>(eif); + evStart = ei_start; break; } } @@ -428,8 +436,8 @@ static double CalcHrirOnset(const uint rate, const uint n, std::vector<double> & } double mag{std::accumulate(upsampled.cbegin(), upsampled.cend(), double{0.0}, - [](const double mag, const double sample) -> double - { return std::max(mag, std::abs(sample)); })}; + [](const double magnitude, const double sample) -> double + { return std::max(magnitude, std::abs(sample)); })}; mag *= 0.15; auto iter = std::find_if(upsampled.cbegin(), upsampled.cend(), @@ -487,14 +495,14 @@ static bool LoadResponses(MYSOFA_HRTF *sofaHrtf, HrirDataT *hData) if(field == hData->mFds.cend()) continue; - double ef{(90.0+aer[1]) * (field->mEvCount-1) / 180.0}; + double ef{(90.0+aer[1]) / 180.0 * (field->mEvCount-1)}; auto ei = static_cast<int>(std::round(ef)); - ef = (ef-ei) * 180.0f / (field->mEvCount-1); + ef = (ef-ei) * 180.0 / (field->mEvCount-1); if(std::abs(ef) >= 0.1) continue; - double af{aer[0] * field->mEvs[ei].mAzCount / 360.0f}; + double af{aer[0] / 360.0 * field->mEvs[ei].mAzCount}; auto ai = static_cast<int>(std::round(af)); - af = (af-ai) * 360.0f / field->mEvs[ei].mAzCount; + af = (af-ai) * 360.0 / field->mEvs[ei].mAzCount; ai %= field->mEvs[ei].mAzCount; if(std::abs(af) >= 0.1) continue; @@ -541,14 +549,9 @@ bool LoadSofaFile(const char *filename, const uint fftSize, const uint truncSize return false; } + /* NOTE: Some valid SOFA files are failing this check. */ err = mysofa_check(sofaHrtf.get()); if(err != MYSOFA_OK) -/* NOTE: Some valid SOFA files are failing this check. - { - fprintf(stdout, "Error: Malformed source file '%s' (%s).\n", filename, SofaErrorStr(err)); - return false; - } -*/ fprintf(stderr, "Warning: Supposedly malformed source file '%s' (%s).\n", filename, SofaErrorStr(err)); @@ -589,8 +592,8 @@ bool LoadSofaFile(const char *filename, const uint fftSize, const uint truncSize /* Assume a default head radius of 9cm. */ hData->mRadius = 0.09; - if(!PrepareSampleRate(sofaHrtf.get(), hData) || !PrepareDelay(sofaHrtf.get(), hData) || - !CheckIrData(sofaHrtf.get())) + if(!PrepareSampleRate(sofaHrtf.get(), hData) || !PrepareDelay(sofaHrtf.get(), hData) + || !CheckIrData(sofaHrtf.get())) return false; if(!PrepareLayout(sofaHrtf->M, sofaHrtf->SourcePosition.values, hData)) return false; |