Update the makemhr utility and default HRTF

This commit is contained in:
Chris Robinson
2020-02-11 01:01:10 -08:00
parent 1d91e282c8
commit be89684f3c
2 changed files with 13 additions and 17 deletions
Binary file not shown.
+13 -17
View File
@@ -147,8 +147,8 @@ enum HeadModelT {
#define MAX_HRTD (63.0)
// The OpenAL Soft HRTF format marker. It stands for minimum-phase head
// response protocol 02.
#define MHR_FORMAT ("MinPHR02")
// response protocol 03.
#define MHR_FORMAT ("MinPHR03")
/* Channel index enums. Mono uses LeftChannel only. */
enum ChannelIndex : uint {
@@ -450,15 +450,13 @@ static int StoreMhr(const HrirDataT *hData, const char *filename)
return 0;
if(!WriteBin4(4, hData->mIrRate, fp, filename))
return 0;
if(!WriteBin4(1, static_cast<uint32_t>(hData->mSampleType), fp, filename))
return 0;
if(!WriteBin4(1, static_cast<uint32_t>(hData->mChannelType), fp, filename))
return 0;
if(!WriteBin4(1, hData->mIrPoints, fp, filename))
return 0;
if(!WriteBin4(1, hData->mFdCount, fp, filename))
return 0;
for(fi = 0;fi < hData->mFdCount;fi++)
for(fi = hData->mFdCount-1;fi < hData->mFdCount;fi--)
{
auto fdist = static_cast<uint32_t>(std::round(1000.0 * hData->mFds[fi].mDistance));
if(!WriteBin4(2, fdist, fp, filename))
@@ -472,12 +470,10 @@ static int StoreMhr(const HrirDataT *hData, const char *filename)
}
}
for(fi = 0;fi < hData->mFdCount;fi++)
for(fi = hData->mFdCount-1;fi < hData->mFdCount;fi--)
{
const double scale{(hData->mSampleType == ST_S16) ? 32767.0 :
((hData->mSampleType == ST_S24) ? 8388607.0 : 0.0)};
const uint bps{(hData->mSampleType == ST_S16) ? 2u :
((hData->mSampleType == ST_S24) ? 3u : 0u)};
constexpr double scale{8388607.0};
constexpr uint bps{3u};
for(ei = 0;ei < hData->mFds[fi].mEvCount;ei++)
{
@@ -498,22 +494,22 @@ static int StoreMhr(const HrirDataT *hData, const char *filename)
}
}
}
for(fi = 0;fi < hData->mFdCount;fi++)
for(fi = hData->mFdCount-1;fi < hData->mFdCount;fi--)
{
/* Delay storage has 2 bits of extra precision. */
constexpr double DelayPrecScale{4.0};
for(ei = 0;ei < hData->mFds[fi].mEvCount;ei++)
{
for(ai = 0;ai < hData->mFds[fi].mEvs[ei].mAzCount;ai++)
{
const HrirAzT &azd = hData->mFds[fi].mEvs[ei].mAzs[ai];
auto v = static_cast<uint>(std::min(std::round(azd.mDelays[0]), MAX_HRTD));
if(!WriteBin4(1, v, fp, filename))
return 0;
auto v = static_cast<uint>(std::round(azd.mDelays[0]*DelayPrecScale));
if(!WriteBin4(1, v, fp, filename)) return 0;
if(hData->mChannelType == CT_STEREO)
{
v = static_cast<uint>(std::min(std::round(azd.mDelays[1]), MAX_HRTD));
if(!WriteBin4(1, v, fp, filename))
return 0;
v = static_cast<uint>(std::round(azd.mDelays[1]*DelayPrecScale));
if(!WriteBin4(1, v, fp, filename)) return 0;
}
}
}