From be89684f3ccc06f56b69bc5c1d54a217b54fcfa2 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 11 Feb 2020 01:01:10 -0800 Subject: [PATCH] Update the makemhr utility and default HRTF --- hrtf/Default HRTF.mhr | Bin 80354 -> 80353 bytes utils/makemhr/makemhr.cpp | 30 +++++++++++++----------------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/hrtf/Default HRTF.mhr b/hrtf/Default HRTF.mhr index 44beb06eac90b9ced67faca0bebdf35aae7000db..68e5e7a85654cb38af0411f15521c024b72ec8aa 100644 GIT binary patch delta 861 zcmX|=Sx;I~6onBPL=cA}QXEiZyj(7$Ob#d@Ad?8l|4VxoO(`qH#9 zO>Ir8wy{b3gWA8~ALzN-c;5FqYkh0)zYnB84+U-CNxN{#J~Ksf38-PQJ9hjB#^ zEQh5+{wQyhuh!d~Zm-Ylau_F6a!4!`j0=Qf2$`LC2g7kRxsq6oM?#AZ>x9}cWz=bT zBO;MVELEr{jMKhQbTysJ7q_?bTcyHAb}bPN`VCr@%d=p&PIEaTsT6`>rE$t^b-2-V zZgXp=Qa!>NC$A5xSmWrhQr_CkWm2d~uTdn?SU9-k>+kE8!!RsI6slRP-Q`;f#}b+K zLb*~sZtfm@yu3U=Yn?P|_-H<7x6GLQ?sOs^333NmeLdaGE(Sv)g<7XcdU;W+S8+}W=+TNmGN?(XZggS~QbBb!2F%S+ycdCSZbLm<;ZA+-~U zZEZwi``|E-F91YU3m$(6NMHa&X|H-*DDT&>*6sb9#<<*hN928@KQ|% z+|gq$5(&d~M)^XC%#J%klbKv$8|T|9?H<(XpRTXJwNA04!@cdoIwQu2(G;NW_M4YPy)#T?7(tV7mA{(9B>qGWOAFE?@H-n9wdq_eNa^#^td4SuC8yOYSg? zZ{QT90&8foyS)BD&|#mqm?y1flTIa<3dcqUIc(4+nM|S5=*%A8xQN9W0xf7QI)ed$ vWoiX1;j&+JGiX$R81zJPLSnMcGAvx&_o_bPxUQg4!))13h=Z zR+DR4vMkQ?UjDqAe_zeu>$mUEUtT^we*U%F89)5rzVY*Eu{rlVkGrnpIBp=KIH8F} z;Ol=~*X5ocM#(YD@&cbcJEn0I_(BR1I5u}V=Y9|fnI5yeEUUU{@U5$|peI2CvM7>_ z;W;P)7eWJ1)^*c%YEk{rb$ze8wy8Br0z=qinp&0#Zvgpl5XT853Q_>BZ`;%9VH}5E zX=qhOQ7F@-AgIlNG!Gap=?5Yv|509$$)Z$!)1K5cjnlMDs=GU}xpAEQ_&~iOO6R~#c z2Xsso{m-N;N)oiJYev)fWr4**L+~SX&tS^?va0I)rhEgZg6ZTA`{il`mJX(_CV7*o zDKSL_@!NLvdKkl!X(#|xu^7_U*M(+d99<}Bm!#y_He)(7$!Hym0p$mugb=te@`I}} c*NSQ7WXIH(qu+;Uv#j3-kAiv}yjZ6F506hnWB>pF diff --git a/utils/makemhr/makemhr.cpp b/utils/makemhr/makemhr.cpp index a7802d8b..c4b55d23 100644 --- a/utils/makemhr/makemhr.cpp +++ b/utils/makemhr/makemhr.cpp @@ -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(hData->mSampleType), fp, filename)) - return 0; if(!WriteBin4(1, static_cast(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(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(std::min(std::round(azd.mDelays[0]), MAX_HRTD)); - if(!WriteBin4(1, v, fp, filename)) - return 0; + auto v = static_cast(std::round(azd.mDelays[0]*DelayPrecScale)); + if(!WriteBin4(1, v, fp, filename)) return 0; if(hData->mChannelType == CT_STEREO) { - v = static_cast(std::min(std::round(azd.mDelays[1]), MAX_HRTD)); - if(!WriteBin4(1, v, fp, filename)) - return 0; + v = static_cast(std::round(azd.mDelays[1]*DelayPrecScale)); + if(!WriteBin4(1, v, fp, filename)) return 0; } } }