Skip to content
......@@ -29,6 +29,8 @@
the United Nations Convention on Contracts on the International Sales of Goods.
 
*******************************************************************************************************/
/* Generated on 08-Jan-2024 with Matlab version 9.3.0.948333 (R2017b) Update 9 by MUXE6256 on PCWIN64 */
 
/* clang-format off */
 
......@@ -2485,7 +2487,6 @@ const uint32_t defaultHRIR_rom_AlphaL48[470 * 128] = {
0xb87a13c8,0xb87bff27,0xb8835a0d,0xb88bcc5e,0xb8910bb6,0xb891cf15,0xb8a7fe16,0xb8ba40c0,0xb8c99143,0xb8db780b,0xb8e782ec,0xb8f810f7,0xb8ebd74c,0xb8e70998,0xb8e26f2a,0xb8da7c78,0xb8d9ecc7,0xb8bb0c89,0xb8f58fd7,0xb8e3b27e,0xb91a32be,0x384aca54,0x37f2b6e4,0x37ef5aef,0x37f4dd47,
0x37f3b6bd,0x37f3aa22,0x37f3b2e3,0x37f4d916,0x37ef85b1,0x37f3031c,0x38458b01,0xb90eed11,0xb8bfe5eb,0xb8d3ec31,
};
const uint32_t defaultHRIR_rom_AlphaR48[470 * 128] = {
0x3e094595,0x3e0070b5,0x3e249d6a,0x3cdebe05,0xbcb8b8ac,0xbd743498,0x3d767ab7,0xbc7e793e,0xbd7b74ec,0xbd83ebe3,0xbd77e4f6,0xbd3b83f5,0xbd7150b2,0xbd7e0636,0xbd7119ac,0xbc7c942a,0x3d352f28,0xbd848755,0xbc870462,0x3caef063,0x3e15c18c,0x3dee7ab7,0x3dfce600,0x3e00876d,0x3e01163c,
0x3e024a33,0x3e035f7f,0x3e04b5f7,0x3e06feee,0x3e09c88a,0x3e0d20e6,0x3e10371e,0x3e151794,0x3e12d853,0x3e1028ae,0x3e0987f9,0x3e0931f2,0x3e20e8e2,0x3e0b90d0,0xbd02dc11,0x3dd27b26,0x3d122337,0x3d2c1d55,0x3d888631,0x3d6ef13d,0x3db299a0,0x3d78d706,0x3d017832,0x3d617605,0x3d82a0c4,
......@@ -4895,7 +4896,124 @@ const uint32_t defaultHRIR_rom_AlphaR48[470 * 128] = {
0xb8adfea5,0xb8bfdd3e,0xb90eebca,0x38458914,0x37f30681,0x37ef876d,0x37f4dafc,0x37f3b4ac,0x37f3acab,0x37f3b745,0x37f4e1d2,0x37ef5aac,0x37f2af15,0x384aeb24,0xb91a4941,0xb8e39e44,0xb8f40b4d,0xb8b96003,0xb8d9a8ef,0xb8dab0ba,0xb8e26219,0xb8e70a4b,0xb8ebd981,0xb8f81313,0xb8e780b4,
0xb8db74bf,0xb8c98e54,0xb8ba3e83,0xb8a7f64b,0xb891c20d,0xb890fcbf,0xb88bc3ae,0xb8835e51,0xb87bff26,0xb8d3ede1,
};
const uint32_t defaultHRIR_rom_EL48[HRTF_MODEL_N_SECTIONS * 470] = {
0x3e8fdcf1,0x3e8e2708,0x3ea53482,0x3e7c2de6,0x3e8fe783,0x3e906f77,0x3e9cddeb,0x3ea14109,0x3ea4da3b,0x3e9bbc9a,0x3e96062e,0x3e8f4bf3,0x3e8aaf7d,0x3e86b5df,0x3e8433e5,0x3e813d26,0x3e7d4d8a,0x3e78207d,0x3e742259,0x3e5a5203,0x3e8c3f1f,0x3e7d5e54,0x3e9285e3,0x3ef28ede,0x3e7742e2,
0x3e8ce88c,0x3ed9c917,0x3edf1bd9,0x3eda040b,0x3ebdd7d4,0x3eda97bf,0x3ee14156,0x3ed85779,0x3e90d3f7,0x3e8790ef,0x3eec0412,0x3ea8cd79,0x3ece6925,0x3ec47da1,0x3ebd9a80,0x3ed966e3,0x3ee7df3f,0x3f0a6b43,0x3f150db1,0x3f167f00,0x3f073082,0x3ef21552,0x3ed4e4bc,0x3ec08701,0x3eb2e282,
0x3eabf3c8,0x3ea35e5b,0x3e9b604e,0x3e951978,0x3e88e34a,0x3e799760,0x3e7556b2,0x3e7c70c3,0x3e18ad46,0x3e2aa56b,0x3e03b4c9,0x3e010068,0x3e14601a,0x3e1318de,0x3e2b1b01,0x3e22f5da,0x3e291c0d,0x3e27ed4b,0x3e0ebece,0x3e26bb84,0x3e2ae4c7,0x3e45e480,0x3e731040,0x3e96dc2e,0x3ebbe576,
0x3f0df63b,0x3f185058,0x3f2f4f39,0x3f5f633e,0x3f770181,0x3f80938f,0x3f5f3a68,0x3f419c66,0x3f23635f,0x3f0bb291,0x3ef3b0d2,0x3edf117f,0x3ec653ea,0x3eb1554c,0x3ea3754f,0x3e819f11,0x3e7536cf,0x3e15b0af,0x3e0be51a,0x3dc6f788,0x3dba046c,0x3d9e30bd,0x3d97db1f,0x3d88cc62,0x3d8ff480,
0x3da08fc8,0x3db705ed,0x3d81e369,0x3da1e8fb,0x3da2c5dc,0x3dc265af,0x3de656e6,0x3e256d3a,0x3e598bb7,0x3eaef2c2,0x3efee21b,0x3f444555,0x3f6438ad,0x3f8c4747,0x3fb8e107,0x3fd6d06a,0x3fdb249e,0x3fb0c966,0x3f8b3bda,0x3f4cb436,0x3f1ca18e,0x3f030e80,0x3ef1874c,0x3ed4119f,0x3eb9a223,
0x3ea9d5bf,0x3e8296f9,0x3e4eb3e6,0x3df4d90d,0x3db0650b,0x3d6f6077,0x3d44b0ec,0x3d05342e,0x3cd8c1a9,0x3cbf119a,0x3cd12ebf,0x3ce83eac,0x3d049cbf,0x3cc6af7a,0x3ccb3b17,0x3d06da74,0x3d4e2e2c,0x3dc31338,0x3de90336,0x3e3e4014,0x3f47f649,0x3fa1245a,0x3fd3acac,0x3fde77f6,0x3fec2853,
0x3fe593de,0x3fe96050,0x3ffa4582,0x3ffd2d34,0x40041b8b,0x400541c7,0x4001e8bd,0x3fed6164,0x3fcee5df,0x3fa4929d,0x3f7b4813,0x3f3f3f70,0x3eeb8e5d,0x3ea84661,0x3e54eea5,0x3e126301,0x3da32fb1,0x3d661c88,0x3d17185e,0x3cf9cc3a,0x3ccfa3dd,0x3d03dfbc,0x3d080ea1,0x3d0bfb8e,0x3d0e3e9b,
0x3d3a2b8b,0x3d97d3d2,0x3ddf9f5f,0x3e2cbfe3,0x3e6b3c91,0x3ee1cf1c,0x3f4a2014,0x3f7890ed,0x4024d50d,0x402f3e01,0x402ce8fa,0x40102e20,0x4011227a,0x401651ff,0x400d2f17,0x400900d8,0x4008f280,0x40068f8f,0x400126da,0x3ff0457b,0x3fb996c6,0x3f8b9e2b,0x3f6068b5,0x3f0be8a0,0x3ed5acad,
0x3e68eec9,0x3e45b6ba,0x3de819c5,0x3da1edf5,0x3d4288a4,0x3d151188,0x3cf527fa,0x3d104a92,0x3d26fca8,0x3d4f20b7,0x3d409322,0x3d59f3cc,0x3d96abf0,0x3dc8860a,0x3e1553b6,0x3e6dc06e,0x3ec4a74c,0x3f8aa8eb,0x3ff8b3b7,0x40808960,0x40768ef2,0x409c2f8a,0x40479ce8,0x402a7e54,0x401d47c0,
0x4002cb90,0x4004c608,0x4014c7d7,0x4019a72a,0x40194d70,0x400d24a1,0x3fdbc40b,0x3f9d47d1,0x3f5db62b,0x3f0b1d4b,0x3edaced4,0x3e6bca5e,0x3e48d1e9,0x3e0bff65,0x3e08773c,0x3da209bc,0x3d773fcb,0x3d8e5bdf,0x3d6759bc,0x3d7f6a8d,0x3dd2459a,0x3d67597f,0x3d670b0f,0x3d9e4691,0x3e2b93b2,
0x3e3c39bc,0x3ef6ec2c,0x3ebeb9b8,0x3f9c6287,0x4022ef5e,0x408c4efa,0x407affd6,0x409ec200,0x4039eecc,0x4011e38c,0x400348e9,0x40104faf,0x401ad488,0x4018d5ac,0x400ba5a3,0x3ff9e422,0x3fd0076d,0x3f9f0267,0x3f67bd92,0x3f22bc44,0x3ee99177,0x3ec15245,0x3e814c70,0x3e60c204,0x3e13ed43,
0x3e0522d9,0x3db7be71,0x3d8f5bf4,0x3d7b9b42,0x3d509e3a,0x3d813dc6,0x3e26950d,0x3d9266e3,0x3d7c2af0,0x3da3d63c,0x3dc0eabb,0x3e1be4ed,0x3e63f33b,0x3ebcfd2c,0x3f8167b3,0x3fd3d3d7,0x40306659,0x401bf675,0x401a8567,0x3ff122f5,0x3fdd583c,0x3fdb1405,0x3fcc073d,0x3fd2c5ff,0x3ff30b8a,
0x3fda4516,0x3fbd082e,0x3f95da01,0x3f5828c3,0x3f1eb26d,0x3efe3c4c,0x3ed82cb1,0x3ec62e2e,0x3ea595ff,0x3e7e3104,0x3e3abf3c,0x3e083f7b,0x3ddf0610,0x3dbb6549,0x3d916c99,0x3d857484,0x3d92353e,0x3de1cf37,0x3da3bc9b,0x3db1894f,0x3de51728,0x3e159f1a,0x3e3b3975,0x3e8cd940,0x3f43a2e9,
0x3f728996,0x3f63e8c9,0x3f8fe834,0x3f847337,0x3f88c014,0x3f8e14e8,0x3f901ddb,0x3f9041ac,0x3f896366,0x3f8651af,0x3f7d258b,0x3f5d5741,0x3f43b171,0x3f31f896,0x3f22f711,0x3f0866af,0x3ed8aaea,0x3ebeedb5,0x3eccb109,0x3e907436,0x3e914693,0x3e5a36c3,0x3e4fc7c9,0x3e10dfe3,0x3dcc7c4c,
0x3da9d110,0x3da9eedd,0x3db6a647,0x3dcf2d21,0x3dca4324,0x3dcb20f8,0x3dd76acd,0x3e06e7b1,0x3e3bb953,0x3e6b5484,0x3ec62bb2,0x3ee86498,0x3f0fc5a6,0x3f2f9c4f,0x3f424b8a,0x3f6698b4,0x3f6373a8,0x3f6840c3,0x3f72a08d,0x3f630906,0x3f5a68af,0x3f55591c,0x3f3b8780,0x3f27ffaf,0x3f17a470,
0x3f07f863,0x3ef183ff,0x3ed8fb7a,0x3ec40efc,0x3ec703f3,0x3ea8e717,0x3e9619a0,0x3e752095,0x3e56078a,0x3e3433dd,0x3e309aaf,0x3e1405ea,0x3e1f31a3,0x3e13bc36,0x3e2bd85e,0x3dfc021a,0x3e21b187,0x3e0a6b1d,0x3e3e168b,0x3e6fb306,0x3ea4d703,0x3ebbdecc,0x3f270a8c,0x3f0d26d4,0x3f06397f,
0x3f0e37d9,0x3f15e375,0x3f1ebe39,0x3f2a105e,0x3f388839,0x3f2c28de,0x3f240c2e,0x3f1c30e8,0x3f13f64f,0x3f0d419a,0x3f069127,0x3efe9e31,0x3eeef2d6,0x3ee32051,0x3ed8b094,0x3ecb5a16,0x3ecc8c97,0x3eddab26,0x3e9b86fe,0x3ea60bd0,0x3e9561d3,0x3e8b4715,0x3e989beb,0x3e9aa292,0x3eabb617,
0x3e9c3485,0x3eab1f31,0x3ea563f2,0x3e9045ef,0x3ea3a972,0x3eab5e10,0x3ebc5116,0x3ed778da,0x3eff9a16,0x3f0eb71f,0x3ee81f7d,0x3efbab4a,0x3efbde31,0x3f01c977,0x3f03f32b,0x3f08e4a8,0x3f02f0f5,0x3eff85a1,0x3ef8b9d7,0x3ef3688d,0x3eeea72a,0x3eea1308,0x3ee7d149,0x3ee53e6b,0x3ee1a0fd,
0x3ee018a4,0x3ed18af7,0x3efb74c2,0x3eeb1c8a,0x3f049b81,0x3f478aed,0x3ee67f59,0x3efe4636,0x3f3a7d68,0x3f3fe284,0x3f38520c,0x3f23fc6b,0x3f373f8c,0x3f3a3581,0x3f30c2ac,0x3f020321,0x3ef9539a,0x3f467e18,0x3f0feb90,0x3f144908,0x3adf8add,0x3b0df1fd,0x3b242786,0x3a996c3e,0x3ac23067,
0x3a9f1176,0x3af4e431,0x3b079d6b,0x3b04462f,0x3b026b94,0x3af8da75,0x3ae44ab9,0x3ade9a37,0x3addaed7,0x3ae703d0,0x3aebd63c,0x3aed1c62,0x3ae9c5ff,0x3ae7c60b,0x3ab3c12b,0x3b21ac9d,0x3b0f8df5,0x3b2d6e65,0x3bbf978f,0x3b10cf84,0x3b2344be,0x3ba58e0b,0x3ba90e55,0x3ba64f4e,0x3b89e7dd,
0x3b9f9cf5,0x3ba08754,0x3b93581e,0x3b1dca11,0x3b1aee86,0x3bac3280,0x3b447be1,0x3b3ed8b0,0x3b1c6428,0x3aaadfc6,0x3ab0e467,0x3a81afdb,0x3b362557,0x3b6e5511,0x3b5d5484,0x3b63bb6b,0x3b4f42d5,0x3b355d5a,0x3b25727a,0x3b2575b6,0x3b367edd,0x3b459896,0x3b4bd8a6,0x3b4707cc,0x3b2de5e0,
0x3b160e6a,0x3b17a54d,0x3b1b2369,0x3a758974,0x3aad5fd5,0x3a0f563b,0x3a01c2c5,0x3a6d646f,0x3a74d4fd,0x3abcf1bf,0x3aab9fb4,0x3aaec751,0x3a8cb4ec,0x3a139f23,0x3a38fa3b,0x3a103208,0x3aa0da30,0x3ac86e2b,0x3acb17cd,0x3aceceee,0x3adb66c3,0x3abcf759,0x3a4dd7c9,0x3b9425be,0x3be026a1,
0x3bc6d563,0x3bccb327,0x3bafcd62,0x3b990632,0x3b8577a0,0x3b7f7f61,0x3b91ad64,0x3b93fe92,0x3b94f072,0x3b8fa547,0x3b578dd4,0x3b611530,0x3ac8d399,0x3adba22d,0x3aa82c6c,0x3a919c39,0x3a3cf3e6,0x3a106132,0x39f10c75,0x3a2540a0,0x3a7caf8e,0x3a8d8cf0,0x3a21aa85,0x3a19732f,0x39ce2b41,
0x39b9ca20,0x39e47471,0x3ac44a56,0x3a850aa0,0x3adc8952,0x3ad8c679,0x3a9bdeff,0x3a42023b,0x3a1faf79,0x3bc64b41,0x3c312e95,0x3c1ca5a7,0x3c2150a4,0x3c0ed834,0x3c01b2ba,0x3be50893,0x3be7eaab,0x3c0367e0,0x3c0e4bc3,0x3c109d50,0x3c04c954,0x3bbb500d,0x3b8d8578,0x3b2216bb,0x3b0e65a4,
0x3b040988,0x3b025518,0x3a956c1b,0x3a1e774f,0x39efd82b,0x3a44cdb6,0x3a93a437,0x3ac795ba,0x3a87d769,0x3a4e9efb,0x39d02788,0x3a238e82,0x3a14ad59,0x3b44521b,0x3afa0569,0x3be5f2ca,0x3b9ad9d1,0x3bdd7bc7,0x3bf88636,0x3c2c8b6e,0x3c2370a0,0x3c249cee,0x3c32cceb,0x3c11b00e,0x3be41df7,
0x3bf380ab,0x3bca6f6f,0x3b93a3cb,0x3b1830f5,0x3a9c6add,0x3a9b2d49,0x3b51b41a,0x3b2f2bac,0x3b8e1284,0x3b2dd734,0x3b1f44d4,0x3b054659,0x3af7633a,0x3a8c1489,0x3a474430,0x3a1b5e68,0x3990307f,0x39b3fd94,0x3ab98879,0x3a987feb,0x3ac9a139,0x3acca43b,0x3b017a5e,0x3a92385a,0x3b296a69,
0x3ba4ebd2,0x3bf63ab1,0x3c22552b,0x3b5a90c2,0x3af05a26,0x3bb6ff4e,0x3bbf844d,0x3b8b34c6,0x3b3844b8,0x3aa4b11e,0x3aa5853f,0x3a996349,0x3a55f0ae,0x3a5bb963,0x3a78edce,0x3b0fd64b,0x3b993283,0x3c0ffc2f,0x3b97fad8,0x3b3b1856,0x3a806153,0x3a28ab98,0x39e9389c,0x3a0f5531,0x3a2cd692,
0x3a0aba11,0x39a8fec2,0x3a08c606,0x3a257007,0x3a25a420,0x39585c2d,0x398697bd,0x3a6c78fc,0x3adaa965,0x3ad7d81f,0x3b25c570,0x3bc24f21,0x3b3be107,0x3b7fb4b8,0x3b3b4290,0x3b9caac9,0x3ca133be,0x3cd8f2bd,0x3cf0a1a3,0x3cd4bcef,0x3c713c1d,0x3c0ba29e,0x3ba4f416,0x3c2080f5,0x3c53f18b,
0x3c42bf30,0x3bfd78b8,0x3b3def18,0x3a00c6f0,0x3a2411ff,0x3a974352,0x3ac8bb64,0x3a39fdbf,0x39a58d10,0x39c7fb39,0x39b2934f,0x39280ab9,0x39276ce3,0x390d43da,0x388cb423,0x3866c37a,0x398de43d,0x39f3b8ae,0x3a18b780,0x3a541994,0x3a9aef00,0x3ae15440,0x3b028573,0x3be18185,0x3c109bc0,
0x3c97d1a5,0x3cd29664,0x3d260355,0x3cd3037a,0x3c5c7f29,0x3b7e69dc,0x3b2cd4aa,0x3b2dc174,0x3b37434e,0x3b0c2985,0x3ae8943a,0x3a8fb5e5,0x3af902bd,0x3b35a6a0,0x3b44fd52,0x3b20c312,0x3ab9787e,0x3a41ebfd,0x3a105574,0x39d1485a,0x39b73f2e,0x39afe277,0x395f0f68,0x391e3c36,0x38aa089e,
0x38c97a79,0x39243a6f,0x3950ef5b,0x39946f04,0x3a6495f6,0x3a37f9ac,0x3acff89b,0x3b5759a8,0x3ba8f9eb,0x3c69049c,0x3cb29a4f,0x3d07c3ae,0x3cd9f349,0x3cada2a1,0x3c99043c,0x3c87d23b,0x3c37c0e6,0x3be53cfb,0x3bb73678,0x3be936ef,0x3b8f7ae5,0x3b4f26f3,0x3b290603,0x3a5e8877,0x39cc0e47,
0x39aa8749,0x399b8ca5,0x39ad7219,0x39e2ddb5,0x39b2aa6a,0x399368ae,0x3983753c,0x390dc29e,0x390f4f58,0x39853774,0x390f9ef8,0x3936fd34,0x3996cd39,0x3a153968,0x3a92f1cd,0x3b018bb5,0x3bb236b0,0x3c016b86,0x3c0683e0,0x3c3178d4,0x3c337207,0x3c23f63f,0x3c2b3e18,0x3c0123ec,0x3bfa085c,
0x3c01334f,0x3c002cc5,0x3c0bb60c,0x3b757b86,0x3b3795de,0x3b31258d,0x3b369a5c,0x3b337918,0x3b0f18c8,0x3b1c4d77,0x3b108d32,0x3ad94757,0x3ab1f016,0x3a4ce0bd,0x3976c291,0x3991178f,0x397edc51,0x39ca9593,0x399fb628,0x39ecd2cd,0x3a69644b,0x3aa6eaa5,0x3aea0d7e,0x3b14ce05,0x3b618fd6,
0x3b94fe84,0x3bb0b521,0x3ba59f21,0x3baa10f4,0x3bcab647,0x3c008117,0x3ba7a249,0x3bb2da45,0x3bb807e8,0x3bc50cb4,0x3bf3fe09,0x3be53dde,0x3bfbf659,0x3c1b7cb9,0x3be8ee40,0x3bbb81e5,0x3ba314af,0x3b782bfd,0x3b3a7e95,0x3b1349a5,0x3aef2f51,0x3ac83d4b,0x3aad255b,0x3a7ae801,0x3a604e5a,
0x3a2d2b8e,0x3a061bc1,0x398774bb,0x39bf6946,0x3a003caa,0x3a4fe8f8,0x3aa25c21,0x3aceadd6,0x3affb99e,0x3b2ece7c,0x3b31d30e,0x3b4a9e02,0x3b6cd85a,0x3b7f8997,0x3b931030,0x3baa00a9,0x3ba0b636,0x3b81d247,0x3b658f62,0x3b581b6d,0x3b5a4727,0x3b604eef,0x3b707689,0x3b8230ff,0x3b931031,
0x3b6ef734,0x3b538d10,0x3b39f568,0x3b25783c,0x3b138934,0x3b0a6f5f,0x3ae67710,0x3abfce0b,0x3a9d3925,0x3a8036c8,0x3a499525,0x3a2607be,0x3a42a83c,0x3a473519,0x3a88bfd9,0x3a7310d7,0x3aa1e757,0x3ad6e7ab,0x3aef8e86,0x3b0ea2f1,0x3b16b669,0x3b27f990,0x3b3544cb,0x3b426da1,0x3b43ea59,
0x3b432986,0x3b4943d1,0x3b535e9e,0x3b4a0cf7,0x3b43e080,0x3b31bd34,0x3b3ada6d,0x3b3bfd95,0x3b4494a5,0x3b4ae122,0x3b5a71df,0x3b480aa8,0x3b3d2e02,0x3b33531e,0x3b2703e6,0x3b1cf428,0x3b13aed1,0x3b0c20ee,0x3b051fd4,0x3afce0ce,0x3aef8aa5,0x3adfcaf0,0x3adb0b48,0x3b040bc5,0x3b1999ed,
0x3b62ae49,0x3b1a19f9,0x3b2ecd28,0x3b82ea06,0x3b84075b,0x3b7decc5,0x3b69ba7d,0x3b7a5085,0x3b7ad997,0x3b771abc,0x3b4ce05d,0x3b480ef9,0x3b857ecb,0x3b57becc,0x3b5c1fa0,0x38937617,0x38d11696,0x38ebd0f0,0x3850d925,0x38851f46,0x3872f703,0x389c6893,0x38a90179,0x38a4af1a,0x38aef351,
0x38af4dd8,0x38ac23e9,0x38a05f56,0x38a11b3b,0x38b0f2a4,0x38b555e3,0x38b25fa7,0x38a5acdc,0x389811a1,0x3860d2d9,0x38d76364,0x38cbed44,0x39137c0e,0x3988acff,0x38c8dde1,0x390f871e,0x396c079c,0x3976a1bf,0x397226e0,0x394792cf,0x396d9f51,0x397089cc,0x395c9f37,0x3904d53f,0x38c42611,
0x3977b66b,0x392ae240,0x391e0c5b,0x38d878de,0x389e1992,0x38b27ed0,0x38cabc57,0x390be006,0x391d494b,0x39086227,0x391a093b,0x39165b79,0x391b7efa,0x38fc5a9d,0x3914969d,0x3951c1ee,0x3975846e,0x396d585a,0x393de218,0x39041039,0x38cd83ee,0x38bd3a58,0x38fba505,0x37ed92bb,0x385314f0,
0x382ef89d,0x382df2bf,0x381db46e,0x38368261,0x3880329d,0x388f6829,0x38849db4,0x385bd20a,0x3826c263,0x37ecf15b,0x37ba6b5b,0x387c9e9b,0x3867462c,0x388a0556,0x38972e27,0x38dcd0a5,0x38fac2c6,0x3928e615,0x3985a97f,0x39a0d159,0x3986d7a4,0x399375ce,0x39918a68,0x39a356f5,0x396989ea,
0x39781a7c,0x39bcf000,0x39cb2cc0,0x39bf17af,0x398f8f78,0x391e5fcb,0x391241df,0x38830d8e,0x386ff454,0x37e9a318,0x38082609,0x389c19b1,0x387fe20a,0x388cc972,0x385ca90a,0x38d675a1,0x3975d207,0x395ffab3,0x39214fac,0x38e16931,0x37e9a00d,0x3778aa5d,0x38b5d45e,0x380ca163,0x38a024de,
0x38a4cc41,0x3950fed7,0x3997f04b,0x3a073f96,0x3a11cf44,0x3a1f0c50,0x39dcc157,0x39e16ed8,0x39d3b88b,0x3a11040f,0x399bf1d3,0x3a05e3cf,0x3a8cb71f,0x3aafe033,0x3a9feeb3,0x3a606a51,0x39efa427,0x39aa4bda,0x397c047b,0x391e151f,0x38823d30,0x38e8d1c0,0x391cb2f5,0x38d148b0,0x38948f1b,
0x3886b39e,0x388f2e6e,0x39243d12,0x39aeac30,0x399a384c,0x39853461,0x391d5932,0x3867a3ae,0x3981b18c,0x38b4fb80,0x3a33cfca,0x3a1fbd59,0x3aa357e5,0x3a9b3961,0x3a82c651,0x3a13e4ec,0x39f9d2dc,0x3a359362,0x39fb3820,0x3a375bc5,0x3a8e76cb,0x3a79367f,0x3a3f38a4,0x3a8680a5,0x3a5ba666,
0x3a2dc196,0x3a49b2f0,0x3a459777,0x3a7902e9,0x3a4e9a81,0x3a1ce41c,0x39c8d9ff,0x39990740,0x3919aea1,0x3883cb29,0x388de655,0x388668a4,0x38b1abcf,0x3725564b,0x3758d74d,0x390b9743,0x39bec48b,0x39a7239c,0x3996f9df,0x394ef357,0x39db92ff,0x3a48ec4d,0x39be55d1,0x39d0d72d,0x39c1a218,
0x3a4b8ac2,0x3a890a71,0x3a920fcb,0x39a53b53,0x3948bc77,0x395bdd9b,0x3a7f2a78,0x3a35009b,0x3a616c25,0x3a5c2bb8,0x3a015c54,0x3a0ca2b8,0x3a1ee76e,0x39d909d3,0x39828a49,0x39570aa1,0x38a914b7,0x382c549d,0x37e88f1b,0x37c5dab6,0x37303e41,0x3816a114,0x3833f74d,0x386922f6,0x37c4b1f4,
0x371a6492,0x3875ee13,0x39808dc3,0x3a7943ee,0x3a689a1f,0x39f5480d,0x39c6facf,0x3b7a8010,0x3be25576,0x3acca749,0x39efa2fd,0x3af2b9d2,0x3aeae770,0x3b0494e6,0x3b0f6390,0x3ad0e7d1,0x3ab0a999,0x3a764a5a,0x3a2f0e5d,0x3a728ff8,0x3a7e99aa,0x3a2a868f,0x39d5def9,0x395c1f3a,0x3904d0f0,
0x38d0039c,0x38a8e5b4,0x38314856,0x37cec308,0x384b0566,0x38361022,0x37dbe86a,0x3805ab8b,0x35cf492f,0x371c3af2,0x3663de85,0x3769f9d8,0x382a3610,0x3899c7c2,0x388794a8,0x389454ec,0x39aa4bff,0x3add6079,0x3ae241d8,0x3b6c3eab,0x3abfc499,0x3a95d971,0x3b11d438,0x3ad46890,0x3a794529,
0x3a3c7553,0x39bcecf6,0x39dd805e,0x39958b30,0x390c973e,0x394b80ad,0x396d7f89,0x39748c62,0x39730945,0x3974f672,0x3939b277,0x3923b2fb,0x390a1b34,0x3901fec7,0x38bab5ee,0x388c3d4a,0x376d4c45,0x35b0e11a,0x368d86f7,0x35e2f3e2,0x367dd653,0x3698e696,0x357472b9,0x361eac89,0x3830958b,
0x3876c8aa,0x38b00358,0x3a43f3db,0x3ac22e8f,0x3a77434e,0x3a7274ae,0x3a936dc0,0x3a85ee76,0x3a44ce73,0x3a31b921,0x3a3c5509,0x3a2062b7,0x3a1ff9c0,0x3a2c0811,0x3a46adc8,0x3a145bdf,0x39d05eac,0x399ca51a,0x38d39ab4,0x37f725f0,0x38430725,0x38d79fb6,0x39364ee5,0x397a9d98,0x39895375,
0x39607653,0x39301508,0x388c3cb2,0x37ad8736,0x368a5365,0x36b69e60,0x372c9107,0x37559c63,0x379676d2,0x3796109a,0x380574d2,0x372daca0,0x37d2f509,0x390d941b,0x3a2558b1,0x39b76f89,0x39bf6fd6,0x39ec7ccf,0x39c763b0,0x39bd17b9,0x39b04d35,0x39c8666e,0x3a0267a5,0x39ae1624,0x39a2ec1c,
0x39b56c6c,0x39a57ea7,0x39900da1,0x394ed374,0x390cc00e,0x3899cbcf,0x38243f3e,0x381ed510,0x3829cb3e,0x3886304b,0x38966963,0x386ca2c1,0x38466f7c,0x382cb33f,0x381adc45,0x380ca3d2,0x37d06046,0x3839f05c,0x3881e193,0x38b71391,0x38d1a54c,0x38d043a8,0x390796d6,0x3932241c,0x3947161f,
0x397d2445,0x3958bd2b,0x3954f857,0x394604e7,0x391cb254,0x39007fdb,0x38d7b4fa,0x38e49ccf,0x391275b5,0x38f2b5cf,0x38e4d920,0x38d55e2e,0x38724b02,0x382795a8,0x3841f740,0x382c7ff6,0x3832cd8f,0x3858dba9,0x384f5856,0x387f981e,0x388d6bb3,0x38a1d874,0x38aca2f4,0x38cbae60,0x389f110d,
0x38a76c60,0x38e3bdb1,0x38c8b00f,0x38cb2fe8,0x38fd87bc,0x38f790ad,0x390ab117,0x392ba8d0,0x393132ce,0x3958ad2f,0x39815e0b,0x395521b8,0x393373f6,0x39159da4,0x39047a70,0x38f73380,0x38dd4e0f,0x38d39bd7,0x38d68fdc,0x38fad4c9,0x38cb68c6,0x38b05016,0x389ba7ca,0x3886568c,0x3867229c,
0x385e50ac,0x3862e429,0x3875b922,0x38885ec7,0x38996117,0x38ad7d98,0x38c667ca,0x38c75949,0x38c12945,0x38db9eef,0x38e3d4f8,0x3906f7c2,0x392035d7,0x39175bb6,0x391e9a3c,0x3925e0c4,0x39279e50,0x39323a34,0x393fbc13,0x392bfe8c,0x39191bf6,0x3917d594,0x390cacf3,0x38cac022,0x38b62dbd,
0x389d7267,0x389de131,0x389e2cb4,0x389f6dd1,0x38a21bb4,0x38ac00d2,0x389e085b,0x3897e902,0x3894b69f,0x3892f89a,0x38946ee5,0x3893c439,0x389ab7a2,0x389ec733,0x38a2f3f8,0x38aa446e,0x38ad0f46,0x38c4c4fb,0x38d02c92,0x38fd88a7,0x392bd6c4,0x38e0d499,0x390b604f,0x394a1f13,0x3945e3d7,
0x393ba035,0x39265531,0x39300c40,0x392affa7,0x3924e62e,0x38fb1c52,0x38cecb3d,0x391e3e35,0x38fc97bb,0x38e06fa8,
};
const uint32_t defaultHRIR_rom_ER48[HRTF_MODEL_N_SECTIONS * 470] = {
0x3e8fdc9b,0x3e7ca02e,0x3ea70d73,0x3e8e5fb4,0x3ea8dd68,0x3eededaf,0x3e8704a5,0x3e911540,0x3ed7aa69,0x3ee09a85,0x3edac0ad,0x3ebe2af7,0x3eda1252,0x3edf2449,0x3ed991d3,0x3e8cd8c0,0x3e76d9f1,0x3ef24872,0x3e91d7e9,0x3e7d0776,0x3e8caed0,0x3e5a8728,0x3e73f78b,0x3e782e9a,0x3e7d49d8,
0x3e813d42,0x3e8434cc,0x3e86b742,0x3e8ab0d0,0x3e8f4bf5,0x3e9603b8,0x3e9bbd29,0x3ea4df8c,0x3ea13dfd,0x3e9cd544,0x3e908184,0x3e8fac91,0x3ebda893,0x3ebff1ca,0x3ed08eb6,0x3e75dd83,0x3e48076c,0x3e298b90,0x3e265455,0x3e0dd3f4,0x3e2649fe,0x3e29dffc,0x3e22f191,0x3e2b4f56,0x3e132cb8,
0x3e141183,0x3e011f6c,0x3e047caf,0x3e2b312c,0x3e18a7c1,0x3e7d6b64,0x3e72cc02,0x3e799f9d,0x3e890a3c,0x3e94ff71,0x3e9b6fa8,0x3ea356e4,0x3eabf5ee,0x3eb2dc43,0x3ec08559,0x3ed4e36e,0x3ef21e5c,0x3f072dea,0x3f167786,0x3f150aa8,0x3f0a8a57,0x3ee78bfa,0x3ed9f2a1,0x3f0c0392,0x3ec3ec96,
0x3e97a643,0x3e584ee5,0x3e233944,0x3decf373,0x3dc1d6df,0x3da46f61,0x3da03234,0x3d801071,0x3db85e01,0x3d9f8cec,0x3d9025c9,0x3d89119a,0x3d969e3b,0x3d9bd814,0x3db8f494,0x3dc41817,0x3e0ae675,0x3e19a385,0x3e731ee0,0x3e81da6b,0x3ea36954,0x3eb14c98,0x3ec65e06,0x3edf0a9d,0x3ef3bee1,
0x3f0bb3ec,0x3f2364c0,0x3f419438,0x3f5f3e01,0x3f80a0ee,0x3f76fd7b,0x3f5f37fb,0x3f2f6e3c,0x3f1873b3,0x3f51b86e,0x3ee75e89,0x3ead2b54,0x3e39d346,0x3df6dfcf,0x3dab5c4b,0x3d54a4b0,0x3d030473,0x3cc6d7ec,0x3cc6604e,0x3d049c4b,0x3ce6236d,0x3cd11bb5,0x3cbfb7fc,0x3cd7a13c,0x3d0ca67b,
0x3d497bcf,0x3d65b1df,0x3db025a4,0x3ddf14f3,0x3e58c138,0x3e7fcb8c,0x3eab70d2,0x3eb8e4fc,0x3ed46c53,0x3ef153a9,0x3f031084,0x3f1c91de,0x3f4cc12f,0x3f8b3923,0x3fb0eb50,0x3fdab500,0x3fd75cb2,0x3fb83ee0,0x3f8d533f,0x3f5f8790,0x3fe8eb11,0x3f8b33f6,0x3f4e2871,0x3ebdf86e,0x3e6a77e4,
0x3e20c17d,0x3de7fd4a,0x3d93dc32,0x3d3ce37f,0x3d0d3a24,0x3d0bafb0,0x3d082a4d,0x3d0337ce,0x3cd82a6a,0x3cecf468,0x3d1889b4,0x3d5bb356,0x3da8621b,0x3e0a5d7a,0x3e3d3901,0x3eb28e81,0x3ee74840,0x3f40ae07,0x3f7a8f2b,0x3fa4c7e1,0x3fcead90,0x3fed8346,0x4001efcc,0x40053cd3,0x40041b5c,
0x3ffd3d13,0x3ff9ca11,0x3fea2e3c,0x3fe3e80b,0x3fefe08e,0x3fd67831,0x402e0c8b,0x3f5c91d0,0x3f4adfcb,0x3eadb767,0x3e85b027,0x3e15b595,0x3db63148,0x3d98df04,0x3d54401d,0x3d4230d7,0x3d4c882f,0x3d265086,0x3d114869,0x3cf8fc2b,0x3d11032f,0x3d3abdd2,0x3daba352,0x3de975d6,0x3e461edb,
0x3e607964,0x3eda9a95,0x3f0a4d2e,0x3f61a1c0,0x3f8b505e,0x3fb9cdc1,0x3fefeee9,0x40013855,0x4006970a,0x4008f829,0x4009086c,0x400d3534,0x40161a61,0x40117a76,0x400f6a21,0x402f2616,0x402a4989,0x40888df1,0x3fdb870c,0x3f9d6fd4,0x3ecb7292,0x3ee60c52,0x3e437028,0x3e1de373,0x3d9d3e0a,
0x3d6854e6,0x3d6edb3c,0x3dd40ec2,0x3d812f7e,0x3d648a50,0x3d8d2b66,0x3d712947,0x3dab40bb,0x3e03d116,0x3e0b1212,0x3e4b1120,0x3e638df6,0x3edf6726,0x3f09c583,0x3f5e9cf3,0x3f9cf95b,0x3fdc0b64,0x400ced44,0x40196fd0,0x4019a822,0x4014c6dc,0x4004bc5c,0x4002d52e,0x401d0848,0x402aeae6,
0x4046714f,0x409dec17,0x406f0012,0x409c8644,0x400535d2,0x3f9fffd2,0x3ee0a481,0x3e7dff42,0x3e20636b,0x3db79ce1,0x3d9c95a3,0x3d7ca113,0x3d8f69dc,0x3e238006,0x3d7f39be,0x3d4fbdfb,0x3d820744,0x3d928c8d,0x3db74338,0x3e084369,0x3e1a7c3c,0x3e61f848,0x3e6f28b0,0x3ec8e36c,0x3ee55368,
0x3f23ffc3,0x3f6707f2,0x3f9f3d4b,0x3fcfc8e8,0x3ffa0a61,0x400babe5,0x4018cf0a,0x401ae020,0x40105111,0x40033e17,0x40124cc5,0x403878b0,0x40a104ac,0x406f81c0,0x40313467,0x3fe0c5bf,0x3f9ba913,0x3f044192,0x3e9b366c,0x3e477d38,0x3dff22ab,0x3def3942,0x3db634c5,0x3da56350,0x3ddb55e8,
0x3d9157f8,0x3d85d798,0x3d8f661c,0x3db086dd,0x3de3e7d0,0x3e07676e,0x3e2aea92,0x3e8e3af0,0x3e9f053c,0x3ecac326,0x3ed6ca51,0x3efec778,0x3f1e961a,0x3f584336,0x3f95bc40,0x3fbd1d61,0x3fda57ff,0x3ff30463,0x3fd2caa7,0x3fcc08fa,0x3fdafede,0x3fdd798e,0x3ff0972a,0x401b4405,0x401b0df8,
0x3f8b0183,0x3f6d1014,0x3f3193f1,0x3ec0cbb9,0x3e7a5b8c,0x3e4e8287,0x3e07d544,0x3dd60954,0x3dcb4366,0x3dcad917,0x3dc52138,0x3db68a3e,0x3da9b1d2,0x3dacaa72,0x3dceb074,0x3e0df1ed,0x3e449247,0x3e56db84,0x3e89a3d0,0x3e99d0cb,0x3ec42372,0x3ec1cbe9,0x3ed75acf,0x3f08afa4,0x3f22da5c,
0x3f31fdda,0x3f43aeb3,0x3f5d6499,0x3f7d1a65,0x3f865902,0x3f895cfc,0x3f903a28,0x3f901701,0x3f8e4ba8,0x3f8821da,0x3f860fed,0x3f31853d,0x3f0ea396,0x3eeea3ca,0x3ec3e6e3,0x3ea02bbf,0x3e6a9317,0x3e3cd015,0x3e0a0fe8,0x3e228436,0x3dfb3608,0x3e2b2ed6,0x3e131e54,0x3e1ec661,0x3e12331b,
0x3e3038c3,0x3e362ae3,0x3e5e262b,0x3e745687,0x3e96e633,0x3ea4751f,0x3ec8b008,0x3ec3f612,0x3ed8f3f7,0x3ef19440,0x3f07f20a,0x3f17a5df,0x3f27fb09,0x3f3b86eb,0x3f555bb9,0x3f5a6917,0x3f63088f,0x3f72a3ce,0x3f683a4d,0x3f636ae4,0x3f66bcdc,0x3f41cc90,0x3f05afeb,0x3f0f3c7c,0x3f1f0b3f,
0x3ed1f7d4,0x3ebfddc6,0x3ead81d2,0x3ea3e0c3,0x3e8fbb42,0x3ea56a13,0x3eabd6e7,0x3e9bce38,0x3eab80d3,0x3e9ade8d,0x3e9a0902,0x3e8be32b,0x3e950624,0x3ea63a6a,0x3e9af2b1,0x3edb6d6c,0x3eceb570,0x3ecb3beb,0x3ed8816c,0x3ee32ea2,0x3eeee883,0x3efea2d1,0x3f06925b,0x3f0d41c2,0x3f13f536,
0x3f1c3197,0x3f240c6a,0x3f2c29b3,0x3f3881f3,0x3f2a187c,0x3f1eb4c7,0x3f15f462,0x3f0e38b1,0x3ee835d3,0x3f0d0130,0x3f009d1a,0x3f0ea2c2,0x3f4014ed,0x3efac86d,0x3f0187ec,0x3f30834f,0x3f3a07ea,0x3f378632,0x3f23fb37,0x3f3821d3,0x3f3ff4b4,0x3f3aaff2,0x3efe2f9a,0x3ee65736,0x3f49eee7,
0x3f04f1da,0x3eeb3269,0x3ef99036,0x3ed15f27,0x3ee050b1,0x3ee19682,0x3ee54292,0x3ee7d1e9,0x3eea1293,0x3eeea811,0x3ef36958,0x3ef8bb3a,0x3eff85be,0x3f02f19f,0x3f08e5aa,0x3f03f230,0x3f01cd6f,0x3efbc38f,0x3efbe1ab,0x3f14475d,0x3adf8b9a,0x3a99be79,0x3b26bab8,0x3b0df725,0x3b441723,
0x3bad7446,0x3b198e66,0x3b1ded00,0x3b930486,0x3ba05f87,0x3b9fb7f9,0x3b89edff,0x3ba62e13,0x3ba8ebbc,0x3ba535c8,0x3b235c47,0x3b10fb92,0x3bbfe50e,0x3b2a8b67,0x3b0eb5d9,0x3b233d68,0x3ab45d2c,0x3ae730de,0x3ae9f357,0x3aed0d65,0x3aebd75a,0x3ae70a57,0x3addb643,0x3adea313,0x3ae44e24,
0x3af8e178,0x3b026f92,0x3b04487b,0x3b079362,0x3af4b8df,0x3a9f4492,0x3ac1a6fa,0x3aac02ee,0x3b16a5de,0x3b420b7a,0x3acc506f,0x3aa68190,0x3a10d7da,0x3a38df88,0x3a13e2de,0x3a8cdf32,0x3aaec4da,0x3aaa14cc,0x3abbe453,0x3a74809d,0x3a6ef45f,0x3a029431,0x3a0ce49b,0x3ab0cf35,0x3a7f8733,
0x3b1c8366,0x3b12b207,0x3b163b31,0x3b2e7499,0x3b46ad77,0x3b4c120a,0x3b457d43,0x3b3680aa,0x3b2567ad,0x3b256df5,0x3b355bae,0x3b4f4028,0x3b63aaad,0x3b5d5497,0x3b6e6a0f,0x3b367ecc,0x3a814a93,0x3ab16750,0x3ad25d6f,0x3ae2a12f,0x3acca974,0x3a81a619,0x3abec594,0x39e2ca55,0x39b89d03,
0x39ce1368,0x3a167e65,0x3a208796,0x3a8eb215,0x3a7cf0d1,0x3a245b0d,0x39f01327,0x3a0ba79d,0x3a3fbd69,0x3a8e81f2,0x3a9eb51b,0x3ad84006,0x3ad7c4b6,0x3b5cf1d6,0x3b5878d7,0x3b8f8903,0x3b94de4e,0x3b941289,0x3b91af40,0x3b7f9d5a,0x3b85740c,0x3b990681,0x3bafca24,0x3bccbf5e,0x3bc6e4ce,
0x3bdff38b,0x3b93edbe,0x3a4d7d2c,0x3abe9fd9,0x3ac0862f,0x3aa57e95,0x3ad7f39b,0x3af835e7,0x3b46f081,0x3a154dfb,0x3a22738d,0x39cf705e,0x3a4d6787,0x3a87c619,0x3ac72151,0x3a940a3a,0x3a42ddc5,0x39f11fe8,0x3a1d6a21,0x3a98b544,0x3b059756,0x3b001dc8,0x3b0ea00b,0x3b0c2ab6,0x3b987fa8,
0x3bb521e3,0x3c06c242,0x3c0fb370,0x3c0eb8ad,0x3c031606,0x3be81aed,0x3be50272,0x3c01b23b,0x3c0ec9fd,0x3c218b73,0x3c1c21ee,0x3c31f551,0x3bc607e8,0x3a1f3eff,0x3a3772bb,0x3c057b16,0x3b6a3ca4,0x3bdfc2e9,0x3b90c8e7,0x3b2b8482,0x3a8f6640,0x3b01d491,0x3acb6d14,0x3aca4b63,0x3a978e60,
0x3aba1dca,0x39b2f4d4,0x398f0ae0,0x3a1f1cd3,0x3a41b751,0x3a8b337f,0x3af44c58,0x3b0cf164,0x3b0e1ab0,0x3b03ed5a,0x3ba277c3,0x3b21f3db,0x3b57e1f8,0x3a980f5d,0x3a9d9839,0x3b17a028,0x3b940998,0x3bcabb99,0x3bf3e253,0x3be3ed58,0x3c11da50,0x3c31e4d6,0x3c25c4bd,0x3c21640f,0x3c306d12,
0x3be70b04,0x3b6a5907,0x3c1aedb6,0x3c010992,0x3bb90e6e,0x3b3ebc86,0x3ad2982c,0x3ad5aa6f,0x3a6acd3e,0x39862e6a,0x394fcac5,0x3a26b702,0x3a24f0d8,0x3a08bd73,0x39ad4c3a,0x3a040f7e,0x3a2ad0f9,0x3a16b81c,0x39e0989f,0x3a46000a,0x3a6577e6,0x3b44cb7e,0x3b93e9bc,0x3c1203c8,0x3b97f6ba,
0x3b1096df,0x3a77e9d3,0x3a5c700a,0x3a566b41,0x3a99b435,0x3aa5c682,0x3aa4e30c,0x3b36cca7,0x3b8bc9e3,0x3bbfa422,0x3bb6ec1c,0x3ae70d23,0x3b3ee641,0x3b7d96c5,0x3b4252c3,0x3b013a2f,0x3ad961ea,0x3a9d60e6,0x3a4ba4cb,0x3a19a6b6,0x39f66055,0x398b8df3,0x38661a2e,0x388bb7ce,0x390e6331,
0x3927e145,0x3927ada2,0x39bd2fff,0x39ba4e36,0x39b3587a,0x3a3bb6b8,0x3ab693e0,0x3a9c520f,0x3a224228,0x3a01870e,0x3b3d1f65,0x3bfe0ddf,0x3c423803,0x3c544ddc,0x3c2082e2,0x3ba53453,0x3c0b90ee,0x3c71671a,0x3cd428b5,0x3cf12de9,0x3cd8ad6c,0x3ca1e001,0x3b9a9ae5,0x3c9d1877,0x3c0be08a,
0x3be6c6a5,0x3bbb06b7,0x3b549f2e,0x3ace11f2,0x3a3f3bbc,0x3a4ecc0b,0x39913dda,0x39557f4f,0x391cdabf,0x38c3fd62,0x38a418cc,0x392576b4,0x3962b676,0x39b4b585,0x39bb710b,0x39d62900,0x3a0dbf7c,0x3a3234fa,0x3ac4e97d,0x3b1c7537,0x3b479898,0x3b34a13f,0x3af9bfde,0x3a8f8d35,0x3ae9040f,
0x3b0c411c,0x3b37205d,0x3b2dfb5e,0x3b2cc830,0x3b7e2ab6,0x3c5d0c96,0x3cd2601a,0x3d270f35,0x3ccf0c62,0x3d080f67,0x3cb398b4,0x3c7c0756,0x3c28d089,0x3c03fdcf,0x3c036242,0x3badfd7c,0x3afe0b91,0x3a93a695,0x3a15f4c3,0x3994ad57,0x39308a5c,0x390df0d9,0x3987c902,0x390a3356,0x390cc452,
0x3989f6e2,0x39678d04,0x39ee47b1,0x39cfcac0,0x39b1a0a6,0x399bfdd1,0x39abab56,0x39cba4be,0x3a5edbdc,0x3b288e90,0x3b4f2a68,0x3b8f6980,0x3be979bb,0x3bb71a43,0x3be56dec,0x3c376ad8,0x3c8815dd,0x3c98ee4b,0x3cae013c,0x3cd958aa,0x3c27def3,0x3c27d401,0x3c1e0b82,0x3bf921f1,0x3bd237e0,
0x3bafb731,0x3ba54192,0x3bb370b0,0x3b93bcfc,0x3b61072c,0x3b148f0a,0x3ae976e8,0x3aa5e6f2,0x3a6c4e57,0x39f11b68,0x3992bc53,0x39ae30c5,0x3981b2fa,0x398f5f96,0x3970427c,0x3a478654,0x3ab32a81,0x3ad8e584,0x3b10a690,0x3b1c4d93,0x3b0f0de7,0x3b339b6f,0x3b36be57,0x3b310412,0x3b379588,
0x3b75cde9,0x3c0b327f,0x3c005588,0x3c017465,0x3bf9268d,0x3c0237c7,0x3bb97879,0x3bb00933,0x3ba8ac5d,0x3ba24887,0x3ba3adaf,0x3b8f389f,0x3b7f4539,0x3b6b2b6a,0x3b4b9b42,0x3b32ab50,0x3b2e53e3,0x3b000dc5,0x3acec534,0x3aa1e9b2,0x3a5057f9,0x3a00b355,0x39c4ce51,0x398697dc,0x3a08e763,
0x3a286bd8,0x3a62090f,0x3a7ae3bf,0x3aad1e54,0x3ac84246,0x3aef2bb7,0x3b134687,0x3b3a87cc,0x3b7832a2,0x3ba326e9,0x3bbb758e,0x3be8e45b,0x3c1b8677,0x3bfbe247,0x3be53e3d,0x3bf4007b,0x3bc4cb92,0x3b5789be,0x3b693d71,0x3b79253a,0x3b4e4c0b,0x3b4a10db,0x3b4571a1,0x3b44a34d,0x3b429034,
0x3b351910,0x3b27ef94,0x3b16c8e7,0x3b0e8924,0x3aef5b33,0x3ad7800f,0x3aa1b431,0x3a71a190,0x3a897bc0,0x3a481a51,0x3a41a417,0x3a283619,0x3a49828d,0x3a803161,0x3a9d35f4,0x3abfcc8d,0x3ae675f3,0x3b0a69cf,0x3b13842a,0x3b25776a,0x3b39df8b,0x3b53972d,0x3b6f00d9,0x3b93050f,0x3b8235d4,
0x3b705d7d,0x3b607fd9,0x3b5a1ab9,0x3b31b7a9,0x3b412822,0x3b4a1827,0x3b57248d,0x3b8157ab,0x3b4882e0,0x3b4c0571,0x3b769328,0x3b7a8079,0x3b7a8d72,0x3b69a47b,0x3b7db56f,0x3b8419d0,0x3b831f72,0x3b2f0e02,0x3b1a5bed,0x3b64c8b6,0x3b1a16cf,0x3b0404f7,0x3ada2ee2,0x3adfb5a9,0x3aefa2ab,
0x3afcdd46,0x3b0520ef,0x3b0c2234,0x3b13b1bb,0x3b1cf5e3,0x3b27061f,0x3b335c72,0x3b3d2c24,0x3b48074a,0x3b5a73a5,0x3b4ae2bd,0x3b449b8d,0x3b3be592,0x3b3b1887,0x3b5c1ced,0x38937569,0x38515f3a,0x38effc4a,0x38d0a365,0x392a9779,0x397908db,0x38c2a9d1,0x3904f8db,0x395c1fd1,0x39706056,
0x396dba2e,0x39479cf1,0x39720f86,0x39767a78,0x396b79ca,0x390fa37f,0x38c969f1,0x3988c792,0x39110d85,0x38ca877c,0x38d95f9c,0x38618d0c,0x3897ae73,0x38a5c6b0,0x38b256d1,0x38b5589b,0x38b0ff9a,0x38a12a14,0x38a06a81,0x38ac194b,0x38af5911,0x38aef835,0x38a4afca,0x38a8f3fe,0x389c4e95,
0x3873433c,0x3884b2b5,0x389efea9,0x38cfb9b1,0x3920e783,0x386bfc6f,0x3882254c,0x37b9d39b,0x37ec8492,0x3827b726,0x385b1a49,0x3884ba23,0x388eb1cb,0x387f7b1e,0x383671ed,0x381eeaac,0x382e9da6,0x382c51e9,0x3856d8cd,0x37fb563e,0x38fe489e,0x38b73676,0x38cdcc75,0x390474d3,0x393db620,
0x396d7bd1,0x39756ee0,0x3951a6cd,0x391477d3,0x38fc3f12,0x391ba411,0x39164df2,0x3919fa37,0x39086290,0x391d5f3c,0x390c1daa,0x38ca785a,0x38b2dffc,0x38d5250b,0x38a63c00,0x388a9928,0x380870de,0x38b184da,0x377b783d,0x37e8b8a6,0x38e0bbf2,0x39219644,0x395f7023,0x397637f5,0x38d5f936,
0x385bfa20,0x388c7643,0x387c84c5,0x389c945f,0x38067b44,0x37ccfe24,0x386bf2dc,0x388b71ee,0x390f99eb,0x391ee1fe,0x398f6b51,0x39bf0dd2,0x39cb3b18,0x39bd18c9,0x39785a32,0x3969a5e3,0x39a321de,0x399194f5,0x39938c33,0x3986f62a,0x39a09f03,0x39857609,0x3928cd2b,0x38fc00c5,0x3961a654,
0x3877899f,0x389c2924,0x38b3335a,0x39821342,0x3866da62,0x391d90cb,0x398589a4,0x399aa791,0x39adafe3,0x392342dc,0x388f629e,0x38854d13,0x3897cb21,0x38ce26c0,0x391f8264,0x38e9631c,0x387cf929,0x391c9a56,0x3971ae74,0x39b0b5b8,0x39ec1cad,0x3a61d981,0x3a9f9c7c,0x3ab009bb,0x3a8c5ccb,
0x3a05ddba,0x399bba0d,0x3a110474,0x39d3be42,0x39e19a28,0x39dbdad5,0x3a1f926a,0x3a11f6da,0x3a0751d6,0x39969f42,0x3aaa7c0e,0x3a171eeb,0x3a30e4a8,0x39c8fa13,0x395352c9,0x3995f17f,0x39a6f697,0x39bee4fe,0x390c34b6,0x3754544f,0x3721dba3,0x38b16b75,0x388439d3,0x389143ea,0x3882fb79,
0x391a3128,0x39979b1b,0x39ca436a,0x3a195517,0x3a478092,0x3a8069c2,0x3a429ae6,0x3a4b9176,0x3a2d4e40,0x3a5c036b,0x3a85ba74,0x3a3fd040,0x3a79ecc7,0x3a8e9f8e,0x3a3746c7,0x39fbd4f4,0x3a347191,0x39fb5c3a,0x3a12ab9a,0x3a8400fd,0x3a985e91,0x39d859c0,0x39b14bfd,0x3a4e4995,0x39c092aa,
0x39f1d8a4,0x3a6bf26e,0x3a756d42,0x398176fd,0x3873326a,0x3713f69e,0x37c686e6,0x386906d2,0x383241f9,0x3817ed32,0x371d3d2e,0x37b8f6f9,0x37f52280,0x3822be85,0x38bc9594,0x39521d37,0x39851ced,0x39d690e6,0x3a20486b,0x3a0c4c80,0x3a01909b,0x3a5ac89c,0x3a624592,0x3a358d87,0x3a7f0f11,
0x395be744,0x39490e4c,0x39a43404,0x3a92a89d,0x3a898b2c,0x3a4b717b,0x39c01136,0x3acd4150,0x3be21f59,0x3b7ae6e9,0x3adbdcea,0x39a74675,0x38945c05,0x38851770,0x389727ef,0x382d653e,0x3767dd5e,0x36675cb6,0x371a29a7,0x35d691e7,0x38071a03,0x37dbd1d3,0x383602d3,0x384378b7,0x37d9adc3,
0x3836fc89,0x389d1dfd,0x38d39ca6,0x39047163,0x395c63ec,0x39d58f55,0x3a2acd59,0x3a7d99fc,0x3a7330f4,0x3a2f4e75,0x3a75e371,0x3ab1414e,0x3ad0aeb9,0x3b0eb6a8,0x3b04e133,0x3aeab5cd,0x3af31c34,0x39ee144d,0x3ac3c179,0x3b6b0714,0x3ae26a3d,0x3ac257b3,0x3a4381ff,0x38b09aac,0x38792dff,
0x382fa16f,0x36148bf7,0x357d54c7,0x36a1b134,0x3679d2bc,0x35d76dfc,0x3696cc47,0x35c068c1,0x37707d9b,0x388b233a,0x38ba3585,0x3902add0,0x3908430d,0x39274307,0x3936ccc3,0x39770c8b,0x39724357,0x3974dac0,0x396cd685,0x394bd501,0x390ca48e,0x39957ee2,0x39ddb67c,0x39bd32aa,0x3a3b18ea,
0x3a7a14f7,0x3ad431b3,0x3b126abf,0x3a93d587,0x3a939df8,0x3a7472e8,0x3a822be3,0x3a1d9f93,0x390e96b2,0x37d92312,0x371224eb,0x37fefa43,0x379f3922,0x3796f140,0x375384a3,0x3725ba71,0x36bc8082,0x3685dc55,0x37b4abc3,0x388d2fd5,0x392c2801,0x3963e493,0x398d6094,0x39799f84,0x393642f1,
0x38d7ccab,0x38439256,0x37f6f008,0x38d3fca7,0x399c32e0,0x39d087d7,0x3a1453f5,0x3a46c512,0x3a2c0b23,0x3a2013b2,0x3a202bd7,0x3a3cada3,0x3a31a19e,0x3a4550e1,0x3a859525,0x39e77d9e,0x39c58650,0x399f95f5,0x39727958,0x394c505e,0x3933a305,0x39093e7d,0x38ce5236,0x38d283cb,0x38b80725,
0x38806d10,0x383c3baa,0x37cb199c,0x380c88bb,0x381b6553,0x38271215,0x382f9a49,0x387305ac,0x389352ac,0x38833fe1,0x38285711,0x381fce26,0x3823e1fa,0x3899f42e,0x390cc533,0x394eaf34,0x399021ec,0x39a59b86,0x39b55139,0x39a30556,0x39ae2624,0x3a020e5d,0x39c88cae,0x39b05f65,0x39bca508,
0x39c8ce75,0x39475954,0x39527dc3,0x395a0834,0x3952b180,0x39788102,0x39542b0e,0x393165d2,0x392a8e58,0x390b49fa,0x38f8a746,0x38fd1398,0x38cbc01a,0x38c8712f,0x38e46de7,0x38a7bbff,0x389ffca5,0x38ce70d6,0x38ac47c5,0x38a34736,0x388c6f3a,0x38805a05,0x384f53d4,0x3858aaa5,0x3832d2dd,
0x382c7c86,0x3841ff2a,0x382776df,0x3872315e,0x38d56bf0,0x38e4cb4f,0x38f2a3da,0x3912a7a7,0x38e4990e,0x38d7c39e,0x39008a37,0x391c50a0,0x3903eb7c,0x3918ab35,0x392ea8c6,0x3909afcf,0x39170954,0x3918f8b8,0x392be2e9,0x393f7101,0x39321aef,0x3927c75f,0x3925db2a,0x391e902d,0x3917623a,
0x39200381,0x3906bcad,0x38e2a7e8,0x38dae10d,0x38c11ee9,0x38c69c3a,0x38c71530,0x38ad75ae,0x38995a4f,0x38886d62,0x3875b932,0x3862e11c,0x385e5412,0x3867192b,0x3886552b,0x389b8ded,0x38b05133,0x38cb6c13,0x38fab3e2,0x38d68e43,0x38d36ce6,0x38dd8f61,0x38f70342,0x389d7493,0x38b2a26a,
0x38ca9b7d,0x38fb0f7e,0x3919204c,0x38cf72e8,0x38fa541e,0x3924b472,0x392ad504,0x39303291,0x39265637,0x393b832d,0x3945fe56,0x394a75e5,0x390ba1fc,0x38e199de,0x392d9ff5,0x38fe9a6e,0x38d04d5c,0x38c42f0a,0x38ad01e4,0x38aa5505,0x38a2ed46,0x389ec71c,0x389ab991,0x3893c5df,0x38947021,
0x3892faf6,0x3894c0cf,0x3897e86f,0x389e06e0,0x38ac05a5,0x38a21fa7,0x389f77cb,0x389e0f16,0x389e2dea,0x38e06be1,
};
const uint32_t defaultHRIR_rom_AlphaL32[470 * 86] = {
0x3e8066b7,0x3d6b6818,0x3e9b1d76,0x3e6eb9f6,0x3e80f9a1,0x3e7fc18c,0x3e872602,0x3e89dc1c,0x3e8bfd52,0x3e879b23,0x3e84b0af,0x3e814fd4,0x3e7d129a,0x3e789b9a,0x3e7672bf,0x3e74293d,0x3e71fca2,0x3e70cc6c,0x3e6dc4f6,0x3e5e0778,0x3e8d7812,0x3d3ed63e,0xbd3edf1a,0xbe2f4824,0x3dc2aa83,
0xbd25c67f,0xbe208217,0xbe25cbab,0xbe20144f,0xbe03eb2f,0xbe21c0e0,0xbe2920f9,0xbe21eb2a,0xbd20e547,0x3e036d5d,0xbe231008,0xbd6c7998,0xbdafc7d5,0x3e88ca90,0x3e9511fa,0x3e95b010,0x3e9c8165,0x3eb08521,0x3eb9821a,0x3ebae5d7,0x3eb09cec,0x3ea5f616,0x3e9aa337,0x3e91d0b0,0x3e8c628e,
......@@ -6515,7 +6633,6 @@ const uint32_t defaultHRIR_rom_AlphaL32[470 * 86] = {
0xb76fd338,0xb76d3ba5,0xb78a4c0c,0xb74af8d4,0xb729a903,0xb549edd4,0x37f08637,0x37e81b31,0xb89715a9,0xb8356279,0xb83bf248,0xb8419375,0xb84b03bd,0xb858ae64,0xb8619d70,0xb8675a21,0xb87e51ad,0xb88a5378,0xb892c0a7,0xb89d5235,0xb8a32dd6,0xb8ab6d84,0xb8a3fe25,0xb8a17554,0xb89ec5a2,
0xb89acaff,0xb89bac5f,0xb87d5e2e,0xb8d2a09e,0xb8bc01f4,0xb8cf307e,0x380947a0,0x37992239,0x381b73ae,0x381b062d,0x3817a3c7,0x381869b8,0x38172838,0x38191877,0x3813ea20,0x37ad8b28,0x38049fc9,0xb8b6c6f0,0xb896fb40,0xb89d04be,
};
const uint32_t defaultHRIR_rom_AlphaR32[470 * 86] = {
0x3e8065c3,0x3e6ef862,0x3e9c117d,0x3d6fefdf,0xbd6f840b,0xbe245973,0x3e022d81,0xbd2167b3,0xbe211338,0xbe2839d2,0xbe21fc71,0xbe049f6d,0xbe2067a7,0xbe25efd4,0xbe202ffd,0xbd25123e,0x3dc1efdc,0xbe2ea55d,0xbd3924e1,0x3d415830,0x3e8d91aa,0x3e5e148b,0x3e6db67d,0x3e70d2c7,0x3e71faf2,
0x3e742a24,0x3e767460,0x3e789e68,0x3e7d14ea,0x3e814fd9,0x3e84afa1,0x3e879b3b,0x3e8bffa0,0x3e89dc0c,0x3e871fb7,0x3e7fe418,0x3e80d105,0x3e955dbf,0x3e8602f6,0xbdb41e6d,0x3e47b547,0x3d78dbd8,0x3d8d8a54,0x3dff4f7f,0x3dd6cbd4,0x3e2a712f,0x3df98017,0x3d723363,0x3de2e600,0x3dfba89d,
......@@ -8135,7 +8252,124 @@ const uint32_t defaultHRIR_rom_AlphaR32[470 * 86] = {
0xb892db74,0xb88af9a7,0xb88a6cbe,0xb88a41a2,0xb8827f14,0xb873571b,0xb876e7d2,0xb854fb48,0xb83c0222,0xb835053a,0xb8970a07,0xb89728c6,0xb8b6afe9,0x3804ec84,0x37ad7180,0x3813e900,0x38191b72,0x3817282a,0x38186b27,0x3817a41a,0x381b07dc,0x381b744b,0x37991c1f,0x38095eed,0xb8cf5366,
0xb8bc0110,0xb8d19251,0xb87aec31,0xb89b795a,0xb89af234,0xb89ebc16,0xb8a175f3,0xb8a3ff76,0xb8ab6f04,0xb8a32bc6,0xb89d5000,0xb892c0d3,0xb88a5152,0xb87e46a7,0xb8674c9c,0xb8618dd6,0xb858a586,0xb84b003f,0xb841aeb8,0xb89d064e,
};
const uint32_t defaultHRIR_rom_EL32[HRTF_MODEL_N_SECTIONS * 470] = {
0x3ea949d7,0x3e9e9e1b,0x3eaad36e,0x3e968ec6,0x3ea57d26,0x3eab1dcf,0x3eb44268,0x3eb925e2,0x3ec125cc,0x3eb46cfb,0x3eaddeaf,0x3ea72cfe,0x3ea16e08,0x3e9c9033,0x3e98340f,0x3e95698b,0x3e924505,0x3e8f2d4d,0x3e8bb504,0x3e81927f,0x3e916ed6,0x3e8d691a,0x3e952461,0x3ecc76c5,0x3e88ca6b,
0x3e8f4874,0x3eb998a6,0x3ebc79c9,0x3eb7e9c5,0x3ea883fd,0x3eb92f39,0x3ebfaee3,0x3ebbeebc,0x3e949d90,0x3e9323ca,0x3ecc82e4,0x3ea7e5e5,0x3ed6e55e,0x3ede2341,0x3edfd603,0x3f00029f,0x3f0c5c00,0x3f1cc904,0x3f2736fb,0x3f2fda5f,0x3f1a82a9,0x3f0b5757,0x3ef97e3f,0x3ee19c7b,0x3ecf3dd5,
0x3ec1cbb8,0x3eb7d5a0,0x3eaddcb3,0x3ea565ec,0x3e97b659,0x3e8a2c09,0x3e884bb5,0x3e87446c,0x3e4c2da2,0x3e541451,0x3e348361,0x3e2de453,0x3e37f8b2,0x3e3745ed,0x3e4880c2,0x3e43aa36,0x3e47e138,0x3e488bce,0x3e3ef5ad,0x3e581338,0x3e64b2ea,0x3e8074ba,0x3e950746,0x3ebb764d,0x3ee9a40e,
0x3f1ef55e,0x3f3304cf,0x3f5769b9,0x3f7a6d70,0x3f88afa7,0x3f98ca8a,0x3f7fed69,0x3f5fc85f,0x3f411510,0x3f244f51,0x3f0e9f1b,0x3ef90951,0x3edf5c20,0x3ec5c55d,0x3eb195d5,0x3e8f0457,0x3e782c46,0x3e3bd2f3,0x3e2e50ce,0x3e084f2d,0x3e002303,0x3dd5bccb,0x3dc4fb4e,0x3db5233e,0x3dbeaae2,
0x3dc73daa,0x3ddf8b77,0x3db408d0,0x3dcbf93d,0x3ddebb04,0x3e042790,0x3e1cd871,0x3e558dc8,0x3e8d329d,0x3edc55ee,0x3f1f91ae,0x3f646bf6,0x3f89309d,0x3fadfa07,0x3fc8ed30,0x3fe628f0,0x3fffd1cf,0x3fc60734,0x3f9d08ce,0x3f6f0bdf,0x3f36e826,0x3f11c33a,0x3ef5f55e,0x3ed646e6,0x3eb7bc22,
0x3ea1aa6a,0x3e71f591,0x3e4154d0,0x3e0ea292,0x3de6b8f5,0x3d9d7d15,0x3d8a95ba,0x3d3beaa6,0x3d1b0ff8,0x3d0732a8,0x3d1a9b9d,0x3d2d4ff1,0x3d39e2bc,0x3d12e9a6,0x3d12b4e1,0x3d46d7ac,0x3d964747,0x3e0829b0,0x3e27443c,0x3e81049e,0x3f7d4c5e,0x3fd0c51c,0x4006822e,0x4012dcdf,0x40227e01,
0x4014db00,0x400f1b9e,0x401058a5,0x401a9143,0x40265aa7,0x40296650,0x40283a34,0x401c3707,0x400b8f28,0x3fd472d2,0x3fa2ce4b,0x3f832cc2,0x3f214ea0,0x3ed1c5db,0x3e809b4c,0x3e3cb9a3,0x3de0ce40,0x3da06a01,0x3d5b46af,0x3d361b10,0x3d1b1c49,0x3d44ecec,0x3d4b25c2,0x3d50f054,0x3d4e4c6b,
0x3d85ffac,0x3dd6bd4e,0x3e1d6b3e,0x3e66df58,0x3ea102fa,0x3f0f5aed,0x3f91f2c1,0x3fb40b5b,0x40646f0a,0x406b6f6c,0x40672898,0x4031f271,0x402604e6,0x4034385c,0x40398cd0,0x403eaf95,0x4043f6aa,0x40409b5d,0x40371f04,0x40275acc,0x3fff1879,0x3fb754c4,0x3f82bbec,0x3f2349a1,0x3ef9b368,
0x3e9f2346,0x3e892203,0x3e2898a2,0x3de47af7,0x3d89c034,0x3d5239db,0x3d3551bc,0x3d5746cb,0x3d7960c6,0x3d9abc0e,0x3d8e70ad,0x3da2004c,0x3ddcacb4,0x3e123f7c,0x3e4fd66c,0x3ead1b84,0x3f0dad32,0x3fb0fc41,0x401aebec,0x409a1704,0x408302a2,0x407ffff7,0x4025a20b,0x401cb702,0x4033d5f0,
0x402df25c,0x40376abc,0x404be08d,0x4045547d,0x4034bcd0,0x401a93a0,0x3ffea26d,0x3fc1f714,0x3f9073d1,0x3f3270b0,0x3f0aa60e,0x3ea59cb8,0x3e8d782b,0x3e4ced45,0x3e44e9ab,0x3dea46c6,0x3db65f72,0x3dd4cc8c,0x3dad44af,0x3dbeda43,0x3e1d73c8,0x3dad1f32,0x3dac30ee,0x3de91bae,0x3e6fd667,
0x3e87c367,0x3f216d28,0x3f065daa,0x3f94dce2,0x40304987,0x403a6f75,0x400d291a,0x40124812,0x3ffa42b0,0x40085520,0x40265cd9,0x4025bf7c,0x4028e41a,0x402029d2,0x401d1e11,0x400ff35d,0x3feb809b,0x3fbef783,0x3f8d9515,0x3f44a251,0x3f122074,0x3ef40a2a,0x3eb24039,0x3e911f85,0x3e523550,
0x3e40fc56,0x3e06df0d,0x3dd22833,0x3db95d5b,0x3d9b735b,0x3dbf0be1,0x3e76a1a0,0x3dd8714d,0x3db897d0,0x3de74109,0x3e093df2,0x3e535ddd,0x3e956a4d,0x3ef7a465,0x3f6f4708,0x3fb9717b,0x3fd358a4,0x3fe93e16,0x3fed3332,0x3fea705b,0x3fed71a0,0x40043ac1,0x3ff8a755,0x3ffe9b92,0x40051e7d,
0x3ff4d6ce,0x3fd80510,0x3fb1ed3a,0x3f83ad3c,0x3f469a6a,0x3f26cb49,0x3f0e1467,0x3f03b4b8,0x3ee38399,0x3eb44ba0,0x3e87aec0,0x3e4804e6,0x3e24c82c,0x3e0a4c24,0x3dd6c9d8,0x3dc674f0,0x3dd92d96,0x3e26bb9d,0x3df1a7e0,0x3dfe6a19,0x3e162a57,0x3e3f12a2,0x3e6b8a0b,0x3ea31714,0x3f47cb50,
0x3f6030c7,0x3f7b63d5,0x3f9afb36,0x3fa70a58,0x3fb1bc0a,0x3fc22372,0x3fc7b6e4,0x3fc68875,0x3fc48fc6,0x3fbe5d2a,0x3fb2517a,0x3f9b6e1a,0x3f85b6a5,0x3f646e2c,0x3f46d593,0x3f28364a,0x3f1105b1,0x3f063f28,0x3f10ae9c,0x3ed36154,0x3ecc7964,0x3e9bc7af,0x3e8d477f,0x3e4b4da5,0x3e16a635,
0x3dfd081d,0x3dfc87a6,0x3e0843b5,0x3e174652,0x3e1615be,0x3e16208b,0x3e19f4e4,0x3e42b577,0x3e84dfbe,0x3ea59da7,0x3f03c265,0x3f216eba,0x3f4de3fe,0x3f74c17c,0x3f87e1f0,0x3f9d2063,0x3f9b7831,0x3f9ea498,0x3fa5cc27,0x3f99a529,0x3f91e490,0x3f8dc4ac,0x3f800406,0x3f6aa891,0x3f55b3ef,
0x3f40979b,0x3f2c61c9,0x3f1cac17,0x3f0e3177,0x3f0f195d,0x3ef46e30,0x3ed82e3d,0x3eb27154,0x3e9c78f3,0x3e84e650,0x3e8048c3,0x3e59f560,0x3e64601e,0x3e56c4ae,0x3e6d39b2,0x3e39ec71,0x3e68b45d,0x3e4c4839,0x3e89b44d,0x3ea8a2ad,0x3ee0156f,0x3f04383b,0x3f57de18,0x3f4817c8,0x3f3d8a6e,
0x3f484be1,0x3f51b3bb,0x3f5cf774,0x3f6a830e,0x3f7c74e3,0x3f70aecf,0x3f6a4c6d,0x3f6257b9,0x3f594409,0x3f510224,0x3f48ad3e,0x3f3d782f,0x3f318cb9,0x3f2881dc,0x3f208b2c,0x3f16a0bb,0x3f165428,0x3f1e0145,0x3ee3e1d6,0x3eeca79e,0x3ed863d6,0x3ec6d3a2,0x3ed1eac1,0x3ed5a321,0x3eea8fbf,
0x3ed8c5c7,0x3eee18ad,0x3ee8c70f,0x3ed160b3,0x3eecff85,0x3efa86bd,0x3f088bc4,0x3f1bb6ce,0x3f2e2455,0x3f408a4e,0x3f23cf8b,0x3f2f482b,0x3f2f3548,0x3f33c546,0x3f363d85,0x3f3b7bc3,0x3f35a8ea,0x3f326b69,0x3f2f0360,0x3f2c425e,0x3f29e130,0x3f27fac2,0x3f25d20a,0x3f23f612,0x3f21349e,
0x3f1fbc33,0x3f15cbbd,0x3f2fa0fa,0x3f224010,0x3f2e20b6,0x3f78668a,0x3f1cb390,0x3f249834,0x3f5eafd1,0x3f653827,0x3f5ea74f,0x3f4ab775,0x3f5f939e,0x3f64bad6,0x3f5b7d64,0x3f299928,0x3f28bd1b,0x3f774df7,0x3f3c07e0,0x3f4e1208,0x3981d91f,0x394eea09,0x3930056d,0x394cbf08,0x395a29b7,
0x3938ab32,0x39854dfd,0x3981ea72,0x3936a35a,0x39480faa,0x392789ab,0x38e0dc4c,0x38d83cb3,0x38faf815,0x39481e83,0x3954a164,0x396c3ff6,0x397085e7,0x397eff50,0x398a10f7,0x3999aa24,0x39a1755c,0x399f428a,0x39a323b3,0x39666283,0x395117f5,0x393e677a,0x3980910d,0x398acdb3,0x3996e2b4,
0x397f7c8a,0x396cfa3c,0x39607e98,0x3944d1cb,0x394fc9df,0x39bd72c7,0x396b4714,0x39b90f06,0x3972b76a,0x396b9bbf,0x394be8cd,0x39142134,0x39a73ba6,0x39b518b9,0x39253585,0x39766e4b,0x39336d08,0x392ec619,0x38d2ae74,0x38f4df18,0x398f360e,0x3990920e,0x39b90bbe,0x39b38935,0x39d27b4d,
0x39ff87d9,0x3a1c0fdf,0x3a31644a,0x3a2d97ff,0x3a2404b2,0x39bb0a95,0x3981cfdc,0x3957505a,0x39bce4d9,0x39edc5fb,0x3a056709,0x39d0c26c,0x399a548b,0x397797ce,0x392b6ce7,0x397e7e97,0x3a66ab6c,0x39f2bd88,0x39e1bd0b,0x3a042d10,0x39c145a9,0x39dac6e7,0x3998594c,0x3a46514d,0x3a384a10,
0x3914fcbc,0x39a2bc4f,0x3968e759,0x3a3c6d73,0x3a050a1a,0x39fbc953,0x3a4e6e95,0x39e62b07,0x3a091eab,0x39ed49d3,0x3a1c5cea,0x3a56c771,0x3a8ff64a,0x3aad9a95,0x3ab4cb54,0x3aaaaf29,0x3a21c6fe,0x39a50b01,0x399c2d49,0x3a2e2f6a,0x3a6349f7,0x3a8f2c65,0x3a458f27,0x3a0ba3b6,0x39c2a4a4,
0x398dc0ea,0x39a093a1,0x3ae313e2,0x3a02c621,0x3a99831b,0x3a43f6fc,0x3a0d254a,0x39a94928,0x3a2debf9,0x3a8afff1,0x3a908b75,0x39a33ebc,0x39ca504a,0x3a2c41aa,0x3b343e5f,0x3b273a16,0x3b14b786,0x3b0706aa,0x3a92c416,0x3a8f30fa,0x3a615687,0x3a8dfbe4,0x3ad1d135,0x3b0ce35a,0x3b273a48,
0x3b28f3c7,0x3b36b9cd,0x3acb10c9,0x3a59bbd0,0x3a1e19ff,0x3a8e4b85,0x3add4b28,0x3b0d831b,0x3ac87948,0x3a977915,0x3a15283c,0x3a6d3f79,0x3a30b647,0x3b92e1bb,0x3afd13ea,0x3bfbf38e,0x3b0e5c95,0x3ab5a938,0x3b514f67,0x3c1954cc,0x3b8c5113,0x3b16de45,0x3ab30305,0x3b27c65f,0x3b044fce,
0x3b69464e,0x3b52935d,0x3b3d27d9,0x3b00c622,0x3a487988,0x3a28cc87,0x3a2a02a2,0x3a242879,0x3a4e4f04,0x3a99c9dc,0x3b0dba8a,0x3b2356fe,0x3b2e3e2a,0x3ac80ff1,0x3a8e9653,0x3a68393a,0x39c574e8,0x39f8fed0,0x3b0b8895,0x3ae4e609,0x3b15de8a,0x3b12b86e,0x3b3c946e,0x3aaa5dfd,0x3b5c9aca,
0x3bc2f373,0x3c225987,0x3c55d372,0x3b1bc057,0x3b115b72,0x3c098e24,0x3be33234,0x3b7f074e,0x3b5ae9db,0x3a9f7a67,0x3abc817b,0x3aca6dd5,0x3a8c65d2,0x3a7b8a5e,0x3a38a694,0x3a4c96b2,0x3a71f526,0x3a3543da,0x3a15f49e,0x3a305644,0x3a5e0da5,0x3a362cf8,0x3a1fb89c,0x3a377fa2,0x3a5a97d6,
0x3a2af5af,0x39f768b1,0x3a4c7972,0x3a761847,0x3a7811da,0x399b3d29,0x39ca2c9a,0x3aaf859f,0x3b2b7302,0x3b1a019f,0x3b6ba0f9,0x3bff8aa9,0x3b8e4277,0x3bb880e2,0x3b70c6f0,0x3b66149c,0x3b446adb,0x3b8e421c,0x3b2c3d78,0x3b8c3ed7,0x3b4c9b45,0x3b261d0a,0x3ab0c73b,0x3a383925,0x3a117dfb,
0x3a5031be,0x3a61f118,0x3a49f2d7,0x3a157baa,0x3a60c720,0x3a5904c7,0x3ac7b4ef,0x39a26a2e,0x394315a6,0x3a02d95a,0x39cc1712,0x39527f5a,0x39793c37,0x3941eafb,0x389aa36f,0x3897aad6,0x39d00f4a,0x3a342dfb,0x3a584855,0x3a924077,0x3ae9c146,0x3b2422ac,0x3b4cbdb3,0x3c289d12,0x3c56a865,
0x3cb67aee,0x3ca5fa21,0x3c2b7d6b,0x3bb4e6ab,0x3b74d661,0x3b6856b1,0x3b0fdf91,0x3afcc6b9,0x3aea86ec,0x3aa16cc3,0x3a97a74f,0x3a5015e9,0x3a3941d6,0x3a2a5c8f,0x3a28a0bf,0x3a42cb64,0x3a2eda97,0x3a6c76a4,0x3a0390e2,0x3a0a6a4e,0x3a01a091,0x3a01d53e,0x39a575ab,0x3975264c,0x38f1522f,
0x390e4bc1,0x3979b0d4,0x399c04bc,0x39d9b601,0x3aa04462,0x3a8a0957,0x3b10323e,0x3ba3cbee,0x3c004420,0x3c9b3b0b,0x3ccec1a6,0x3caf4452,0x3c5db7a4,0x3c0ce6b4,0x3bea9c76,0x3bfb5430,0x3bb9e008,0x3b587371,0x3b165df8,0x3ad54c8a,0x3ab88cb1,0x3a8c6e39,0x3a5d5732,0x3a1c813c,0x3a0c6a2c,
0x39f02544,0x39f387ba,0x39e72622,0x39b6eb7e,0x397745fc,0x3956ff08,0x39bf8561,0x3943794e,0x39451aa8,0x39b73271,0x3949b35b,0x3974f61f,0x39be2d3b,0x3a4c47c3,0x3ad02c9b,0x3b38b4bc,0x3c05ca00,0x3c426eac,0x3c47c442,0x3c6d5392,0x3c600404,0x3c4f06d5,0x3c3c3463,0x3c1519e3,0x3c0c5f1a,
0x3c1459fe,0x3c064779,0x3bd6162f,0x3b8d0eb8,0x3b828365,0x3b82e3d0,0x3b8ccf65,0x3b846906,0x3b370ea2,0x3b2f7e89,0x3b16bfc9,0x3aea1977,0x3ab8d38a,0x3a6aafe5,0x39af6b7e,0x39d59d75,0x39acedbc,0x399f2e58,0x39a390a0,0x3a263ed5,0x3aac59f6,0x3af7fe6b,0x3b3098b9,0x3b5f4e3d,0x3ba93fc2,
0x3bdef662,0x3c038266,0x3bf84924,0x3bf701ea,0x3c14aff4,0x3c306430,0x3bdec784,0x3bf757ba,0x3bf2503a,0x3c036e81,0x3c2165e7,0x3c10c79d,0x3c1ceb3b,0x3c3db0d4,0x3c0ab8af,0x3bd35687,0x3bc1c364,0x3b9f60b7,0x3b83969e,0x3b5d64f1,0x3b309acc,0x3b127b2e,0x3af67965,0x3aa8209b,0x3a5790ea,
0x3a143a1c,0x39dac4ac,0x39a25e33,0x3a0bd002,0x3a3e4214,0x3a9aa49b,0x3af3758c,0x3b186f23,0x3b3b7056,0x3b7bf7a0,0x3b8478da,0x3b94e9e0,0x3baf481e,0x3bbaf049,0x3bd2781b,0x3beca121,0x3be2e10d,0x3ba35c28,0x3ba00dd2,0x3b94a348,0x3b8c7260,0x3b87f07d,0x3b87495e,0x3b88d3bc,0x3b91da47,
0x3b834caa,0x3b8227f4,0x3b753ee4,0x3b69602d,0x3b5a3e43,0x3b54a725,0x3b2f99b9,0x3b11258f,0x3aea9cde,0x3abd7cd6,0x3a92710d,0x3a58d503,0x3a7a6872,0x3a78c541,0x3a8fc9cf,0x3aa1289c,0x3ac6e716,0x3aec26a3,0x3b0c171c,0x3b23c16a,0x3b3d2853,0x3b57a615,0x3b7707a1,0x3b8cb56a,0x3b8d4236,
0x3b906460,0x3b91e22f,0x3b95ab23,0x3b6f66e2,0x3b6eae15,0x3b69e8ae,0x3b6ab44a,0x3b68a86f,0x3b6f87ea,0x3b739746,0x3b7abc1b,0x3b70e9d2,0x3b68ae3f,0x3b6396d8,0x3b58e56e,0x3b50e28a,0x3b4c4992,0x3b3e2880,0x3b337a29,0x3b296287,0x3b1c8612,0x3b13cf2e,0x3b02e502,0x3b129c94,0x3b1b9135,
0x3b2cd589,0x3b20afff,0x3b2bd018,0x3b3d45d3,0x3b439764,0x3b484b0e,0x3b4fc9f2,0x3b584ca0,0x3b61f60b,0x3b6e853a,0x3b679204,0x3b650736,0x3b7a30bf,0x3b719024,0x3b8a967a,0x37478792,0x36fed3eb,0x370c8bbc,0x37367266,0x37656ba7,0x37c3a48d,0x375faf10,0x37200468,0x36796731,0x37450488,
0x3780b49c,0x37ab8ff5,0x37793cde,0x3789c61a,0x37d1fa89,0x37dfa813,0x37d4381b,0x37a25090,0x37410619,0x3713c88a,0x370e1c41,0x370f7e39,0x371bad78,0x37404e70,0x378453ff,0x3764b25d,0x368e1899,0x3717c2b6,0x3708d730,0x370dd7ef,0x36bbdfa7,0x367c5c59,0x36e42e54,0x3698de59,0x36dcc3f8,
0x37844a23,0x3708fd32,0x370c5e47,0x374960ca,0x380c16c3,0x3861c57e,0x38ca380f,0x387934f1,0x38173631,0x36e9a106,0x37c52485,0x37f83430,0x3877e619,0x37e42875,0x386d271e,0x3908eaaa,0x392fe310,0x3925b2be,0x38d51552,0x3850d429,0x38044fcd,0x37f54dfb,0x37bab5d2,0x378a34d9,0x37bd25cd,
0x383a289e,0x3829e169,0x37421f6f,0x37d0ec5e,0x37da2e40,0x38270e61,0x3817ed84,0x37f14c77,0x3815ee57,0x371b50ad,0x36d66634,0x383cf40c,0x372d67a0,0x367ef215,0x37dfa438,0x3857a96f,0x38eaa0ea,0x395e1c85,0x393025c8,0x38dead0f,0x382b20dc,0x38605dff,0x38bc91fa,0x3956117f,0x38d5dac7,
0x3908a8ed,0x3997d82f,0x39a00e1a,0x39915cec,0x392c5645,0x3870efe9,0x38242a95,0x385eac56,0x37fb6f3e,0x37b55ed6,0x381a9279,0x38c86801,0x3893dcbc,0x38b6cd3c,0x388c78f2,0x3907b40f,0x39ac9065,0x39a563dd,0x3962a26f,0x392189f2,0x380691d5,0x371a4d3c,0x38dbca08,0x37016452,0x3860d533,
0x3805d7be,0x3969c184,0x39d7ba1d,0x3a4ac4a9,0x3a0fd11a,0x39b9ac58,0x38ff66ad,0x38bb9574,0x38dae1c3,0x39ee6b45,0x38eb2cf4,0x39d47578,0x3a99afb8,0x3ac0f562,0x3aaa405b,0x3a59fd07,0x39d742b4,0x39a87c1b,0x39a848a1,0x39466759,0x38a92648,0x39254ddc,0x396371c7,0x39181eed,0x38d70069,
0x38c86f00,0x38daa8b0,0x39744f0a,0x3a046c6a,0x39e74760,0x39ca8ae0,0x3969fa5a,0x38a21637,0x39c2f7ee,0x38c5e45a,0x3a52ea76,0x3a445989,0x3acd17ee,0x3ac624fa,0x3aa9f06f,0x39fed80f,0x3961ef41,0x39a3542e,0x39278124,0x3a1c0311,0x3a9f0369,0x3a91b0c0,0x3a72417a,0x3ac1e6d8,0x3a9f75ba,
0x3a7594a7,0x3a6c8108,0x3a7919c7,0x3a95f3b4,0x3a8ca76b,0x3a595fac,0x3a0fd900,0x39e3b1d1,0x3963bb0a,0x38c32225,0x38d5ba68,0x38d89754,0x390e09d7,0x3778268d,0x37a50bf2,0x3958e215,0x3a10a129,0x39f9da64,0x39dd1ab3,0x3994dc0e,0x3a06a240,0x3a8f58c1,0x39ed344f,0x39e17f33,0x3a0adab7,
0x3a99c873,0x3ac97dc8,0x3ad3beaf,0x39eabd59,0x398d2b10,0x39a11f77,0x3abf76c0,0x3a891348,0x3aab6780,0x3aa1e1d6,0x3a2a3a1d,0x3a182764,0x39da2cb6,0x39c52c08,0x397c0f78,0x3998796e,0x38e3814b,0x387d050a,0x3813cf28,0x37fda665,0x372ed78e,0x38622626,0x3888b9c4,0x38b77080,0x38217086,
0x3763ae74,0x38c02b3e,0x39c07582,0x3abb34e2,0x3ab0ff77,0x3a3ee17c,0x3a0f45dd,0x3bbc1d71,0x3c2bcaf6,0x3b207bf1,0x3a2e1eae,0x3af474b8,0x3abaa6bc,0x3ac354bf,0x3afc333d,0x3ac1514c,0x3ac2210b,0x3a9249fe,0x39c69260,0x3a1bd13e,0x3a447380,0x3a050bb6,0x39eaa96b,0x39a0604d,0x394281fd,
0x38cf44f0,0x38bda8f3,0x38145197,0x37d90894,0x388d470e,0x3880791f,0x3823a6a6,0x3849d7e6,0x361d75bb,0x37618d3e,0x36acf63a,0x37b2d32e,0x3885c9cf,0x38f39c8f,0x38c3bf01,0x38dff582,0x39f95652,0x3b264077,0x3b2a60e7,0x3bb1e2b3,0x3afa805e,0x3a58314a,0x3a8e6125,0x3a82fcd6,0x3a3c09fa,
0x3a7c4686,0x39f99dee,0x3a114635,0x39b093ab,0x39052509,0x3974ea84,0x399f7927,0x3987749f,0x3953b8c9,0x394c25d3,0x3923066f,0x39453539,0x394f27f6,0x39327374,0x390f1dc5,0x38d6b5bf,0x37b0f9e8,0x35c5aedd,0x36d18bdf,0x361c4a46,0x36b97c65,0x36fd7cd6,0x35c33bf9,0x365475a1,0x3878a575,
0x38b917fc,0x38fb697a,0x3a93f343,0x3b11e344,0x3aa74282,0x3a95eedf,0x3a43978c,0x3a1ea414,0x3986f63c,0x39178ab8,0x399e5793,0x39c4391f,0x3a185289,0x3a3c3a99,0x3a49fb2b,0x3a267925,0x39eb542a,0x39af9264,0x39022459,0x382a9088,0x388cc16c,0x3921cd09,0x39874a15,0x39b5d044,0x39c553cf,
0x39a74d8d,0x39866069,0x38db0d2e,0x3809264f,0x36b3c9e1,0x37093776,0x37789cb8,0x379561d5,0x37d9154c,0x37d84530,0x38394589,0x376c948c,0x38106fb3,0x394728cd,0x3a67b2c8,0x39d54121,0x39f0d8a0,0x3a0608eb,0x39f67ef1,0x39dae3f4,0x39c091f1,0x39d282ec,0x39fedef7,0x39e8229f,0x39ee825c,
0x3a06850d,0x39f3c714,0x39cb7bb1,0x3986fc79,0x392118ef,0x38829b34,0x37d5e3f0,0x37f2c744,0x38555121,0x38ca3338,0x38e5f4c0,0x38b605f8,0x387a56eb,0x3878bec0,0x386fc69d,0x385e9056,0x381fc05c,0x388ad231,0x38bca311,0x3908cc87,0x391e1f24,0x391bfa16,0x39500643,0x39839a54,0x39943554,
0x39abc85f,0x3994d7ba,0x399a142b,0x39848a28,0x394b4f2f,0x390f295c,0x38c5b290,0x38bcfdc6,0x38dc4467,0x38bb0db1,0x38af2593,0x38c8e072,0x38655ae1,0x38442442,0x3889e43c,0x386ef822,0x3879fba1,0x389682f6,0x38907dc0,0x389fb45c,0x38c076ff,0x38d7d68b,0x39004d94,0x391adb3e,0x38f3bbe8,
0x38fc349d,0x392e20f8,0x391552ad,0x391ad829,0x3938e525,0x393ea547,0x394fb01d,0x39839f3e,0x398655b2,0x39a0373e,0x39b6e344,0x399c4950,0x395d2456,0x39560cd9,0x3938a4ac,0x391f613e,0x38fe53aa,0x38cbf61e,0x38a94caa,0x38b1971c,0x38ac21a1,0x38b13b92,0x38aedf5b,0x38a78f99,0x389d16c9,
0x38a349fc,0x38a53854,0x38b2d699,0x38c5a968,0x38e00a4a,0x38fc80d7,0x390ee5ce,0x390d955d,0x390b1e30,0x39163d03,0x3926b467,0x393f0e87,0x395dd5a7,0x395418d5,0x39598456,0x3966741b,0x396fb66a,0x3982fc2c,0x399012a2,0x3980a2e1,0x39647081,0x395f6873,0x394bf9d4,0x38e43c83,0x38d9f2b9,
0x38cde27d,0x38be700a,0x38b81225,0x38b0ce50,0x38ac59c0,0x38a4cc5c,0x38a565f1,0x38a5f118,0x38ac6bbb,0x38b2b675,0x38bc47c6,0x38c4d8d9,0x38cd60a1,0x38d45c3b,0x38db9bd1,0x38e43244,0x38ed722d,0x38fcf893,0x38fc59d5,0x3900b7c9,0x39043ca1,0x3903508c,0x3906c8ca,0x391561bc,0x39103a9f,
0x390f5efc,0x390abf30,0x390b73d6,0x39096d39,0x390d880e,0x38fbee8d,0x38f109a0,0x38f7ba96,0x38f04951,0x390e1d14,
};
const uint32_t defaultHRIR_rom_ER32[HRTF_MODEL_N_SECTIONS * 470] = {
0x3ea94952,0x3e96b3de,0x3eac0098,0x3e9ec499,0x3ea82449,0x3ece0959,0x3e92fb80,0x3e94d96e,0x3ebb6806,0x3ebf2c5a,0x3eb94743,0x3ea8ba76,0x3eb7f274,0x3ebc8a4a,0x3eb985ae,0x3e8f3492,0x3e887542,0x3ecc104d,0x3e94f3ad,0x3e8d6ef0,0x3e919f3e,0x3e81a12c,0x3e8ba934,0x3e8f3162,0x3e92443b,
0x3e956946,0x3e9833cc,0x3e9c90fc,0x3ea16eac,0x3ea72c23,0x3eadda5d,0x3eb46de7,0x3ec12deb,0x3eb9255c,0x3eb43e2b,0x3eab26c8,0x3ea559b8,0x3edfbfe1,0x3edb5589,0x3ed8a3c0,0x3e95cf33,0x3e80cd54,0x3e62c244,0x3e577b07,0x3e3e0c11,0x3e4710c1,0x3e48be20,0x3e44185a,0x3e490da3,0x3e376856,
0x3e376849,0x3e2dea5f,0x3e35e973,0x3e540232,0x3e4af4c1,0x3e879a69,0x3e87aff5,0x3e8a2d54,0x3e97cb79,0x3ea557d0,0x3eade49b,0x3eb7d211,0x3ec1cfef,0x3ecf39a9,0x3ee19c3f,0x3ef97f9f,0x3f0b5d8f,0x3f1a80d7,0x3f2fcb9c,0x3f2733f1,0x3f1cdcf0,0x3f0c3d91,0x3f003aa6,0x3f1db3c8,0x3eeec08f,
0x3ebc39c9,0x3e8d7016,0x3e55103a,0x3e212045,0x3e041073,0x3de06a68,0x3dcaee14,0x3db21b35,0x3de025f2,0x3dc5b1d3,0x3dbf13a0,0x3db5a917,0x3dc48155,0x3dd212b5,0x3e000fef,0x3e0845c3,0x3e2d8de1,0x3e3dff7b,0x3e771d7b,0x3e8f28dc,0x3eb18a83,0x3ec5c3b9,0x3edf6074,0x3ef8fe68,0x3f0ea3c8,
0x3f24508d,0x3f4113cc,0x3f5fbffa,0x3f7fedc5,0x3f98e082,0x3f88af16,0x3f7a4b75,0x3f579368,0x3f32fd61,0x3f6ee325,0x3f16b6e8,0x3edb45ae,0x3e7b6fc1,0x3e2c28b1,0x3df2985a,0x3d99338c,0x3d410c60,0x3d1101d6,0x3d13217b,0x3d39c9bb,0x3d2bc320,0x3d1b0c6e,0x3d06a87e,0x3d1d1fa1,0x3d3f43c2,
0x3d8c5283,0x3d9d3131,0x3de71ae8,0x3e09a006,0x3e45cbd3,0x3e6f6616,0x3ea2888e,0x3eb75081,0x3ed6788c,0x3ef5eb98,0x3f11c219,0x3f36df6c,0x3f6f13d7,0x3f9d08c4,0x3fc621d4,0x3fff5b3d,0x3fe687d9,0x3fc87e03,0x3faebae2,0x3f87681d,0x40111ab0,0x3fb99833,0x3f83ae3b,0x3f0030e2,0x3e9f539f,
0x3e55721e,0x3e226067,0x3dd144c5,0x3d8753ba,0x3d4c95ee,0x3d509c62,0x3d4b16e2,0x3d44135e,0x3d1f6925,0x3d2ecedb,0x3d5b63db,0x3d9b2164,0x3de57bae,0x3e38e02a,0x3e71eafd,0x3ed98e76,0x3f1f30d1,0x3f83f206,0x3fa27000,0x3fd4af4a,0x400b63fa,0x401c4dc6,0x402843ac,0x40295bbd,0x402662f0,
0x401a91a2,0x4010244d,0x400f9138,0x4013dfb8,0x4024a4f4,0x400eaabc,0x4070f4c2,0x3fa0eb2b,0x3f92314b,0x3efc170f,0x3eb96b6b,0x3e548e04,0x3e044991,0x3de32f8d,0x3d9dd8bc,0x3d8fe1c4,0x3d98a21c,0x3d785e8f,0x3d586f0e,0x3d376712,0x3d508001,0x3d85da29,0x3df0440c,0x3e2a1c76,0x3e86773b,
0x3e9be714,0x3efdd2cc,0x3f220612,0x3f83331d,0x3fb70894,0x3fff58cf,0x40272268,0x4037365b,0x4040a7d2,0x4043fd16,0x403ebb9d,0x40398690,0x40340a76,0x40265f59,0x4030dc56,0x406a2bf7,0x4064d3b9,0x40a37d56,0x400ac9ff,0x3fc4d80f,0x3f0e722e,0x3f1757a1,0x3e8c749b,0x3e5d8653,0x3de8d03b,
0x3dacae87,0x3db0f0d2,0x3e1ec313,0x3dc14d08,0x3daadb0a,0x3dd34d53,0x3db22a32,0x3df43908,0x3e3f6e32,0x3e4b14e0,0x3e8e68fa,0x3ea199fe,0x3f0cf9b6,0x3f311aaf,0x3f90eee9,0x3fc1a8ba,0x3ffee1f8,0x401a6e0d,0x4034d8c9,0x40455a4c,0x404bd922,0x40376165,0x402dfd56,0x40339d70,0x401d0d70,
0x40247f69,0x4081affb,0x407dd802,0x404ebf41,0x401378ae,0x3f988ed0,0x3f1184de,0x3ea141ae,0x3e58b307,0x3e062161,0x3ddfec30,0x3db8240d,0x3dd4d9d7,0x3e720891,0x3dbd5abc,0x3d9b1014,0x3dbdc353,0x3dd6b6d2,0x3e061032,0x3e440faf,0x3e5b3220,0x3e91b85b,0x3ea84532,0x3efb9aae,0x3f1008f7,
0x3f45dab1,0x3f8d3b93,0x3fbf316d,0x3feb48ba,0x401009c7,0x401d29ec,0x4020228b,0x4028ec93,0x4025c7cb,0x402635bf,0x400889ee,0x3ff8f714,0x4013efc7,0x4007409c,0x3fd0e908,0x3fc45007,0x3f813935,0x3f104b59,0x3ebbaaf3,0x3e6e18ce,0x3e2eabae,0x3e1d3709,0x3e0117b9,0x3df34882,0x3e22e52a,
0x3dd86c83,0x3dc72027,0x3dd41b7e,0x3e02d26b,0x3e27dd72,0x3e486285,0x3e7bf17f,0x3ec497eb,0x3edcde42,0x3f060b23,0x3f0d4e99,0x3f27189c,0x3f468167,0x3f83b8f5,0x3fb1cc02,0x3fd81858,0x3ff4ea13,0x4005176b,0x3ffea363,0x3ff8a889,0x40042bf8,0x3fed6e4e,0x3fea6a40,0x3fed65d2,0x3fe9b038,
0x3f98c734,0x3f7ead0b,0x3f434b58,0x3f002103,0x3ea802a5,0x3e8c1097,0x3e440883,0x3e17bddd,0x3e14ca6c,0x3e16c2c1,0x3e105658,0x3e084b9c,0x3dfc6b42,0x3e00527a,0x3e17818d,0x3e49bd0a,0x3e878869,0x3e997e8a,0x3ec503c5,0x3edfc4dc,0x3f0b5b15,0x3f08001a,0x3f104318,0x3f28879c,0x3f46b041,
0x3f6481b6,0x3f85b333,0x3f9b7624,0x3fb24b60,0x3fbe64ca,0x3fc488dd,0x3fc68498,0x3fc7b7f6,0x3fc24730,0x3fb1653c,0x3fa7d227,0x3f75c923,0x3f4dd03e,0x3f266662,0x3f064de3,0x3edc4ef3,0x3ea5812e,0x3e89474e,0x3e4b5b92,0x3e699005,0x3e3960aa,0x3e6cda0a,0x3e55d9a7,0x3e63f68d,0x3e572ff0,
0x3e7fe216,0x3e860046,0x3ea01815,0x3eb274be,0x3ed8c43d,0x3eeec9ab,0x3f1028c9,0x3f0e2013,0x3f1ca75c,0x3f2c6cf0,0x3f408ee7,0x3f55b64e,0x3f6aa2f5,0x3f800495,0x3f8dc2cd,0x3f91e6bf,0x3f99a696,0x3fa5cbee,0x3f9ea220,0x3f9b71e3,0x3f9d2c75,0x3f87c29c,0x3f3d50ab,0x3f48b831,0x3f52e198,
0x3f194a00,0x3f0a2718,0x3efc51bf,0x3eed3028,0x3ed0b5f6,0x3ee906fa,0x3eef02fb,0x3ed83025,0x3eea4bb2,0x3ed604ee,0x3ed3c857,0x3ec7b905,0x3ed8510e,0x3eed0ac2,0x3ee33cfe,0x3f1ca039,0x3f17b3c1,0x3f168da9,0x3f206c5d,0x3f2889ed,0x3f31863b,0x3f3d7b3f,0x3f48af5b,0x3f51025a,0x3f594208,
0x3f625c84,0x3f6a4abc,0x3f70ad48,0x3f7c7153,0x3f6a88f3,0x3f5cf60b,0x3f51b8bc,0x3f484f7b,0x3f23d3cf,0x3f3fc3ea,0x3f2f0ec0,0x3f3ab4a3,0x3f71ee8e,0x3f296937,0x3f294405,0x3f5b5c34,0x3f649c54,0x3f5fdb34,0x3f4abe09,0x3f5e78ff,0x3f6544d9,0x3f5ed998,0x3f247814,0x3f1c793a,0x3f7adfa2,
0x3f2e67ef,0x3f225526,0x3f2e8d0a,0x3f15b342,0x3f1fdc38,0x3f212f5a,0x3f23f893,0x3f25d228,0x3f27fa0c,0x3f29e19c,0x3f2c42c1,0x3f2f0299,0x3f326c20,0x3f35aa75,0x3f3b7c95,0x3f363c76,0x3f33c6c4,0x3f2f2f84,0x3f2f545a,0x3f4e103a,0x3981d983,0x394cb64d,0x39305111,0x394eed56,0x396b5a84,
0x39bdc9ae,0x394ff124,0x3944acc5,0x39602b8e,0x396c84b7,0x397f2b72,0x3996ad53,0x398a7bda,0x398087d5,0x393e7438,0x395155b7,0x39671586,0x39a32141,0x399ec789,0x39a14c76,0x3999b19e,0x398a10c8,0x397efcb4,0x397085a7,0x396c42fc,0x39549e75,0x39483ed7,0x38fb38ce,0x38d86761,0x38e0c350,
0x3927a8e4,0x39482d3d,0x39369036,0x3981cbec,0x3985347a,0x3938ac93,0x395a4256,0x396bcebd,0x39714884,0x39b93a3a,0x39f2b45a,0x3a65db16,0x397e314e,0x392b7613,0x3977f351,0x399ad1c2,0x39d1502e,0x3a059538,0x39eeda0b,0x39bcc267,0x39570f8b,0x3981c7da,0x39b9b658,0x3a23ef16,0x3a2e5494,
0x3a318aa2,0x3a1c0487,0x39ff7ddc,0x39d280a4,0x39b38b3f,0x39b9046c,0x399094e0,0x398ee61c,0x38f50049,0x38d2f0fe,0x392f8a4b,0x393344e8,0x39761aed,0x3925501b,0x39b5792b,0x39a78bf5,0x3914396f,0x394b89ce,0x39c149f3,0x3a04ab01,0x39e1d8f0,0x3a024208,0x3ae46bc5,0x399faa6b,0x398e61d8,
0x39c29123,0x3a0b427c,0x3a4506ce,0x3a8f1fce,0x3a62257c,0x3a2eab94,0x399cbbbe,0x39a4370d,0x3a23985a,0x3aaab07d,0x3ab423fc,0x3aad873f,0x3a8ffe15,0x3a56d208,0x3a1c5afe,0x39ed397b,0x3a092715,0x39e61ec8,0x3a4f06c0,0x39fb63b8,0x3a04ccef,0x3a3be531,0x39690103,0x39a30de0,0x3915398e,
0x3a37d817,0x3a45e380,0x39983d28,0x39db449b,0x3a0d5983,0x3a425ce1,0x3a9856c9,0x3aff268f,0x3b91273b,0x3a318d59,0x3a6b32e1,0x3a154c58,0x3a977867,0x3ac8c67e,0x3b0d850d,0x3add282b,0x3a8ded7e,0x3a1d3810,0x3a5d9da6,0x3ac62dce,0x3b37997c,0x3b29bd95,0x3b2766f5,0x3b0ce320,0x3ad1f13b,
0x3a8de1b9,0x3a6194d4,0x3a8f2288,0x3a92e7d3,0x3b064730,0x3b151b91,0x3b27bb9a,0x3b33d518,0x3a2cc123,0x39ca126b,0x39a222bc,0x3a912b8e,0x3a8b93af,0x3a2d53f4,0x39aa33b7,0x3ab65196,0x3b0e87a1,0x3bfc207e,0x3bc1ff30,0x3b5c59f0,0x3aac8796,0x3b3b14b2,0x3b1249f4,0x3b1608e7,0x3ae3892f,
0x3b0c2f90,0x39f75d68,0x39c42bea,0x3a6af381,0x3a8e523a,0x3ac689b1,0x3b30f1f9,0x3b240d4b,0x3b0d1e07,0x3a9aec3c,0x3a4ed0be,0x3a241c08,0x3a2a13f6,0x3a28b09c,0x3a48ec00,0x3affee5f,0x3b3df8d4,0x3b5360d3,0x3b69ec4b,0x3b047eb7,0x3b26d9e4,0x3ab25465,0x3b173aaa,0x3b8c41bb,0x3c197d2d,
0x3b50fc1f,0x3b1cf7b0,0x3c554ec1,0x3c23b4fe,0x3bfed11e,0x3b6c8713,0x3b1dedab,0x3b241596,0x3ab38d3f,0x39c4deed,0x3999b725,0x3a7952a8,0x3a752ece,0x3a4cb7b4,0x39f67669,0x3a2b686a,0x3a5c990b,0x3a374828,0x3a1d91d6,0x3a3a140f,0x3a5d5e21,0x3a302c36,0x3a15e46c,0x3a35a7c2,0x3a71c1f7,
0x3a4cd8ba,0x3a380135,0x3a7c4451,0x3a8cc7ff,0x3acadce4,0x3abd0714,0x3a9f05fe,0x3b58ff9f,0x3b7f8258,0x3be3a92d,0x3c095e28,0x3b110d68,0x3b726fc1,0x3bb864e6,0x3b8eeccf,0x3b45b9f0,0x3b204c57,0x3aec7ef4,0x3a903db5,0x3a5cb450,0x3a34878e,0x39c5ac2b,0x38965f94,0x389a76a3,0x3942b2ae,
0x397abc43,0x3953a8e4,0x39d01e63,0x3a01bd05,0x393b54ce,0x39a42f3f,0x3ac77c9e,0x3a57e486,0x3a6112b6,0x3a15a9fe,0x3a4a1a32,0x3a61fe0f,0x3a4fad96,0x3a11ca30,0x3a38b44b,0x3ab09985,0x3b263a9d,0x3b4cbcb8,0x3b8b6764,0x3b2cce4e,0x3b8ec447,0x3b445b90,0x3b656f56,0x3cb8ec5b,0x3c50d20f,
0x3c2d73a0,0x3c064382,0x3ba1aff4,0x3b0e0087,0x3a8df092,0x3a98125f,0x39d7d649,0x39a1323b,0x396f6c1b,0x390cd81b,0x38f27bd7,0x397cf70b,0x39a5441f,0x3a035ee0,0x3a0151aa,0x3a0a4139,0x3a05a988,0x3a6c0284,0x3a2e48cb,0x3a42dc3d,0x3a28f965,0x3a2a4c82,0x3a395faa,0x3a4f61cb,0x3a97f7f5,
0x3aa192f0,0x3aea9da2,0x3afcd3db,0x3b0fe219,0x3b67c038,0x3b74ed68,0x3bb471c7,0x3c2c4a00,0x3ca4886b,0x3caed00b,0x3cce83a0,0x3c9e2463,0x3c777686,0x3c42b913,0x3c44e72e,0x3c044f60,0x3b36c217,0x3acda9b2,0x3a49c521,0x39c225c8,0x397310f6,0x394836af,0x39bc9f4f,0x394547ae,0x39443a5a,
0x39c1a0f9,0x3959f090,0x39802342,0x39b6e31d,0x39e573d2,0x39f3b368,0x39f0b76a,0x3a0c54e9,0x3a1c92b8,0x3a5c8ae2,0x3a8ca06d,0x3ab8c447,0x3ad560a0,0x3b16521e,0x3b58a91c,0x3bb930ec,0x3bfc21ae,0x3beadf4b,0x3c0cded3,0x3c5dc7c1,0x3c3c7418,0x3c4de89b,0x3c57653e,0x3c314bc5,0x3c187099,
0x3bff673e,0x3bf5f0a0,0x3c0657d8,0x3bdc4000,0x3ba947b6,0x3b5f3e7c,0x3b309608,0x3af6c78b,0x3aada3ab,0x3a26f946,0x39a1d239,0x39a079c1,0x39ae29c9,0x39d54338,0x39b06663,0x3a69cf5d,0x3ab8de2a,0x3aea3fc0,0x3b16be3e,0x3b2f8078,0x3b370298,0x3b847c21,0x3b8cf18d,0x3b82c712,0x3b828cfa,
0x3b8d2a8d,0x3bd56b85,0x3c068d0c,0x3c1490f6,0x3c0c5d3b,0x3c14f158,0x3bf1e4d0,0x3bf920cb,0x3be35dd9,0x3bdf64e0,0x3be6ab5d,0x3bce2eea,0x3bbb1298,0x3badba82,0x3b957ddb,0x3b8515f3,0x3b7ba9fa,0x3b3baff9,0x3b18977f,0x3af33933,0x3a9ac960,0x3a3de3cc,0x3a0ccbaf,0x39a0713e,0x39d9da67,
0x3a152029,0x3a573854,0x3aa826d8,0x3af67512,0x3b127bee,0x3b309a7b,0x3b5d5c52,0x3b83a0d9,0x3b9f6cf4,0x3bc1c278,0x3bd34f0b,0x3c0ab893,0x3c3d9e5c,0x3c1cddef,0x3c10c180,0x3c215ff0,0x3c0381f6,0x3b94c4c8,0x3b9f4368,0x3ba14431,0x3b95295e,0x3b92b242,0x3b916f03,0x3b8db043,0x3b8d0b88,
0x3b7723d8,0x3b577aac,0x3b3d3797,0x3b23b06d,0x3b0c0901,0x3aec3346,0x3ac6fbfc,0x3aa13b58,0x3a8fa927,0x3a79ddc7,0x3a7b07d2,0x3a583fbc,0x3a927f5d,0x3abd8ab2,0x3aea8d17,0x3b112675,0x3b2f9865,0x3b54a014,0x3b5a34a8,0x3b695bb1,0x3b7530d2,0x3b822b00,0x3b8350d0,0x3b91e93c,0x3b88d94f,
0x3b874ce9,0x3b87f07e,0x3b8c6b1d,0x3b69df89,0x3b6f2635,0x3b70b068,0x3b72358c,0x3b79891e,0x3b64ccd6,0x3b6739cd,0x3b6e5686,0x3b61e0ea,0x3b585090,0x3b4fc2cc,0x3b484b27,0x3b439937,0x3b3d4189,0x3b2bc80d,0x3b20abc2,0x3b2cb917,0x3b1b6d77,0x3b128402,0x3b02ecb5,0x3b13d053,0x3b1c81eb,
0x3b2964b6,0x3b337aea,0x3b3e29ae,0x3b4c4d62,0x3b50e649,0x3b58e8ae,0x3b639cd9,0x3b68adec,0x3b70e3b2,0x3b7ab15a,0x3b7392eb,0x3b6f8773,0x3b68abb2,0x3b6ab427,0x3b8a9578,0x374788b9,0x3736296e,0x370c82fb,0x36feb9d9,0x3708cb0d,0x378439de,0x36dcab14,0x36988db6,0x36e0ead7,0x367e65a8,
0x36bb60eb,0x370d7ff0,0x370921ba,0x3717be87,0x368d5d47,0x3764b17b,0x3784f10b,0x3740fb00,0x371ad03b,0x370eff93,0x370e25c3,0x3713d477,0x3740c80e,0x37a23231,0x37d43d06,0x37dfabc8,0x37d22fca,0x378a040f,0x377983fe,0x37ab3a92,0x3780d965,0x3745107f,0x3678dede,0x371fba0f,0x375f894d,
0x37c3a2af,0x376568c1,0x380c38cb,0x374a0bd7,0x370c4421,0x372d86c4,0x383cd943,0x36d720d2,0x371a9a39,0x381707b3,0x37ee8862,0x3818916c,0x38279fb4,0x37dac821,0x37d0ec29,0x3742f39c,0x382a1410,0x3838e794,0x37bb7f9a,0x378d771b,0x37bb7585,0x37f57256,0x380437df,0x385125b0,0x38d542f7,
0x3925af23,0x392fdf89,0x3908bb9d,0x386cb03f,0x37e3b9eb,0x3878ecb7,0x37f7b725,0x37c4de39,0x36e93381,0x38179574,0x387975f5,0x38ca47b4,0x386188fc,0x38578979,0x37dfa580,0x3680114a,0x37015d1f,0x38dcbaae,0x371be863,0x3806c609,0x39210a4c,0x3963ba92,0x39a50f93,0x39aca292,0x3907398c,
0x388c8d2a,0x38b68a2a,0x3893b313,0x38c898af,0x381d2cc9,0x37b06026,0x37fb883d,0x385dea79,0x38249a88,0x3870515c,0x392c20cf,0x39915f0e,0x39a00fb3,0x39981f4b,0x3908e0a2,0x38d62351,0x39555b13,0x38bcd69f,0x38611b43,0x382c63a9,0x38de18db,0x392fe078,0x395e0b9c,0x38ead151,0x3967f6c3,
0x380ae6e6,0x385e47cb,0x38c69e13,0x39c0d138,0x38a1141b,0x396ad094,0x39cb2c3d,0x39e86036,0x3a0388db,0x39732d1a,0x38daa5ac,0x38c781e2,0x38dafa48,0x3917c512,0x3962496a,0x3923cff0,0x38affced,0x394587f5,0x39a94ed2,0x39a7f395,0x39d7a10c,0x3a5a425f,0x3aaa3b34,0x3ac0fb59,0x3a9941ec,
0x39d455e9,0x38eaab38,0x39ee5033,0x38db96dc,0x38bad133,0x38fd549d,0x39ba070e,0x3a101b26,0x3a4ac561,0x39d7c154,0x3acc8401,0x3a44e3b5,0x3a5308f2,0x3a0687b1,0x3996d101,0x39dca29d,0x39f8ed64,0x3a10ea4c,0x395921af,0x37a27ef8,0x377289ed,0x390db105,0x38d52118,0x38d9b32e,0x38c3a975,
0x39637fae,0x39e3900a,0x3a0fcfde,0x3a5a012c,0x3a8c5894,0x3a9633ad,0x3a787235,0x3a6d613e,0x3a755151,0x3a9faca2,0x3ac0b9f8,0x3a731bac,0x3a9239af,0x3a9f327a,0x3a1c0a12,0x3927df33,0x39a1eabd,0x39629840,0x39ff01d6,0x3aaa0269,0x3ac5eec5,0x39e22b1e,0x39ea73e9,0x3a9108a3,0x3a0d377b,
0x3a3abe83,0x3ab31873,0x3ab87198,0x39c2f851,0x38bc3373,0x3762cfec,0x38235a48,0x38b77efc,0x388752f5,0x38608544,0x372ec65e,0x37f05574,0x3816ff26,0x3872f1ec,0x38ef6e1e,0x39980523,0x397b1b74,0x39c55053,0x39da630e,0x3a183961,0x3a2a5e6d,0x3aa0dc78,0x3aac0d1e,0x3a89800e,0x3abf62fe,
0x39a12dfb,0x398d4dd0,0x39e9485e,0x3ad48c09,0x3aca5615,0x3a99a0a2,0x3a0b2c06,0x3b2106e8,0x3c2b901f,0x3bbc2bf8,0x3b25172d,0x39f69d6a,0x38decd57,0x38c2f26d,0x38f45ab6,0x388796e0,0x37b0e79c,0x36b10422,0x375f4c18,0x3622f097,0x384c1ed2,0x38230584,0x387de3f7,0x388b7eb7,0x37da909f,
0x3814b414,0x38bd2a12,0x38cf0621,0x3942891a,0x39a0850b,0x39ea983a,0x3a052e32,0x3a4369cc,0x3a1c6e9a,0x39c753f5,0x3a91eb56,0x3ac309c3,0x3ac0e95a,0x3afa855e,0x3ac3d1bf,0x3abaa3a6,0x3af4835c,0x3a2d640e,0x3afccf5a,0x3bb12d20,0x3b2a8220,0x3b1129f9,0x3a93b3df,0x38fbc0e0,0x38ba287b,
0x38809e38,0x365481e4,0x35ca5f78,0x37028846,0x36bb855a,0x361c4724,0x36d842f9,0x35cd5e59,0x37ad5587,0x38d2f30a,0x390f9a1a,0x3935d795,0x394f045a,0x394584e6,0x39229b9e,0x394cdfb7,0x395383b4,0x398783e0,0x399ef687,0x39754dde,0x39052ff5,0x39b09493,0x3a116044,0x39fa0da3,0x3a7a3b46,
0x3a3cc203,0x3a833239,0x3a8e6d4a,0x3a571ea6,0x3a42dc5e,0x3a95556b,0x3aa7c661,0x3a664d31,0x394b45af,0x381081e2,0x37639ca2,0x38325652,0x37e1688c,0x37d5bd6d,0x379651c9,0x377611de,0x370b0abd,0x36b097bc,0x380d8246,0x38dc3983,0x39838ede,0x39aa687d,0x39c58155,0x39b60f3c,0x3986f03b,
0x3921e5e2,0x388ceb8f,0x382a96aa,0x39025ced,0x39af08a4,0x39eb978e,0x3a267881,0x3a4a006d,0x3a3c4c6c,0x3a18648b,0x39c3f623,0x399ecaae,0x3917c160,0x39873365,0x3a1e7172,0x3a05a013,0x39f19028,0x39d2316b,0x39ab9fc4,0x399620f4,0x3985da9c,0x394f4dc4,0x391db1c9,0x391ccd90,0x3909cede,
0x38bb5338,0x388cc02b,0x381bc686,0x385ee11d,0x387015ed,0x38750218,0x38735844,0x38b8c72e,0x38e2cccc,0x38c79549,0x385763d7,0x37f14468,0x37d69d66,0x3882a6c4,0x39211ffe,0x3986e93a,0x39cb9156,0x39f3f4f8,0x3a066f64,0x39eeaf6b,0x39e82374,0x39fe6dfe,0x39d2b0cc,0x39c08986,0x39dae432,
0x39f68e25,0x39842c03,0x399affda,0x3994f834,0x3998f361,0x39b4a156,0x399f1f9f,0x39868e61,0x3982eb2f,0x39504de3,0x393f6f17,0x3938d2d9,0x391b4932,0x39153ea7,0x392e9a60,0x38fc8373,0x38f4ab99,0x391b9413,0x3900282d,0x38d7aeab,0x38c09a0d,0x389fa5d9,0x38907fa7,0x389664c3,0x3879fbf6,
0x386ef742,0x3889e9e9,0x3843fda0,0x386551a0,0x38c8b4e6,0x38af296d,0x38bb1444,0x38dc2eae,0x38bd0456,0x38c5a9b7,0x390f2d58,0x394b440d,0x3938690c,0x3956dfd9,0x395e51b1,0x394aeb6f,0x395d14e4,0x3962d06e,0x39807c1b,0x398fe63d,0x3982f72f,0x396fe621,0x396662a9,0x39597710,0x39542c20,
0x395d6e3f,0x393ed611,0x39264c81,0x3915950f,0x390afc7e,0x390d7452,0x390ebff6,0x38fc8de6,0x38e00ddd,0x38c5b632,0x38b2d973,0x38a5351e,0x38a34c32,0x389d0efc,0x38a78b3f,0x38aecf8a,0x38b13208,0x38ac2155,0x38b1b81f,0x38a945bd,0x38cbe182,0x38fe5e89,0x391f5e7b,0x38cde6be,0x38d9d030,
0x38e456f6,0x38f13cb6,0x38f93093,0x38f1df73,0x38fc3f64,0x390d9bf8,0x390974c0,0x390b6654,0x390ac2b6,0x390f607c,0x39103cc6,0x39157b31,0x3906e262,0x39037cce,0x390482cb,0x3900cd5b,0x38fc5ad3,0x38fcfc22,0x38ed700b,0x38e4304d,0x38db986f,0x38d45b1c,0x38cd62e3,0x38c4db2a,0x38bc4a79,
0x38b2b94a,0x38ac71da,0x38a5f2eb,0x38a56181,0x38a4c2c7,0x38ac57c3,0x38b0d245,0x38b811a9,0x38be7912,0x390e1b4a,
};
const uint32_t defaultHRIR_rom_AlphaL16[470 * 43] = {
0x3f02f1b3,0x3ec3e963,0x3f0343ed,0x3ef2dac6,0x3eff8398,0x3f023dbb,0x3f078879,0x3f09fffd,0x3f0c6e63,0x3f090014,0x3f06f396,0x3f04a772,0x3f021691,0x3eff5d28,0x3efa86c7,0x3ef74421,0x3ef3d11a,0x3ef0de30,0x3eed6bc2,0x3ee3fddf,0x3ef71731,0x3eb8463c,0x3e90d6d9,0x3de91660,0x3ec643bd,
0x3e919f12,0x3e00e9a6,0x3e01de92,0x3e06274f,0x3e1c7ed6,0x3e0fd8b6,0x3e0f8e8d,0x3e16fa82,0x3e95c316,0x3ed5430b,0x3e11d349,0x3e95147a,0x3e8b6668,0x3f0b505d,0x3f0e4dfc,0x3f173148,0x3f2122f9,0x3f31903f,0x3f39e03d,0x3f3c3061,0x3f3306d3,0x3f2ab4d0,0x3f22cbf3,0x3f1b0fb1,0x3f1419bf,
......@@ -8947,7 +9181,6 @@ const uint32_t defaultHRIR_rom_AlphaL16[470 * 43] = {
0xb9d8ab46,0xb9db5201,0xb9e10bd3,0xb9ef6ec4,0xb9f70499,0xb9ff83fd,0xba0800ec,0xba1082ef,0xba15f846,0xba1d3642,0xba2026ab,0xba2525a3,0xba1c59b1,0xba17a469,0xba13b072,0xba0d0e91,0xba0a91fb,0xb9fbcc9d,0xba04ede4,0xba087b18,0xba175e18,0xb9546163,0xb952b1aa,0xb9328656,0xb93b913a,
0xb93eb78b,0xb941b427,0xb9403fd5,0xb9409deb,0xb9402fcf,0xb9596b41,0xb9444e20,0xba1f51db,0xba114a6a,0xba1f5bf4,
};
const uint32_t defaultHRIR_rom_AlphaR16[470 * 43] = {
0x3f02f158,0x3ef2f693,0x3f03a369,0x3ec46d8a,0x3e94ac59,0x3e106c69,0x3ed4ccf7,0x3e95d249,0x3e17dce4,0x3e106b8e,0x3e0f8ab1,0x3e1bc099,0x3e05c345,0x3e01bb92,0x3e0157b1,0x3e91a887,0x3ec5ea15,0x3dea0cd2,0x3e9187c9,0x3eb88fb2,0x3ef73bfd,0x3ee40a66,0x3eed60de,0x3ef0e226,0x3ef3d05a,
0x3ef74404,0x3efa8691,0x3eff5d6a,0x3f0216ea,0x3f04a754,0x3f06f285,0x3f09006f,0x3f0c7088,0x3f09ff62,0x3f0785cd,0x3f02431d,0x3eff646c,0x3f0e5dd7,0x3f0a461e,0x3e8a473c,0x3ee48418,0x3eaee79f,0x3eaa364f,0x3ebb5a4d,0x3eac3241,0x3ebef4cd,0x3eb29698,0x3e9b3322,0x3eae9f33,0x3eac2b9c,
......@@ -9759,243 +9992,6 @@ const uint32_t defaultHRIR_rom_AlphaR16[470 * 43] = {
0xba0697fc,0xba1102aa,0xba1f4119,0xb9443bb0,0xb9594495,0xb9403233,0xb9409feb,0xb9403ca5,0xb941b375,0xb93eb877,0xb93b8f84,0xb9328856,0xb952b729,0xb9542e9d,0xba176ef7,0xba08614e,0xba041846,0xb9fa1149,0xba0a7366,0xba0d2864,0xba13a976,0xba17a447,0xba1c5b4b,0xba2527bc,0xba2023da,
0xba1d32f8,0xba15f751,0xba108050,0xba07fbb1,0xb9ff7999,0xb9f6f6a1,0xb9ef625e,0xb9e11009,0xb9db64bd,0xba1f5d84,
};
const uint32_t defaultHRIR_rom_EL48[HRTF_MODEL_N_SECTIONS * 470] = {
0x3e8fdcf1,0x3e8e2708,0x3ea53482,0x3e7c2de6,0x3e8fe783,0x3e906f77,0x3e9cddeb,0x3ea14109,0x3ea4da3b,0x3e9bbc9a,0x3e96062e,0x3e8f4bf3,0x3e8aaf7d,0x3e86b5df,0x3e8433e5,0x3e813d26,0x3e7d4d8a,0x3e78207d,0x3e742259,0x3e5a5203,0x3e8c3f1f,0x3e7d5e54,0x3e9285e3,0x3ef28ede,0x3e7742e2,
0x3e8ce88c,0x3ed9c917,0x3edf1bd9,0x3eda040b,0x3ebdd7d4,0x3eda97bf,0x3ee14156,0x3ed85779,0x3e90d3f7,0x3e8790ef,0x3eec0412,0x3ea8cd79,0x3ece6925,0x3ec47da1,0x3ebd9a80,0x3ed966e3,0x3ee7df3f,0x3f0a6b43,0x3f150db1,0x3f167f00,0x3f073082,0x3ef21552,0x3ed4e4bc,0x3ec08701,0x3eb2e282,
0x3eabf3c8,0x3ea35e5b,0x3e9b604e,0x3e951978,0x3e88e34a,0x3e799760,0x3e7556b2,0x3e7c70c3,0x3e18ad46,0x3e2aa56b,0x3e03b4c9,0x3e010068,0x3e14601a,0x3e1318de,0x3e2b1b01,0x3e22f5da,0x3e291c0d,0x3e27ed4b,0x3e0ebece,0x3e26bb84,0x3e2ae4c7,0x3e45e480,0x3e731040,0x3e96dc2e,0x3ebbe576,
0x3f0df63b,0x3f185058,0x3f2f4f39,0x3f5f633e,0x3f770181,0x3f80938f,0x3f5f3a68,0x3f419c66,0x3f23635f,0x3f0bb291,0x3ef3b0d2,0x3edf117f,0x3ec653ea,0x3eb1554c,0x3ea3754f,0x3e819f11,0x3e7536cf,0x3e15b0af,0x3e0be51a,0x3dc6f788,0x3dba046c,0x3d9e30bd,0x3d97db1f,0x3d88cc62,0x3d8ff480,
0x3da08fc8,0x3db705ed,0x3d81e369,0x3da1e8fb,0x3da2c5dc,0x3dc265af,0x3de656e6,0x3e256d3a,0x3e598bb7,0x3eaef2c2,0x3efee21b,0x3f444555,0x3f6438ad,0x3f8c4747,0x3fb8e107,0x3fd6d06a,0x3fdb249e,0x3fb0c966,0x3f8b3bda,0x3f4cb436,0x3f1ca18e,0x3f030e80,0x3ef1874c,0x3ed4119f,0x3eb9a223,
0x3ea9d5bf,0x3e8296f9,0x3e4eb3e6,0x3df4d90d,0x3db0650b,0x3d6f6077,0x3d44b0ec,0x3d05342e,0x3cd8c1a9,0x3cbf119a,0x3cd12ebf,0x3ce83eac,0x3d049cbf,0x3cc6af7a,0x3ccb3b17,0x3d06da74,0x3d4e2e2c,0x3dc31338,0x3de90336,0x3e3e4014,0x3f47f649,0x3fa1245a,0x3fd3acac,0x3fde77f6,0x3fec2853,
0x3fe593de,0x3fe96050,0x3ffa4582,0x3ffd2d34,0x40041b8b,0x400541c7,0x4001e8bd,0x3fed6164,0x3fcee5df,0x3fa4929d,0x3f7b4813,0x3f3f3f70,0x3eeb8e5d,0x3ea84661,0x3e54eea5,0x3e126301,0x3da32fb1,0x3d661c88,0x3d17185e,0x3cf9cc3a,0x3ccfa3dd,0x3d03dfbc,0x3d080ea1,0x3d0bfb8e,0x3d0e3e9b,
0x3d3a2b8b,0x3d97d3d2,0x3ddf9f5f,0x3e2cbfe3,0x3e6b3c91,0x3ee1cf1c,0x3f4a2014,0x3f7890ed,0x4024d50d,0x402f3e01,0x402ce8fa,0x40102e20,0x4011227a,0x401651ff,0x400d2f17,0x400900d8,0x4008f280,0x40068f8f,0x400126da,0x3ff0457b,0x3fb996c6,0x3f8b9e2b,0x3f6068b5,0x3f0be8a0,0x3ed5acad,
0x3e68eec9,0x3e45b6ba,0x3de819c5,0x3da1edf5,0x3d4288a4,0x3d151188,0x3cf527fa,0x3d104a92,0x3d26fca8,0x3d4f20b7,0x3d409322,0x3d59f3cc,0x3d96abf0,0x3dc8860a,0x3e1553b6,0x3e6dc06e,0x3ec4a74c,0x3f8aa8eb,0x3ff8b3b7,0x40808960,0x40768ef2,0x409c2f8a,0x40479ce8,0x402a7e54,0x401d47c0,
0x4002cb90,0x4004c608,0x4014c7d7,0x4019a72a,0x40194d70,0x400d24a1,0x3fdbc40b,0x3f9d47d1,0x3f5db62b,0x3f0b1d4b,0x3edaced4,0x3e6bca5e,0x3e48d1e9,0x3e0bff65,0x3e08773c,0x3da209bc,0x3d773fcb,0x3d8e5bdf,0x3d6759bc,0x3d7f6a8d,0x3dd2459a,0x3d67597f,0x3d670b0f,0x3d9e4691,0x3e2b93b2,
0x3e3c39bc,0x3ef6ec2c,0x3ebeb9b8,0x3f9c6287,0x4022ef5e,0x408c4efa,0x407affd6,0x409ec200,0x4039eecc,0x4011e38c,0x400348e9,0x40104faf,0x401ad488,0x4018d5ac,0x400ba5a3,0x3ff9e422,0x3fd0076d,0x3f9f0267,0x3f67bd92,0x3f22bc44,0x3ee99177,0x3ec15245,0x3e814c70,0x3e60c204,0x3e13ed43,
0x3e0522d9,0x3db7be71,0x3d8f5bf4,0x3d7b9b42,0x3d509e3a,0x3d813dc6,0x3e26950d,0x3d9266e3,0x3d7c2af0,0x3da3d63c,0x3dc0eabb,0x3e1be4ed,0x3e63f33b,0x3ebcfd2c,0x3f8167b3,0x3fd3d3d7,0x40306659,0x401bf675,0x401a8567,0x3ff122f5,0x3fdd583c,0x3fdb1405,0x3fcc073d,0x3fd2c5ff,0x3ff30b8a,
0x3fda4516,0x3fbd082e,0x3f95da01,0x3f5828c3,0x3f1eb26d,0x3efe3c4c,0x3ed82cb1,0x3ec62e2e,0x3ea595ff,0x3e7e3104,0x3e3abf3c,0x3e083f7b,0x3ddf0610,0x3dbb6549,0x3d916c99,0x3d857484,0x3d92353e,0x3de1cf37,0x3da3bc9b,0x3db1894f,0x3de51728,0x3e159f1a,0x3e3b3975,0x3e8cd940,0x3f43a2e9,
0x3f728996,0x3f63e8c9,0x3f8fe834,0x3f847337,0x3f88c014,0x3f8e14e8,0x3f901ddb,0x3f9041ac,0x3f896366,0x3f8651af,0x3f7d258b,0x3f5d5741,0x3f43b171,0x3f31f896,0x3f22f711,0x3f0866af,0x3ed8aaea,0x3ebeedb5,0x3eccb109,0x3e907436,0x3e914693,0x3e5a36c3,0x3e4fc7c9,0x3e10dfe3,0x3dcc7c4c,
0x3da9d110,0x3da9eedd,0x3db6a647,0x3dcf2d21,0x3dca4324,0x3dcb20f8,0x3dd76acd,0x3e06e7b1,0x3e3bb953,0x3e6b5484,0x3ec62bb2,0x3ee86498,0x3f0fc5a6,0x3f2f9c4f,0x3f424b8a,0x3f6698b4,0x3f6373a8,0x3f6840c3,0x3f72a08d,0x3f630906,0x3f5a68af,0x3f55591c,0x3f3b8780,0x3f27ffaf,0x3f17a470,
0x3f07f863,0x3ef183ff,0x3ed8fb7a,0x3ec40efc,0x3ec703f3,0x3ea8e717,0x3e9619a0,0x3e752095,0x3e56078a,0x3e3433dd,0x3e309aaf,0x3e1405ea,0x3e1f31a3,0x3e13bc36,0x3e2bd85e,0x3dfc021a,0x3e21b187,0x3e0a6b1d,0x3e3e168b,0x3e6fb306,0x3ea4d703,0x3ebbdecc,0x3f270a8c,0x3f0d26d4,0x3f06397f,
0x3f0e37d9,0x3f15e375,0x3f1ebe39,0x3f2a105e,0x3f388839,0x3f2c28de,0x3f240c2e,0x3f1c30e8,0x3f13f64f,0x3f0d419a,0x3f069127,0x3efe9e31,0x3eeef2d6,0x3ee32051,0x3ed8b094,0x3ecb5a16,0x3ecc8c97,0x3eddab26,0x3e9b86fe,0x3ea60bd0,0x3e9561d3,0x3e8b4715,0x3e989beb,0x3e9aa292,0x3eabb617,
0x3e9c3485,0x3eab1f31,0x3ea563f2,0x3e9045ef,0x3ea3a972,0x3eab5e10,0x3ebc5116,0x3ed778da,0x3eff9a16,0x3f0eb71f,0x3ee81f7d,0x3efbab4a,0x3efbde31,0x3f01c977,0x3f03f32b,0x3f08e4a8,0x3f02f0f5,0x3eff85a1,0x3ef8b9d7,0x3ef3688d,0x3eeea72a,0x3eea1308,0x3ee7d149,0x3ee53e6b,0x3ee1a0fd,
0x3ee018a4,0x3ed18af7,0x3efb74c2,0x3eeb1c8a,0x3f049b81,0x3f478aed,0x3ee67f59,0x3efe4636,0x3f3a7d68,0x3f3fe284,0x3f38520c,0x3f23fc6b,0x3f373f8c,0x3f3a3581,0x3f30c2ac,0x3f020321,0x3ef9539a,0x3f467e18,0x3f0feb90,0x3f144908,0x3adf8add,0x3b0df1fd,0x3b242786,0x3a996c3e,0x3ac23067,
0x3a9f1176,0x3af4e431,0x3b079d6b,0x3b04462f,0x3b026b94,0x3af8da75,0x3ae44ab9,0x3ade9a37,0x3addaed7,0x3ae703d0,0x3aebd63c,0x3aed1c62,0x3ae9c5ff,0x3ae7c60b,0x3ab3c12b,0x3b21ac9d,0x3b0f8df5,0x3b2d6e65,0x3bbf978f,0x3b10cf84,0x3b2344be,0x3ba58e0b,0x3ba90e55,0x3ba64f4e,0x3b89e7dd,
0x3b9f9cf5,0x3ba08754,0x3b93581e,0x3b1dca11,0x3b1aee86,0x3bac3280,0x3b447be1,0x3b3ed8b0,0x3b1c6428,0x3aaadfc6,0x3ab0e467,0x3a81afdb,0x3b362557,0x3b6e5511,0x3b5d5484,0x3b63bb6b,0x3b4f42d5,0x3b355d5a,0x3b25727a,0x3b2575b6,0x3b367edd,0x3b459896,0x3b4bd8a6,0x3b4707cc,0x3b2de5e0,
0x3b160e6a,0x3b17a54d,0x3b1b2369,0x3a758974,0x3aad5fd5,0x3a0f563b,0x3a01c2c5,0x3a6d646f,0x3a74d4fd,0x3abcf1bf,0x3aab9fb4,0x3aaec751,0x3a8cb4ec,0x3a139f23,0x3a38fa3b,0x3a103208,0x3aa0da30,0x3ac86e2b,0x3acb17cd,0x3aceceee,0x3adb66c3,0x3abcf759,0x3a4dd7c9,0x3b9425be,0x3be026a1,
0x3bc6d563,0x3bccb327,0x3bafcd62,0x3b990632,0x3b8577a0,0x3b7f7f61,0x3b91ad64,0x3b93fe92,0x3b94f072,0x3b8fa547,0x3b578dd4,0x3b611530,0x3ac8d399,0x3adba22d,0x3aa82c6c,0x3a919c39,0x3a3cf3e6,0x3a106132,0x39f10c75,0x3a2540a0,0x3a7caf8e,0x3a8d8cf0,0x3a21aa85,0x3a19732f,0x39ce2b41,
0x39b9ca20,0x39e47471,0x3ac44a56,0x3a850aa0,0x3adc8952,0x3ad8c679,0x3a9bdeff,0x3a42023b,0x3a1faf79,0x3bc64b41,0x3c312e95,0x3c1ca5a7,0x3c2150a4,0x3c0ed834,0x3c01b2ba,0x3be50893,0x3be7eaab,0x3c0367e0,0x3c0e4bc3,0x3c109d50,0x3c04c954,0x3bbb500d,0x3b8d8578,0x3b2216bb,0x3b0e65a4,
0x3b040988,0x3b025518,0x3a956c1b,0x3a1e774f,0x39efd82b,0x3a44cdb6,0x3a93a437,0x3ac795ba,0x3a87d769,0x3a4e9efb,0x39d02788,0x3a238e82,0x3a14ad59,0x3b44521b,0x3afa0569,0x3be5f2ca,0x3b9ad9d1,0x3bdd7bc7,0x3bf88636,0x3c2c8b6e,0x3c2370a0,0x3c249cee,0x3c32cceb,0x3c11b00e,0x3be41df7,
0x3bf380ab,0x3bca6f6f,0x3b93a3cb,0x3b1830f5,0x3a9c6add,0x3a9b2d49,0x3b51b41a,0x3b2f2bac,0x3b8e1284,0x3b2dd734,0x3b1f44d4,0x3b054659,0x3af7633a,0x3a8c1489,0x3a474430,0x3a1b5e68,0x3990307f,0x39b3fd94,0x3ab98879,0x3a987feb,0x3ac9a139,0x3acca43b,0x3b017a5e,0x3a92385a,0x3b296a69,
0x3ba4ebd2,0x3bf63ab1,0x3c22552b,0x3b5a90c2,0x3af05a26,0x3bb6ff4e,0x3bbf844d,0x3b8b34c6,0x3b3844b8,0x3aa4b11e,0x3aa5853f,0x3a996349,0x3a55f0ae,0x3a5bb963,0x3a78edce,0x3b0fd64b,0x3b993283,0x3c0ffc2f,0x3b97fad8,0x3b3b1856,0x3a806153,0x3a28ab98,0x39e9389c,0x3a0f5531,0x3a2cd692,
0x3a0aba11,0x39a8fec2,0x3a08c606,0x3a257007,0x3a25a420,0x39585c2d,0x398697bd,0x3a6c78fc,0x3adaa965,0x3ad7d81f,0x3b25c570,0x3bc24f21,0x3b3be107,0x3b7fb4b8,0x3b3b4290,0x3b9caac9,0x3ca133be,0x3cd8f2bd,0x3cf0a1a3,0x3cd4bcef,0x3c713c1d,0x3c0ba29e,0x3ba4f416,0x3c2080f5,0x3c53f18b,
0x3c42bf30,0x3bfd78b8,0x3b3def18,0x3a00c6f0,0x3a2411ff,0x3a974352,0x3ac8bb64,0x3a39fdbf,0x39a58d10,0x39c7fb39,0x39b2934f,0x39280ab9,0x39276ce3,0x390d43da,0x388cb423,0x3866c37a,0x398de43d,0x39f3b8ae,0x3a18b780,0x3a541994,0x3a9aef00,0x3ae15440,0x3b028573,0x3be18185,0x3c109bc0,
0x3c97d1a5,0x3cd29664,0x3d260355,0x3cd3037a,0x3c5c7f29,0x3b7e69dc,0x3b2cd4aa,0x3b2dc174,0x3b37434e,0x3b0c2985,0x3ae8943a,0x3a8fb5e5,0x3af902bd,0x3b35a6a0,0x3b44fd52,0x3b20c312,0x3ab9787e,0x3a41ebfd,0x3a105574,0x39d1485a,0x39b73f2e,0x39afe277,0x395f0f68,0x391e3c36,0x38aa089e,
0x38c97a79,0x39243a6f,0x3950ef5b,0x39946f04,0x3a6495f6,0x3a37f9ac,0x3acff89b,0x3b5759a8,0x3ba8f9eb,0x3c69049c,0x3cb29a4f,0x3d07c3ae,0x3cd9f349,0x3cada2a1,0x3c99043c,0x3c87d23b,0x3c37c0e6,0x3be53cfb,0x3bb73678,0x3be936ef,0x3b8f7ae5,0x3b4f26f3,0x3b290603,0x3a5e8877,0x39cc0e47,
0x39aa8749,0x399b8ca5,0x39ad7219,0x39e2ddb5,0x39b2aa6a,0x399368ae,0x3983753c,0x390dc29e,0x390f4f58,0x39853774,0x390f9ef8,0x3936fd34,0x3996cd39,0x3a153968,0x3a92f1cd,0x3b018bb5,0x3bb236b0,0x3c016b86,0x3c0683e0,0x3c3178d4,0x3c337207,0x3c23f63f,0x3c2b3e18,0x3c0123ec,0x3bfa085c,
0x3c01334f,0x3c002cc5,0x3c0bb60c,0x3b757b86,0x3b3795de,0x3b31258d,0x3b369a5c,0x3b337918,0x3b0f18c8,0x3b1c4d77,0x3b108d32,0x3ad94757,0x3ab1f016,0x3a4ce0bd,0x3976c291,0x3991178f,0x397edc51,0x39ca9593,0x399fb628,0x39ecd2cd,0x3a69644b,0x3aa6eaa5,0x3aea0d7e,0x3b14ce05,0x3b618fd6,
0x3b94fe84,0x3bb0b521,0x3ba59f21,0x3baa10f4,0x3bcab647,0x3c008117,0x3ba7a249,0x3bb2da45,0x3bb807e8,0x3bc50cb4,0x3bf3fe09,0x3be53dde,0x3bfbf659,0x3c1b7cb9,0x3be8ee40,0x3bbb81e5,0x3ba314af,0x3b782bfd,0x3b3a7e95,0x3b1349a5,0x3aef2f51,0x3ac83d4b,0x3aad255b,0x3a7ae801,0x3a604e5a,
0x3a2d2b8e,0x3a061bc1,0x398774bb,0x39bf6946,0x3a003caa,0x3a4fe8f8,0x3aa25c21,0x3aceadd6,0x3affb99e,0x3b2ece7c,0x3b31d30e,0x3b4a9e02,0x3b6cd85a,0x3b7f8997,0x3b931030,0x3baa00a9,0x3ba0b636,0x3b81d247,0x3b658f62,0x3b581b6d,0x3b5a4727,0x3b604eef,0x3b707689,0x3b8230ff,0x3b931031,
0x3b6ef734,0x3b538d10,0x3b39f568,0x3b25783c,0x3b138934,0x3b0a6f5f,0x3ae67710,0x3abfce0b,0x3a9d3925,0x3a8036c8,0x3a499525,0x3a2607be,0x3a42a83c,0x3a473519,0x3a88bfd9,0x3a7310d7,0x3aa1e757,0x3ad6e7ab,0x3aef8e86,0x3b0ea2f1,0x3b16b669,0x3b27f990,0x3b3544cb,0x3b426da1,0x3b43ea59,
0x3b432986,0x3b4943d1,0x3b535e9e,0x3b4a0cf7,0x3b43e080,0x3b31bd34,0x3b3ada6d,0x3b3bfd95,0x3b4494a5,0x3b4ae122,0x3b5a71df,0x3b480aa8,0x3b3d2e02,0x3b33531e,0x3b2703e6,0x3b1cf428,0x3b13aed1,0x3b0c20ee,0x3b051fd4,0x3afce0ce,0x3aef8aa5,0x3adfcaf0,0x3adb0b48,0x3b040bc5,0x3b1999ed,
0x3b62ae49,0x3b1a19f9,0x3b2ecd28,0x3b82ea06,0x3b84075b,0x3b7decc5,0x3b69ba7d,0x3b7a5085,0x3b7ad997,0x3b771abc,0x3b4ce05d,0x3b480ef9,0x3b857ecb,0x3b57becc,0x3b5c1fa0,0x38937617,0x38d11696,0x38ebd0f0,0x3850d925,0x38851f46,0x3872f703,0x389c6893,0x38a90179,0x38a4af1a,0x38aef351,
0x38af4dd8,0x38ac23e9,0x38a05f56,0x38a11b3b,0x38b0f2a4,0x38b555e3,0x38b25fa7,0x38a5acdc,0x389811a1,0x3860d2d9,0x38d76364,0x38cbed44,0x39137c0e,0x3988acff,0x38c8dde1,0x390f871e,0x396c079c,0x3976a1bf,0x397226e0,0x394792cf,0x396d9f51,0x397089cc,0x395c9f37,0x3904d53f,0x38c42611,
0x3977b66b,0x392ae240,0x391e0c5b,0x38d878de,0x389e1992,0x38b27ed0,0x38cabc57,0x390be006,0x391d494b,0x39086227,0x391a093b,0x39165b79,0x391b7efa,0x38fc5a9d,0x3914969d,0x3951c1ee,0x3975846e,0x396d585a,0x393de218,0x39041039,0x38cd83ee,0x38bd3a58,0x38fba505,0x37ed92bb,0x385314f0,
0x382ef89d,0x382df2bf,0x381db46e,0x38368261,0x3880329d,0x388f6829,0x38849db4,0x385bd20a,0x3826c263,0x37ecf15b,0x37ba6b5b,0x387c9e9b,0x3867462c,0x388a0556,0x38972e27,0x38dcd0a5,0x38fac2c6,0x3928e615,0x3985a97f,0x39a0d159,0x3986d7a4,0x399375ce,0x39918a68,0x39a356f5,0x396989ea,
0x39781a7c,0x39bcf000,0x39cb2cc0,0x39bf17af,0x398f8f78,0x391e5fcb,0x391241df,0x38830d8e,0x386ff454,0x37e9a318,0x38082609,0x389c19b1,0x387fe20a,0x388cc972,0x385ca90a,0x38d675a1,0x3975d207,0x395ffab3,0x39214fac,0x38e16931,0x37e9a00d,0x3778aa5d,0x38b5d45e,0x380ca163,0x38a024de,
0x38a4cc41,0x3950fed7,0x3997f04b,0x3a073f96,0x3a11cf44,0x3a1f0c50,0x39dcc157,0x39e16ed8,0x39d3b88b,0x3a11040f,0x399bf1d3,0x3a05e3cf,0x3a8cb71f,0x3aafe033,0x3a9feeb3,0x3a606a51,0x39efa427,0x39aa4bda,0x397c047b,0x391e151f,0x38823d30,0x38e8d1c0,0x391cb2f5,0x38d148b0,0x38948f1b,
0x3886b39e,0x388f2e6e,0x39243d12,0x39aeac30,0x399a384c,0x39853461,0x391d5932,0x3867a3ae,0x3981b18c,0x38b4fb80,0x3a33cfca,0x3a1fbd59,0x3aa357e5,0x3a9b3961,0x3a82c651,0x3a13e4ec,0x39f9d2dc,0x3a359362,0x39fb3820,0x3a375bc5,0x3a8e76cb,0x3a79367f,0x3a3f38a4,0x3a8680a5,0x3a5ba666,
0x3a2dc196,0x3a49b2f0,0x3a459777,0x3a7902e9,0x3a4e9a81,0x3a1ce41c,0x39c8d9ff,0x39990740,0x3919aea1,0x3883cb29,0x388de655,0x388668a4,0x38b1abcf,0x3725564b,0x3758d74d,0x390b9743,0x39bec48b,0x39a7239c,0x3996f9df,0x394ef357,0x39db92ff,0x3a48ec4d,0x39be55d1,0x39d0d72d,0x39c1a218,
0x3a4b8ac2,0x3a890a71,0x3a920fcb,0x39a53b53,0x3948bc77,0x395bdd9b,0x3a7f2a78,0x3a35009b,0x3a616c25,0x3a5c2bb8,0x3a015c54,0x3a0ca2b8,0x3a1ee76e,0x39d909d3,0x39828a49,0x39570aa1,0x38a914b7,0x382c549d,0x37e88f1b,0x37c5dab6,0x37303e41,0x3816a114,0x3833f74d,0x386922f6,0x37c4b1f4,
0x371a6492,0x3875ee13,0x39808dc3,0x3a7943ee,0x3a689a1f,0x39f5480d,0x39c6facf,0x3b7a8010,0x3be25576,0x3acca749,0x39efa2fd,0x3af2b9d2,0x3aeae770,0x3b0494e6,0x3b0f6390,0x3ad0e7d1,0x3ab0a999,0x3a764a5a,0x3a2f0e5d,0x3a728ff8,0x3a7e99aa,0x3a2a868f,0x39d5def9,0x395c1f3a,0x3904d0f0,
0x38d0039c,0x38a8e5b4,0x38314856,0x37cec308,0x384b0566,0x38361022,0x37dbe86a,0x3805ab8b,0x35cf492f,0x371c3af2,0x3663de85,0x3769f9d8,0x382a3610,0x3899c7c2,0x388794a8,0x389454ec,0x39aa4bff,0x3add6079,0x3ae241d8,0x3b6c3eab,0x3abfc499,0x3a95d971,0x3b11d438,0x3ad46890,0x3a794529,
0x3a3c7553,0x39bcecf6,0x39dd805e,0x39958b30,0x390c973e,0x394b80ad,0x396d7f89,0x39748c62,0x39730945,0x3974f672,0x3939b277,0x3923b2fb,0x390a1b34,0x3901fec7,0x38bab5ee,0x388c3d4a,0x376d4c45,0x35b0e11a,0x368d86f7,0x35e2f3e2,0x367dd653,0x3698e696,0x357472b9,0x361eac89,0x3830958b,
0x3876c8aa,0x38b00358,0x3a43f3db,0x3ac22e8f,0x3a77434e,0x3a7274ae,0x3a936dc0,0x3a85ee76,0x3a44ce73,0x3a31b921,0x3a3c5509,0x3a2062b7,0x3a1ff9c0,0x3a2c0811,0x3a46adc8,0x3a145bdf,0x39d05eac,0x399ca51a,0x38d39ab4,0x37f725f0,0x38430725,0x38d79fb6,0x39364ee5,0x397a9d98,0x39895375,
0x39607653,0x39301508,0x388c3cb2,0x37ad8736,0x368a5365,0x36b69e60,0x372c9107,0x37559c63,0x379676d2,0x3796109a,0x380574d2,0x372daca0,0x37d2f509,0x390d941b,0x3a2558b1,0x39b76f89,0x39bf6fd6,0x39ec7ccf,0x39c763b0,0x39bd17b9,0x39b04d35,0x39c8666e,0x3a0267a5,0x39ae1624,0x39a2ec1c,
0x39b56c6c,0x39a57ea7,0x39900da1,0x394ed374,0x390cc00e,0x3899cbcf,0x38243f3e,0x381ed510,0x3829cb3e,0x3886304b,0x38966963,0x386ca2c1,0x38466f7c,0x382cb33f,0x381adc45,0x380ca3d2,0x37d06046,0x3839f05c,0x3881e193,0x38b71391,0x38d1a54c,0x38d043a8,0x390796d6,0x3932241c,0x3947161f,
0x397d2445,0x3958bd2b,0x3954f857,0x394604e7,0x391cb254,0x39007fdb,0x38d7b4fa,0x38e49ccf,0x391275b5,0x38f2b5cf,0x38e4d920,0x38d55e2e,0x38724b02,0x382795a8,0x3841f740,0x382c7ff6,0x3832cd8f,0x3858dba9,0x384f5856,0x387f981e,0x388d6bb3,0x38a1d874,0x38aca2f4,0x38cbae60,0x389f110d,
0x38a76c60,0x38e3bdb1,0x38c8b00f,0x38cb2fe8,0x38fd87bc,0x38f790ad,0x390ab117,0x392ba8d0,0x393132ce,0x3958ad2f,0x39815e0b,0x395521b8,0x393373f6,0x39159da4,0x39047a70,0x38f73380,0x38dd4e0f,0x38d39bd7,0x38d68fdc,0x38fad4c9,0x38cb68c6,0x38b05016,0x389ba7ca,0x3886568c,0x3867229c,
0x385e50ac,0x3862e429,0x3875b922,0x38885ec7,0x38996117,0x38ad7d98,0x38c667ca,0x38c75949,0x38c12945,0x38db9eef,0x38e3d4f8,0x3906f7c2,0x392035d7,0x39175bb6,0x391e9a3c,0x3925e0c4,0x39279e50,0x39323a34,0x393fbc13,0x392bfe8c,0x39191bf6,0x3917d594,0x390cacf3,0x38cac022,0x38b62dbd,
0x389d7267,0x389de131,0x389e2cb4,0x389f6dd1,0x38a21bb4,0x38ac00d2,0x389e085b,0x3897e902,0x3894b69f,0x3892f89a,0x38946ee5,0x3893c439,0x389ab7a2,0x389ec733,0x38a2f3f8,0x38aa446e,0x38ad0f46,0x38c4c4fb,0x38d02c92,0x38fd88a7,0x392bd6c4,0x38e0d499,0x390b604f,0x394a1f13,0x3945e3d7,
0x393ba035,0x39265531,0x39300c40,0x392affa7,0x3924e62e,0x38fb1c52,0x38cecb3d,0x391e3e35,0x38fc97bb,0x38e06fa8,
};
const uint32_t defaultHRIR_rom_ER48[HRTF_MODEL_N_SECTIONS * 470] = {
0x3e8fdc9b,0x3e7ca02e,0x3ea70d73,0x3e8e5fb4,0x3ea8dd68,0x3eededaf,0x3e8704a5,0x3e911540,0x3ed7aa69,0x3ee09a85,0x3edac0ad,0x3ebe2af7,0x3eda1252,0x3edf2449,0x3ed991d3,0x3e8cd8c0,0x3e76d9f1,0x3ef24872,0x3e91d7e9,0x3e7d0776,0x3e8caed0,0x3e5a8728,0x3e73f78b,0x3e782e9a,0x3e7d49d8,
0x3e813d42,0x3e8434cc,0x3e86b742,0x3e8ab0d0,0x3e8f4bf5,0x3e9603b8,0x3e9bbd29,0x3ea4df8c,0x3ea13dfd,0x3e9cd544,0x3e908184,0x3e8fac91,0x3ebda893,0x3ebff1ca,0x3ed08eb6,0x3e75dd83,0x3e48076c,0x3e298b90,0x3e265455,0x3e0dd3f4,0x3e2649fe,0x3e29dffc,0x3e22f191,0x3e2b4f56,0x3e132cb8,
0x3e141183,0x3e011f6c,0x3e047caf,0x3e2b312c,0x3e18a7c1,0x3e7d6b64,0x3e72cc02,0x3e799f9d,0x3e890a3c,0x3e94ff71,0x3e9b6fa8,0x3ea356e4,0x3eabf5ee,0x3eb2dc43,0x3ec08559,0x3ed4e36e,0x3ef21e5c,0x3f072dea,0x3f167786,0x3f150aa8,0x3f0a8a57,0x3ee78bfa,0x3ed9f2a1,0x3f0c0392,0x3ec3ec96,
0x3e97a643,0x3e584ee5,0x3e233944,0x3decf373,0x3dc1d6df,0x3da46f61,0x3da03234,0x3d801071,0x3db85e01,0x3d9f8cec,0x3d9025c9,0x3d89119a,0x3d969e3b,0x3d9bd814,0x3db8f494,0x3dc41817,0x3e0ae675,0x3e19a385,0x3e731ee0,0x3e81da6b,0x3ea36954,0x3eb14c98,0x3ec65e06,0x3edf0a9d,0x3ef3bee1,
0x3f0bb3ec,0x3f2364c0,0x3f419438,0x3f5f3e01,0x3f80a0ee,0x3f76fd7b,0x3f5f37fb,0x3f2f6e3c,0x3f1873b3,0x3f51b86e,0x3ee75e89,0x3ead2b54,0x3e39d346,0x3df6dfcf,0x3dab5c4b,0x3d54a4b0,0x3d030473,0x3cc6d7ec,0x3cc6604e,0x3d049c4b,0x3ce6236d,0x3cd11bb5,0x3cbfb7fc,0x3cd7a13c,0x3d0ca67b,
0x3d497bcf,0x3d65b1df,0x3db025a4,0x3ddf14f3,0x3e58c138,0x3e7fcb8c,0x3eab70d2,0x3eb8e4fc,0x3ed46c53,0x3ef153a9,0x3f031084,0x3f1c91de,0x3f4cc12f,0x3f8b3923,0x3fb0eb50,0x3fdab500,0x3fd75cb2,0x3fb83ee0,0x3f8d533f,0x3f5f8790,0x3fe8eb11,0x3f8b33f6,0x3f4e2871,0x3ebdf86e,0x3e6a77e4,
0x3e20c17d,0x3de7fd4a,0x3d93dc32,0x3d3ce37f,0x3d0d3a24,0x3d0bafb0,0x3d082a4d,0x3d0337ce,0x3cd82a6a,0x3cecf468,0x3d1889b4,0x3d5bb356,0x3da8621b,0x3e0a5d7a,0x3e3d3901,0x3eb28e81,0x3ee74840,0x3f40ae07,0x3f7a8f2b,0x3fa4c7e1,0x3fcead90,0x3fed8346,0x4001efcc,0x40053cd3,0x40041b5c,
0x3ffd3d13,0x3ff9ca11,0x3fea2e3c,0x3fe3e80b,0x3fefe08e,0x3fd67831,0x402e0c8b,0x3f5c91d0,0x3f4adfcb,0x3eadb767,0x3e85b027,0x3e15b595,0x3db63148,0x3d98df04,0x3d54401d,0x3d4230d7,0x3d4c882f,0x3d265086,0x3d114869,0x3cf8fc2b,0x3d11032f,0x3d3abdd2,0x3daba352,0x3de975d6,0x3e461edb,
0x3e607964,0x3eda9a95,0x3f0a4d2e,0x3f61a1c0,0x3f8b505e,0x3fb9cdc1,0x3fefeee9,0x40013855,0x4006970a,0x4008f829,0x4009086c,0x400d3534,0x40161a61,0x40117a76,0x400f6a21,0x402f2616,0x402a4989,0x40888df1,0x3fdb870c,0x3f9d6fd4,0x3ecb7292,0x3ee60c52,0x3e437028,0x3e1de373,0x3d9d3e0a,
0x3d6854e6,0x3d6edb3c,0x3dd40ec2,0x3d812f7e,0x3d648a50,0x3d8d2b66,0x3d712947,0x3dab40bb,0x3e03d116,0x3e0b1212,0x3e4b1120,0x3e638df6,0x3edf6726,0x3f09c583,0x3f5e9cf3,0x3f9cf95b,0x3fdc0b64,0x400ced44,0x40196fd0,0x4019a822,0x4014c6dc,0x4004bc5c,0x4002d52e,0x401d0848,0x402aeae6,
0x4046714f,0x409dec17,0x406f0012,0x409c8644,0x400535d2,0x3f9fffd2,0x3ee0a481,0x3e7dff42,0x3e20636b,0x3db79ce1,0x3d9c95a3,0x3d7ca113,0x3d8f69dc,0x3e238006,0x3d7f39be,0x3d4fbdfb,0x3d820744,0x3d928c8d,0x3db74338,0x3e084369,0x3e1a7c3c,0x3e61f848,0x3e6f28b0,0x3ec8e36c,0x3ee55368,
0x3f23ffc3,0x3f6707f2,0x3f9f3d4b,0x3fcfc8e8,0x3ffa0a61,0x400babe5,0x4018cf0a,0x401ae020,0x40105111,0x40033e17,0x40124cc5,0x403878b0,0x40a104ac,0x406f81c0,0x40313467,0x3fe0c5bf,0x3f9ba913,0x3f044192,0x3e9b366c,0x3e477d38,0x3dff22ab,0x3def3942,0x3db634c5,0x3da56350,0x3ddb55e8,
0x3d9157f8,0x3d85d798,0x3d8f661c,0x3db086dd,0x3de3e7d0,0x3e07676e,0x3e2aea92,0x3e8e3af0,0x3e9f053c,0x3ecac326,0x3ed6ca51,0x3efec778,0x3f1e961a,0x3f584336,0x3f95bc40,0x3fbd1d61,0x3fda57ff,0x3ff30463,0x3fd2caa7,0x3fcc08fa,0x3fdafede,0x3fdd798e,0x3ff0972a,0x401b4405,0x401b0df8,
0x3f8b0183,0x3f6d1014,0x3f3193f1,0x3ec0cbb9,0x3e7a5b8c,0x3e4e8287,0x3e07d544,0x3dd60954,0x3dcb4366,0x3dcad917,0x3dc52138,0x3db68a3e,0x3da9b1d2,0x3dacaa72,0x3dceb074,0x3e0df1ed,0x3e449247,0x3e56db84,0x3e89a3d0,0x3e99d0cb,0x3ec42372,0x3ec1cbe9,0x3ed75acf,0x3f08afa4,0x3f22da5c,
0x3f31fdda,0x3f43aeb3,0x3f5d6499,0x3f7d1a65,0x3f865902,0x3f895cfc,0x3f903a28,0x3f901701,0x3f8e4ba8,0x3f8821da,0x3f860fed,0x3f31853d,0x3f0ea396,0x3eeea3ca,0x3ec3e6e3,0x3ea02bbf,0x3e6a9317,0x3e3cd015,0x3e0a0fe8,0x3e228436,0x3dfb3608,0x3e2b2ed6,0x3e131e54,0x3e1ec661,0x3e12331b,
0x3e3038c3,0x3e362ae3,0x3e5e262b,0x3e745687,0x3e96e633,0x3ea4751f,0x3ec8b008,0x3ec3f612,0x3ed8f3f7,0x3ef19440,0x3f07f20a,0x3f17a5df,0x3f27fb09,0x3f3b86eb,0x3f555bb9,0x3f5a6917,0x3f63088f,0x3f72a3ce,0x3f683a4d,0x3f636ae4,0x3f66bcdc,0x3f41cc90,0x3f05afeb,0x3f0f3c7c,0x3f1f0b3f,
0x3ed1f7d4,0x3ebfddc6,0x3ead81d2,0x3ea3e0c3,0x3e8fbb42,0x3ea56a13,0x3eabd6e7,0x3e9bce38,0x3eab80d3,0x3e9ade8d,0x3e9a0902,0x3e8be32b,0x3e950624,0x3ea63a6a,0x3e9af2b1,0x3edb6d6c,0x3eceb570,0x3ecb3beb,0x3ed8816c,0x3ee32ea2,0x3eeee883,0x3efea2d1,0x3f06925b,0x3f0d41c2,0x3f13f536,
0x3f1c3197,0x3f240c6a,0x3f2c29b3,0x3f3881f3,0x3f2a187c,0x3f1eb4c7,0x3f15f462,0x3f0e38b1,0x3ee835d3,0x3f0d0130,0x3f009d1a,0x3f0ea2c2,0x3f4014ed,0x3efac86d,0x3f0187ec,0x3f30834f,0x3f3a07ea,0x3f378632,0x3f23fb37,0x3f3821d3,0x3f3ff4b4,0x3f3aaff2,0x3efe2f9a,0x3ee65736,0x3f49eee7,
0x3f04f1da,0x3eeb3269,0x3ef99036,0x3ed15f27,0x3ee050b1,0x3ee19682,0x3ee54292,0x3ee7d1e9,0x3eea1293,0x3eeea811,0x3ef36958,0x3ef8bb3a,0x3eff85be,0x3f02f19f,0x3f08e5aa,0x3f03f230,0x3f01cd6f,0x3efbc38f,0x3efbe1ab,0x3f14475d,0x3adf8b9a,0x3a99be79,0x3b26bab8,0x3b0df725,0x3b441723,
0x3bad7446,0x3b198e66,0x3b1ded00,0x3b930486,0x3ba05f87,0x3b9fb7f9,0x3b89edff,0x3ba62e13,0x3ba8ebbc,0x3ba535c8,0x3b235c47,0x3b10fb92,0x3bbfe50e,0x3b2a8b67,0x3b0eb5d9,0x3b233d68,0x3ab45d2c,0x3ae730de,0x3ae9f357,0x3aed0d65,0x3aebd75a,0x3ae70a57,0x3addb643,0x3adea313,0x3ae44e24,
0x3af8e178,0x3b026f92,0x3b04487b,0x3b079362,0x3af4b8df,0x3a9f4492,0x3ac1a6fa,0x3aac02ee,0x3b16a5de,0x3b420b7a,0x3acc506f,0x3aa68190,0x3a10d7da,0x3a38df88,0x3a13e2de,0x3a8cdf32,0x3aaec4da,0x3aaa14cc,0x3abbe453,0x3a74809d,0x3a6ef45f,0x3a029431,0x3a0ce49b,0x3ab0cf35,0x3a7f8733,
0x3b1c8366,0x3b12b207,0x3b163b31,0x3b2e7499,0x3b46ad77,0x3b4c120a,0x3b457d43,0x3b3680aa,0x3b2567ad,0x3b256df5,0x3b355bae,0x3b4f4028,0x3b63aaad,0x3b5d5497,0x3b6e6a0f,0x3b367ecc,0x3a814a93,0x3ab16750,0x3ad25d6f,0x3ae2a12f,0x3acca974,0x3a81a619,0x3abec594,0x39e2ca55,0x39b89d03,
0x39ce1368,0x3a167e65,0x3a208796,0x3a8eb215,0x3a7cf0d1,0x3a245b0d,0x39f01327,0x3a0ba79d,0x3a3fbd69,0x3a8e81f2,0x3a9eb51b,0x3ad84006,0x3ad7c4b6,0x3b5cf1d6,0x3b5878d7,0x3b8f8903,0x3b94de4e,0x3b941289,0x3b91af40,0x3b7f9d5a,0x3b85740c,0x3b990681,0x3bafca24,0x3bccbf5e,0x3bc6e4ce,
0x3bdff38b,0x3b93edbe,0x3a4d7d2c,0x3abe9fd9,0x3ac0862f,0x3aa57e95,0x3ad7f39b,0x3af835e7,0x3b46f081,0x3a154dfb,0x3a22738d,0x39cf705e,0x3a4d6787,0x3a87c619,0x3ac72151,0x3a940a3a,0x3a42ddc5,0x39f11fe8,0x3a1d6a21,0x3a98b544,0x3b059756,0x3b001dc8,0x3b0ea00b,0x3b0c2ab6,0x3b987fa8,
0x3bb521e3,0x3c06c242,0x3c0fb370,0x3c0eb8ad,0x3c031606,0x3be81aed,0x3be50272,0x3c01b23b,0x3c0ec9fd,0x3c218b73,0x3c1c21ee,0x3c31f551,0x3bc607e8,0x3a1f3eff,0x3a3772bb,0x3c057b16,0x3b6a3ca4,0x3bdfc2e9,0x3b90c8e7,0x3b2b8482,0x3a8f6640,0x3b01d491,0x3acb6d14,0x3aca4b63,0x3a978e60,
0x3aba1dca,0x39b2f4d4,0x398f0ae0,0x3a1f1cd3,0x3a41b751,0x3a8b337f,0x3af44c58,0x3b0cf164,0x3b0e1ab0,0x3b03ed5a,0x3ba277c3,0x3b21f3db,0x3b57e1f8,0x3a980f5d,0x3a9d9839,0x3b17a028,0x3b940998,0x3bcabb99,0x3bf3e253,0x3be3ed58,0x3c11da50,0x3c31e4d6,0x3c25c4bd,0x3c21640f,0x3c306d12,
0x3be70b04,0x3b6a5907,0x3c1aedb6,0x3c010992,0x3bb90e6e,0x3b3ebc86,0x3ad2982c,0x3ad5aa6f,0x3a6acd3e,0x39862e6a,0x394fcac5,0x3a26b702,0x3a24f0d8,0x3a08bd73,0x39ad4c3a,0x3a040f7e,0x3a2ad0f9,0x3a16b81c,0x39e0989f,0x3a46000a,0x3a6577e6,0x3b44cb7e,0x3b93e9bc,0x3c1203c8,0x3b97f6ba,
0x3b1096df,0x3a77e9d3,0x3a5c700a,0x3a566b41,0x3a99b435,0x3aa5c682,0x3aa4e30c,0x3b36cca7,0x3b8bc9e3,0x3bbfa422,0x3bb6ec1c,0x3ae70d23,0x3b3ee641,0x3b7d96c5,0x3b4252c3,0x3b013a2f,0x3ad961ea,0x3a9d60e6,0x3a4ba4cb,0x3a19a6b6,0x39f66055,0x398b8df3,0x38661a2e,0x388bb7ce,0x390e6331,
0x3927e145,0x3927ada2,0x39bd2fff,0x39ba4e36,0x39b3587a,0x3a3bb6b8,0x3ab693e0,0x3a9c520f,0x3a224228,0x3a01870e,0x3b3d1f65,0x3bfe0ddf,0x3c423803,0x3c544ddc,0x3c2082e2,0x3ba53453,0x3c0b90ee,0x3c71671a,0x3cd428b5,0x3cf12de9,0x3cd8ad6c,0x3ca1e001,0x3b9a9ae5,0x3c9d1877,0x3c0be08a,
0x3be6c6a5,0x3bbb06b7,0x3b549f2e,0x3ace11f2,0x3a3f3bbc,0x3a4ecc0b,0x39913dda,0x39557f4f,0x391cdabf,0x38c3fd62,0x38a418cc,0x392576b4,0x3962b676,0x39b4b585,0x39bb710b,0x39d62900,0x3a0dbf7c,0x3a3234fa,0x3ac4e97d,0x3b1c7537,0x3b479898,0x3b34a13f,0x3af9bfde,0x3a8f8d35,0x3ae9040f,
0x3b0c411c,0x3b37205d,0x3b2dfb5e,0x3b2cc830,0x3b7e2ab6,0x3c5d0c96,0x3cd2601a,0x3d270f35,0x3ccf0c62,0x3d080f67,0x3cb398b4,0x3c7c0756,0x3c28d089,0x3c03fdcf,0x3c036242,0x3badfd7c,0x3afe0b91,0x3a93a695,0x3a15f4c3,0x3994ad57,0x39308a5c,0x390df0d9,0x3987c902,0x390a3356,0x390cc452,
0x3989f6e2,0x39678d04,0x39ee47b1,0x39cfcac0,0x39b1a0a6,0x399bfdd1,0x39abab56,0x39cba4be,0x3a5edbdc,0x3b288e90,0x3b4f2a68,0x3b8f6980,0x3be979bb,0x3bb71a43,0x3be56dec,0x3c376ad8,0x3c8815dd,0x3c98ee4b,0x3cae013c,0x3cd958aa,0x3c27def3,0x3c27d401,0x3c1e0b82,0x3bf921f1,0x3bd237e0,
0x3bafb731,0x3ba54192,0x3bb370b0,0x3b93bcfc,0x3b61072c,0x3b148f0a,0x3ae976e8,0x3aa5e6f2,0x3a6c4e57,0x39f11b68,0x3992bc53,0x39ae30c5,0x3981b2fa,0x398f5f96,0x3970427c,0x3a478654,0x3ab32a81,0x3ad8e584,0x3b10a690,0x3b1c4d93,0x3b0f0de7,0x3b339b6f,0x3b36be57,0x3b310412,0x3b379588,
0x3b75cde9,0x3c0b327f,0x3c005588,0x3c017465,0x3bf9268d,0x3c0237c7,0x3bb97879,0x3bb00933,0x3ba8ac5d,0x3ba24887,0x3ba3adaf,0x3b8f389f,0x3b7f4539,0x3b6b2b6a,0x3b4b9b42,0x3b32ab50,0x3b2e53e3,0x3b000dc5,0x3acec534,0x3aa1e9b2,0x3a5057f9,0x3a00b355,0x39c4ce51,0x398697dc,0x3a08e763,
0x3a286bd8,0x3a62090f,0x3a7ae3bf,0x3aad1e54,0x3ac84246,0x3aef2bb7,0x3b134687,0x3b3a87cc,0x3b7832a2,0x3ba326e9,0x3bbb758e,0x3be8e45b,0x3c1b8677,0x3bfbe247,0x3be53e3d,0x3bf4007b,0x3bc4cb92,0x3b5789be,0x3b693d71,0x3b79253a,0x3b4e4c0b,0x3b4a10db,0x3b4571a1,0x3b44a34d,0x3b429034,
0x3b351910,0x3b27ef94,0x3b16c8e7,0x3b0e8924,0x3aef5b33,0x3ad7800f,0x3aa1b431,0x3a71a190,0x3a897bc0,0x3a481a51,0x3a41a417,0x3a283619,0x3a49828d,0x3a803161,0x3a9d35f4,0x3abfcc8d,0x3ae675f3,0x3b0a69cf,0x3b13842a,0x3b25776a,0x3b39df8b,0x3b53972d,0x3b6f00d9,0x3b93050f,0x3b8235d4,
0x3b705d7d,0x3b607fd9,0x3b5a1ab9,0x3b31b7a9,0x3b412822,0x3b4a1827,0x3b57248d,0x3b8157ab,0x3b4882e0,0x3b4c0571,0x3b769328,0x3b7a8079,0x3b7a8d72,0x3b69a47b,0x3b7db56f,0x3b8419d0,0x3b831f72,0x3b2f0e02,0x3b1a5bed,0x3b64c8b6,0x3b1a16cf,0x3b0404f7,0x3ada2ee2,0x3adfb5a9,0x3aefa2ab,
0x3afcdd46,0x3b0520ef,0x3b0c2234,0x3b13b1bb,0x3b1cf5e3,0x3b27061f,0x3b335c72,0x3b3d2c24,0x3b48074a,0x3b5a73a5,0x3b4ae2bd,0x3b449b8d,0x3b3be592,0x3b3b1887,0x3b5c1ced,0x38937569,0x38515f3a,0x38effc4a,0x38d0a365,0x392a9779,0x397908db,0x38c2a9d1,0x3904f8db,0x395c1fd1,0x39706056,
0x396dba2e,0x39479cf1,0x39720f86,0x39767a78,0x396b79ca,0x390fa37f,0x38c969f1,0x3988c792,0x39110d85,0x38ca877c,0x38d95f9c,0x38618d0c,0x3897ae73,0x38a5c6b0,0x38b256d1,0x38b5589b,0x38b0ff9a,0x38a12a14,0x38a06a81,0x38ac194b,0x38af5911,0x38aef835,0x38a4afca,0x38a8f3fe,0x389c4e95,
0x3873433c,0x3884b2b5,0x389efea9,0x38cfb9b1,0x3920e783,0x386bfc6f,0x3882254c,0x37b9d39b,0x37ec8492,0x3827b726,0x385b1a49,0x3884ba23,0x388eb1cb,0x387f7b1e,0x383671ed,0x381eeaac,0x382e9da6,0x382c51e9,0x3856d8cd,0x37fb563e,0x38fe489e,0x38b73676,0x38cdcc75,0x390474d3,0x393db620,
0x396d7bd1,0x39756ee0,0x3951a6cd,0x391477d3,0x38fc3f12,0x391ba411,0x39164df2,0x3919fa37,0x39086290,0x391d5f3c,0x390c1daa,0x38ca785a,0x38b2dffc,0x38d5250b,0x38a63c00,0x388a9928,0x380870de,0x38b184da,0x377b783d,0x37e8b8a6,0x38e0bbf2,0x39219644,0x395f7023,0x397637f5,0x38d5f936,
0x385bfa20,0x388c7643,0x387c84c5,0x389c945f,0x38067b44,0x37ccfe24,0x386bf2dc,0x388b71ee,0x390f99eb,0x391ee1fe,0x398f6b51,0x39bf0dd2,0x39cb3b18,0x39bd18c9,0x39785a32,0x3969a5e3,0x39a321de,0x399194f5,0x39938c33,0x3986f62a,0x39a09f03,0x39857609,0x3928cd2b,0x38fc00c5,0x3961a654,
0x3877899f,0x389c2924,0x38b3335a,0x39821342,0x3866da62,0x391d90cb,0x398589a4,0x399aa791,0x39adafe3,0x392342dc,0x388f629e,0x38854d13,0x3897cb21,0x38ce26c0,0x391f8264,0x38e9631c,0x387cf929,0x391c9a56,0x3971ae74,0x39b0b5b8,0x39ec1cad,0x3a61d981,0x3a9f9c7c,0x3ab009bb,0x3a8c5ccb,
0x3a05ddba,0x399bba0d,0x3a110474,0x39d3be42,0x39e19a28,0x39dbdad5,0x3a1f926a,0x3a11f6da,0x3a0751d6,0x39969f42,0x3aaa7c0e,0x3a171eeb,0x3a30e4a8,0x39c8fa13,0x395352c9,0x3995f17f,0x39a6f697,0x39bee4fe,0x390c34b6,0x3754544f,0x3721dba3,0x38b16b75,0x388439d3,0x389143ea,0x3882fb79,
0x391a3128,0x39979b1b,0x39ca436a,0x3a195517,0x3a478092,0x3a8069c2,0x3a429ae6,0x3a4b9176,0x3a2d4e40,0x3a5c036b,0x3a85ba74,0x3a3fd040,0x3a79ecc7,0x3a8e9f8e,0x3a3746c7,0x39fbd4f4,0x3a347191,0x39fb5c3a,0x3a12ab9a,0x3a8400fd,0x3a985e91,0x39d859c0,0x39b14bfd,0x3a4e4995,0x39c092aa,
0x39f1d8a4,0x3a6bf26e,0x3a756d42,0x398176fd,0x3873326a,0x3713f69e,0x37c686e6,0x386906d2,0x383241f9,0x3817ed32,0x371d3d2e,0x37b8f6f9,0x37f52280,0x3822be85,0x38bc9594,0x39521d37,0x39851ced,0x39d690e6,0x3a20486b,0x3a0c4c80,0x3a01909b,0x3a5ac89c,0x3a624592,0x3a358d87,0x3a7f0f11,
0x395be744,0x39490e4c,0x39a43404,0x3a92a89d,0x3a898b2c,0x3a4b717b,0x39c01136,0x3acd4150,0x3be21f59,0x3b7ae6e9,0x3adbdcea,0x39a74675,0x38945c05,0x38851770,0x389727ef,0x382d653e,0x3767dd5e,0x36675cb6,0x371a29a7,0x35d691e7,0x38071a03,0x37dbd1d3,0x383602d3,0x384378b7,0x37d9adc3,
0x3836fc89,0x389d1dfd,0x38d39ca6,0x39047163,0x395c63ec,0x39d58f55,0x3a2acd59,0x3a7d99fc,0x3a7330f4,0x3a2f4e75,0x3a75e371,0x3ab1414e,0x3ad0aeb9,0x3b0eb6a8,0x3b04e133,0x3aeab5cd,0x3af31c34,0x39ee144d,0x3ac3c179,0x3b6b0714,0x3ae26a3d,0x3ac257b3,0x3a4381ff,0x38b09aac,0x38792dff,
0x382fa16f,0x36148bf7,0x357d54c7,0x36a1b134,0x3679d2bc,0x35d76dfc,0x3696cc47,0x35c068c1,0x37707d9b,0x388b233a,0x38ba3585,0x3902add0,0x3908430d,0x39274307,0x3936ccc3,0x39770c8b,0x39724357,0x3974dac0,0x396cd685,0x394bd501,0x390ca48e,0x39957ee2,0x39ddb67c,0x39bd32aa,0x3a3b18ea,
0x3a7a14f7,0x3ad431b3,0x3b126abf,0x3a93d587,0x3a939df8,0x3a7472e8,0x3a822be3,0x3a1d9f93,0x390e96b2,0x37d92312,0x371224eb,0x37fefa43,0x379f3922,0x3796f140,0x375384a3,0x3725ba71,0x36bc8082,0x3685dc55,0x37b4abc3,0x388d2fd5,0x392c2801,0x3963e493,0x398d6094,0x39799f84,0x393642f1,
0x38d7ccab,0x38439256,0x37f6f008,0x38d3fca7,0x399c32e0,0x39d087d7,0x3a1453f5,0x3a46c512,0x3a2c0b23,0x3a2013b2,0x3a202bd7,0x3a3cada3,0x3a31a19e,0x3a4550e1,0x3a859525,0x39e77d9e,0x39c58650,0x399f95f5,0x39727958,0x394c505e,0x3933a305,0x39093e7d,0x38ce5236,0x38d283cb,0x38b80725,
0x38806d10,0x383c3baa,0x37cb199c,0x380c88bb,0x381b6553,0x38271215,0x382f9a49,0x387305ac,0x389352ac,0x38833fe1,0x38285711,0x381fce26,0x3823e1fa,0x3899f42e,0x390cc533,0x394eaf34,0x399021ec,0x39a59b86,0x39b55139,0x39a30556,0x39ae2624,0x3a020e5d,0x39c88cae,0x39b05f65,0x39bca508,
0x39c8ce75,0x39475954,0x39527dc3,0x395a0834,0x3952b180,0x39788102,0x39542b0e,0x393165d2,0x392a8e58,0x390b49fa,0x38f8a746,0x38fd1398,0x38cbc01a,0x38c8712f,0x38e46de7,0x38a7bbff,0x389ffca5,0x38ce70d6,0x38ac47c5,0x38a34736,0x388c6f3a,0x38805a05,0x384f53d4,0x3858aaa5,0x3832d2dd,
0x382c7c86,0x3841ff2a,0x382776df,0x3872315e,0x38d56bf0,0x38e4cb4f,0x38f2a3da,0x3912a7a7,0x38e4990e,0x38d7c39e,0x39008a37,0x391c50a0,0x3903eb7c,0x3918ab35,0x392ea8c6,0x3909afcf,0x39170954,0x3918f8b8,0x392be2e9,0x393f7101,0x39321aef,0x3927c75f,0x3925db2a,0x391e902d,0x3917623a,
0x39200381,0x3906bcad,0x38e2a7e8,0x38dae10d,0x38c11ee9,0x38c69c3a,0x38c71530,0x38ad75ae,0x38995a4f,0x38886d62,0x3875b932,0x3862e11c,0x385e5412,0x3867192b,0x3886552b,0x389b8ded,0x38b05133,0x38cb6c13,0x38fab3e2,0x38d68e43,0x38d36ce6,0x38dd8f61,0x38f70342,0x389d7493,0x38b2a26a,
0x38ca9b7d,0x38fb0f7e,0x3919204c,0x38cf72e8,0x38fa541e,0x3924b472,0x392ad504,0x39303291,0x39265637,0x393b832d,0x3945fe56,0x394a75e5,0x390ba1fc,0x38e199de,0x392d9ff5,0x38fe9a6e,0x38d04d5c,0x38c42f0a,0x38ad01e4,0x38aa5505,0x38a2ed46,0x389ec71c,0x389ab991,0x3893c5df,0x38947021,
0x3892faf6,0x3894c0cf,0x3897e86f,0x389e06e0,0x38ac05a5,0x38a21fa7,0x389f77cb,0x389e0f16,0x389e2dea,0x38e06be1,
};
const uint32_t defaultHRIR_rom_EL32[HRTF_MODEL_N_SECTIONS * 470] = {
0x3ea949d7,0x3e9e9e1b,0x3eaad36e,0x3e968ec6,0x3ea57d26,0x3eab1dcf,0x3eb44268,0x3eb925e2,0x3ec125cc,0x3eb46cfb,0x3eaddeaf,0x3ea72cfe,0x3ea16e08,0x3e9c9033,0x3e98340f,0x3e95698b,0x3e924505,0x3e8f2d4d,0x3e8bb504,0x3e81927f,0x3e916ed6,0x3e8d691a,0x3e952461,0x3ecc76c5,0x3e88ca6b,
0x3e8f4874,0x3eb998a6,0x3ebc79c9,0x3eb7e9c5,0x3ea883fd,0x3eb92f39,0x3ebfaee3,0x3ebbeebc,0x3e949d90,0x3e9323ca,0x3ecc82e4,0x3ea7e5e5,0x3ed6e55e,0x3ede2341,0x3edfd603,0x3f00029f,0x3f0c5c00,0x3f1cc904,0x3f2736fb,0x3f2fda5f,0x3f1a82a9,0x3f0b5757,0x3ef97e3f,0x3ee19c7b,0x3ecf3dd5,
0x3ec1cbb8,0x3eb7d5a0,0x3eaddcb3,0x3ea565ec,0x3e97b659,0x3e8a2c09,0x3e884bb5,0x3e87446c,0x3e4c2da2,0x3e541451,0x3e348361,0x3e2de453,0x3e37f8b2,0x3e3745ed,0x3e4880c2,0x3e43aa36,0x3e47e138,0x3e488bce,0x3e3ef5ad,0x3e581338,0x3e64b2ea,0x3e8074ba,0x3e950746,0x3ebb764d,0x3ee9a40e,
0x3f1ef55e,0x3f3304cf,0x3f5769b9,0x3f7a6d70,0x3f88afa7,0x3f98ca8a,0x3f7fed69,0x3f5fc85f,0x3f411510,0x3f244f51,0x3f0e9f1b,0x3ef90951,0x3edf5c20,0x3ec5c55d,0x3eb195d5,0x3e8f0457,0x3e782c46,0x3e3bd2f3,0x3e2e50ce,0x3e084f2d,0x3e002303,0x3dd5bccb,0x3dc4fb4e,0x3db5233e,0x3dbeaae2,
0x3dc73daa,0x3ddf8b77,0x3db408d0,0x3dcbf93d,0x3ddebb04,0x3e042790,0x3e1cd871,0x3e558dc8,0x3e8d329d,0x3edc55ee,0x3f1f91ae,0x3f646bf6,0x3f89309d,0x3fadfa07,0x3fc8ed30,0x3fe628f0,0x3fffd1cf,0x3fc60734,0x3f9d08ce,0x3f6f0bdf,0x3f36e826,0x3f11c33a,0x3ef5f55e,0x3ed646e6,0x3eb7bc22,
0x3ea1aa6a,0x3e71f591,0x3e4154d0,0x3e0ea292,0x3de6b8f5,0x3d9d7d15,0x3d8a95ba,0x3d3beaa6,0x3d1b0ff8,0x3d0732a8,0x3d1a9b9d,0x3d2d4ff1,0x3d39e2bc,0x3d12e9a6,0x3d12b4e1,0x3d46d7ac,0x3d964747,0x3e0829b0,0x3e27443c,0x3e81049e,0x3f7d4c5e,0x3fd0c51c,0x4006822e,0x4012dcdf,0x40227e01,
0x4014db00,0x400f1b9e,0x401058a5,0x401a9143,0x40265aa7,0x40296650,0x40283a34,0x401c3707,0x400b8f28,0x3fd472d2,0x3fa2ce4b,0x3f832cc2,0x3f214ea0,0x3ed1c5db,0x3e809b4c,0x3e3cb9a3,0x3de0ce40,0x3da06a01,0x3d5b46af,0x3d361b10,0x3d1b1c49,0x3d44ecec,0x3d4b25c2,0x3d50f054,0x3d4e4c6b,
0x3d85ffac,0x3dd6bd4e,0x3e1d6b3e,0x3e66df58,0x3ea102fa,0x3f0f5aed,0x3f91f2c1,0x3fb40b5b,0x40646f0a,0x406b6f6c,0x40672898,0x4031f271,0x402604e6,0x4034385c,0x40398cd0,0x403eaf95,0x4043f6aa,0x40409b5d,0x40371f04,0x40275acc,0x3fff1879,0x3fb754c4,0x3f82bbec,0x3f2349a1,0x3ef9b368,
0x3e9f2346,0x3e892203,0x3e2898a2,0x3de47af7,0x3d89c034,0x3d5239db,0x3d3551bc,0x3d5746cb,0x3d7960c6,0x3d9abc0e,0x3d8e70ad,0x3da2004c,0x3ddcacb4,0x3e123f7c,0x3e4fd66c,0x3ead1b84,0x3f0dad32,0x3fb0fc41,0x401aebec,0x409a1704,0x408302a2,0x407ffff7,0x4025a20b,0x401cb702,0x4033d5f0,
0x402df25c,0x40376abc,0x404be08d,0x4045547d,0x4034bcd0,0x401a93a0,0x3ffea26d,0x3fc1f714,0x3f9073d1,0x3f3270b0,0x3f0aa60e,0x3ea59cb8,0x3e8d782b,0x3e4ced45,0x3e44e9ab,0x3dea46c6,0x3db65f72,0x3dd4cc8c,0x3dad44af,0x3dbeda43,0x3e1d73c8,0x3dad1f32,0x3dac30ee,0x3de91bae,0x3e6fd667,
0x3e87c367,0x3f216d28,0x3f065daa,0x3f94dce2,0x40304987,0x403a6f75,0x400d291a,0x40124812,0x3ffa42b0,0x40085520,0x40265cd9,0x4025bf7c,0x4028e41a,0x402029d2,0x401d1e11,0x400ff35d,0x3feb809b,0x3fbef783,0x3f8d9515,0x3f44a251,0x3f122074,0x3ef40a2a,0x3eb24039,0x3e911f85,0x3e523550,
0x3e40fc56,0x3e06df0d,0x3dd22833,0x3db95d5b,0x3d9b735b,0x3dbf0be1,0x3e76a1a0,0x3dd8714d,0x3db897d0,0x3de74109,0x3e093df2,0x3e535ddd,0x3e956a4d,0x3ef7a465,0x3f6f4708,0x3fb9717b,0x3fd358a4,0x3fe93e16,0x3fed3332,0x3fea705b,0x3fed71a0,0x40043ac1,0x3ff8a755,0x3ffe9b92,0x40051e7d,
0x3ff4d6ce,0x3fd80510,0x3fb1ed3a,0x3f83ad3c,0x3f469a6a,0x3f26cb49,0x3f0e1467,0x3f03b4b8,0x3ee38399,0x3eb44ba0,0x3e87aec0,0x3e4804e6,0x3e24c82c,0x3e0a4c24,0x3dd6c9d8,0x3dc674f0,0x3dd92d96,0x3e26bb9d,0x3df1a7e0,0x3dfe6a19,0x3e162a57,0x3e3f12a2,0x3e6b8a0b,0x3ea31714,0x3f47cb50,
0x3f6030c7,0x3f7b63d5,0x3f9afb36,0x3fa70a58,0x3fb1bc0a,0x3fc22372,0x3fc7b6e4,0x3fc68875,0x3fc48fc6,0x3fbe5d2a,0x3fb2517a,0x3f9b6e1a,0x3f85b6a5,0x3f646e2c,0x3f46d593,0x3f28364a,0x3f1105b1,0x3f063f28,0x3f10ae9c,0x3ed36154,0x3ecc7964,0x3e9bc7af,0x3e8d477f,0x3e4b4da5,0x3e16a635,
0x3dfd081d,0x3dfc87a6,0x3e0843b5,0x3e174652,0x3e1615be,0x3e16208b,0x3e19f4e4,0x3e42b577,0x3e84dfbe,0x3ea59da7,0x3f03c265,0x3f216eba,0x3f4de3fe,0x3f74c17c,0x3f87e1f0,0x3f9d2063,0x3f9b7831,0x3f9ea498,0x3fa5cc27,0x3f99a529,0x3f91e490,0x3f8dc4ac,0x3f800406,0x3f6aa891,0x3f55b3ef,
0x3f40979b,0x3f2c61c9,0x3f1cac17,0x3f0e3177,0x3f0f195d,0x3ef46e30,0x3ed82e3d,0x3eb27154,0x3e9c78f3,0x3e84e650,0x3e8048c3,0x3e59f560,0x3e64601e,0x3e56c4ae,0x3e6d39b2,0x3e39ec71,0x3e68b45d,0x3e4c4839,0x3e89b44d,0x3ea8a2ad,0x3ee0156f,0x3f04383b,0x3f57de18,0x3f4817c8,0x3f3d8a6e,
0x3f484be1,0x3f51b3bb,0x3f5cf774,0x3f6a830e,0x3f7c74e3,0x3f70aecf,0x3f6a4c6d,0x3f6257b9,0x3f594409,0x3f510224,0x3f48ad3e,0x3f3d782f,0x3f318cb9,0x3f2881dc,0x3f208b2c,0x3f16a0bb,0x3f165428,0x3f1e0145,0x3ee3e1d6,0x3eeca79e,0x3ed863d6,0x3ec6d3a2,0x3ed1eac1,0x3ed5a321,0x3eea8fbf,
0x3ed8c5c7,0x3eee18ad,0x3ee8c70f,0x3ed160b3,0x3eecff85,0x3efa86bd,0x3f088bc4,0x3f1bb6ce,0x3f2e2455,0x3f408a4e,0x3f23cf8b,0x3f2f482b,0x3f2f3548,0x3f33c546,0x3f363d85,0x3f3b7bc3,0x3f35a8ea,0x3f326b69,0x3f2f0360,0x3f2c425e,0x3f29e130,0x3f27fac2,0x3f25d20a,0x3f23f612,0x3f21349e,
0x3f1fbc33,0x3f15cbbd,0x3f2fa0fa,0x3f224010,0x3f2e20b6,0x3f78668a,0x3f1cb390,0x3f249834,0x3f5eafd1,0x3f653827,0x3f5ea74f,0x3f4ab775,0x3f5f939e,0x3f64bad6,0x3f5b7d64,0x3f299928,0x3f28bd1b,0x3f774df7,0x3f3c07e0,0x3f4e1208,0x3981d91f,0x394eea09,0x3930056d,0x394cbf08,0x395a29b7,
0x3938ab32,0x39854dfd,0x3981ea72,0x3936a35a,0x39480faa,0x392789ab,0x38e0dc4c,0x38d83cb3,0x38faf815,0x39481e83,0x3954a164,0x396c3ff6,0x397085e7,0x397eff50,0x398a10f7,0x3999aa24,0x39a1755c,0x399f428a,0x39a323b3,0x39666283,0x395117f5,0x393e677a,0x3980910d,0x398acdb3,0x3996e2b4,
0x397f7c8a,0x396cfa3c,0x39607e98,0x3944d1cb,0x394fc9df,0x39bd72c7,0x396b4714,0x39b90f06,0x3972b76a,0x396b9bbf,0x394be8cd,0x39142134,0x39a73ba6,0x39b518b9,0x39253585,0x39766e4b,0x39336d08,0x392ec619,0x38d2ae74,0x38f4df18,0x398f360e,0x3990920e,0x39b90bbe,0x39b38935,0x39d27b4d,
0x39ff87d9,0x3a1c0fdf,0x3a31644a,0x3a2d97ff,0x3a2404b2,0x39bb0a95,0x3981cfdc,0x3957505a,0x39bce4d9,0x39edc5fb,0x3a056709,0x39d0c26c,0x399a548b,0x397797ce,0x392b6ce7,0x397e7e97,0x3a66ab6c,0x39f2bd88,0x39e1bd0b,0x3a042d10,0x39c145a9,0x39dac6e7,0x3998594c,0x3a46514d,0x3a384a10,
0x3914fcbc,0x39a2bc4f,0x3968e759,0x3a3c6d73,0x3a050a1a,0x39fbc953,0x3a4e6e95,0x39e62b07,0x3a091eab,0x39ed49d3,0x3a1c5cea,0x3a56c771,0x3a8ff64a,0x3aad9a95,0x3ab4cb54,0x3aaaaf29,0x3a21c6fe,0x39a50b01,0x399c2d49,0x3a2e2f6a,0x3a6349f7,0x3a8f2c65,0x3a458f27,0x3a0ba3b6,0x39c2a4a4,
0x398dc0ea,0x39a093a1,0x3ae313e2,0x3a02c621,0x3a99831b,0x3a43f6fc,0x3a0d254a,0x39a94928,0x3a2debf9,0x3a8afff1,0x3a908b75,0x39a33ebc,0x39ca504a,0x3a2c41aa,0x3b343e5f,0x3b273a16,0x3b14b786,0x3b0706aa,0x3a92c416,0x3a8f30fa,0x3a615687,0x3a8dfbe4,0x3ad1d135,0x3b0ce35a,0x3b273a48,
0x3b28f3c7,0x3b36b9cd,0x3acb10c9,0x3a59bbd0,0x3a1e19ff,0x3a8e4b85,0x3add4b28,0x3b0d831b,0x3ac87948,0x3a977915,0x3a15283c,0x3a6d3f79,0x3a30b647,0x3b92e1bb,0x3afd13ea,0x3bfbf38e,0x3b0e5c95,0x3ab5a938,0x3b514f67,0x3c1954cc,0x3b8c5113,0x3b16de45,0x3ab30305,0x3b27c65f,0x3b044fce,
0x3b69464e,0x3b52935d,0x3b3d27d9,0x3b00c622,0x3a487988,0x3a28cc87,0x3a2a02a2,0x3a242879,0x3a4e4f04,0x3a99c9dc,0x3b0dba8a,0x3b2356fe,0x3b2e3e2a,0x3ac80ff1,0x3a8e9653,0x3a68393a,0x39c574e8,0x39f8fed0,0x3b0b8895,0x3ae4e609,0x3b15de8a,0x3b12b86e,0x3b3c946e,0x3aaa5dfd,0x3b5c9aca,
0x3bc2f373,0x3c225987,0x3c55d372,0x3b1bc057,0x3b115b72,0x3c098e24,0x3be33234,0x3b7f074e,0x3b5ae9db,0x3a9f7a67,0x3abc817b,0x3aca6dd5,0x3a8c65d2,0x3a7b8a5e,0x3a38a694,0x3a4c96b2,0x3a71f526,0x3a3543da,0x3a15f49e,0x3a305644,0x3a5e0da5,0x3a362cf8,0x3a1fb89c,0x3a377fa2,0x3a5a97d6,
0x3a2af5af,0x39f768b1,0x3a4c7972,0x3a761847,0x3a7811da,0x399b3d29,0x39ca2c9a,0x3aaf859f,0x3b2b7302,0x3b1a019f,0x3b6ba0f9,0x3bff8aa9,0x3b8e4277,0x3bb880e2,0x3b70c6f0,0x3b66149c,0x3b446adb,0x3b8e421c,0x3b2c3d78,0x3b8c3ed7,0x3b4c9b45,0x3b261d0a,0x3ab0c73b,0x3a383925,0x3a117dfb,
0x3a5031be,0x3a61f118,0x3a49f2d7,0x3a157baa,0x3a60c720,0x3a5904c7,0x3ac7b4ef,0x39a26a2e,0x394315a6,0x3a02d95a,0x39cc1712,0x39527f5a,0x39793c37,0x3941eafb,0x389aa36f,0x3897aad6,0x39d00f4a,0x3a342dfb,0x3a584855,0x3a924077,0x3ae9c146,0x3b2422ac,0x3b4cbdb3,0x3c289d12,0x3c56a865,
0x3cb67aee,0x3ca5fa21,0x3c2b7d6b,0x3bb4e6ab,0x3b74d661,0x3b6856b1,0x3b0fdf91,0x3afcc6b9,0x3aea86ec,0x3aa16cc3,0x3a97a74f,0x3a5015e9,0x3a3941d6,0x3a2a5c8f,0x3a28a0bf,0x3a42cb64,0x3a2eda97,0x3a6c76a4,0x3a0390e2,0x3a0a6a4e,0x3a01a091,0x3a01d53e,0x39a575ab,0x3975264c,0x38f1522f,
0x390e4bc1,0x3979b0d4,0x399c04bc,0x39d9b601,0x3aa04462,0x3a8a0957,0x3b10323e,0x3ba3cbee,0x3c004420,0x3c9b3b0b,0x3ccec1a6,0x3caf4452,0x3c5db7a4,0x3c0ce6b4,0x3bea9c76,0x3bfb5430,0x3bb9e008,0x3b587371,0x3b165df8,0x3ad54c8a,0x3ab88cb1,0x3a8c6e39,0x3a5d5732,0x3a1c813c,0x3a0c6a2c,
0x39f02544,0x39f387ba,0x39e72622,0x39b6eb7e,0x397745fc,0x3956ff08,0x39bf8561,0x3943794e,0x39451aa8,0x39b73271,0x3949b35b,0x3974f61f,0x39be2d3b,0x3a4c47c3,0x3ad02c9b,0x3b38b4bc,0x3c05ca00,0x3c426eac,0x3c47c442,0x3c6d5392,0x3c600404,0x3c4f06d5,0x3c3c3463,0x3c1519e3,0x3c0c5f1a,
0x3c1459fe,0x3c064779,0x3bd6162f,0x3b8d0eb8,0x3b828365,0x3b82e3d0,0x3b8ccf65,0x3b846906,0x3b370ea2,0x3b2f7e89,0x3b16bfc9,0x3aea1977,0x3ab8d38a,0x3a6aafe5,0x39af6b7e,0x39d59d75,0x39acedbc,0x399f2e58,0x39a390a0,0x3a263ed5,0x3aac59f6,0x3af7fe6b,0x3b3098b9,0x3b5f4e3d,0x3ba93fc2,
0x3bdef662,0x3c038266,0x3bf84924,0x3bf701ea,0x3c14aff4,0x3c306430,0x3bdec784,0x3bf757ba,0x3bf2503a,0x3c036e81,0x3c2165e7,0x3c10c79d,0x3c1ceb3b,0x3c3db0d4,0x3c0ab8af,0x3bd35687,0x3bc1c364,0x3b9f60b7,0x3b83969e,0x3b5d64f1,0x3b309acc,0x3b127b2e,0x3af67965,0x3aa8209b,0x3a5790ea,
0x3a143a1c,0x39dac4ac,0x39a25e33,0x3a0bd002,0x3a3e4214,0x3a9aa49b,0x3af3758c,0x3b186f23,0x3b3b7056,0x3b7bf7a0,0x3b8478da,0x3b94e9e0,0x3baf481e,0x3bbaf049,0x3bd2781b,0x3beca121,0x3be2e10d,0x3ba35c28,0x3ba00dd2,0x3b94a348,0x3b8c7260,0x3b87f07d,0x3b87495e,0x3b88d3bc,0x3b91da47,
0x3b834caa,0x3b8227f4,0x3b753ee4,0x3b69602d,0x3b5a3e43,0x3b54a725,0x3b2f99b9,0x3b11258f,0x3aea9cde,0x3abd7cd6,0x3a92710d,0x3a58d503,0x3a7a6872,0x3a78c541,0x3a8fc9cf,0x3aa1289c,0x3ac6e716,0x3aec26a3,0x3b0c171c,0x3b23c16a,0x3b3d2853,0x3b57a615,0x3b7707a1,0x3b8cb56a,0x3b8d4236,
0x3b906460,0x3b91e22f,0x3b95ab23,0x3b6f66e2,0x3b6eae15,0x3b69e8ae,0x3b6ab44a,0x3b68a86f,0x3b6f87ea,0x3b739746,0x3b7abc1b,0x3b70e9d2,0x3b68ae3f,0x3b6396d8,0x3b58e56e,0x3b50e28a,0x3b4c4992,0x3b3e2880,0x3b337a29,0x3b296287,0x3b1c8612,0x3b13cf2e,0x3b02e502,0x3b129c94,0x3b1b9135,
0x3b2cd589,0x3b20afff,0x3b2bd018,0x3b3d45d3,0x3b439764,0x3b484b0e,0x3b4fc9f2,0x3b584ca0,0x3b61f60b,0x3b6e853a,0x3b679204,0x3b650736,0x3b7a30bf,0x3b719024,0x3b8a967a,0x37478792,0x36fed3eb,0x370c8bbc,0x37367266,0x37656ba7,0x37c3a48d,0x375faf10,0x37200468,0x36796731,0x37450488,
0x3780b49c,0x37ab8ff5,0x37793cde,0x3789c61a,0x37d1fa89,0x37dfa813,0x37d4381b,0x37a25090,0x37410619,0x3713c88a,0x370e1c41,0x370f7e39,0x371bad78,0x37404e70,0x378453ff,0x3764b25d,0x368e1899,0x3717c2b6,0x3708d730,0x370dd7ef,0x36bbdfa7,0x367c5c59,0x36e42e54,0x3698de59,0x36dcc3f8,
0x37844a23,0x3708fd32,0x370c5e47,0x374960ca,0x380c16c3,0x3861c57e,0x38ca380f,0x387934f1,0x38173631,0x36e9a106,0x37c52485,0x37f83430,0x3877e619,0x37e42875,0x386d271e,0x3908eaaa,0x392fe310,0x3925b2be,0x38d51552,0x3850d429,0x38044fcd,0x37f54dfb,0x37bab5d2,0x378a34d9,0x37bd25cd,
0x383a289e,0x3829e169,0x37421f6f,0x37d0ec5e,0x37da2e40,0x38270e61,0x3817ed84,0x37f14c77,0x3815ee57,0x371b50ad,0x36d66634,0x383cf40c,0x372d67a0,0x367ef215,0x37dfa438,0x3857a96f,0x38eaa0ea,0x395e1c85,0x393025c8,0x38dead0f,0x382b20dc,0x38605dff,0x38bc91fa,0x3956117f,0x38d5dac7,
0x3908a8ed,0x3997d82f,0x39a00e1a,0x39915cec,0x392c5645,0x3870efe9,0x38242a95,0x385eac56,0x37fb6f3e,0x37b55ed6,0x381a9279,0x38c86801,0x3893dcbc,0x38b6cd3c,0x388c78f2,0x3907b40f,0x39ac9065,0x39a563dd,0x3962a26f,0x392189f2,0x380691d5,0x371a4d3c,0x38dbca08,0x37016452,0x3860d533,
0x3805d7be,0x3969c184,0x39d7ba1d,0x3a4ac4a9,0x3a0fd11a,0x39b9ac58,0x38ff66ad,0x38bb9574,0x38dae1c3,0x39ee6b45,0x38eb2cf4,0x39d47578,0x3a99afb8,0x3ac0f562,0x3aaa405b,0x3a59fd07,0x39d742b4,0x39a87c1b,0x39a848a1,0x39466759,0x38a92648,0x39254ddc,0x396371c7,0x39181eed,0x38d70069,
0x38c86f00,0x38daa8b0,0x39744f0a,0x3a046c6a,0x39e74760,0x39ca8ae0,0x3969fa5a,0x38a21637,0x39c2f7ee,0x38c5e45a,0x3a52ea76,0x3a445989,0x3acd17ee,0x3ac624fa,0x3aa9f06f,0x39fed80f,0x3961ef41,0x39a3542e,0x39278124,0x3a1c0311,0x3a9f0369,0x3a91b0c0,0x3a72417a,0x3ac1e6d8,0x3a9f75ba,
0x3a7594a7,0x3a6c8108,0x3a7919c7,0x3a95f3b4,0x3a8ca76b,0x3a595fac,0x3a0fd900,0x39e3b1d1,0x3963bb0a,0x38c32225,0x38d5ba68,0x38d89754,0x390e09d7,0x3778268d,0x37a50bf2,0x3958e215,0x3a10a129,0x39f9da64,0x39dd1ab3,0x3994dc0e,0x3a06a240,0x3a8f58c1,0x39ed344f,0x39e17f33,0x3a0adab7,
0x3a99c873,0x3ac97dc8,0x3ad3beaf,0x39eabd59,0x398d2b10,0x39a11f77,0x3abf76c0,0x3a891348,0x3aab6780,0x3aa1e1d6,0x3a2a3a1d,0x3a182764,0x39da2cb6,0x39c52c08,0x397c0f78,0x3998796e,0x38e3814b,0x387d050a,0x3813cf28,0x37fda665,0x372ed78e,0x38622626,0x3888b9c4,0x38b77080,0x38217086,
0x3763ae74,0x38c02b3e,0x39c07582,0x3abb34e2,0x3ab0ff77,0x3a3ee17c,0x3a0f45dd,0x3bbc1d71,0x3c2bcaf6,0x3b207bf1,0x3a2e1eae,0x3af474b8,0x3abaa6bc,0x3ac354bf,0x3afc333d,0x3ac1514c,0x3ac2210b,0x3a9249fe,0x39c69260,0x3a1bd13e,0x3a447380,0x3a050bb6,0x39eaa96b,0x39a0604d,0x394281fd,
0x38cf44f0,0x38bda8f3,0x38145197,0x37d90894,0x388d470e,0x3880791f,0x3823a6a6,0x3849d7e6,0x361d75bb,0x37618d3e,0x36acf63a,0x37b2d32e,0x3885c9cf,0x38f39c8f,0x38c3bf01,0x38dff582,0x39f95652,0x3b264077,0x3b2a60e7,0x3bb1e2b3,0x3afa805e,0x3a58314a,0x3a8e6125,0x3a82fcd6,0x3a3c09fa,
0x3a7c4686,0x39f99dee,0x3a114635,0x39b093ab,0x39052509,0x3974ea84,0x399f7927,0x3987749f,0x3953b8c9,0x394c25d3,0x3923066f,0x39453539,0x394f27f6,0x39327374,0x390f1dc5,0x38d6b5bf,0x37b0f9e8,0x35c5aedd,0x36d18bdf,0x361c4a46,0x36b97c65,0x36fd7cd6,0x35c33bf9,0x365475a1,0x3878a575,
0x38b917fc,0x38fb697a,0x3a93f343,0x3b11e344,0x3aa74282,0x3a95eedf,0x3a43978c,0x3a1ea414,0x3986f63c,0x39178ab8,0x399e5793,0x39c4391f,0x3a185289,0x3a3c3a99,0x3a49fb2b,0x3a267925,0x39eb542a,0x39af9264,0x39022459,0x382a9088,0x388cc16c,0x3921cd09,0x39874a15,0x39b5d044,0x39c553cf,
0x39a74d8d,0x39866069,0x38db0d2e,0x3809264f,0x36b3c9e1,0x37093776,0x37789cb8,0x379561d5,0x37d9154c,0x37d84530,0x38394589,0x376c948c,0x38106fb3,0x394728cd,0x3a67b2c8,0x39d54121,0x39f0d8a0,0x3a0608eb,0x39f67ef1,0x39dae3f4,0x39c091f1,0x39d282ec,0x39fedef7,0x39e8229f,0x39ee825c,
0x3a06850d,0x39f3c714,0x39cb7bb1,0x3986fc79,0x392118ef,0x38829b34,0x37d5e3f0,0x37f2c744,0x38555121,0x38ca3338,0x38e5f4c0,0x38b605f8,0x387a56eb,0x3878bec0,0x386fc69d,0x385e9056,0x381fc05c,0x388ad231,0x38bca311,0x3908cc87,0x391e1f24,0x391bfa16,0x39500643,0x39839a54,0x39943554,
0x39abc85f,0x3994d7ba,0x399a142b,0x39848a28,0x394b4f2f,0x390f295c,0x38c5b290,0x38bcfdc6,0x38dc4467,0x38bb0db1,0x38af2593,0x38c8e072,0x38655ae1,0x38442442,0x3889e43c,0x386ef822,0x3879fba1,0x389682f6,0x38907dc0,0x389fb45c,0x38c076ff,0x38d7d68b,0x39004d94,0x391adb3e,0x38f3bbe8,
0x38fc349d,0x392e20f8,0x391552ad,0x391ad829,0x3938e525,0x393ea547,0x394fb01d,0x39839f3e,0x398655b2,0x39a0373e,0x39b6e344,0x399c4950,0x395d2456,0x39560cd9,0x3938a4ac,0x391f613e,0x38fe53aa,0x38cbf61e,0x38a94caa,0x38b1971c,0x38ac21a1,0x38b13b92,0x38aedf5b,0x38a78f99,0x389d16c9,
0x38a349fc,0x38a53854,0x38b2d699,0x38c5a968,0x38e00a4a,0x38fc80d7,0x390ee5ce,0x390d955d,0x390b1e30,0x39163d03,0x3926b467,0x393f0e87,0x395dd5a7,0x395418d5,0x39598456,0x3966741b,0x396fb66a,0x3982fc2c,0x399012a2,0x3980a2e1,0x39647081,0x395f6873,0x394bf9d4,0x38e43c83,0x38d9f2b9,
0x38cde27d,0x38be700a,0x38b81225,0x38b0ce50,0x38ac59c0,0x38a4cc5c,0x38a565f1,0x38a5f118,0x38ac6bbb,0x38b2b675,0x38bc47c6,0x38c4d8d9,0x38cd60a1,0x38d45c3b,0x38db9bd1,0x38e43244,0x38ed722d,0x38fcf893,0x38fc59d5,0x3900b7c9,0x39043ca1,0x3903508c,0x3906c8ca,0x391561bc,0x39103a9f,
0x390f5efc,0x390abf30,0x390b73d6,0x39096d39,0x390d880e,0x38fbee8d,0x38f109a0,0x38f7ba96,0x38f04951,0x390e1d14,
};
const uint32_t defaultHRIR_rom_ER32[HRTF_MODEL_N_SECTIONS * 470] = {
0x3ea94952,0x3e96b3de,0x3eac0098,0x3e9ec499,0x3ea82449,0x3ece0959,0x3e92fb80,0x3e94d96e,0x3ebb6806,0x3ebf2c5a,0x3eb94743,0x3ea8ba76,0x3eb7f274,0x3ebc8a4a,0x3eb985ae,0x3e8f3492,0x3e887542,0x3ecc104d,0x3e94f3ad,0x3e8d6ef0,0x3e919f3e,0x3e81a12c,0x3e8ba934,0x3e8f3162,0x3e92443b,
0x3e956946,0x3e9833cc,0x3e9c90fc,0x3ea16eac,0x3ea72c23,0x3eadda5d,0x3eb46de7,0x3ec12deb,0x3eb9255c,0x3eb43e2b,0x3eab26c8,0x3ea559b8,0x3edfbfe1,0x3edb5589,0x3ed8a3c0,0x3e95cf33,0x3e80cd54,0x3e62c244,0x3e577b07,0x3e3e0c11,0x3e4710c1,0x3e48be20,0x3e44185a,0x3e490da3,0x3e376856,
0x3e376849,0x3e2dea5f,0x3e35e973,0x3e540232,0x3e4af4c1,0x3e879a69,0x3e87aff5,0x3e8a2d54,0x3e97cb79,0x3ea557d0,0x3eade49b,0x3eb7d211,0x3ec1cfef,0x3ecf39a9,0x3ee19c3f,0x3ef97f9f,0x3f0b5d8f,0x3f1a80d7,0x3f2fcb9c,0x3f2733f1,0x3f1cdcf0,0x3f0c3d91,0x3f003aa6,0x3f1db3c8,0x3eeec08f,
0x3ebc39c9,0x3e8d7016,0x3e55103a,0x3e212045,0x3e041073,0x3de06a68,0x3dcaee14,0x3db21b35,0x3de025f2,0x3dc5b1d3,0x3dbf13a0,0x3db5a917,0x3dc48155,0x3dd212b5,0x3e000fef,0x3e0845c3,0x3e2d8de1,0x3e3dff7b,0x3e771d7b,0x3e8f28dc,0x3eb18a83,0x3ec5c3b9,0x3edf6074,0x3ef8fe68,0x3f0ea3c8,
0x3f24508d,0x3f4113cc,0x3f5fbffa,0x3f7fedc5,0x3f98e082,0x3f88af16,0x3f7a4b75,0x3f579368,0x3f32fd61,0x3f6ee325,0x3f16b6e8,0x3edb45ae,0x3e7b6fc1,0x3e2c28b1,0x3df2985a,0x3d99338c,0x3d410c60,0x3d1101d6,0x3d13217b,0x3d39c9bb,0x3d2bc320,0x3d1b0c6e,0x3d06a87e,0x3d1d1fa1,0x3d3f43c2,
0x3d8c5283,0x3d9d3131,0x3de71ae8,0x3e09a006,0x3e45cbd3,0x3e6f6616,0x3ea2888e,0x3eb75081,0x3ed6788c,0x3ef5eb98,0x3f11c219,0x3f36df6c,0x3f6f13d7,0x3f9d08c4,0x3fc621d4,0x3fff5b3d,0x3fe687d9,0x3fc87e03,0x3faebae2,0x3f87681d,0x40111ab0,0x3fb99833,0x3f83ae3b,0x3f0030e2,0x3e9f539f,
0x3e55721e,0x3e226067,0x3dd144c5,0x3d8753ba,0x3d4c95ee,0x3d509c62,0x3d4b16e2,0x3d44135e,0x3d1f6925,0x3d2ecedb,0x3d5b63db,0x3d9b2164,0x3de57bae,0x3e38e02a,0x3e71eafd,0x3ed98e76,0x3f1f30d1,0x3f83f206,0x3fa27000,0x3fd4af4a,0x400b63fa,0x401c4dc6,0x402843ac,0x40295bbd,0x402662f0,
0x401a91a2,0x4010244d,0x400f9138,0x4013dfb8,0x4024a4f4,0x400eaabc,0x4070f4c2,0x3fa0eb2b,0x3f92314b,0x3efc170f,0x3eb96b6b,0x3e548e04,0x3e044991,0x3de32f8d,0x3d9dd8bc,0x3d8fe1c4,0x3d98a21c,0x3d785e8f,0x3d586f0e,0x3d376712,0x3d508001,0x3d85da29,0x3df0440c,0x3e2a1c76,0x3e86773b,
0x3e9be714,0x3efdd2cc,0x3f220612,0x3f83331d,0x3fb70894,0x3fff58cf,0x40272268,0x4037365b,0x4040a7d2,0x4043fd16,0x403ebb9d,0x40398690,0x40340a76,0x40265f59,0x4030dc56,0x406a2bf7,0x4064d3b9,0x40a37d56,0x400ac9ff,0x3fc4d80f,0x3f0e722e,0x3f1757a1,0x3e8c749b,0x3e5d8653,0x3de8d03b,
0x3dacae87,0x3db0f0d2,0x3e1ec313,0x3dc14d08,0x3daadb0a,0x3dd34d53,0x3db22a32,0x3df43908,0x3e3f6e32,0x3e4b14e0,0x3e8e68fa,0x3ea199fe,0x3f0cf9b6,0x3f311aaf,0x3f90eee9,0x3fc1a8ba,0x3ffee1f8,0x401a6e0d,0x4034d8c9,0x40455a4c,0x404bd922,0x40376165,0x402dfd56,0x40339d70,0x401d0d70,
0x40247f69,0x4081affb,0x407dd802,0x404ebf41,0x401378ae,0x3f988ed0,0x3f1184de,0x3ea141ae,0x3e58b307,0x3e062161,0x3ddfec30,0x3db8240d,0x3dd4d9d7,0x3e720891,0x3dbd5abc,0x3d9b1014,0x3dbdc353,0x3dd6b6d2,0x3e061032,0x3e440faf,0x3e5b3220,0x3e91b85b,0x3ea84532,0x3efb9aae,0x3f1008f7,
0x3f45dab1,0x3f8d3b93,0x3fbf316d,0x3feb48ba,0x401009c7,0x401d29ec,0x4020228b,0x4028ec93,0x4025c7cb,0x402635bf,0x400889ee,0x3ff8f714,0x4013efc7,0x4007409c,0x3fd0e908,0x3fc45007,0x3f813935,0x3f104b59,0x3ebbaaf3,0x3e6e18ce,0x3e2eabae,0x3e1d3709,0x3e0117b9,0x3df34882,0x3e22e52a,
0x3dd86c83,0x3dc72027,0x3dd41b7e,0x3e02d26b,0x3e27dd72,0x3e486285,0x3e7bf17f,0x3ec497eb,0x3edcde42,0x3f060b23,0x3f0d4e99,0x3f27189c,0x3f468167,0x3f83b8f5,0x3fb1cc02,0x3fd81858,0x3ff4ea13,0x4005176b,0x3ffea363,0x3ff8a889,0x40042bf8,0x3fed6e4e,0x3fea6a40,0x3fed65d2,0x3fe9b038,
0x3f98c734,0x3f7ead0b,0x3f434b58,0x3f002103,0x3ea802a5,0x3e8c1097,0x3e440883,0x3e17bddd,0x3e14ca6c,0x3e16c2c1,0x3e105658,0x3e084b9c,0x3dfc6b42,0x3e00527a,0x3e17818d,0x3e49bd0a,0x3e878869,0x3e997e8a,0x3ec503c5,0x3edfc4dc,0x3f0b5b15,0x3f08001a,0x3f104318,0x3f28879c,0x3f46b041,
0x3f6481b6,0x3f85b333,0x3f9b7624,0x3fb24b60,0x3fbe64ca,0x3fc488dd,0x3fc68498,0x3fc7b7f6,0x3fc24730,0x3fb1653c,0x3fa7d227,0x3f75c923,0x3f4dd03e,0x3f266662,0x3f064de3,0x3edc4ef3,0x3ea5812e,0x3e89474e,0x3e4b5b92,0x3e699005,0x3e3960aa,0x3e6cda0a,0x3e55d9a7,0x3e63f68d,0x3e572ff0,
0x3e7fe216,0x3e860046,0x3ea01815,0x3eb274be,0x3ed8c43d,0x3eeec9ab,0x3f1028c9,0x3f0e2013,0x3f1ca75c,0x3f2c6cf0,0x3f408ee7,0x3f55b64e,0x3f6aa2f5,0x3f800495,0x3f8dc2cd,0x3f91e6bf,0x3f99a696,0x3fa5cbee,0x3f9ea220,0x3f9b71e3,0x3f9d2c75,0x3f87c29c,0x3f3d50ab,0x3f48b831,0x3f52e198,
0x3f194a00,0x3f0a2718,0x3efc51bf,0x3eed3028,0x3ed0b5f6,0x3ee906fa,0x3eef02fb,0x3ed83025,0x3eea4bb2,0x3ed604ee,0x3ed3c857,0x3ec7b905,0x3ed8510e,0x3eed0ac2,0x3ee33cfe,0x3f1ca039,0x3f17b3c1,0x3f168da9,0x3f206c5d,0x3f2889ed,0x3f31863b,0x3f3d7b3f,0x3f48af5b,0x3f51025a,0x3f594208,
0x3f625c84,0x3f6a4abc,0x3f70ad48,0x3f7c7153,0x3f6a88f3,0x3f5cf60b,0x3f51b8bc,0x3f484f7b,0x3f23d3cf,0x3f3fc3ea,0x3f2f0ec0,0x3f3ab4a3,0x3f71ee8e,0x3f296937,0x3f294405,0x3f5b5c34,0x3f649c54,0x3f5fdb34,0x3f4abe09,0x3f5e78ff,0x3f6544d9,0x3f5ed998,0x3f247814,0x3f1c793a,0x3f7adfa2,
0x3f2e67ef,0x3f225526,0x3f2e8d0a,0x3f15b342,0x3f1fdc38,0x3f212f5a,0x3f23f893,0x3f25d228,0x3f27fa0c,0x3f29e19c,0x3f2c42c1,0x3f2f0299,0x3f326c20,0x3f35aa75,0x3f3b7c95,0x3f363c76,0x3f33c6c4,0x3f2f2f84,0x3f2f545a,0x3f4e103a,0x3981d983,0x394cb64d,0x39305111,0x394eed56,0x396b5a84,
0x39bdc9ae,0x394ff124,0x3944acc5,0x39602b8e,0x396c84b7,0x397f2b72,0x3996ad53,0x398a7bda,0x398087d5,0x393e7438,0x395155b7,0x39671586,0x39a32141,0x399ec789,0x39a14c76,0x3999b19e,0x398a10c8,0x397efcb4,0x397085a7,0x396c42fc,0x39549e75,0x39483ed7,0x38fb38ce,0x38d86761,0x38e0c350,
0x3927a8e4,0x39482d3d,0x39369036,0x3981cbec,0x3985347a,0x3938ac93,0x395a4256,0x396bcebd,0x39714884,0x39b93a3a,0x39f2b45a,0x3a65db16,0x397e314e,0x392b7613,0x3977f351,0x399ad1c2,0x39d1502e,0x3a059538,0x39eeda0b,0x39bcc267,0x39570f8b,0x3981c7da,0x39b9b658,0x3a23ef16,0x3a2e5494,
0x3a318aa2,0x3a1c0487,0x39ff7ddc,0x39d280a4,0x39b38b3f,0x39b9046c,0x399094e0,0x398ee61c,0x38f50049,0x38d2f0fe,0x392f8a4b,0x393344e8,0x39761aed,0x3925501b,0x39b5792b,0x39a78bf5,0x3914396f,0x394b89ce,0x39c149f3,0x3a04ab01,0x39e1d8f0,0x3a024208,0x3ae46bc5,0x399faa6b,0x398e61d8,
0x39c29123,0x3a0b427c,0x3a4506ce,0x3a8f1fce,0x3a62257c,0x3a2eab94,0x399cbbbe,0x39a4370d,0x3a23985a,0x3aaab07d,0x3ab423fc,0x3aad873f,0x3a8ffe15,0x3a56d208,0x3a1c5afe,0x39ed397b,0x3a092715,0x39e61ec8,0x3a4f06c0,0x39fb63b8,0x3a04ccef,0x3a3be531,0x39690103,0x39a30de0,0x3915398e,
0x3a37d817,0x3a45e380,0x39983d28,0x39db449b,0x3a0d5983,0x3a425ce1,0x3a9856c9,0x3aff268f,0x3b91273b,0x3a318d59,0x3a6b32e1,0x3a154c58,0x3a977867,0x3ac8c67e,0x3b0d850d,0x3add282b,0x3a8ded7e,0x3a1d3810,0x3a5d9da6,0x3ac62dce,0x3b37997c,0x3b29bd95,0x3b2766f5,0x3b0ce320,0x3ad1f13b,
0x3a8de1b9,0x3a6194d4,0x3a8f2288,0x3a92e7d3,0x3b064730,0x3b151b91,0x3b27bb9a,0x3b33d518,0x3a2cc123,0x39ca126b,0x39a222bc,0x3a912b8e,0x3a8b93af,0x3a2d53f4,0x39aa33b7,0x3ab65196,0x3b0e87a1,0x3bfc207e,0x3bc1ff30,0x3b5c59f0,0x3aac8796,0x3b3b14b2,0x3b1249f4,0x3b1608e7,0x3ae3892f,
0x3b0c2f90,0x39f75d68,0x39c42bea,0x3a6af381,0x3a8e523a,0x3ac689b1,0x3b30f1f9,0x3b240d4b,0x3b0d1e07,0x3a9aec3c,0x3a4ed0be,0x3a241c08,0x3a2a13f6,0x3a28b09c,0x3a48ec00,0x3affee5f,0x3b3df8d4,0x3b5360d3,0x3b69ec4b,0x3b047eb7,0x3b26d9e4,0x3ab25465,0x3b173aaa,0x3b8c41bb,0x3c197d2d,
0x3b50fc1f,0x3b1cf7b0,0x3c554ec1,0x3c23b4fe,0x3bfed11e,0x3b6c8713,0x3b1dedab,0x3b241596,0x3ab38d3f,0x39c4deed,0x3999b725,0x3a7952a8,0x3a752ece,0x3a4cb7b4,0x39f67669,0x3a2b686a,0x3a5c990b,0x3a374828,0x3a1d91d6,0x3a3a140f,0x3a5d5e21,0x3a302c36,0x3a15e46c,0x3a35a7c2,0x3a71c1f7,
0x3a4cd8ba,0x3a380135,0x3a7c4451,0x3a8cc7ff,0x3acadce4,0x3abd0714,0x3a9f05fe,0x3b58ff9f,0x3b7f8258,0x3be3a92d,0x3c095e28,0x3b110d68,0x3b726fc1,0x3bb864e6,0x3b8eeccf,0x3b45b9f0,0x3b204c57,0x3aec7ef4,0x3a903db5,0x3a5cb450,0x3a34878e,0x39c5ac2b,0x38965f94,0x389a76a3,0x3942b2ae,
0x397abc43,0x3953a8e4,0x39d01e63,0x3a01bd05,0x393b54ce,0x39a42f3f,0x3ac77c9e,0x3a57e486,0x3a6112b6,0x3a15a9fe,0x3a4a1a32,0x3a61fe0f,0x3a4fad96,0x3a11ca30,0x3a38b44b,0x3ab09985,0x3b263a9d,0x3b4cbcb8,0x3b8b6764,0x3b2cce4e,0x3b8ec447,0x3b445b90,0x3b656f56,0x3cb8ec5b,0x3c50d20f,
0x3c2d73a0,0x3c064382,0x3ba1aff4,0x3b0e0087,0x3a8df092,0x3a98125f,0x39d7d649,0x39a1323b,0x396f6c1b,0x390cd81b,0x38f27bd7,0x397cf70b,0x39a5441f,0x3a035ee0,0x3a0151aa,0x3a0a4139,0x3a05a988,0x3a6c0284,0x3a2e48cb,0x3a42dc3d,0x3a28f965,0x3a2a4c82,0x3a395faa,0x3a4f61cb,0x3a97f7f5,
0x3aa192f0,0x3aea9da2,0x3afcd3db,0x3b0fe219,0x3b67c038,0x3b74ed68,0x3bb471c7,0x3c2c4a00,0x3ca4886b,0x3caed00b,0x3cce83a0,0x3c9e2463,0x3c777686,0x3c42b913,0x3c44e72e,0x3c044f60,0x3b36c217,0x3acda9b2,0x3a49c521,0x39c225c8,0x397310f6,0x394836af,0x39bc9f4f,0x394547ae,0x39443a5a,
0x39c1a0f9,0x3959f090,0x39802342,0x39b6e31d,0x39e573d2,0x39f3b368,0x39f0b76a,0x3a0c54e9,0x3a1c92b8,0x3a5c8ae2,0x3a8ca06d,0x3ab8c447,0x3ad560a0,0x3b16521e,0x3b58a91c,0x3bb930ec,0x3bfc21ae,0x3beadf4b,0x3c0cded3,0x3c5dc7c1,0x3c3c7418,0x3c4de89b,0x3c57653e,0x3c314bc5,0x3c187099,
0x3bff673e,0x3bf5f0a0,0x3c0657d8,0x3bdc4000,0x3ba947b6,0x3b5f3e7c,0x3b309608,0x3af6c78b,0x3aada3ab,0x3a26f946,0x39a1d239,0x39a079c1,0x39ae29c9,0x39d54338,0x39b06663,0x3a69cf5d,0x3ab8de2a,0x3aea3fc0,0x3b16be3e,0x3b2f8078,0x3b370298,0x3b847c21,0x3b8cf18d,0x3b82c712,0x3b828cfa,
0x3b8d2a8d,0x3bd56b85,0x3c068d0c,0x3c1490f6,0x3c0c5d3b,0x3c14f158,0x3bf1e4d0,0x3bf920cb,0x3be35dd9,0x3bdf64e0,0x3be6ab5d,0x3bce2eea,0x3bbb1298,0x3badba82,0x3b957ddb,0x3b8515f3,0x3b7ba9fa,0x3b3baff9,0x3b18977f,0x3af33933,0x3a9ac960,0x3a3de3cc,0x3a0ccbaf,0x39a0713e,0x39d9da67,
0x3a152029,0x3a573854,0x3aa826d8,0x3af67512,0x3b127bee,0x3b309a7b,0x3b5d5c52,0x3b83a0d9,0x3b9f6cf4,0x3bc1c278,0x3bd34f0b,0x3c0ab893,0x3c3d9e5c,0x3c1cddef,0x3c10c180,0x3c215ff0,0x3c0381f6,0x3b94c4c8,0x3b9f4368,0x3ba14431,0x3b95295e,0x3b92b242,0x3b916f03,0x3b8db043,0x3b8d0b88,
0x3b7723d8,0x3b577aac,0x3b3d3797,0x3b23b06d,0x3b0c0901,0x3aec3346,0x3ac6fbfc,0x3aa13b58,0x3a8fa927,0x3a79ddc7,0x3a7b07d2,0x3a583fbc,0x3a927f5d,0x3abd8ab2,0x3aea8d17,0x3b112675,0x3b2f9865,0x3b54a014,0x3b5a34a8,0x3b695bb1,0x3b7530d2,0x3b822b00,0x3b8350d0,0x3b91e93c,0x3b88d94f,
0x3b874ce9,0x3b87f07e,0x3b8c6b1d,0x3b69df89,0x3b6f2635,0x3b70b068,0x3b72358c,0x3b79891e,0x3b64ccd6,0x3b6739cd,0x3b6e5686,0x3b61e0ea,0x3b585090,0x3b4fc2cc,0x3b484b27,0x3b439937,0x3b3d4189,0x3b2bc80d,0x3b20abc2,0x3b2cb917,0x3b1b6d77,0x3b128402,0x3b02ecb5,0x3b13d053,0x3b1c81eb,
0x3b2964b6,0x3b337aea,0x3b3e29ae,0x3b4c4d62,0x3b50e649,0x3b58e8ae,0x3b639cd9,0x3b68adec,0x3b70e3b2,0x3b7ab15a,0x3b7392eb,0x3b6f8773,0x3b68abb2,0x3b6ab427,0x3b8a9578,0x374788b9,0x3736296e,0x370c82fb,0x36feb9d9,0x3708cb0d,0x378439de,0x36dcab14,0x36988db6,0x36e0ead7,0x367e65a8,
0x36bb60eb,0x370d7ff0,0x370921ba,0x3717be87,0x368d5d47,0x3764b17b,0x3784f10b,0x3740fb00,0x371ad03b,0x370eff93,0x370e25c3,0x3713d477,0x3740c80e,0x37a23231,0x37d43d06,0x37dfabc8,0x37d22fca,0x378a040f,0x377983fe,0x37ab3a92,0x3780d965,0x3745107f,0x3678dede,0x371fba0f,0x375f894d,
0x37c3a2af,0x376568c1,0x380c38cb,0x374a0bd7,0x370c4421,0x372d86c4,0x383cd943,0x36d720d2,0x371a9a39,0x381707b3,0x37ee8862,0x3818916c,0x38279fb4,0x37dac821,0x37d0ec29,0x3742f39c,0x382a1410,0x3838e794,0x37bb7f9a,0x378d771b,0x37bb7585,0x37f57256,0x380437df,0x385125b0,0x38d542f7,
0x3925af23,0x392fdf89,0x3908bb9d,0x386cb03f,0x37e3b9eb,0x3878ecb7,0x37f7b725,0x37c4de39,0x36e93381,0x38179574,0x387975f5,0x38ca47b4,0x386188fc,0x38578979,0x37dfa580,0x3680114a,0x37015d1f,0x38dcbaae,0x371be863,0x3806c609,0x39210a4c,0x3963ba92,0x39a50f93,0x39aca292,0x3907398c,
0x388c8d2a,0x38b68a2a,0x3893b313,0x38c898af,0x381d2cc9,0x37b06026,0x37fb883d,0x385dea79,0x38249a88,0x3870515c,0x392c20cf,0x39915f0e,0x39a00fb3,0x39981f4b,0x3908e0a2,0x38d62351,0x39555b13,0x38bcd69f,0x38611b43,0x382c63a9,0x38de18db,0x392fe078,0x395e0b9c,0x38ead151,0x3967f6c3,
0x380ae6e6,0x385e47cb,0x38c69e13,0x39c0d138,0x38a1141b,0x396ad094,0x39cb2c3d,0x39e86036,0x3a0388db,0x39732d1a,0x38daa5ac,0x38c781e2,0x38dafa48,0x3917c512,0x3962496a,0x3923cff0,0x38affced,0x394587f5,0x39a94ed2,0x39a7f395,0x39d7a10c,0x3a5a425f,0x3aaa3b34,0x3ac0fb59,0x3a9941ec,
0x39d455e9,0x38eaab38,0x39ee5033,0x38db96dc,0x38bad133,0x38fd549d,0x39ba070e,0x3a101b26,0x3a4ac561,0x39d7c154,0x3acc8401,0x3a44e3b5,0x3a5308f2,0x3a0687b1,0x3996d101,0x39dca29d,0x39f8ed64,0x3a10ea4c,0x395921af,0x37a27ef8,0x377289ed,0x390db105,0x38d52118,0x38d9b32e,0x38c3a975,
0x39637fae,0x39e3900a,0x3a0fcfde,0x3a5a012c,0x3a8c5894,0x3a9633ad,0x3a787235,0x3a6d613e,0x3a755151,0x3a9faca2,0x3ac0b9f8,0x3a731bac,0x3a9239af,0x3a9f327a,0x3a1c0a12,0x3927df33,0x39a1eabd,0x39629840,0x39ff01d6,0x3aaa0269,0x3ac5eec5,0x39e22b1e,0x39ea73e9,0x3a9108a3,0x3a0d377b,
0x3a3abe83,0x3ab31873,0x3ab87198,0x39c2f851,0x38bc3373,0x3762cfec,0x38235a48,0x38b77efc,0x388752f5,0x38608544,0x372ec65e,0x37f05574,0x3816ff26,0x3872f1ec,0x38ef6e1e,0x39980523,0x397b1b74,0x39c55053,0x39da630e,0x3a183961,0x3a2a5e6d,0x3aa0dc78,0x3aac0d1e,0x3a89800e,0x3abf62fe,
0x39a12dfb,0x398d4dd0,0x39e9485e,0x3ad48c09,0x3aca5615,0x3a99a0a2,0x3a0b2c06,0x3b2106e8,0x3c2b901f,0x3bbc2bf8,0x3b25172d,0x39f69d6a,0x38decd57,0x38c2f26d,0x38f45ab6,0x388796e0,0x37b0e79c,0x36b10422,0x375f4c18,0x3622f097,0x384c1ed2,0x38230584,0x387de3f7,0x388b7eb7,0x37da909f,
0x3814b414,0x38bd2a12,0x38cf0621,0x3942891a,0x39a0850b,0x39ea983a,0x3a052e32,0x3a4369cc,0x3a1c6e9a,0x39c753f5,0x3a91eb56,0x3ac309c3,0x3ac0e95a,0x3afa855e,0x3ac3d1bf,0x3abaa3a6,0x3af4835c,0x3a2d640e,0x3afccf5a,0x3bb12d20,0x3b2a8220,0x3b1129f9,0x3a93b3df,0x38fbc0e0,0x38ba287b,
0x38809e38,0x365481e4,0x35ca5f78,0x37028846,0x36bb855a,0x361c4724,0x36d842f9,0x35cd5e59,0x37ad5587,0x38d2f30a,0x390f9a1a,0x3935d795,0x394f045a,0x394584e6,0x39229b9e,0x394cdfb7,0x395383b4,0x398783e0,0x399ef687,0x39754dde,0x39052ff5,0x39b09493,0x3a116044,0x39fa0da3,0x3a7a3b46,
0x3a3cc203,0x3a833239,0x3a8e6d4a,0x3a571ea6,0x3a42dc5e,0x3a95556b,0x3aa7c661,0x3a664d31,0x394b45af,0x381081e2,0x37639ca2,0x38325652,0x37e1688c,0x37d5bd6d,0x379651c9,0x377611de,0x370b0abd,0x36b097bc,0x380d8246,0x38dc3983,0x39838ede,0x39aa687d,0x39c58155,0x39b60f3c,0x3986f03b,
0x3921e5e2,0x388ceb8f,0x382a96aa,0x39025ced,0x39af08a4,0x39eb978e,0x3a267881,0x3a4a006d,0x3a3c4c6c,0x3a18648b,0x39c3f623,0x399ecaae,0x3917c160,0x39873365,0x3a1e7172,0x3a05a013,0x39f19028,0x39d2316b,0x39ab9fc4,0x399620f4,0x3985da9c,0x394f4dc4,0x391db1c9,0x391ccd90,0x3909cede,
0x38bb5338,0x388cc02b,0x381bc686,0x385ee11d,0x387015ed,0x38750218,0x38735844,0x38b8c72e,0x38e2cccc,0x38c79549,0x385763d7,0x37f14468,0x37d69d66,0x3882a6c4,0x39211ffe,0x3986e93a,0x39cb9156,0x39f3f4f8,0x3a066f64,0x39eeaf6b,0x39e82374,0x39fe6dfe,0x39d2b0cc,0x39c08986,0x39dae432,
0x39f68e25,0x39842c03,0x399affda,0x3994f834,0x3998f361,0x39b4a156,0x399f1f9f,0x39868e61,0x3982eb2f,0x39504de3,0x393f6f17,0x3938d2d9,0x391b4932,0x39153ea7,0x392e9a60,0x38fc8373,0x38f4ab99,0x391b9413,0x3900282d,0x38d7aeab,0x38c09a0d,0x389fa5d9,0x38907fa7,0x389664c3,0x3879fbf6,
0x386ef742,0x3889e9e9,0x3843fda0,0x386551a0,0x38c8b4e6,0x38af296d,0x38bb1444,0x38dc2eae,0x38bd0456,0x38c5a9b7,0x390f2d58,0x394b440d,0x3938690c,0x3956dfd9,0x395e51b1,0x394aeb6f,0x395d14e4,0x3962d06e,0x39807c1b,0x398fe63d,0x3982f72f,0x396fe621,0x396662a9,0x39597710,0x39542c20,
0x395d6e3f,0x393ed611,0x39264c81,0x3915950f,0x390afc7e,0x390d7452,0x390ebff6,0x38fc8de6,0x38e00ddd,0x38c5b632,0x38b2d973,0x38a5351e,0x38a34c32,0x389d0efc,0x38a78b3f,0x38aecf8a,0x38b13208,0x38ac2155,0x38b1b81f,0x38a945bd,0x38cbe182,0x38fe5e89,0x391f5e7b,0x38cde6be,0x38d9d030,
0x38e456f6,0x38f13cb6,0x38f93093,0x38f1df73,0x38fc3f64,0x390d9bf8,0x390974c0,0x390b6654,0x390ac2b6,0x390f607c,0x39103cc6,0x39157b31,0x3906e262,0x39037cce,0x390482cb,0x3900cd5b,0x38fc5ad3,0x38fcfc22,0x38ed700b,0x38e4304d,0x38db986f,0x38d45b1c,0x38cd62e3,0x38c4db2a,0x38bc4a79,
0x38b2b94a,0x38ac71da,0x38a5f2eb,0x38a56181,0x38a4c2c7,0x38ac57c3,0x38b0d245,0x38b811a9,0x38be7912,0x390e1b4a,
};
const uint32_t defaultHRIR_rom_EL16[HRTF_MODEL_N_SECTIONS * 470] = {
0x3ec4945b,0x3ea05421,0x3eb6f2e5,0x3eada84f,0x3eb73773,0x3ebcb8b4,0x3ec60c24,0x3eca9fef,0x3ecf62e5,0x3ec74384,0x3ec27f09,0x3ebdc130,0x3eb867d1,0x3eb3a7c3,0x3eaf61f2,0x3eab0f53,0x3ea77972,0x3ea47e0d,0x3ea1ee89,0x3e9b6e8f,0x3ea47e2c,0x3e92c354,0x3e937bb6,0x3eb4f08f,0x3e8d70bc,
0x3e8c6f85,0x3ea70010,0x3ea94bb2,0x3ea6c605,0x3ea165bc,0x3ea492f1,0x3ea6fabb,0x3ea64cbd,0x3e8fc7b7,0x3e95863e,0x3eb2a9ea,0x3e9de05b,0x3ec74c44,0x3ee37536,0x3ee9aa20,0x3eff1aa6,0x3f0ad8a4,0x3f1c936d,0x3f26c9e4,0x3f2be03a,0x3f1ec2c9,0x3f13fda6,0x3f09fee2,0x3f005d11,0x3ef00d14,
......@@ -30,6 +30,10 @@
*******************************************************************************************************/
#ifndef _IVAS_ROM_TDBINAURALRENDERER_
#define _IVAS_ROM_TDBINAURALRENDERER_
#include <stdint.h>
#include "options.h"
#ifdef DEBUGGING
......@@ -69,3 +73,4 @@ extern const uint32_t defaultHRIR_rom_ITD_azimBsShape[84];
extern const float defaultHRIR_rom_ITD_azimKSeq[19];
extern const uint32_t defaultHRIR_rom_ITD_elevBsShape[28];
extern const float defaultHRIR_rom_ITD_elevKSeq[16];
#endif
Source diff could not be displayed: it is too large. Options to address this: view the blob.
Source diff could not be displayed: it is too large. Options to address this: view the blob.
......@@ -56,48 +56,59 @@ extern float CRendBin_Combined_HRIR_latency_s;
/* Sample Rate = 48000 */
extern int16_t CRendBin_Combined_HRIR_max_num_iterations_48kHz;
extern uint16_t CRendBin_Combined_HRIR_num_iterations_48kHz[15][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_HRIR_num_iterations_48kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_48kHz[15][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_48kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_48kHz;
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz[15];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz[BINAURAL_CHANNELS][HRTF_LS_CHANNELS];
#else
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz[HRTF_LS_CHANNELS];
#endif
extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS];
extern float CRendBin_Combined_HRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][240];
extern float CRendBin_Combined_HRIR_coeff_im_48kHz[15][BINAURAL_CHANNELS][240];
extern float CRendBin_Combined_HRIR_coeff_re_48kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][240];
extern float CRendBin_Combined_HRIR_coeff_im_48kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][240];
extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS];
extern float *CRendBin_Combined_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS];
/* Sample Rate = 32000 */
extern int16_t CRendBin_Combined_HRIR_max_num_iterations_32kHz;
extern uint16_t CRendBin_Combined_HRIR_num_iterations_32kHz[15][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_HRIR_num_iterations_32kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_32kHz[15][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_32kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_32kHz;
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz[15];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz[BINAURAL_CHANNELS][HRTF_LS_CHANNELS];
#else
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz[HRTF_LS_CHANNELS];
#endif
extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS];
extern float CRendBin_Combined_HRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][160];
extern float CRendBin_Combined_HRIR_coeff_im_32kHz[15][BINAURAL_CHANNELS][160];
extern float CRendBin_Combined_HRIR_coeff_re_32kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][160];
extern float CRendBin_Combined_HRIR_coeff_im_32kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][160];
extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS];
extern float *CRendBin_Combined_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS];
/* Sample Rate = 16000 */
extern int16_t CRendBin_Combined_HRIR_max_num_iterations_16kHz;
extern uint16_t CRendBin_Combined_HRIR_num_iterations_16kHz[15][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_HRIR_num_iterations_16kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_16kHz[15][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_16kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_16kHz;
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz[15];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz[BINAURAL_CHANNELS][HRTF_LS_CHANNELS];
#else
extern float CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz[HRTF_LS_CHANNELS];
#endif
extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS];
extern float CRendBin_Combined_HRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][80];
extern float CRendBin_Combined_HRIR_coeff_im_16kHz[15][BINAURAL_CHANNELS][80];
extern float CRendBin_Combined_HRIR_coeff_re_16kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][80];
extern float CRendBin_Combined_HRIR_coeff_im_16kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][80];
extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS];
extern float *CRendBin_Combined_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS];
/********************** CRendBin_FOA_HRIR **********************/
extern float CRendBin_FOA_HRIR_latency_s;
......@@ -105,42 +116,54 @@ extern float CRendBin_FOA_HRIR_latency_s;
/* Sample Rate = 48000 */
extern int16_t CRendBin_FOA_HRIR_max_num_iterations_48kHz;
extern uint16_t CRendBin_FOA_HRIR_num_iterations_48kHz[4][BINAURAL_CHANNELS];
extern uint16_t CRendBin_FOA_HRIR_num_iterations_48kHz[FOA_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_FOA_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_48kHz[4][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_48kHz[FOA_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_FOA_HRIR_index_frequency_max_diffuse_48kHz;
extern float CRendBin_FOA_HRIR_inv_diffuse_weight_48kHz[4];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_FOA_HRIR_inv_diffuse_weight_48kHz[BINAURAL_CHANNELS][FOA_CHANNELS];
#else
extern float CRendBin_FOA_HRIR_inv_diffuse_weight_48kHz[FOA_CHANNELS];
#endif
extern uint16_t *CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS];
extern float CRendBin_FOA_HRIR_coeff_re_48kHz[4][BINAURAL_CHANNELS][240];
extern float CRendBin_FOA_HRIR_coeff_im_48kHz[4][BINAURAL_CHANNELS][240];
extern float CRendBin_FOA_HRIR_coeff_re_48kHz[FOA_CHANNELS][BINAURAL_CHANNELS][240];
extern float CRendBin_FOA_HRIR_coeff_im_48kHz[FOA_CHANNELS][BINAURAL_CHANNELS][240];
extern float *CRendBin_FOA_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS];
extern float *CRendBin_FOA_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS];
/* Sample Rate = 32000 */
extern int16_t CRendBin_FOA_HRIR_max_num_iterations_32kHz;
extern uint16_t CRendBin_FOA_HRIR_num_iterations_32kHz[4][BINAURAL_CHANNELS];
extern uint16_t CRendBin_FOA_HRIR_num_iterations_32kHz[FOA_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_FOA_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_32kHz[4][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_32kHz[FOA_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_FOA_HRIR_index_frequency_max_diffuse_32kHz;
extern float CRendBin_FOA_HRIR_inv_diffuse_weight_32kHz[4];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_FOA_HRIR_inv_diffuse_weight_32kHz[BINAURAL_CHANNELS][FOA_CHANNELS];
#else
extern float CRendBin_FOA_HRIR_inv_diffuse_weight_32kHz[FOA_CHANNELS];
#endif
extern uint16_t *CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS];
extern float CRendBin_FOA_HRIR_coeff_re_32kHz[4][BINAURAL_CHANNELS][160];
extern float CRendBin_FOA_HRIR_coeff_im_32kHz[4][BINAURAL_CHANNELS][160];
extern float CRendBin_FOA_HRIR_coeff_re_32kHz[FOA_CHANNELS][BINAURAL_CHANNELS][160];
extern float CRendBin_FOA_HRIR_coeff_im_32kHz[FOA_CHANNELS][BINAURAL_CHANNELS][160];
extern float *CRendBin_FOA_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS];
extern float *CRendBin_FOA_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS];
/* Sample Rate = 16000 */
extern int16_t CRendBin_FOA_HRIR_max_num_iterations_16kHz;
extern uint16_t CRendBin_FOA_HRIR_num_iterations_16kHz[4][BINAURAL_CHANNELS];
extern uint16_t CRendBin_FOA_HRIR_num_iterations_16kHz[FOA_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_FOA_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_16kHz[4][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_16kHz[FOA_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_FOA_HRIR_index_frequency_max_diffuse_16kHz;
extern float CRendBin_FOA_HRIR_inv_diffuse_weight_16kHz[4];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_FOA_HRIR_inv_diffuse_weight_16kHz[BINAURAL_CHANNELS][FOA_CHANNELS];
#else
extern float CRendBin_FOA_HRIR_inv_diffuse_weight_16kHz[FOA_CHANNELS];
#endif
extern uint16_t *CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS];
extern float CRendBin_FOA_HRIR_coeff_re_16kHz[4][BINAURAL_CHANNELS][80];
extern float CRendBin_FOA_HRIR_coeff_im_16kHz[4][BINAURAL_CHANNELS][80];
extern float CRendBin_FOA_HRIR_coeff_re_16kHz[FOA_CHANNELS][BINAURAL_CHANNELS][80];
extern float CRendBin_FOA_HRIR_coeff_im_16kHz[FOA_CHANNELS][BINAURAL_CHANNELS][80];
extern float *CRendBin_FOA_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS];
extern float *CRendBin_FOA_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS];
......@@ -153,42 +176,54 @@ extern float CRendBin_HOA2_HRIR_latency_s;
/* Sample Rate = 48000 */
extern int16_t CRendBin_HOA2_HRIR_max_num_iterations_48kHz;
extern uint16_t CRendBin_HOA2_HRIR_num_iterations_48kHz[9][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA2_HRIR_num_iterations_48kHz[HOA2_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA2_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_48kHz[9][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_48kHz[HOA2_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA2_HRIR_index_frequency_max_diffuse_48kHz;
extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_48kHz[9];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_48kHz[BINAURAL_CHANNELS][HOA2_CHANNELS];
#else
extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_48kHz[HOA2_CHANNELS];
#endif
extern uint16_t *CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS];
extern float CRendBin_HOA2_HRIR_coeff_re_48kHz[9][BINAURAL_CHANNELS][240];
extern float CRendBin_HOA2_HRIR_coeff_im_48kHz[9][BINAURAL_CHANNELS][240];
extern float CRendBin_HOA2_HRIR_coeff_re_48kHz[HOA2_CHANNELS][BINAURAL_CHANNELS][240];
extern float CRendBin_HOA2_HRIR_coeff_im_48kHz[HOA2_CHANNELS][BINAURAL_CHANNELS][240];
extern float *CRendBin_HOA2_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS];
extern float *CRendBin_HOA2_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS];
/* Sample Rate = 32000 */
extern int16_t CRendBin_HOA2_HRIR_max_num_iterations_32kHz;
extern uint16_t CRendBin_HOA2_HRIR_num_iterations_32kHz[9][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA2_HRIR_num_iterations_32kHz[HOA2_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA2_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_32kHz[9][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_32kHz[HOA2_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA2_HRIR_index_frequency_max_diffuse_32kHz;
extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_32kHz[9];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_32kHz[BINAURAL_CHANNELS][HOA2_CHANNELS];
#else
extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_32kHz[HOA2_CHANNELS];
#endif
extern uint16_t *CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS];
extern float CRendBin_HOA2_HRIR_coeff_re_32kHz[9][BINAURAL_CHANNELS][160];
extern float CRendBin_HOA2_HRIR_coeff_im_32kHz[9][BINAURAL_CHANNELS][160];
extern float CRendBin_HOA2_HRIR_coeff_re_32kHz[HOA2_CHANNELS][BINAURAL_CHANNELS][160];
extern float CRendBin_HOA2_HRIR_coeff_im_32kHz[HOA2_CHANNELS][BINAURAL_CHANNELS][160];
extern float *CRendBin_HOA2_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS];
extern float *CRendBin_HOA2_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS];
/* Sample Rate = 16000 */
extern int16_t CRendBin_HOA2_HRIR_max_num_iterations_16kHz;
extern uint16_t CRendBin_HOA2_HRIR_num_iterations_16kHz[9][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA2_HRIR_num_iterations_16kHz[HOA2_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA2_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_16kHz[9][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_16kHz[HOA2_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA2_HRIR_index_frequency_max_diffuse_16kHz;
extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_16kHz[9];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_16kHz[BINAURAL_CHANNELS][HOA2_CHANNELS];
#else
extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_16kHz[HOA2_CHANNELS];
#endif
extern uint16_t *CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS];
extern float CRendBin_HOA2_HRIR_coeff_re_16kHz[9][BINAURAL_CHANNELS][80];
extern float CRendBin_HOA2_HRIR_coeff_im_16kHz[9][BINAURAL_CHANNELS][80];
extern float CRendBin_HOA2_HRIR_coeff_re_16kHz[HOA2_CHANNELS][BINAURAL_CHANNELS][80];
extern float CRendBin_HOA2_HRIR_coeff_im_16kHz[HOA2_CHANNELS][BINAURAL_CHANNELS][80];
extern float *CRendBin_HOA2_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS];
extern float *CRendBin_HOA2_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS];
......@@ -201,42 +236,54 @@ extern float CRendBin_HOA3_HRIR_latency_s;
/* Sample Rate = 48000 */
extern int16_t CRendBin_HOA3_HRIR_max_num_iterations_48kHz;
extern uint16_t CRendBin_HOA3_HRIR_num_iterations_48kHz[16][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA3_HRIR_num_iterations_48kHz[HOA3_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_48kHz[16][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_48kHz[HOA3_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_48kHz;
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[16];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[BINAURAL_CHANNELS][HOA3_CHANNELS];
#else
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[HOA3_CHANNELS];
#endif
extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS];
extern float CRendBin_HOA3_HRIR_coeff_re_48kHz[16][BINAURAL_CHANNELS][240];
extern float CRendBin_HOA3_HRIR_coeff_im_48kHz[16][BINAURAL_CHANNELS][240];
extern float CRendBin_HOA3_HRIR_coeff_re_48kHz[HOA3_CHANNELS][BINAURAL_CHANNELS][240];
extern float CRendBin_HOA3_HRIR_coeff_im_48kHz[HOA3_CHANNELS][BINAURAL_CHANNELS][240];
extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS];
extern float *CRendBin_HOA3_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS];
/* Sample Rate = 32000 */
extern int16_t CRendBin_HOA3_HRIR_max_num_iterations_32kHz;
extern uint16_t CRendBin_HOA3_HRIR_num_iterations_32kHz[16][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA3_HRIR_num_iterations_32kHz[HOA3_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_32kHz[16][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_32kHz[HOA3_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_32kHz;
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz[16];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz[BINAURAL_CHANNELS][HOA3_CHANNELS];
#else
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz[HOA3_CHANNELS];
#endif
extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS];
extern float CRendBin_HOA3_HRIR_coeff_re_32kHz[16][BINAURAL_CHANNELS][160];
extern float CRendBin_HOA3_HRIR_coeff_im_32kHz[16][BINAURAL_CHANNELS][160];
extern float CRendBin_HOA3_HRIR_coeff_re_32kHz[HOA3_CHANNELS][BINAURAL_CHANNELS][160];
extern float CRendBin_HOA3_HRIR_coeff_im_32kHz[HOA3_CHANNELS][BINAURAL_CHANNELS][160];
extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS];
extern float *CRendBin_HOA3_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS];
/* Sample Rate = 16000 */
extern int16_t CRendBin_HOA3_HRIR_max_num_iterations_16kHz;
extern uint16_t CRendBin_HOA3_HRIR_num_iterations_16kHz[16][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA3_HRIR_num_iterations_16kHz[HOA3_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_16kHz[16][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_16kHz[HOA3_CHANNELS][BINAURAL_CHANNELS][1];
extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_16kHz;
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz[16];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz[BINAURAL_CHANNELS][HOA3_CHANNELS];
#else
extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz[HOA3_CHANNELS];
#endif
extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS];
extern float CRendBin_HOA3_HRIR_coeff_re_16kHz[16][BINAURAL_CHANNELS][80];
extern float CRendBin_HOA3_HRIR_coeff_im_16kHz[16][BINAURAL_CHANNELS][80];
extern float CRendBin_HOA3_HRIR_coeff_re_16kHz[HOA3_CHANNELS][BINAURAL_CHANNELS][80];
extern float CRendBin_HOA3_HRIR_coeff_im_16kHz[HOA3_CHANNELS][BINAURAL_CHANNELS][80];
extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS];
extern float *CRendBin_HOA3_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS];
......@@ -249,42 +296,79 @@ extern float CRendBin_Combined_BRIR_latency_s;
/* Sample Rate = 48000 */
extern int16_t CRendBin_Combined_BRIR_max_num_iterations_48kHz;
extern uint16_t CRendBin_Combined_BRIR_num_iterations_48kHz[15][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_num_iterations_48kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[15][BINAURAL_CHANNELS][22];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][22];
extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_48kHz;
extern float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[15];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[BINAURAL_CHANNELS][HRTF_LS_CHANNELS];
#else
extern float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[HRTF_LS_CHANNELS];
#endif
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS][40];
extern float CRendBin_Combined_BRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][2955];
extern float CRendBin_Combined_BRIR_coeff_im_48kHz[15][BINAURAL_CHANNELS][2955];
extern float CRendBin_Combined_BRIR_coeff_re_48kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][2955];
extern float CRendBin_Combined_BRIR_coeff_im_48kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][2955];
extern float CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS][2885];
extern float CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS][2885];
/* Sample Rate = 32000 */
extern int16_t CRendBin_Combined_BRIR_max_num_iterations_32kHz;
extern uint16_t CRendBin_Combined_BRIR_num_iterations_32kHz[15][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_num_iterations_32kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[15][BINAURAL_CHANNELS][22];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][22];
extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_32kHz;
extern float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[15];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[BINAURAL_CHANNELS][HRTF_LS_CHANNELS];
#else
extern float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[HRTF_LS_CHANNELS];
#endif
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS][40];
extern float CRendBin_Combined_BRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][2819];
extern float CRendBin_Combined_BRIR_coeff_im_32kHz[15][BINAURAL_CHANNELS][2819];
extern float CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS][2870];
extern float CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS][2870];
extern float CRendBin_Combined_BRIR_coeff_re_32kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][2818];
extern float CRendBin_Combined_BRIR_coeff_im_32kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][2818];
extern float CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS][2868];
extern float CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS][2868];
/* Sample Rate = 16000 */
extern int16_t CRendBin_Combined_BRIR_max_num_iterations_16kHz;
extern uint16_t CRendBin_Combined_BRIR_num_iterations_16kHz[15][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_num_iterations_16kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[15][BINAURAL_CHANNELS][23];
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][23];
extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_16kHz;
extern float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[15];
#ifdef FIX_INV_DIFFUSE_WEIGHT
extern float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[BINAURAL_CHANNELS][HRTF_LS_CHANNELS];
#else
extern float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[HRTF_LS_CHANNELS];
#endif
extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS][40];
extern float CRendBin_Combined_BRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][1774];
extern float CRendBin_Combined_BRIR_coeff_im_16kHz[15][BINAURAL_CHANNELS][1774];
extern float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS][2522];
extern float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS][2522];
extern float CRendBin_Combined_BRIR_coeff_re_16kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][1799];
extern float CRendBin_Combined_BRIR_coeff_im_16kHz[HRTF_LS_CHANNELS][BINAURAL_CHANNELS][1799];
extern float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS][2474];
extern float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS][2474];
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
/********************** default HRIR reverb rom tables **********************/
/* Sample Rate = 48000 */
extern float defaultHRIR_coherence_48kHz[LR_IAC_LENGTH_NR_FC];
extern float defaultHRIR_left_avg_power_48kHz[LR_IAC_LENGTH_NR_FC];
extern float defaultHRIR_right_avg_power_48kHz[LR_IAC_LENGTH_NR_FC];
/* Sample Rate = 32000 */
extern float defaultHRIR_coherence_32kHz[LR_IAC_LENGTH_NR_FC];
extern float defaultHRIR_left_avg_power_32kHz[LR_IAC_LENGTH_NR_FC];
extern float defaultHRIR_right_avg_power_32kHz[LR_IAC_LENGTH_NR_FC];
/* Sample Rate = 16000 */
extern float defaultHRIR_coherence_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ];
extern float defaultHRIR_left_avg_power_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ];
extern float defaultHRIR_right_avg_power_16kHz[LR_IAC_LENGTH_NR_FC_16KHZ];
#endif
#endif /* _IVAS_ROM_BINAURAL_CREND_HEAD_ */
......@@ -300,6 +300,8 @@ const float SincTable[321] =
0.00000000f
};
#ifndef FIX_638_ENERGIE_IAC_ROM_TABLES
const float defaultHRIR_coherence_48kHz[LR_IAC_LENGTH_NR_FC] = {
0.983003f, 0.933450f, 0.789276f, 0.574420f, 0.340710f, 0.144220f, 0.018803f, 0.000000f, 0.000000f,
0.000000f, 0.011939f, 0.035489f, 0.043188f, 0.042460f, 0.041788f, 0.038562f, 0.028911f, 0.017162f,
......@@ -397,7 +399,7 @@ const float defaultHRIR_right_avg_power_48kHz[LR_IAC_LENGTH_NR_FC] = {
};
const float defaultHRIR_coherence_32kHz[LR_IAC_LENGTH_NR_FC] = {
0.976959f, 0.962817f, 0.892107f, 0.783427f, 0.649433f, 0.488372f, 0.336040f, 0.196803f, 0.094108f,
0.976959f, 0.962817f, 0.892107f, 0.783427f, 0.649434f, 0.488372f, 0.336040f, 0.196803f, 0.094108f,
0.016852f, 0.004815f, 0.000000f, 0.000000f, 0.000000f, 0.002703f, 0.009460f, 0.024631f, 0.038937f,
0.041367f, 0.041308f, 0.039589f, 0.039056f, 0.037048f, 0.032828f, 0.024623f, 0.015933f, 0.009282f,
0.007047f, 0.007754f, 0.011823f, 0.015553f, 0.018773f, 0.021834f, 0.024812f, 0.027619f, 0.028707f,
......@@ -430,68 +432,69 @@ const float defaultHRIR_coherence_32kHz[LR_IAC_LENGTH_NR_FC] = {
const float defaultHRIR_left_avg_power_32kHz[LR_IAC_LENGTH_NR_FC] = {
1.042842f, 1.041052f, 1.032098f, 1.024347f, 1.017398f, 1.019204f, 1.022140f, 1.026773f, 1.026684f,
1.024560f, 1.019019f, 1.016692f, 1.016507f, 1.025484f, 1.035123f, 1.045753f, 1.050401f, 1.052033f,
1.024560f, 1.019019f, 1.016691f, 1.016507f, 1.025484f, 1.035123f, 1.045753f, 1.050401f, 1.052033f,
1.047590f, 1.042551f, 1.037116f, 1.034266f, 1.031619f, 1.029278f, 1.025989f, 1.022575f, 1.019610f,
1.017442f, 1.015805f, 1.012657f, 1.008261f, 1.001990f, 0.995937f, 0.990744f, 0.988777f, 0.988277f,
1.017441f, 1.015805f, 1.012657f, 1.008261f, 1.001990f, 0.995937f, 0.990744f, 0.988777f, 0.988277f,
0.988755f, 0.987563f, 0.985600f, 0.982481f, 0.980182f, 0.978414f, 0.977951f, 0.977129f, 0.976068f,
0.974020f, 0.972563f, 0.971992f, 0.973446f, 0.975452f, 0.977643f, 0.978631f, 0.978818f, 0.977682f,
0.976742f, 0.976096f, 0.975927f, 0.975729f, 0.974941f, 0.973370f, 0.971276f, 0.968762f, 0.966461f,
0.976742f, 0.976096f, 0.975927f, 0.975729f, 0.974942f, 0.973370f, 0.971276f, 0.968762f, 0.966461f,
0.964481f, 0.962731f, 0.960904f, 0.958549f, 0.955708f, 0.952543f, 0.949546f, 0.946857f, 0.944631f,
0.942410f, 0.939997f, 0.936815f, 0.933278f, 0.929505f, 0.926271f, 0.923282f, 0.920659f, 0.917696f,
0.942410f, 0.939998f, 0.936815f, 0.933278f, 0.929505f, 0.926271f, 0.923282f, 0.920659f, 0.917696f,
0.914482f, 0.910602f, 0.906806f, 0.903065f, 0.900364f, 0.897894f, 0.895772f, 0.893323f, 0.890740f,
0.887944f, 0.885641f, 0.883667f, 0.882835f, 0.882051f, 0.881336f, 0.880121f, 0.878813f, 0.877633f,
0.877223f, 0.877327f, 0.878409f, 0.879421f, 0.880327f, 0.881091f, 0.882024f, 0.883779f, 0.886402f,
0.877223f, 0.877327f, 0.878410f, 0.879421f, 0.880327f, 0.881091f, 0.882024f, 0.883779f, 0.886402f,
0.889602f, 0.893152f, 0.896459f, 0.899400f, 0.902225f, 0.905146f, 0.908573f, 0.912109f, 0.915718f,
0.918254f, 0.920227f, 0.921355f, 0.922089f, 0.922760f, 0.923576f, 0.924088f, 0.924398f, 0.923115f,
0.921260f, 0.918548f, 0.915643f, 0.912707f, 0.909842f, 0.906416f, 0.902615f, 0.897332f, 0.891877f,
0.886166f, 0.880998f, 0.875991f, 0.871078f, 0.865522f, 0.859537f, 0.852717f, 0.846083f, 0.839728f,
0.833972f, 0.828308f, 0.822411f, 0.816009f, 0.809271f, 0.802578f, 0.796320f, 0.790714f, 0.785846f,
0.781192f, 0.776652f, 0.772249f, 0.767940f, 0.764926f, 0.762667f, 0.761540f, 0.761326f, 0.761372f,
0.761547f, 0.761950f, 0.762506f, 0.764263f, 0.766400f, 0.769105f, 0.771504f, 0.773644f, 0.775056f,
0.776462f, 0.777865f, 0.779929f, 0.781942f, 0.783881f, 0.784915f, 0.785562f, 0.785567f, 0.785690f,
0.781192f, 0.776652f, 0.772249f, 0.767939f, 0.764926f, 0.762667f, 0.761540f, 0.761326f, 0.761372f,
0.761547f, 0.761950f, 0.762506f, 0.764263f, 0.766400f, 0.769105f, 0.771504f, 0.773645f, 0.775056f,
0.776463f, 0.777865f, 0.779929f, 0.781942f, 0.783881f, 0.784915f, 0.785562f, 0.785567f, 0.785690f,
0.785891f, 0.786286f, 0.786348f, 0.785912f, 0.784408f, 0.782509f, 0.780101f, 0.777798f, 0.775564f,
0.773205f, 0.770446f, 0.767088f, 0.762953f, 0.758652f, 0.754459f, 0.750714f, 0.747266f, 0.743818f,
0.740063f, 0.735847f, 0.731497f, 0.727285f, 0.723759f, 0.720587f, 0.717650f, 0.714166f, 0.710382f,
0.706148f, 0.702029f, 0.698046f, 0.694494f, 0.690839f, 0.687115f, 0.682535f, 0.677735f, 0.672604f,
0.667663f, 0.662868f, 0.658475f, 0.654061f, 0.649634f, 0.644689f, 0.639750f, 0.634821f, 0.630767f,
0.627153f, 0.624422f, 0.621650f, 0.618850f, 0.615731f, 0.613069f, 0.611089f, 0.610598f, 0.610566f,
0.610880f, 0.610933f, 0.610809f, 0.611930f, 0.614079f, 0.617771f, 0.622653f, 0.628199f, 0.635210f,
0.645081f, 0.656860f, 0.669006f, 0.673510f, 0.666552f, 0.628172f, 0.575127f, 0.494850f, 0.413951f,
0.610880f, 0.610933f, 0.610810f, 0.611930f, 0.614079f, 0.617771f, 0.622653f, 0.628199f, 0.635210f,
0.645081f, 0.656860f, 0.669006f, 0.673510f, 0.666552f, 0.628172f, 0.575128f, 0.494850f, 0.413951f,
0.332637f, 0.280816f, 0.241903f, 0.222353f, 0.218443f
};
const float defaultHRIR_right_avg_power_32kHz[LR_IAC_LENGTH_NR_FC] = {
1.042841f, 1.041051f, 1.032097f, 1.024346f, 1.017399f, 1.019202f, 1.022138f, 1.026772f, 1.026684f,
1.024560f, 1.019019f, 1.016691f, 1.016506f, 1.025485f, 1.035123f, 1.045752f, 1.050401f, 1.052035f,
1.024560f, 1.019019f, 1.016691f, 1.016506f, 1.025485f, 1.035123f, 1.045752f, 1.050401f, 1.052034f,
1.047590f, 1.042551f, 1.037115f, 1.034265f, 1.031619f, 1.029280f, 1.025989f, 1.022573f, 1.019609f,
1.017441f, 1.015805f, 1.012660f, 1.008264f, 1.001991f, 0.995937f, 0.990744f, 0.988778f, 0.988278f,
0.988755f, 0.987564f, 0.985601f, 0.982480f, 0.980182f, 0.978415f, 0.977953f, 0.977129f, 0.976065f,
0.988755f, 0.987564f, 0.985601f, 0.982480f, 0.980182f, 0.978415f, 0.977952f, 0.977129f, 0.976065f,
0.974019f, 0.972563f, 0.971995f, 0.973448f, 0.975452f, 0.977643f, 0.978632f, 0.978821f, 0.977685f,
0.976745f, 0.976097f, 0.975927f, 0.975729f, 0.974941f, 0.973370f, 0.971276f, 0.968759f, 0.966458f,
0.976745f, 0.976097f, 0.975927f, 0.975729f, 0.974941f, 0.973370f, 0.971276f, 0.968759f, 0.966457f,
0.964480f, 0.962731f, 0.960906f, 0.958547f, 0.955706f, 0.952543f, 0.949546f, 0.946857f, 0.944629f,
0.942409f, 0.939999f, 0.936815f, 0.933278f, 0.929507f, 0.926270f, 0.923280f, 0.920660f, 0.917696f,
0.942409f, 0.939999f, 0.936815f, 0.933278f, 0.929507f, 0.926271f, 0.923280f, 0.920660f, 0.917696f,
0.914481f, 0.910601f, 0.906806f, 0.903066f, 0.900365f, 0.897895f, 0.895772f, 0.893323f, 0.890740f,
0.887942f, 0.885640f, 0.883669f, 0.882835f, 0.882049f, 0.881335f, 0.880120f, 0.878812f, 0.877632f,
0.887942f, 0.885641f, 0.883669f, 0.882835f, 0.882049f, 0.881335f, 0.880120f, 0.878812f, 0.877632f,
0.877223f, 0.877328f, 0.878410f, 0.879422f, 0.880327f, 0.881092f, 0.882026f, 0.883781f, 0.886402f,
0.889601f, 0.893151f, 0.896457f, 0.899399f, 0.902224f, 0.905146f, 0.908576f, 0.912111f, 0.915716f,
0.889601f, 0.893150f, 0.896457f, 0.899399f, 0.902224f, 0.905146f, 0.908576f, 0.912111f, 0.915716f,
0.918254f, 0.920227f, 0.921354f, 0.922087f, 0.922759f, 0.923576f, 0.924090f, 0.924401f, 0.923115f,
0.921259f, 0.918547f, 0.915643f, 0.912708f, 0.909842f, 0.906416f, 0.902617f, 0.897334f, 0.891879f,
0.886168f, 0.881000f, 0.875992f, 0.871078f, 0.865522f, 0.859538f, 0.852719f, 0.846085f, 0.839728f,
0.833973f, 0.828309f, 0.822411f, 0.816009f, 0.809271f, 0.802579f, 0.796321f, 0.790714f, 0.785846f,
0.886167f, 0.881000f, 0.875992f, 0.871078f, 0.865522f, 0.859538f, 0.852719f, 0.846085f, 0.839728f,
0.833972f, 0.828309f, 0.822411f, 0.816009f, 0.809271f, 0.802579f, 0.796321f, 0.790714f, 0.785846f,
0.781192f, 0.776653f, 0.772250f, 0.767940f, 0.764926f, 0.762667f, 0.761541f, 0.761325f, 0.761371f,
0.761548f, 0.761950f, 0.762504f, 0.764263f, 0.766400f, 0.769104f, 0.771504f, 0.773644f, 0.775054f,
0.761548f, 0.761950f, 0.762504f, 0.764263f, 0.766400f, 0.769105f, 0.771504f, 0.773644f, 0.775054f,
0.776461f, 0.777866f, 0.779929f, 0.781942f, 0.783879f, 0.784913f, 0.785561f, 0.785567f, 0.785690f,
0.785891f, 0.786285f, 0.786348f, 0.785913f, 0.784409f, 0.782510f, 0.780103f, 0.777798f, 0.775563f,
0.773206f, 0.770449f, 0.767090f, 0.762954f, 0.758652f, 0.754458f, 0.750712f, 0.747266f, 0.743818f,
0.740062f, 0.735846f, 0.731497f, 0.727285f, 0.723759f, 0.720587f, 0.717649f, 0.714164f, 0.710381f,
0.785891f, 0.786285f, 0.786348f, 0.785913f, 0.784409f, 0.782510f, 0.780102f, 0.777798f, 0.775563f,
0.773206f, 0.770449f, 0.767089f, 0.762954f, 0.758652f, 0.754458f, 0.750712f, 0.747266f, 0.743818f,
0.740062f, 0.735846f, 0.731497f, 0.727286f, 0.723759f, 0.720587f, 0.717649f, 0.714164f, 0.710381f,
0.706148f, 0.702028f, 0.698044f, 0.694493f, 0.690838f, 0.687113f, 0.682535f, 0.677735f, 0.672602f,
0.667662f, 0.662869f, 0.658475f, 0.654061f, 0.649632f, 0.644687f, 0.639749f, 0.634820f, 0.630767f,
0.667662f, 0.662869f, 0.658476f, 0.654061f, 0.649632f, 0.644687f, 0.639749f, 0.634820f, 0.630767f,
0.627154f, 0.624423f, 0.621650f, 0.618849f, 0.615732f, 0.613069f, 0.611090f, 0.610599f, 0.610566f,
0.610881f, 0.610933f, 0.610811f, 0.611930f, 0.614078f, 0.617770f, 0.622653f, 0.628199f, 0.635210f,
0.645082f, 0.656861f, 0.669007f, 0.673511f, 0.666551f, 0.628170f, 0.575125f, 0.494849f, 0.413951f,
0.332639f, 0.280817f, 0.241904f, 0.222354f, 0.218443f
};
const float defaultHRIR_coherence_16kHz[LR_IAC_LENGTH_NR_FC] = {
0.969495f, 0.969495f, 0.955351f, 0.919989f, 0.884627f, 0.842799f, 0.775108f, 0.707416f, 0.639724f,
0.559264f, 0.478804f, 0.398344f, 0.327187f, 0.258355f, 0.189524f, 0.134064f, 0.087519f, 0.040974f,
......@@ -587,6 +590,8 @@ const float defaultHRIR_right_avg_power_16kHz[LR_IAC_LENGTH_NR_FC] = {
0.485566f, 0.481405f, 0.471746f, 0.440098f, 0.408450f, 0.376802f, 0.330743f, 0.284685f, 0.238626f,
0.203638f, 0.171419f, 0.139199f, 0.126311f, 0.126311f
};
#endif
/*----------------------------------------------------------------------------------*
* t-design and SN3D normalization table
*----------------------------------------------------------------------------------*/
......
......@@ -96,6 +96,7 @@ extern const int16_t HRTF_MODEL_N_CPTS_VAR[HRTF_MODEL_N_SECTIONS];
extern const float SincTable[321];
#ifndef FIX_638_ENERGIE_IAC_ROM_TABLES
extern const float defaultHRIR_coherence_48kHz[LR_IAC_LENGTH_NR_FC];
extern const float defaultHRIR_left_avg_power_48kHz[LR_IAC_LENGTH_NR_FC];
extern const float defaultHRIR_right_avg_power_48kHz[LR_IAC_LENGTH_NR_FC];
......@@ -107,6 +108,7 @@ extern const float defaultHRIR_right_avg_power_32kHz[LR_IAC_LENGTH_NR_FC];
extern const float defaultHRIR_coherence_16kHz[LR_IAC_LENGTH_NR_FC];
extern const float defaultHRIR_left_avg_power_16kHz[LR_IAC_LENGTH_NR_FC];
extern const float defaultHRIR_right_avg_power_16kHz[LR_IAC_LENGTH_NR_FC];
#endif
/*----------------------------------------------------------------------------------*
* t-design and SN3D normalization table
......
......@@ -583,6 +583,30 @@ static void ComputeCoeffs(
hMd->gd2 = gd_tmp[1];
}
else
{
if ( real_only )
{
float gd_tmp[BINAURAL_CHANNELS];
for ( i = 0; i < BINAURAL_CHANNELS; i++ )
{
gd_tmp[i] = cov_ii_re[i][i];
if ( gd_tmp[i] < EPSILON )
{
gd_tmp[i] = 1.0f;
}
else
{
gd_tmp[i] = ( cov_oo_re[i][i] ) / gd_tmp[i];
gd_tmp[i] = sqrtf( gd_tmp[i] );
}
hMd->pred_mat_re[i][i] = gd_tmp[i];
set_zero( hMd->pred_mat_im[i], BINAURAL_CHANNELS );
}
hMd->pred_mat_re[1][0] = 0.0f;
hMd->pred_mat_re[0][1] = 0.0f;
}
else
{
cov_norm_fact = GetNormFact( cov_ii_re, cov_ii_im, cov_io_re, cov_io_im, cov_oo_re );
......@@ -717,6 +741,7 @@ static void ComputeCoeffs(
}
}
}
}
return;
}
......@@ -1328,7 +1353,8 @@ void ivas_SplitRenderer_GetRotMd(
MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
float Cldfb_RealBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */
float Cldfb_ImagBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */
const int16_t low_res )
const int16_t low_res,
const int16_t ro_md_flag )
{
float cov_ii_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
float cov_oo_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
......@@ -1363,7 +1389,7 @@ void ivas_SplitRenderer_GetRotMd(
start_slot_idx = sf_idx * num_slots;
for ( b = 0; b < num_md_bands; b++ )
{
if ( b < COMPLEX_MD_BAND_THRESH )
if ( ( b < SPLIT_REND_RO_MD_BAND_THRESH ) || ( !ro_md_flag && b < COMPLEX_MD_BAND_THRESH ) )
{
real_only = 0;
}
......@@ -1407,17 +1433,20 @@ void ivas_rend_CldfbSplitPreRendProcess(
float Cldfb_In_BinImag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX],
IVAS_SPLIT_REND_BITS_HANDLE pBits,
const int32_t target_md_bits,
const int16_t low_res_pre_rend_rot )
const int16_t low_res_pre_rend_rot,
const int16_t ro_md_flag )
{
push_wmops( "ivas_rend_CldfbSplitPreRendProcess" );
ivas_SplitRenderer_GetRotMd( hBinHrSplitPreRend, pMultiBinPoseData, Cldfb_In_BinReal, Cldfb_In_BinImag, low_res_pre_rend_rot );
ivas_SplitRenderer_GetRotMd( hBinHrSplitPreRend, pMultiBinPoseData, Cldfb_In_BinReal, Cldfb_In_BinImag, low_res_pre_rend_rot, ro_md_flag );
ivas_SplitRenderer_quant_code( hBinHrSplitPreRend, headPosition, pMultiBinPoseData, pBits, low_res_pre_rend_rot, target_md_bits );
#ifdef SPLIT_POSE_CORRECTION_DEBUG
float tmpCrendBuffer[2][L_FRAME48k], quant_val, step, minv, maxv;
IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES];
IVAS_QUATERNION QuaternionsPost[MAX_PARAM_SPATIAL_SUBFRAMES], head_pos_euler;
float Cldfb_RealBuffer_Binaural_5ms[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
float Cldfb_ImagBuffer_Binaural_5ms[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
int16_t sf_idx, pos_idx, b, ch1, ch2;
int32_t read_off, write_off;
for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ )
......@@ -1444,7 +1473,11 @@ void ivas_rend_CldfbSplitPreRendProcess(
set_pose_types( hBinHrSplitPreRend->hBinHrSplitPostRend->pose_type, pMultiBinPoseData );
for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ )
{
hBinHrSplitPreRend->hBinHrSplitPostRend->QuaternionsPre[sf_idx] = headPositions[sf_idx];
Quat2EulerDegree( headPosition, &head_pos_euler.z, &head_pos_euler.y, &head_pos_euler.x );
hBinHrSplitPreRend->hBinHrSplitPostRend->QuaternionsPre[sf_idx].w = -3.0f;
hBinHrSplitPreRend->hBinHrSplitPostRend->QuaternionsPre[sf_idx].x = roundf( head_pos_euler.x );
hBinHrSplitPreRend->hBinHrSplitPostRend->QuaternionsPre[sf_idx].y = roundf( head_pos_euler.y );
hBinHrSplitPreRend->hBinHrSplitPostRend->QuaternionsPre[sf_idx].z = roundf( head_pos_euler.z );
}
for ( sf_idx = 0; sf_idx < 1; sf_idx++ )
{
......@@ -1453,12 +1486,12 @@ void ivas_rend_CldfbSplitPreRendProcess(
for ( b = 0; b < MAX_SPLIT_REND_MD_BANDS; b++ )
{
hBinHrSplitPreRend->hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b] = hBinHrSplitPreRend->rot_md[pos_idx][sf_idx][b];
#if 0
#if 1
BIN_HR_SPLIT_REND_MD_HANDLE hMd;
hMd = &hBinHrSplitPreRend->hBinHrSplitPostRend->rot_md[pos_idx][sf_idx][b];
minv = -1.4f;
maxv = 1.4f;
step = ( maxv - minv ) / 30.0f;
step = ( maxv - minv ) / 62.0f;
if ( b >= 20 )
{
float sign;
......@@ -1496,7 +1529,13 @@ void ivas_rend_CldfbSplitPreRendProcess(
}
#endif
ivas_rend_CldfbSplitPostRendProcess( hBinHrSplitPreRend->hBinHrSplitPostRend, pMultiBinPoseData, QuaternionsPost, Cldfb_In_BinReal[0], Cldfb_In_BinImag[0], tmpCrendBuffer, 1 );
for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ )
{
mvr2r( (float *) Cldfb_In_BinReal[0][sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES], (float *) Cldfb_RealBuffer_Binaural_5ms[0], MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX );
mvr2r( (float *) Cldfb_In_BinReal[1][sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES], (float *) Cldfb_RealBuffer_Binaural_5ms[1], MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX );
mvr2r( (float *) Cldfb_In_BinImag[0][sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES], (float *) Cldfb_ImagBuffer_Binaural_5ms[0], MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX );
mvr2r( (float *) Cldfb_In_BinImag[1][sf_idx * MAX_PARAM_SPATIAL_SUBFRAMES], (float *) Cldfb_ImagBuffer_Binaural_5ms[1], MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX );
ivas_rend_CldfbSplitPostRendProcess( hBinHrSplitPreRend->hBinHrSplitPostRend, pMultiBinPoseData, QuaternionsPost[0], Cldfb_RealBuffer_Binaural_5ms, Cldfb_ImagBuffer_Binaural_5ms, tmpCrendBuffer, 1 );
{
float *pOut[2];
......@@ -1505,6 +1544,7 @@ void ivas_rend_CldfbSplitPreRendProcess(
pOut[1] = tmpCrendBuffer[1];
dbgwrite_wav( pOut, CLDFB_NO_COL_MAX * hBinHrSplitPreRend->hBinHrSplitPostRend->cldfbSyn[0]->no_channels, fname, 48000, 2 );
}
}
#endif
pop_wmops();
......@@ -1578,6 +1618,7 @@ ivas_error ivas_splitBinPreRendOpen(
ivas_split_rend_init_huff_cfg( &hBinRend->huff_cfg );
#ifdef SPLIT_POSE_CORRECTION_DEBUG
ivas_error error;
if ( ( error = ivas_splitBinPostRendOpen( &hBinRend->hBinHrSplitPostRend, pMultiBinPoseData, 48000 ) ) != IVAS_ERR_OK )
{
return error;
......@@ -2103,7 +2144,8 @@ static ivas_error ivas_renderMultiTDBinToSplitBinaural(
const int16_t max_bands,
float *in[],
const int16_t low_res_pre_rend_rot,
const int16_t pcm_out_flag )
const int16_t pcm_out_flag,
const int16_t ro_md_flag )
{
ivas_error error;
int32_t bit_len, available_bits, target_md_bits, actual_md_bits;
......@@ -2188,7 +2230,7 @@ static ivas_error ivas_renderMultiTDBinToSplitBinaural(
actual_md_bits = pBits->bits_written;
ivas_rend_CldfbSplitPreRendProcess( hSplitBin->hBinHrSplitPreRend, headPosition, &hSplitBin->multiBinPoseData, Cldfb_In_BinReal, Cldfb_In_BinImag, pBits, target_md_bits, low_res_pre_rend_rot );
ivas_rend_CldfbSplitPreRendProcess( hSplitBin->hBinHrSplitPreRend, headPosition, &hSplitBin->multiBinPoseData, Cldfb_In_BinReal, Cldfb_In_BinImag, pBits, target_md_bits, low_res_pre_rend_rot, ro_md_flag );
}
if ( pcm_out_flag == 0 )
......@@ -2329,7 +2371,8 @@ ivas_error ivas_renderMultiBinToSplitBinaural(
float *output[],
const int16_t low_res_pre_rend_rot,
const int16_t cldfb_in_flag,
const int16_t pcm_out_flag )
const int16_t pcm_out_flag,
const int16_t ro_md_flag )
{
ivas_error error;
int32_t bit_len, target_md_bits, actual_md_bits, available_bits;
......@@ -2355,7 +2398,7 @@ ivas_error ivas_renderMultiBinToSplitBinaural(
{
/*TD input*/
/*if CLDFB handles have been allocated then assume valid multi binaural input in out[][] buffer and perform CLDFB analysis*/
error = ivas_renderMultiTDBinToSplitBinaural( hSplitBin, headPosition, SplitRendBitRate, codec_frame_size_ms, pBits, max_bands, output, low_res_pre_rend_rot, pcm_out_flag );
error = ivas_renderMultiTDBinToSplitBinaural( hSplitBin, headPosition, SplitRendBitRate, codec_frame_size_ms, pBits, max_bands, output, low_res_pre_rend_rot, pcm_out_flag, ro_md_flag );
pop_wmops();
return error;
......@@ -2373,7 +2416,8 @@ ivas_error ivas_renderMultiBinToSplitBinaural(
target_md_bits = ivas_get_split_rend_md_target_brate( SplitRendBitRate, pcm_out_flag ) * L_FRAME48k / 48000;
actual_md_bits = pBits->bits_written;
ivas_rend_CldfbSplitPreRendProcess( hSplitBin->hBinHrSplitPreRend, headPosition, &hSplitBin->multiBinPoseData, Cldfb_In_BinReal, Cldfb_In_BinImag, pBits, target_md_bits, low_res_pre_rend_rot );
ivas_rend_CldfbSplitPreRendProcess( hSplitBin->hBinHrSplitPreRend, headPosition, &hSplitBin->multiBinPoseData, Cldfb_In_BinReal, Cldfb_In_BinImag, pBits, target_md_bits, low_res_pre_rend_rot, ro_md_flag );
}
if ( pcm_out_flag == 0 )
......
......@@ -1157,6 +1157,9 @@ typedef struct ivas_binaural_td_rendering_struct
float Gain; /* Mixer gain */
TDREND_MIX_Listener_t *Listener_p; /* The virtual listener */
TDREND_HRFILT_FiltSet_t *HrFiltSet_p; /* HR filter set */
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
TDREND_HRFILT_FiltSet_t **pHrFiltSet_p; /* pointer to HR filter set */
#endif
int16_t UseCommonDistAttenModel; /* Use common dist atten model (TRUE/FALSE) */
int16_t DistAttenEnabled; /* (TRUE/FALSE) */
......@@ -1168,7 +1171,11 @@ typedef struct
{
int32_t binaural_latency_ns;
BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
TDREND_HRFILT_FiltSet_t **hHrtfTD;
#else
TDREND_HRFILT_FiltSet_t *hHrtfTD;
#endif
} TDREND_WRAPPER, *TDREND_WRAPPER_HANDLE;
......@@ -1191,7 +1198,15 @@ typedef struct ivas_hrtfs_structure
uint16_t index_frequency_max_diffuse;
int16_t max_num_ir;
int16_t max_num_iterations;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
int16_t init_from_rom;
#endif
#ifdef FIX_INV_DIFFUSE_WEIGHT
float inv_diffuse_weight[BINAURAL_CHANNELS][MAX_INTERN_CHANNELS]; /* inverse diffuse weights array, access one inverse weight by pInvDiffuseWeight[channel] */
int16_t same_inv_diffuse_weight;
#else
float inv_diffuse_weight[MAX_INTERN_CHANNELS]; /* inverse diffuse weights array, access one inverse weight by pInvDiffuseWeight[channel] */
#endif
float gain_lfe;
} HRTFS_DATA, *HRTFS_HANDLE;
......@@ -1202,8 +1217,13 @@ typedef struct ivas_crend_state_t
{
float *freq_buffer_re[MAX_INTERN_CHANNELS];
float *freq_buffer_im[MAX_INTERN_CHANNELS];
#ifdef FIX_INV_DIFFUSE_WEIGHT
float *freq_buffer_re_diffuse[BINAURAL_CHANNELS];
float *freq_buffer_im_diffuse[BINAURAL_CHANNELS];
#else
float *freq_buffer_re_diffuse;
float *freq_buffer_im_diffuse;
#endif
float *prev_out_buffer[BINAURAL_CHANNELS];
float *lfe_delay_line;
float m_fYaw;
......@@ -1373,21 +1393,6 @@ typedef struct ivas_binaural_head_rot_split_rendering_huff_struct
} BIN_HR_SPLIT_REND_HUFF, *BIN_HR_SPLIT_REND_HUFF_HANDLE;
typedef struct ivas_binaural_head_rot_split_pre_rendering_struct
{
BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES - 1][MAX_SPLIT_MD_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS];
float fix_pos_rot_mat[MAX_HEAD_ROT_POSES - 1][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
IVAS_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1];
BIN_HR_SPLIT_REND_HUFF huff_cfg;
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
HANDLE_CLDFB_FILTER_BANK cldfbSynRotBinDec[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS];
#endif
#ifdef SPLIT_POSE_CORRECTION_DEBUG
BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend;
#endif
} BIN_HR_SPLIT_PRE_REND, *BIN_HR_SPLIT_PRE_REND_HANDLE;
typedef struct ivas_binaural_head_rot_split_post_rendering_struct
{
......@@ -1416,6 +1421,22 @@ typedef struct ivas_binaural_head_rot_split_post_rendering_struct
} BIN_HR_SPLIT_POST_REND, *BIN_HR_SPLIT_POST_REND_HANDLE;
typedef struct ivas_binaural_head_rot_split_pre_rendering_struct
{
BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES - 1][MAX_SPLIT_MD_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS];
float fix_pos_rot_mat[MAX_HEAD_ROT_POSES - 1][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
IVAS_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1];
BIN_HR_SPLIT_REND_HUFF huff_cfg;
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
HANDLE_CLDFB_FILTER_BANK cldfbSynRotBinDec[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS];
#endif
#ifdef SPLIT_POSE_CORRECTION_DEBUG
BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend;
#endif
} BIN_HR_SPLIT_PRE_REND, *BIN_HR_SPLIT_PRE_REND_HANDLE;
typedef struct ivas_binaural_head_rot_split_rendering_lcld_enc_struct
{
void *pLcld_enc;
......@@ -1626,7 +1647,11 @@ typedef struct ivas_masa_external_rendering_struct
#endif
REVERB_STRUCT_HANDLE hReverb;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
HRTFS_PARAMBIN_HANDLE *hHrtfParambin;
#else
HRTFS_PARAMBIN_HANDLE hHrtfParambin;
#endif
VBAP_HANDLE hVBAPdata;
float *hoa_dec_mtx;
......
......@@ -66,7 +66,11 @@
#define MAX_BUFFER_LENGTH ( MAX_BUFFER_LENGTH_PER_CHANNEL * MAX_INPUT_CHANNELS )
#endif
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
#define MAX_BIN_DELAY_SAMPLES 150 /* Maximum supported rendering latency for binaural IRs */
#else
#define MAX_BIN_DELAY_SAMPLES 50 /* Maximum supported rendering latency for binaural IRs */
#endif
/* Frame size required when rendering to binaural */
#define BINAURAL_RENDERING_FRAME_SIZE_MS 5
......@@ -223,6 +227,16 @@ typedef struct
MASA_PREREND_HANDLE hMasaPrerend;
} input_masa;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
typedef struct hrtf_handles
{
IVAS_DEC_HRTF_CREND_HANDLE hSetOfHRTF;
IVAS_DEC_HRTF_FASTCONV_HANDLE hHrtfFastConv;
IVAS_DEC_HRTF_PARAMBIN_HANDLE hHrtfParambin;
IVAS_DEC_HRTF_HANDLE hHrtfTD;
} hrtf_handles;
#endif
struct IVAS_REND
{
int32_t sampleRateOut;
......@@ -261,6 +275,14 @@ struct IVAS_REND
RENDER_CONFIG_DATA *hRendererConfig; /* Renderer config pointer */
int16_t num_subframes;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
hrtf_handles hHrtfs;
#else
IVAS_DEC_HRTF_CREND_HANDLE hSetOfHRTF;
IVAS_DEC_HRTF_FASTCONV_HANDLE hHrtfFastConv;
IVAS_DEC_HRTF_PARAMBIN_HANDLE hHrtfParambin;
IVAS_DEC_HRTF_HANDLE hHrtfTD;
#endif
};
......@@ -268,7 +290,12 @@ struct IVAS_REND
* Local function prototypes
*-------------------------------------------------------------------*/
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
static ivas_error initMasaExtRenderer( input_masa *inputMasa, const AUDIO_CONFIG outConfig, hrtf_handles *hHrtfs );
#else
static ivas_error initMasaExtRenderer( input_masa *inputMasa, const AUDIO_CONFIG outConfig );
#endif
static void freeMasaExtRenderer( MASA_EXT_REND_HANDLE *hMasaExtRendOut );
/*-------------------------------------------------------------------*
......@@ -1319,7 +1346,9 @@ static ivas_error initIsmMasaRendering(
if ( inputIsm->tdRendWrapper.hBinRendererTd != NULL )
{
ivas_td_binaural_close( &inputIsm->tdRendWrapper.hBinRendererTd );
#ifndef NONBE_FIX_BINARY_BINAURAL_READING
inputIsm->tdRendWrapper.hHrtfTD = NULL;
#endif
}
#ifdef SPLIT_REND_WITH_HEAD_ROT
......@@ -1343,7 +1372,13 @@ static ivas_error setRendInputActiveIsm(
void *input,
const AUDIO_CONFIG inConfig,
const IVAS_REND_InputId id,
RENDER_CONFIG_DATA *hRendCfg )
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
RENDER_CONFIG_DATA *hRendCfg,
hrtf_handles *hrtfs
#else
RENDER_CONFIG_DATA *hRendCfg
#endif
)
{
ivas_error error;
rendering_context rendCtx;
......@@ -1382,12 +1417,18 @@ static ivas_error setRendInputActiveIsm(
for ( i = 0; i < (int16_t) ( sizeof( inputIsm->splitTdRendWrappers ) / sizeof( *inputIsm->splitTdRendWrappers ) ); ++i )
{
inputIsm->splitTdRendWrappers[i] = defaultTdRendWrapper();
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
inputIsm->splitTdRendWrappers[i].hHrtfTD = &hrtfs->hHrtfTD;
#endif
}
#endif
inputIsm->hOMasa = NULL;
error = IVAS_ERR_OK;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
inputIsm->tdRendWrapper.hHrtfTD = &hrtfs->hHrtfTD;
#endif
#ifdef SPLIT_REND_WITH_HEAD_ROT
if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL || outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
......@@ -1396,7 +1437,11 @@ static ivas_error setRendInputActiveIsm(
#endif
{
#ifndef SPLIT_REND_WITH_HEAD_ROT
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( error = ivas_rend_openCrend( &inputIsm->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hrtfs->hSetOfHRTF, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_openCrend( &inputIsm->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......@@ -1456,7 +1501,11 @@ static ivas_error setRendInputActiveIsm(
}
else if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR )
{
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( error = ivas_rend_openCrend( &inputIsm->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hrtfs->hSetOfHRTF, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_openCrend( &inputIsm->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......@@ -1493,14 +1542,18 @@ static void clearInputIsm(
if ( inputIsm->tdRendWrapper.hBinRendererTd != NULL )
{
ivas_td_binaural_close( &inputIsm->tdRendWrapper.hBinRendererTd );
#ifndef NONBE_FIX_BINARY_BINAURAL_READING
inputIsm->tdRendWrapper.hHrtfTD = NULL;
#endif
}
#ifdef SPLIT_REND_WITH_HEAD_ROT
for ( i = 0; i < (int16_t) ( sizeof( inputIsm->splitTdRendWrappers ) / sizeof( *inputIsm->splitTdRendWrappers ) ); ++i )
{
ivas_td_binaural_close( &inputIsm->splitTdRendWrappers[i].hBinRendererTd );
#ifndef NONBE_FIX_BINARY_BINAURAL_READING
inputIsm->splitTdRendWrappers[i].hHrtfTD = NULL;
#endif
}
#endif
......@@ -2144,6 +2197,9 @@ static ivas_error initMcBinauralRendering(
const AUDIO_CONFIG inConfig,
const AUDIO_CONFIG outConfig,
RENDER_CONFIG_DATA *hRendCfg,
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
IVAS_DEC_HRTF_CREND_HANDLE hMixconv,
#endif
uint8_t reconfigureFlag )
{
ivas_error error;
......@@ -2174,7 +2230,9 @@ static ivas_error initMcBinauralRendering(
if ( !reconfigureFlag || ( !useTDRend && inputMc->tdRendWrapper.hBinRendererTd != NULL ) )
{
ivas_td_binaural_close( &inputMc->tdRendWrapper.hBinRendererTd );
#ifndef NONBE_FIX_BINARY_BINAURAL_READING
inputMc->tdRendWrapper.hHrtfTD = NULL;
#endif
}
#ifdef SPLIT_REND_WITH_HEAD_ROT
......@@ -2185,7 +2243,9 @@ static ivas_error initMcBinauralRendering(
if ( inputMc->splitTdRendWrappers[i].hBinRendererTd != NULL )
{
ivas_td_binaural_close( &inputMc->splitTdRendWrappers[i].hBinRendererTd );
#ifndef NONBE_FIX_BINARY_BINAURAL_READING
inputMc->splitTdRendWrappers[i].hHrtfTD = NULL;
#endif
}
}
}
......@@ -2252,9 +2312,21 @@ static ivas_error initMcBinauralRendering(
{
/* open CREND */
#ifdef SPLIT_REND_WITH_HEAD_ROT
if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, NULL, outSampleRate, ( ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) || ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ) ? inputMc->base.ctx.pSplitRendWrapper->multiBinPoseData.num_poses : 1 ) ) != IVAS_ERR_OK )
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, hMixconv,
outSampleRate, ( ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) || ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ) ? inputMc->base.ctx.pSplitRendWrapper->multiBinPoseData.num_poses : 1 ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, NULL,
outSampleRate, ( ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) || ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ) ? inputMc->base.ctx.pSplitRendWrapper->multiBinPoseData.num_poses : 1 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, hMixconv, outSampleRate ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, NULL, outSampleRate ) ) != IVAS_ERR_OK )
#endif
#endif
{
return error;
......@@ -2293,7 +2365,9 @@ static ivas_error initMcMasaRendering(
if ( inputMc->tdRendWrapper.hBinRendererTd != NULL )
{
ivas_td_binaural_close( &inputMc->tdRendWrapper.hBinRendererTd );
#ifndef NONBE_FIX_BINARY_BINAURAL_READING
inputMc->tdRendWrapper.hHrtfTD = NULL;
#endif
}
#ifdef SPLIT_REND_WITH_HEAD_ROT
......@@ -2381,7 +2455,13 @@ static ivas_error setRendInputActiveMc(
void *input,
const AUDIO_CONFIG inConfig,
const IVAS_REND_InputId id,
RENDER_CONFIG_DATA *hRendCfg )
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
RENDER_CONFIG_DATA *hRendCfg,
hrtf_handles *hrtfs
#else
RENDER_CONFIG_DATA *hRendCfg
#endif
)
{
#ifdef SPLIT_REND_WITH_HEAD_ROT
int16_t i;
......@@ -2417,6 +2497,14 @@ static ivas_error setRendInputActiveMc(
setZeroPanMatrix( inputMc->panGains );
inputMc->customLsInput = defaultCustomLs();
inputMc->tdRendWrapper = defaultTdRendWrapper();
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( hrtfs->hHrtfTD )
{
inputMc->tdRendWrapper.binaural_latency_ns = (int32_t) ( hrtfs->hHrtfTD->latency_s * 1000000000.f );
}
inputMc->tdRendWrapper.hHrtfTD = &hrtfs->hHrtfTD;
#endif
inputMc->crendWrapper = NULL;
inputMc->hReverb = NULL;
inputMc->hMcMasa = NULL;
......@@ -2437,6 +2525,13 @@ static ivas_error setRendInputActiveMc(
for ( i = 0; i < (int16_t) ( sizeof( inputMc->splitTdRendWrappers ) / sizeof( *inputMc->splitTdRendWrappers ) ); ++i )
{
inputMc->splitTdRendWrappers[i] = defaultTdRendWrapper();
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( hrtfs->hHrtfTD )
{
inputMc->splitTdRendWrappers[i].binaural_latency_ns = (int32_t) ( hrtfs->hHrtfTD->latency_s * 1000000000.f );
}
inputMc->splitTdRendWrappers[i].hHrtfTD = &hrtfs->hHrtfTD;
#endif
}
if ( getAudioConfigType( outConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL )
......@@ -2444,7 +2539,11 @@ static ivas_error setRendInputActiveMc(
if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL || outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
#endif
{
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( error = initMcBinauralRendering( inputMc, inConfig, outConfig, hRendCfg, hrtfs->hSetOfHRTF, FALSE ) ) != IVAS_ERR_OK )
#else
if ( ( error = initMcBinauralRendering( inputMc, inConfig, outConfig, hRendCfg, FALSE ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......@@ -2498,7 +2597,9 @@ static void clearInputMc(
if ( inputMc->tdRendWrapper.hBinRendererTd != NULL )
{
ivas_td_binaural_close( &inputMc->tdRendWrapper.hBinRendererTd );
#ifndef NONBE_FIX_BINARY_BINAURAL_READING
inputMc->tdRendWrapper.hHrtfTD = NULL;
#endif
}
#ifdef SPLIT_REND_WITH_HEAD_ROT
......@@ -2507,7 +2608,9 @@ static void clearInputMc(
if ( inputMc->splitTdRendWrappers[i].hBinRendererTd != NULL )
{
ivas_td_binaural_close( &inputMc->splitTdRendWrappers[i].hBinRendererTd );
#ifndef NONBE_FIX_BINARY_BINAURAL_READING
inputMc->splitTdRendWrappers[i].hHrtfTD = NULL;
#endif
}
}
#endif
......@@ -2640,7 +2743,13 @@ static ivas_error updateSplitPostRendPanGains(
static ivas_error updateSbaPanGains(
input_sba *inputSba,
const AUDIO_CONFIG outConfig,
RENDER_CONFIG_DATA *hRendCfg )
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
RENDER_CONFIG_DATA *hRendCfg,
IVAS_DEC_HRTF_CREND_HANDLE hMixconv
#else
RENDER_CONFIG_DATA *hRendCfg
#endif
)
{
ivas_error error;
AUDIO_CONFIG inConfig;
......@@ -2699,12 +2808,19 @@ static ivas_error updateSbaPanGains(
else
#endif
{
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
#ifdef SPLIT_REND_WITH_HEAD_ROT
if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef SPLIT_REND_WITH_HEAD_ROT
if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK )
#endif
#endif
{
return error;
}
......@@ -2717,10 +2833,18 @@ static ivas_error updateSbaPanGains(
return error;
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
#ifdef SPLIT_REND_WITH_HEAD_ROT
if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, hMixconv, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef SPLIT_REND_WITH_HEAD_ROT
if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate, rendCtx.pSplitRendWrapper->multiBinPoseData.num_poses ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK )
#endif
#endif
{
return error;
......@@ -2752,7 +2876,22 @@ static ivas_error setRendInputActiveSplitPostRend(
void *input,
const AUDIO_CONFIG inConfig,
const IVAS_REND_InputId id,
RENDER_CONFIG_DATA *hRendCfg )
RENDER_CONFIG_DATA *hRendCfg
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
,
#if defined _MSC_VER && !defined __clang__
#ifdef _MSC_VER
#pragma warning( disable : 4100 )
#endif
hrtf_handles *hrtfs
#ifdef _MSC_VER
#pragma warning( default : 4100 )
#endif
#else
hrtf_handles *hrtfs __attribute__( ( unused ) ) /* avoid unused parameter warning when compiling with clang */
#endif
#endif
)
{
ivas_error error;
rendering_context rendCtx;
......@@ -2806,7 +2945,13 @@ static ivas_error setRendInputActiveSba(
void *input,
const AUDIO_CONFIG inConfig,
const IVAS_REND_InputId id,
RENDER_CONFIG_DATA *hRendCfg )
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
RENDER_CONFIG_DATA *hRendCfg,
hrtf_handles *hrtfs
#else
RENDER_CONFIG_DATA *hRendCfg
#endif
)
{
ivas_error error;
rendering_context rendCtx;
......@@ -2848,6 +2993,9 @@ static ivas_error setRendInputActiveSba(
{
initRotGains( inputSba->rot_gains_prev[pos_idx] );
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
inputSba->cldfbRendWrapper.hHrtfFastConv = hrtfs->hHrtfFastConv;
#endif
#else
inputSba->crendWrapper = NULL;
inputSba->hDirAC = NULL;
......@@ -2862,7 +3010,11 @@ static ivas_error setRendInputActiveSba(
}
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( error = updateSbaPanGains( inputSba, outConfig, hRendCfg, hrtfs->hSetOfHRTF ) ) != IVAS_ERR_OK )
#else
if ( ( error = updateSbaPanGains( inputSba, outConfig, hRendCfg ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......@@ -2936,7 +3088,14 @@ static ivas_error setRendInputActiveMasa(
void *input,
const AUDIO_CONFIG inConfig,
const IVAS_REND_InputId id,
RENDER_CONFIG_DATA *hRendCfg ) /* Todo: This is not used at all within MASA. Support might be better to do after refactoring. */
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
RENDER_CONFIG_DATA *hRendCfg,
hrtf_handles *hrtfs
#else
RENDER_CONFIG_DATA *hRendCfg
#endif
) /* Todo: This is not used at all within MASA. Support might be better to do after refactoring. */
{
ivas_error error;
rendering_context rendCtx;
......@@ -2975,11 +3134,14 @@ static ivas_error setRendInputActiveMasa(
}
else
{
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( error = initMasaExtRenderer( inputMasa, outConfig, hrtfs ) ) != IVAS_ERR_OK )
#else
if ( ( error = initMasaExtRenderer( inputMasa, outConfig ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
inputMasa->metadataHasBeenFed = false;
}
......@@ -3072,6 +3234,9 @@ ivas_error IVAS_REND_Open(
IVAS_REND_HANDLE *phIvasRend,
const int32_t outputSampleRate,
const AUDIO_CONFIG outConfig,
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
const bool asHrtfBinary,
#endif
const int16_t nonDiegeticPan,
const float nonDiegeticPanGain,
const int16_t num_subframes )
......@@ -3238,6 +3403,32 @@ ivas_error IVAS_REND_Open(
}
#endif
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
hIvasRend->hHrtfs.hHrtfFastConv = NULL;
hIvasRend->hHrtfs.hHrtfParambin = NULL;
hIvasRend->hHrtfs.hHrtfTD = NULL;
hIvasRend->hHrtfs.hSetOfHRTF = NULL;
if ( asHrtfBinary )
{
if ( ( error = ivas_HRTF_binary_open( &( hIvasRend->hHrtfs.hHrtfTD ) ) ) != IVAS_ERR_OK )
{
return error;
}
if ( ( error = ivas_HRTF_CRend_binary_open( &( hIvasRend->hHrtfs.hSetOfHRTF ) ) ) != IVAS_ERR_OK )
{
return error;
}
if ( ( error = ivas_HRTF_fastconv_binary_open( &( hIvasRend->hHrtfs.hHrtfFastConv ) ) ) != IVAS_ERR_OK )
{
return error;
}
if ( ( error = ivas_HRTF_parambin_binary_open( &( hIvasRend->hHrtfs.hHrtfParambin ) ) ) != IVAS_ERR_OK )
{
return error;
}
}
#endif
return IVAS_ERR_OK;
}
......@@ -3382,7 +3573,11 @@ ivas_error IVAS_REND_ConfigureCustomOutputLoudspeakerLayout(
continue;
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( error = updateSbaPanGains( inputSba, hIvasRend->outputConfig, hIvasRend->hRendererConfig, NULL ) ) != IVAS_ERR_OK )
#else
if ( ( error = updateSbaPanGains( inputSba, hIvasRend->outputConfig, hIvasRend->hRendererConfig ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......@@ -3708,7 +3903,11 @@ ivas_error IVAS_REND_AddInput(
int32_t maxNumInputsOfType;
void *inputsArray;
int32_t inputStructSize;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
ivas_error ( *activateInput )( void *, AUDIO_CONFIG, IVAS_REND_InputId, RENDER_CONFIG_DATA *, hrtf_handles * );
#else
ivas_error ( *activateInput )( void *, AUDIO_CONFIG, IVAS_REND_InputId, RENDER_CONFIG_DATA * );
#endif
int32_t inputIndex;
/* Validate function arguments */
......@@ -3780,8 +3979,11 @@ ivas_error IVAS_REND_AddInput(
}
*inputId = makeInputId( inConfig, inputIndex );
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( error = activateInput( (uint8_t *) inputsArray + inputStructSize * inputIndex, inConfig, *inputId, hIvasRend->hRendererConfig, &hIvasRend->hHrtfs ) ) != IVAS_ERR_OK )
#else
if ( ( error = activateInput( (uint8_t *) inputsArray + inputStructSize * inputIndex, inConfig, *inputId, hIvasRend->hRendererConfig ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......@@ -3846,7 +4048,14 @@ ivas_error IVAS_REND_ConfigureCustomInputLoudspeakerLayout(
if ( hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL || hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
#endif
{
if ( ( error = initMcBinauralRendering( inputMc, inputMc->base.inConfig, hIvasRend->outputConfig, hIvasRend->hRendererConfig, FALSE ) ) != IVAS_ERR_OK )
if ( ( error = initMcBinauralRendering( inputMc,
inputMc->base.inConfig,
hIvasRend->outputConfig,
hIvasRend->hRendererConfig,
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
hIvasRend->hHrtfs.hSetOfHRTF,
#endif
FALSE ) ) != IVAS_ERR_OK )
{
return error;
}
......@@ -4685,7 +4894,14 @@ ivas_error IVAS_REND_SetHeadRotation(
{
if ( hIvasRend->inputsMc[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID )
{
if ( ( error = initMcBinauralRendering( &hIvasRend->inputsMc[i], hIvasRend->inputsMc[i].base.inConfig, hIvasRend->outputConfig, hIvasRend->hRendererConfig, TRUE ) ) != IVAS_ERR_OK )
if ( ( error = initMcBinauralRendering( &hIvasRend->inputsMc[i],
hIvasRend->inputsMc[i].base.inConfig,
hIvasRend->outputConfig,
hIvasRend->hRendererConfig,
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
hIvasRend->hHrtfs.hSetOfHRTF,
#endif
TRUE ) ) != IVAS_ERR_OK )
{
return error;
}
......@@ -4745,7 +4961,14 @@ ivas_error IVAS_REND_DisableHeadRotation(
{
if ( hIvasRend->inputsMc[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID )
{
if ( ( error = initMcBinauralRendering( &hIvasRend->inputsMc[i], hIvasRend->inputsMc[i].base.inConfig, hIvasRend->outputConfig, hIvasRend->hRendererConfig, TRUE ) ) != IVAS_ERR_OK )
if ( ( error = initMcBinauralRendering( &hIvasRend->inputsMc[i],
hIvasRend->inputsMc[i].base.inConfig,
hIvasRend->outputConfig,
hIvasRend->hRendererConfig,
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
hIvasRend->hHrtfs.hSetOfHRTF,
#endif
TRUE ) ) != IVAS_ERR_OK )
{
return error;
}
......@@ -5533,23 +5756,11 @@ static ivas_error renderIsmToBinauralRoom(
/* render 7_1_4 with BRIRs */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, NULL, NULL,
NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, ismInput->base.inputBuffer.config.numSamplesPerChannel, *ismInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR,
NULL, NULL, NULL, NULL, p_tmpRendBuffer, *ismInput->base.ctx.pOutSampleRate,
getNumSubframesInBuffer( &outAudio, *ismInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, NULL, NULL,
NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, ismInput->base.inputBuffer.config.numSamplesPerChannel, *ismInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR,
NULL, NULL, NULL, NULL, p_tmpRendBuffer, *ismInput->base.ctx.pOutSampleRate,
getNumSubframesInBuffer( &outAudio, *ismInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif
#endif
{
......@@ -6122,21 +6333,11 @@ static ivas_error renderMcToBinaural(
/* call CREND */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate,
getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate,
getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif
#endif
{
return error;
......@@ -6237,21 +6438,11 @@ static ivas_error renderMcToBinauralRoom(
/* call CREND */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate,
getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate,
getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif
#endif
{
return error;
......@@ -6353,21 +6544,11 @@ static ivas_error renderMcCustomLsToBinauralRoom(
/* call CREND */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL, NULL, NULL,
p_tmpCrendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL, NULL, NULL,
p_tmpCrendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif
#endif
{
return error;
......@@ -6564,7 +6745,7 @@ static ivas_error renderMcToSplitBinaural(
/* copy input for in-place rotation */
mvr2r( mcInput->base.inputBuffer.data, tmpRotBuffer.data, tmpRotBuffer.config.numChannels * tmpRotBuffer.config.numSamplesPerChannel );
set_zero( tmpRotBuffer.data, tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels );
/* perform rotation in source format to tmpRotBuffer */
pCombinedOrientationDataLocal = &combinedOrientationDataLocal;
......@@ -6576,12 +6757,8 @@ static ivas_error renderMcToSplitBinaural(
copyBufferTo2dArray( tmpRotBuffer, tmpRendBuffer );
/* call CREND (rotation already performed) */
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, pos_idx ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &mcInput->base.inputBuffer, *mcInput->base.ctx.pOutSampleRate ), pos_idx ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......@@ -6605,13 +6782,13 @@ static ivas_error renderMcToSplitBinaural(
free( tmpRotBuffer.data );
}
accumulate2dArrayToBuffer( tmpSplitBinauralBuffer, &outAudio );
if ( ( error = renderLfeToBinaural( mcInput, outConfig, outAudio ) ) != IVAS_ERR_OK )
{
return error;
}
accumulate2dArrayToBuffer( tmpSplitBinauralBuffer, &outAudio );
pop_wmops();
return IVAS_ERR_OK;
}
......@@ -7124,13 +7301,8 @@ static ivas_error renderSbaToMultiBinaural(
assert( sbaInput->crendWrapper->hCrend[0]->hReverb == NULL );
/* call CREND */
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate, pos_idx ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate,
getNumSubframesInBuffer( &sbaInput->base.inputBuffer, *sbaInput->base.ctx.pOutSampleRate ), pos_idx ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......@@ -7297,21 +7469,11 @@ static ivas_error renderSbaToBinaural(
/* call CREND */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate,
getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate,
getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif
#endif
{
return error;
......@@ -7408,23 +7570,11 @@ static ivas_error renderSbaToBinauralRoom(
/* call CREND */
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate, 0 ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig,
NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate,
getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ), 0 ) ) != IVAS_ERR_OK )
#endif
#else
#ifdef FIX_911_REMOVE_CREND_DUPLICATION
if ( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL,
NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig,
NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate,
getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK )
#endif
#endif
{
return error;
......@@ -8254,16 +8404,6 @@ static ivas_error getSamplesInternal(
{
return error;
}
if ( outAudio.config.is_cldfb == 0 )
{
#ifndef DISABLE_LIMITER
#ifdef DEBUGGING
hIvasRend->numClipping +=
#endif
limitRendererOutput( hIvasRend->hLimiter, outAudio.data, outAudio.config.numSamplesPerChannel, IVAS_LIMITER_THRESHOLD );
#endif
}
#else
#ifndef DISABLE_LIMITER
......@@ -8282,6 +8422,7 @@ static ivas_error getSamplesInternal(
float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX];
float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX];
int16_t ch;
int16_t i, ro_md_flag;
float *tmpBinaural[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS], tmpBinaural_buff[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][L_FRAME48k];
for ( ch = 0; ch < MAX_OUTPUT_CHANNELS; ch++ )
......@@ -8303,8 +8444,18 @@ static ivas_error getSamplesInternal(
/* Encode split rendering bitstream */
convertBitsBufferToInternalBitsBuff( *hBits, &bits );
ro_md_flag = 0;
for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i )
{
if ( hIvasRend->inputsIsm[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID )
{
ro_md_flag = 1;
break;
}
}
if ( ( error = ivas_renderMultiBinToSplitBinaural( &hIvasRend->splitRendWrapper, hIvasRend->headRotData.headPositions[0], hIvasRend->hRendererConfig->split_rend_config.splitRendBitRate, hIvasRend->hRendererConfig->split_rend_config.codec, hIvasRend->hRendererConfig->split_rend_config.codec_frame_size_ms,
&bits, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, ( const int16_t )( ( BINAURAL_MAXBANDS * hIvasRend->sampleRateOut ) / 48000 ), tmpBinaural, 1, cldfb_in_flag, ( hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0 ) ) != IVAS_ERR_OK )
&bits, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, ( const int16_t )( ( BINAURAL_MAXBANDS * hIvasRend->sampleRateOut ) / 48000 ), tmpBinaural, 1, cldfb_in_flag, ( hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0, ro_md_flag ) ) != IVAS_ERR_OK )
{
return error;
}
......@@ -8321,6 +8472,18 @@ static ivas_error getSamplesInternal(
}
#endif
#ifdef SPLIT_REND_WITH_HEAD_ROT
if ( outAudio.config.is_cldfb == 0 )
{
#ifndef DISABLE_LIMITER
#ifdef DEBUGGING
hIvasRend->numClipping +=
#endif
limitRendererOutput( hIvasRend->hLimiter, outAudio.data, outAudio.config.numSamplesPerChannel, IVAS_LIMITER_THRESHOLD );
#endif
}
#endif
/* update global cominbed orientation start index */
ivas_combined_orientation_update_start_index( hIvasRend->hCombinedOrientationData, outAudio.config.numSamplesPerChannel );
......@@ -8471,6 +8634,17 @@ void IVAS_REND_Close(
ivas_external_orientation_close( &hIvasRend->hExternalOrientationData );
ivas_combined_orientation_close( &hIvasRend->hCombinedOrientationData );
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
/* Fastconv HRTF memories */
ivas_binaural_hrtf_close( &hIvasRend->hHrtfs.hHrtfFastConv );
/* Parametric binauralizer HRTF filters */
ivas_HRTF_binary_close( &( hIvasRend->hHrtfs.hHrtfTD ) );
ivas_HRTF_CRend_binary_close( &( hIvasRend->hHrtfs.hSetOfHRTF ) );
ivas_HRTF_fastconv_binary_close( &( hIvasRend->hHrtfs.hHrtfFastConv ) );
ivas_HRTF_parambin_binary_close( &( hIvasRend->hHrtfs.hHrtfParambin ) );
#endif
free( hIvasRend );
*phIvasRend = NULL;
......@@ -8623,6 +8797,97 @@ int32_t IVAS_REND_GetCntFramesLimited(
}
#endif
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
/*---------------------------------------------------------------------*
* IVAS_REND_GetHrtfHandle( )
*
*
*---------------------------------------------------------------------*/
ivas_error IVAS_REND_GetHrtfHandle(
IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */
IVAS_DEC_HRTF_HANDLE **hHrtfTD /* o : HRTF handle */
)
{
if ( hIvasRend == NULL || hIvasRend->hHrtfs.hHrtfTD == NULL )
{
return IVAS_ERR_UNEXPECTED_NULL_POINTER;
}
*hHrtfTD = &hIvasRend->hHrtfs.hHrtfTD;
return IVAS_ERR_OK;
}
/*---------------------------------------------------------------------*
* IVAS_REND_GetHrtfCRendHandle( )
*
*
*---------------------------------------------------------------------*/
ivas_error IVAS_REND_GetHrtfCRendHandle(
IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */
IVAS_DEC_HRTF_CREND_HANDLE **hSetOfHRTF /* o : Set of HRTF handle */
)
{
if ( hIvasRend == NULL || hIvasRend->hHrtfs.hSetOfHRTF == NULL )
{
return IVAS_ERR_WRONG_PARAMS;
}
*hSetOfHRTF = &hIvasRend->hHrtfs.hSetOfHRTF;
return IVAS_ERR_OK;
}
/*---------------------------------------------------------------------*
* IVAS_REND_GetHrtfFastConvHandle( )
*
*
*---------------------------------------------------------------------*/
ivas_error IVAS_REND_GetHrtfFastConvHandle(
IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */
IVAS_DEC_HRTF_FASTCONV_HANDLE **hHrtfFastConv /* o : FASTCONV HRTF handle */
)
{
if ( hIvasRend == NULL || hIvasRend->hHrtfs.hHrtfFastConv == NULL )
{
return IVAS_ERR_WRONG_PARAMS;
}
*hHrtfFastConv = &hIvasRend->hHrtfs.hHrtfFastConv;
return IVAS_ERR_OK;
}
/*---------------------------------------------------------------------*
* IVAS_REND_GetHrtfParamBinHandle( )
*
*
*---------------------------------------------------------------------*/
ivas_error IVAS_REND_GetHrtfParamBinHandle(
IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */
IVAS_DEC_HRTF_PARAMBIN_HANDLE **hHrtfParambin /* o : Parametric binauralizer HRTF handle */
)
{
if ( hIvasRend == NULL || hIvasRend->hHrtfs.hHrtfParambin == NULL )
{
return IVAS_ERR_WRONG_PARAMS;
}
*hHrtfParambin = &hIvasRend->hHrtfs.hHrtfParambin;
return IVAS_ERR_OK;
}
#endif
static ivas_error ivas_masa_ext_rend_dirac_rend_init(
input_masa *inputMasa )
{
......@@ -9002,7 +9267,11 @@ static ivas_error ivas_masa_ext_rend_parambin_init(
error = IVAS_ERR_OK;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
hHrtfParambin = *( inputMasa->hMasaExtRend->hHrtfParambin );
#else
hHrtfParambin = inputMasa->hMasaExtRend->hHrtfParambin;
#endif
/* Set common variables and defaults */
output_Fs = *( inputMasa->base.ctx.pOutSampleRate );
......@@ -9134,7 +9403,13 @@ static ivas_error ivas_masa_ext_rend_parambin_init(
static ivas_error initMasaExtRenderer(
input_masa *inputMasa,
const AUDIO_CONFIG outConfig )
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
const AUDIO_CONFIG outConfig,
hrtf_handles *hrtfs
#else
const AUDIO_CONFIG outConfig
#endif
)
{
int16_t i;
ivas_error error;
......@@ -9162,7 +9437,11 @@ static ivas_error initMasaExtRenderer(
hMasaExtRend->hDiracDecBin = NULL;
#endif
hMasaExtRend->hReverb = NULL;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
hMasaExtRend->hHrtfParambin = &hrtfs->hHrtfParambin;
#else
hMasaExtRend->hHrtfParambin = NULL;
#endif
hMasaExtRend->hVBAPdata = NULL;
hMasaExtRend->hoa_dec_mtx = NULL;
......@@ -9253,7 +9532,11 @@ static ivas_error initMasaExtRenderer(
{
if ( hMasaExtRend->renderer_type != RENDERER_STEREO_PARAMETRIC )
{
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( error = ivas_dirac_dec_binaural_copy_hrtfs( inputMasa->hMasaExtRend->hHrtfParambin ) ) != IVAS_ERR_OK )
#else
if ( ( error = ivas_dirac_dec_binaural_copy_hrtfs( &inputMasa->hMasaExtRend->hHrtfParambin ) ) != IVAS_ERR_OK )
#endif
{
return error;
}
......@@ -9347,7 +9630,11 @@ static void freeMasaExtRenderer(
if ( hMasaExtRend->hHrtfParambin != NULL )
{
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
ivas_HRTF_parambin_binary_close( hMasaExtRend->hHrtfParambin );
#else
ivas_HRTF_parambin_binary_close( &hMasaExtRend->hHrtfParambin );
#endif
}
if ( hMasaExtRend->hVBAPdata != NULL )
......
......@@ -128,6 +128,9 @@ ivas_error IVAS_REND_Open(
IVAS_REND_HANDLE *phIvasRend, /* i/o: Pointer to renderer handle */
const int32_t outputSampleRate, /* i : output sampling rate */
const IVAS_AUDIO_CONFIG outConfig, /* i : output audio config */
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
const bool asHrtfBinary, /* i : load hrtf binary file */
#endif
const int16_t nonDiegeticPan, /* i : non-diegetic object flag */
const float nonDiegeticPanGain, /* i : non-diegetic panning gain */
const int16_t num_subframes /* i : number of subframes */
......@@ -197,6 +200,30 @@ ivas_error IVAS_REND_GetDelay(
int32_t *timeScale /* o : Time scale of the delay, equal to renderer output sampling rate */
);
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
/*! r: error code */
ivas_error IVAS_REND_GetHrtfHandle(
IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */
IVAS_DEC_HRTF_HANDLE **hHrtfTD /* o : HRTF handle */
);
/*! r: error code */
ivas_error IVAS_REND_GetHrtfCRendHandle(
IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */
IVAS_DEC_HRTF_CREND_HANDLE **hSetOfHRTF /* o : Set of HRTF handle */
);
ivas_error IVAS_REND_GetHrtfFastConvHandle(
IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */
IVAS_DEC_HRTF_FASTCONV_HANDLE **hHrtfFastConv /* o : FASTCONV HRTF handle */
);
ivas_error IVAS_REND_GetHrtfParamBinHandle(
IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */
IVAS_DEC_HRTF_PARAMBIN_HANDLE **hHrtfParambin /* o : Parametric binauralizer HRTF handle */
);
#endif
/* Functions to be called during rendering */
ivas_error IVAS_REND_FeedInputAudio(
......
......@@ -35,6 +35,9 @@
#include "prot.h"
#include "ivas_prot_rend.h"
#include "ivas_prot.h"
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
#include "ivas_rom_binaural_crend_head.h"
#endif
/*---------------------------------------------------------------------*
* Local structures
......@@ -186,6 +189,15 @@ static ivas_error check_hrtf_binary_header(
ivas_hrtfs_header_t *hrtf_header )
{
/* Check the renderer type */
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( ( hrtf_header->rend_type != HRTF_READER_RENDERER_BINAURAL_MIXER_CONV ) && ( hrtf_header->rend_type != HRTF_READER_RENDERER_BINAURAL_MIXER_CONV_ROOM ) &&
( hrtf_header->rend_type != HRTF_READER_RENDERER_BINAURAL_FASTCONV ) && ( hrtf_header->rend_type != HRTF_READER_RENDERER_BINAURAL_FASTCONV_ROOM ) &&
( hrtf_header->rend_type != HRTF_READER_RENDERER_BINAURAL_PARAMETRIC ) && ( hrtf_header->rend_type != HRTF_READER_RENDERER_BINAURAL_PARAMETRIC_ROOM ) &&
( hrtf_header->rend_type != HRTF_READER_RENDERER_BINAURAL_OBJECTS_TD ) && ( hrtf_header->rend_type != HRTF_READER_RENDERER_BINAURAL_REVERB_ALL ) )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Header of HRTF binary file not compliant (renderer type)" );
}
#else
if ( ( hrtf_header->rend_type != RENDERER_BINAURAL_MIXER_CONV ) && ( hrtf_header->rend_type != RENDERER_BINAURAL_MIXER_CONV_ROOM ) &&
( hrtf_header->rend_type != RENDERER_BINAURAL_FASTCONV ) && ( hrtf_header->rend_type != RENDERER_BINAURAL_FASTCONV_ROOM ) &&
( hrtf_header->rend_type != RENDERER_BINAURAL_PARAMETRIC ) && ( hrtf_header->rend_type != RENDERER_BINAURAL_PARAMETRIC_ROOM ) &&
......@@ -193,6 +205,7 @@ static ivas_error check_hrtf_binary_header(
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Header of HRTF binary file not compliant (renderer type)" );
}
#endif
/* Check the output format of the decoder */
......@@ -222,7 +235,7 @@ static ivas_error read_hrtf_binary_header(
FILE *f_hrtf )
{
/* HRTF Header */
/* Renderer type (4 bytes) : See "RENDERER_TYPE" */
/* Renderer type (4 bytes) : See "HRTF_READER_RENDERER_TYPE" */
/* Input configuration (4 bytes) : See "BINAURAL_INPUT_AUDIO_CONFIG" */
/* Sampling Frequency (4 bytes) */
/* Raw data size (4 bytes) */
......@@ -431,16 +444,267 @@ static ivas_error LoadBSplineBinary(
LoadBSplineBinaryITD( &HrFiltSet_p->ModelParamsITD, f_hrtf );
}
#ifndef FIX_638_ENERGIE_IAC_ROM_TABLES
/* left/right energy and interaural coherence for late reverb */
for ( i = 0; i < 3; i++ )
{
HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( float ) );
if ( HrFiltSet_p->lr_energy_and_iac_dyn[i] == NULL )
{
return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
}
fread( HrFiltSet_p->lr_energy_and_iac_dyn[i], sizeof( const float ), LR_IAC_LENGTH_NR_FC, f_hrtf );
HrFiltSet_p->lr_energy_and_iac[i] = (const float *) HrFiltSet_p->lr_energy_and_iac_dyn[i];
}
#endif
return IVAS_ERR_OK;
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
/*-------------------------------------------------------------------*
* set_default_reverb_iac_energy()
*
* Loads reverb data from file.
--------------------------------------------------------------------*/
static ivas_error set_default_reverb_iac_energy(
IVAS_DEC_HRTF_HANDLE HrFiltSet_p /* i/o: HR filter model parameter structure */
)
{
int16_t i;
#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
int16_t lr_iac_len;
#endif
if ( HrFiltSet_p == NULL )
{
return IVAS_ERR_UNEXPECTED_NULL_POINTER;
}
#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
lr_iac_len = LR_IAC_LENGTH_NR_FC;
if ( HrFiltSet_p->SampleRate == 16000 )
{
lr_iac_len = LR_IAC_LENGTH_NR_FC_16KHZ;
}
#endif
if ( HrFiltSet_p->ModelParams.modelROM == 0 )
{
for ( i = 0; i < 3; i++ )
{
#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( lr_iac_len * sizeof( float ) );
#else
HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( float ) );
#endif
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( HrFiltSet_p->lr_energy_and_iac_dyn[i] == NULL )
{
return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
}
#endif
}
switch ( HrFiltSet_p->SampleRate )
{
case 48000:
mvr2r( defaultHRIR_left_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC );
mvr2r( defaultHRIR_right_avg_power_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC );
mvr2r( defaultHRIR_coherence_48kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC );
break;
case 32000:
mvr2r( defaultHRIR_left_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC );
mvr2r( defaultHRIR_right_avg_power_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC );
mvr2r( defaultHRIR_coherence_32kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC );
break;
case 16000:
#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
mvr2r( defaultHRIR_left_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], lr_iac_len );
mvr2r( defaultHRIR_right_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], lr_iac_len );
mvr2r( defaultHRIR_coherence_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], lr_iac_len );
#else
mvr2r( defaultHRIR_left_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[0], LR_IAC_LENGTH_NR_FC );
mvr2r( defaultHRIR_right_avg_power_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[1], LR_IAC_LENGTH_NR_FC );
mvr2r( defaultHRIR_coherence_16kHz, HrFiltSet_p->lr_energy_and_iac_dyn[2], LR_IAC_LENGTH_NR_FC );
#endif
break;
}
}
else
{
switch ( HrFiltSet_p->SampleRate )
{
case 48000:
HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_48kHz;
HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_48kHz;
HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_48kHz;
break;
case 32000:
HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_32kHz;
HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_32kHz;
HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_32kHz;
break;
case 16000:
HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_16kHz;
HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_16kHz;
HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_16kHz;
break;
}
}
return IVAS_ERR_OK;
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
/*-------------------------------------------------------------------*
* load_reverb_from_binary()
*
* Loads reverb data from file.
--------------------------------------------------------------------*/
static ivas_error load_reverb_from_binary(
IVAS_DEC_HRTF_HANDLE HrFiltSet_p, /* i/o: HR filter model parameter structure */
FILE *f_hrtf /* i : HR filter data file handle */
)
{
int16_t i;
bool is_reverb;
ivas_error header_check_result;
ivas_hrtfs_file_header_t hrtfs_file_header;
int16_t hrtf_id;
ivas_hrtfs_header_t hrtf_header;
int32_t hrtf_data_size_max;
char *hrtf_data;
#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
int16_t lr_iac_len;
if ( HrFiltSet_p == NULL )
{
return IVAS_ERR_UNEXPECTED_NULL_POINTER;
}
lr_iac_len = LR_IAC_LENGTH_NR_FC;
if ( HrFiltSet_p->SampleRate == 16000 )
{
lr_iac_len = LR_IAC_LENGTH_NR_FC_16KHZ;
}
#endif
header_check_result = IVAS_ERR_OK;
if ( ( header_check_result = read_and_check_hrtf_binary_file_header( &hrtfs_file_header, f_hrtf ) ) != IVAS_ERR_OK )
{
return header_check_result;
}
is_reverb = FALSE;
hrtf_data_size_max = hrtfs_file_header.max_data_size;
/* Allocate the memory */
if ( hrtf_data_size_max == 0 )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (hrtf_data_size_max)" );
}
hrtf_data = (char *) malloc( hrtf_data_size_max );
if ( hrtf_data == NULL )
{
return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
}
for ( hrtf_id = 0; ( hrtf_id < hrtfs_file_header.nb_hrtf ) && ( !is_reverb ); hrtf_id++ )
{
if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK )
{
free( hrtf_data );
return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "HRTF binary file not compliant (number of HRTF)" );
}
if ( ( header_check_result = check_hrtf_binary_header( &hrtf_header ) ) != IVAS_ERR_OK )
{
free( hrtf_data );
return header_check_result;
}
is_reverb = ( hrtf_header.rend_type == HRTF_READER_RENDERER_BINAURAL_REVERB_ALL );
if ( !is_reverb )
{
if ( fread( hrtf_data, 1, hrtf_header.data_size, f_hrtf ) != hrtf_header.data_size )
{
free( hrtf_data );
return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" );
}
}
}
free( hrtf_data );
if ( is_reverb )
{
/* left/right energy and interaural coherence for late reverb */
for ( i = 0; i < 3; i++ )
{
#ifdef NONBE_FIX_AVG_IAC_CLDFB_REVERB
HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( lr_iac_len * sizeof( float ) );
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( HrFiltSet_p->lr_energy_and_iac_dyn[i] == NULL )
{
return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
}
#endif
fread( HrFiltSet_p->lr_energy_and_iac_dyn[i], sizeof( const float ), lr_iac_len, f_hrtf );
HrFiltSet_p->lr_energy_and_iac[i] = (const float *) HrFiltSet_p->lr_energy_and_iac_dyn[i];
#else
HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( float ) );
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( HrFiltSet_p->lr_energy_and_iac_dyn[i] == NULL )
{
return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
}
#endif
fread( HrFiltSet_p->lr_energy_and_iac_dyn[i], sizeof( const float ), LR_IAC_LENGTH_NR_FC, f_hrtf );
HrFiltSet_p->lr_energy_and_iac[i] = (const float *) HrFiltSet_p->lr_energy_and_iac_dyn[i];
#endif
}
}
else
{
if ( ( header_check_result = set_default_reverb_iac_energy( HrFiltSet_p ) ) != IVAS_ERR_OK )
{
return header_check_result;
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
return IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA;
#else
return IVAS_ERR_FAILED_FILE_READ;
#endif
}
return IVAS_ERR_OK;
}
#endif
/*---------------------------------------------------------------------*
* load_reverb_binary()
*
* Load HRTF binary data into the HRTF handle
*---------------------------------------------------------------------*/
ivas_error load_reverb_binary(
IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */
const hrtfFileReader *hrtfReader /* i/o: pointer to hrtfFileReader handle */
)
{
fseek( hrtfReader->file, 0, SEEK_SET );
return load_reverb_from_binary( hHrtf, hrtfReader->file );
}
#endif
/*-------------------------------------------------------------------*
......@@ -455,7 +719,9 @@ static ivas_error TDREND_MIX_LoadHRTF(
)
{
int16_t tmp;
#ifndef NONBE_FIX_BINARY_BINAURAL_READING
ivas_error error;
#endif
bool is_tdrend;
ivas_error header_check_result;
ivas_hrtfs_file_header_t hrtfs_file_header;
......@@ -464,11 +730,36 @@ static ivas_error TDREND_MIX_LoadHRTF(
int32_t hrtf_data_size_max;
char *hrtf_data;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
header_check_result = IVAS_ERR_OK;
#else
error = IVAS_ERR_OK;
#endif
if ( ( header_check_result = read_and_check_hrtf_binary_file_header( &hrtfs_file_header, f_hrtf ) ) != IVAS_ERR_OK )
{
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
/* try if it is old format for BE tests*/
fseek( f_hrtf, 0, SEEK_SET );
if ( fread( &tmp, 1, sizeof( int16_t ), f_hrtf ) == 0 )
{
header_check_result = IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" );
}
HrFiltSet_p->FilterMethod = (TDREND_HRFILT_Method_t) tmp;
if ( HrFiltSet_p->FilterMethod != TDREND_HRFILT_Method_BSplineModel )
{
header_check_result = IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "The HR filter set file is not a supported type." );
}
else
{
header_check_result = LoadBSplineBinary( HrFiltSet_p, f_hrtf );
}
return header_check_result;
#endif
}
is_tdrend = FALSE;
......@@ -499,7 +790,11 @@ static ivas_error TDREND_MIX_LoadHRTF(
return header_check_result;
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
is_tdrend = ( hrtf_header.rend_type == HRTF_READER_RENDERER_BINAURAL_OBJECTS_TD );
#else
is_tdrend = ( hrtf_header.rend_type == RENDERER_BINAURAL_OBJECTS_TD );
#endif
if ( !is_tdrend )
{
if ( fread( hrtf_data, 1, hrtf_header.data_size, f_hrtf ) != hrtf_header.data_size )
......@@ -522,19 +817,34 @@ static ivas_error TDREND_MIX_LoadHRTF(
if ( HrFiltSet_p->FilterMethod != TDREND_HRFILT_Method_BSplineModel )
{
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
header_check_result = IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "The HR filter set file is not a supported type." );
#else
error = IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "The HR filter set file is not a supported type." );
#endif
}
else
{
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
header_check_result = LoadBSplineBinary( HrFiltSet_p, f_hrtf );
#else
error = LoadBSplineBinary( HrFiltSet_p, f_hrtf );
#endif
}
}
else
{
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
return IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA;
#else
return IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "HR filter not found in binary file." );
#endif
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
return header_check_result;
#else
return error;
#endif
}
......@@ -617,6 +927,76 @@ static void HRTF_energy_sections_precalc(
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
/*---------------------------------------------------------------------*
* destroy_td_hrtf()
*
* Deallocated memory allocated by load_HRTF_binary
*---------------------------------------------------------------------*/
void destroy_td_hrtf(
IVAS_DEC_HRTF_HANDLE *hHrtf /* i/o: HRTF handle */
)
{
int16_t i;
if ( ( hHrtf == NULL ) || ( *hHrtf == NULL ) )
{
return;
}
if ( !( *hHrtf )->ModelParams.modelROM )
{
if ( ( *hHrtf )->ModelParams.UseItdModel )
{
free( ( *hHrtf )->ModelParamsITD.elevKSeq_dyn );
free( ( *hHrtf )->ModelParamsITD.azimKSeq_dyn );
free( ( *hHrtf )->ModelParamsITD.W_dyn );
free( ( *hHrtf )->ModelParamsITD.azimBsShape_dyn );
free( ( *hHrtf )->ModelParamsITD.elevBsShape_dyn );
}
free( ( *hHrtf )->ModelParams.elevKSeq_dyn );
free( ( *hHrtf )->ModelParams.azim_start_idx_dyn );
free( ( *hHrtf )->ModelParams.azimDim2_dyn );
free( ( *hHrtf )->ModelParams.azimDim3_dyn );
free( ( *hHrtf )->ModelParams.AlphaL_dyn );
free( ( *hHrtf )->ModelParams.AlphaR_dyn );
free( ( *hHrtf )->ModelParams.azimSegSamples_dyn );
free( ( *hHrtf )->ModelParams.azimShapeIdx_dyn );
free( ( *hHrtf )->ModelParams.azimShapeSampFactor_dyn );
free( ( *hHrtf )->ModelParams.elevBsShape_dyn );
for ( i = 0; i < ( *hHrtf )->ModelParams.num_unique_azim_splines; i++ )
{
free( ( *hHrtf )->ModelParams.azimBsShape_dyn[i] );
}
free( ( *hHrtf )->ModelParams.azimBsShape_dyn );
free( (void *) ( *hHrtf )->ModelParams.azimBsShape ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */
for ( i = 0; i < ( *hHrtf )->ModelParams.elevDim3; i++ )
{
free( ( *hHrtf )->ModelParams.azimKSeq[i] );
}
free( ( *hHrtf )->ModelParams.azimKSeq );
free( ( *hHrtf )->ModelParams.EL_dyn );
free( ( *hHrtf )->ModelParams.ER_dyn );
free( ( *hHrtf )->ModelEval.hrfModL );
free( ( *hHrtf )->ModelEval.hrfModR );
for ( i = 0; i < 3; i++ )
{
free( ( *hHrtf )->lr_energy_and_iac_dyn[i] );
}
}
ivas_HRTF_binary_close( hHrtf );
return;
}
#else
/*---------------------------------------------------------------------*
* dealloc_HRTF_binary()
*
......@@ -685,6 +1065,7 @@ ivas_error dealloc_HRTF_binary(
return error;
}
#endif
/*---------------------------------------------------------------------*
......@@ -710,7 +1091,11 @@ static ivas_error create_HRTF_from_rawdata(
{
if ( ( ( *hHRTF ) = (HRTFS_HANDLE) malloc( sizeof( HRTFS_DATA ) ) ) == NULL )
{
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HRTF binary data\n" );
#else
return IVAS_ERROR( IVAS_ERR_UNEXPECTED_NULL_POINTER, "Can not allocate memory for HRTF binary data\n" );
#endif
}
if ( ( error = ivas_hrtf_init( *hHRTF ) ) != IVAS_ERR_OK )
......@@ -723,6 +1108,9 @@ static ivas_error create_HRTF_from_rawdata(
return IVAS_ERR_INTERNAL;
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
( *hHRTF )->init_from_rom = 0;
#endif
hrtf_data_rptr = hrtf_data;
/* latency_s */
......@@ -802,11 +1190,24 @@ static ivas_error create_HRTF_from_rawdata(
hrtf_data_rptr += sizeof( uint16_t );
/* inv_diffuse_weight */
#ifdef FIX_INV_DIFFUSE_WEIGHT
for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ )
{
( *hHRTF )->inv_diffuse_weight[0][i] = *( (float *) ( hrtf_data_rptr ) );
hrtf_data_rptr += sizeof( float );
}
for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ )
{
( *hHRTF )->inv_diffuse_weight[1][i] = *( (float *) ( hrtf_data_rptr ) );
hrtf_data_rptr += sizeof( float );
}
#else
for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ )
{
( *hHRTF )->inv_diffuse_weight[i] = *( (float *) ( hrtf_data_rptr ) );
hrtf_data_rptr += sizeof( float );
}
#endif
/* max_total_num_fsamp_per_iteration */
max_total_num_fsamp_per_iteration = *( (uint16_t *) ( hrtf_data_rptr ) );
......@@ -916,17 +1317,48 @@ static ivas_error create_HRTF_from_rawdata(
static ivas_error create_fastconv_HRTF_from_rawdata(
HRTFS_FASTCONV_HANDLE *hHRTF, /* i/o: HRTF FastConv handle */
char *hrtf_data, /* i : pointer to binary file */
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
HRTF_READER_RENDERER_TYPE rend_type, /* i : Renderer type */
#else
RENDERER_TYPE rend_type, /* i : Renderer type */
#endif
BINAURAL_INPUT_AUDIO_CONFIG input_cfg /* i : Input binaural config */
)
{
int16_t i, j;
char *hrtf_data_rptr;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
ivas_error error;
#endif
( *hHRTF )->allocate_init_flag = 0;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV )
{
if ( ( error = ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg, RENDERER_BINAURAL_FASTCONV, ( *hHRTF )->allocate_init_flag ) ) != IVAS_ERR_OK )
{
return error;
}
}
else if ( rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV_ROOM )
{
if ( ( error = ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg, RENDERER_BINAURAL_FASTCONV_ROOM, ( *hHRTF )->allocate_init_flag ) ) != IVAS_ERR_OK )
{
return error;
}
}
else
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "renderer type not compliant" );
}
#else
ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg, rend_type, ( *hHRTF )->allocate_init_flag );
#endif
hrtf_data_rptr = hrtf_data;
#ifndef NONBE_FIX_BINARY_BINAURAL_READING
/* BINAURAL_CONVBANDS */
if ( BINAURAL_CONVBANDS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
{
......@@ -934,12 +1366,25 @@ static ivas_error create_fastconv_HRTF_from_rawdata(
}
hrtf_data_rptr += sizeof( uint16_t );
#endif
/* HRIR */
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
#else
if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
#endif
{
( *hHRTF )->FASTCONV_HRIR_latency_s = *( (float *) ( hrtf_data_rptr ) );
hrtf_data_rptr += sizeof( float );
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( BINAURAL_CONVBANDS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_CONVBANDS)" );
}
hrtf_data_rptr += sizeof( uint16_t );
#endif
if ( HRTF_LS_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_LS_CHANNELS)" );
......@@ -985,12 +1430,24 @@ static ivas_error create_fastconv_HRTF_from_rawdata(
}
}
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
else if ( rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 )
#else
else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 )
#endif
{
/* HRIR_HOA3 */
( *hHRTF )->FASTCONV_HOA3_latency_s = *( (float *) ( hrtf_data_rptr ) );
hrtf_data_rptr += sizeof( float );
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( BINAURAL_CONVBANDS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_CONVBANDS)" );
}
hrtf_data_rptr += sizeof( uint16_t );
#endif
if ( HOA3_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HOA3_CHANNELS)" );
......@@ -1035,11 +1492,24 @@ static ivas_error create_fastconv_HRTF_from_rawdata(
}
}
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
else if ( rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 )
#else
else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 )
#endif
{
/* HRIR_HOA2 */
( *hHRTF )->FASTCONV_HOA2_latency_s = *( (float *) ( hrtf_data_rptr ) );
hrtf_data_rptr += sizeof( float );
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( BINAURAL_CONVBANDS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_CONVBANDS)" );
}
hrtf_data_rptr += sizeof( uint16_t );
#endif
if ( HOA2_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HOA2_CHANNELS)" );
......@@ -1085,11 +1555,24 @@ static ivas_error create_fastconv_HRTF_from_rawdata(
}
}
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
else if ( rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA )
#else
else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA )
#endif
{
/* HRIR_FOA */
( *hHRTF )->FASTCONV_FOA_latency_s = *( (float *) ( hrtf_data_rptr ) );
hrtf_data_rptr += sizeof( float );
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( BINAURAL_CONVBANDS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_CONVBANDS)" );
}
hrtf_data_rptr += sizeof( uint16_t );
#endif
if ( FOA_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (FOA_CHANNELS)" );
......@@ -1136,11 +1619,23 @@ static ivas_error create_fastconv_HRTF_from_rawdata(
}
}
/* BRIR */
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
else if ( rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV_ROOM && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
#else
else if ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
#endif
{
( *hHRTF )->FASTCONV_BRIR_latency_s = *( (float *) ( hrtf_data_rptr ) );
hrtf_data_rptr += sizeof( float );
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( BINAURAL_CONVBANDS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_CONVBANDS)" );
}
hrtf_data_rptr += sizeof( uint16_t );
#endif
if ( HRTF_LS_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_LS_CHANNELS)" );
......@@ -1222,6 +1717,9 @@ ivas_error load_fastconv_HRTF_from_binary(
ivas_error header_check_result;
ivas_hrtfs_file_header_t hrtfs_file_header;
int16_t hrtf_id;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
int16_t asFastconv = 0;
#endif
f_hrtf = hrtfReader->file;
......@@ -1253,7 +1751,12 @@ ivas_error load_fastconv_HRTF_from_binary(
free( hrtf_data );
return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "HRTF binary file not compliant (number of HRTF)" );
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( ( hrtf_header.rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV ) || ( hrtf_header.rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV_ROOM ) )
#else
if ( ( hrtf_header.rend_type == RENDERER_BINAURAL_FASTCONV ) || ( hrtf_header.rend_type == RENDERER_BINAURAL_FASTCONV_ROOM ) )
#endif
{
if ( fread( hrtf_data, 1, hrtf_header.data_size, f_hrtf ) != hrtf_header.data_size )
{
......@@ -1267,6 +1770,10 @@ ivas_error load_fastconv_HRTF_from_binary(
free( hrtf_data );
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create HRTF from binary file" );
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
asFastconv = 1;
#endif
}
else
{
......@@ -1275,8 +1782,19 @@ ivas_error load_fastconv_HRTF_from_binary(
}
free( hrtf_data );
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( asFastconv )
{
return IVAS_ERR_OK;
}
else
{
return IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA;
}
#else
return IVAS_ERR_OK;
#endif
}
/*---------------------------------------------------------------------*
......@@ -1367,6 +1885,9 @@ ivas_error load_parambin_HRTF_from_binary(
ivas_error header_check_result;
ivas_hrtfs_file_header_t hrtfs_file_header;
int16_t hrtf_id;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
int16_t asParam = 0;
#endif
f_hrtf = hrtfReader->file;
......@@ -1401,7 +1922,11 @@ ivas_error load_parambin_HRTF_from_binary(
return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "HRTF binary file not compliant (number of HRTF)" );
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( hrtf_header.rend_type == HRTF_READER_RENDERER_BINAURAL_PARAMETRIC_ROOM ) /* Parametric binauralizer data is represented as single entity */
#else
if ( hrtf_header.rend_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) /* Parametric binauralizer data is represented as single entity */
#endif
{
if ( fread( hrtf_data, 1, hrtf_header.data_size, f_hrtf ) != hrtf_header.data_size )
{
......@@ -1415,6 +1940,10 @@ ivas_error load_parambin_HRTF_from_binary(
free( hrtf_data );
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create HRTF from binary file" );
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
asParam = 1;
#endif
}
else
{
......@@ -1423,7 +1952,18 @@ ivas_error load_parambin_HRTF_from_binary(
}
free( hrtf_data );
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( asParam )
{
return IVAS_ERR_OK;
}
else
{
return IVAS_ERR_BINARY_FILE_WITHOUT_BINAURAL_RENDERER_DATA;
}
#else
return IVAS_ERR_OK;
#endif
}
......@@ -1477,13 +2017,18 @@ ivas_error create_SetOfHRTF_from_binary(
{
if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK )
{
free( hrtf_data );
return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "HRTF binary file not compliant (number of HRTF)" );
}
hHRTF = NULL;
if ( hrtf_header.frequency == output_Fs )
{
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( hrtf_header.rend_type == HRTF_READER_RENDERER_BINAURAL_MIXER_CONV )
#else
if ( hrtf_header.rend_type == RENDERER_BINAURAL_MIXER_CONV )
#endif
{
if ( hrtf_header.input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
{
......@@ -1502,7 +2047,11 @@ ivas_error create_SetOfHRTF_from_binary(
hHRTF = &( ( *hSetOfHRTF ).hHRTF_hrir_foa );
}
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
else if ( hrtf_header.rend_type == HRTF_READER_RENDERER_BINAURAL_MIXER_CONV_ROOM )
#else
else if ( hrtf_header.rend_type == RENDERER_BINAURAL_MIXER_CONV_ROOM )
#endif
{
if ( hrtf_header.input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
{
......@@ -1513,6 +2062,7 @@ ivas_error create_SetOfHRTF_from_binary(
if ( fread( hrtf_data, 1, hrtf_header.data_size, f_hrtf ) != hrtf_header.data_size )
{
free( hrtf_data );
return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" );
}
......@@ -1521,19 +2071,23 @@ ivas_error create_SetOfHRTF_from_binary(
/* Create the HRTF reading the raw data from the binary file */
if ( ( create_HRTF_from_rawdata( hHRTF, hrtf_data ) ) != IVAS_ERR_OK )
{
free( hrtf_data );
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create HRTF from binary file" );
}
}
}
free( hrtf_data );
if ( ( ( *hSetOfHRTF ).hHRTF_hrir_combined == NULL ) || ( ( *hSetOfHRTF ).hHRTF_brir_combined == NULL ) || ( ( *hSetOfHRTF ).hHRTF_hrir_hoa3 == NULL ) )
#ifndef NONBE_FIX_BINARY_BINAURAL_READING
if ( ( ( *hSetOfHRTF ).hHRTF_hrir_combined == NULL ) || ( ( *hSetOfHRTF ).hHRTF_brir_combined == NULL ) || ( ( *hSetOfHRTF ).hHRTF_hrir_foa == NULL ) || ( ( *hSetOfHRTF ).hHRTF_hrir_hoa2 == NULL ) || ( ( *hSetOfHRTF ).hHRTF_hrir_hoa3 == NULL ) )
{
if ( destroy_SetOfHRTF( hSetOfHRTF ) != IVAS_ERR_OK )
{
return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create all the HRTF from binary file" );
}
}
#endif
return IVAS_ERR_OK;
}
......@@ -1544,13 +2098,21 @@ ivas_error create_SetOfHRTF_from_binary(
* Destroy the HRTF CRend handle
*---------------------------------------------------------------------*/
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
static void destroy_HRTF(
#else
static ivas_error destroy_HRTF(
#endif
HRTFS_HANDLE *hHRTF /* i/o: HRTF CRend handle */
)
{
uint16_t i, j;
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
if ( *hHRTF != NULL && hHRTF != NULL && ( *hHRTF )->init_from_rom == 0 )
#else
if ( *hHRTF != NULL && hHRTF != NULL )
#endif
{
for ( i = 0; i < MAX_INTERN_CHANNELS; i++ )
{
......@@ -1590,15 +2152,74 @@ static ivas_error destroy_HRTF(
*hHRTF = NULL;
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
return;
#else
return IVAS_ERR_OK;
#endif
}
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
/*---------------------------------------------------------------------*
* destroy_SetOfHRTF()
*
* Destroy the HRTF data set.
*---------------------------------------------------------------------*/
void destroy_SetOfHRTF(
HRTFS_CREND_HANDLE *hSetOfHRTF /* i/o: Set of HRTF CRend handle */
)
{
if ( ( hSetOfHRTF != NULL ) && ( *hSetOfHRTF != NULL ) )
{
destroy_HRTF( &( ( *hSetOfHRTF )->hHRTF_hrir_combined ) );
destroy_HRTF( &( ( *hSetOfHRTF )->hHRTF_hrir_hoa3 ) );
destroy_HRTF( &( ( *hSetOfHRTF )->hHRTF_hrir_hoa2 ) );
destroy_HRTF( &( ( *hSetOfHRTF )->hHRTF_hrir_foa ) );
destroy_HRTF( &( ( *hSetOfHRTF )->hHRTF_brir_combined ) );
}
ivas_HRTF_CRend_binary_close( hSetOfHRTF );
return;
}
/*---------------------------------------------------------------------*
* destroy_fastconv_hrtf()
*
* Destroy the HRTF data set.
*---------------------------------------------------------------------*/
void destroy_fastconv_hrtf(
IVAS_DEC_HRTF_FASTCONV_HANDLE *hHrtfFastConv /* i/o: FastConv HRTF handle */
)
{
/* Fastconv HRTF memories */
ivas_binaural_hrtf_close( hHrtfFastConv );
/* Fastconv HRTF filters */
ivas_HRTF_fastconv_binary_close( hHrtfFastConv );
return;
}
/*---------------------------------------------------------------------*
* destroy_parambin_hrtf()
*
* Destroy the HRTF data set.
*---------------------------------------------------------------------*/
void destroy_parambin_hrtf(
IVAS_DEC_HRTF_PARAMBIN_HANDLE *hHrtfParambin /* i/o: Parambin HRTF handle */
)
{
ivas_HRTF_parambin_binary_close( hHrtfParambin );
return;
}
#else
ivas_error destroy_SetOfHRTF(
HRTFS_CREND_HANDLE hSetOfHRTF /* i/o: Set of HRTF CRend handle */
)
......@@ -1614,3 +2235,4 @@ ivas_error destroy_SetOfHRTF(
return IVAS_ERR_OK;
}
#endif
......@@ -35,9 +35,23 @@
#include "common_api_types.h"
typedef struct hrtfFileReader hrtfFileReader;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
typedef enum
{
HRTF_READER_RENDERER_BINAURAL_INVALID,
HRTF_READER_RENDERER_BINAURAL_FASTCONV,
HRTF_READER_RENDERER_BINAURAL_FASTCONV_ROOM,
HRTF_READER_RENDERER_BINAURAL_PARAMETRIC,
HRTF_READER_RENDERER_BINAURAL_PARAMETRIC_ROOM,
HRTF_READER_RENDERER_BINAURAL_OBJECTS_TD,
HRTF_READER_RENDERER_BINAURAL_MIXER_CONV,
HRTF_READER_RENDERER_BINAURAL_MIXER_CONV_ROOM,
HRTF_READER_RENDERER_BINAURAL_REVERB_ALL
} HRTF_READER_RENDERER_TYPE;
#endif
typedef struct ivas_hrtfs_header_t
{
int32_t rend_type;
......@@ -79,6 +93,18 @@ ivas_error load_HRTF_binary(
const hrtfFileReader *hrtfReader /* i/o: pointer to hrtfFileReader handle */
);
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
/*---------------------------------------------------------------------*
* load_reverb_from_binary()
*
* Load reverb binary data into the HRTF handle
*---------------------------------------------------------------------*/
ivas_error load_reverb_binary(
IVAS_DEC_HRTF_HANDLE hHrtf, /* i/o: HRTF handle */
const hrtfFileReader *hrtfReader /* i/o: pointer to hrtfFileReader handle */
);
#endif
/*---------------------------------------------------------------------*
* create_SetOfHRTF_from_binary()
*
......@@ -91,16 +117,21 @@ ivas_error create_SetOfHRTF_from_binary(
int32_t output_Fs /* i : Output sampling frequency */
);
/*---------------------------------------------------------------------*
* destroy_SetOfHRTF()
*
* Destroy the HRTF data set.
*---------------------------------------------------------------------*/
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
void destroy_SetOfHRTF(
IVAS_DEC_HRTF_CREND_HANDLE *hSetOfHRTF /* i/o: Set of HRTF CRend handle */
);
#else
ivas_error destroy_SetOfHRTF(
IVAS_DEC_HRTF_CREND_HANDLE hSetOfHRTF /* i/o: Set of HRTF CRend handle */
);
#endif
/*---------------------------------------------------------------------*
......@@ -114,6 +145,17 @@ ivas_error load_fastconv_HRTF_from_binary(
const hrtfFileReader *hrtfReader /* i : pointer to hrtfFileReader handle */
);
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
/*---------------------------------------------------------------------*
* destroy_fastconv_hrtf()
*
* free memory allocated for FastConv HRTF binary data into the handle
*---------------------------------------------------------------------*/
void destroy_fastconv_hrtf(
IVAS_DEC_HRTF_FASTCONV_HANDLE *hHrtfFastConv /* i/o: FastConv HRTF handle */
);
#endif
/*---------------------------------------------------------------------*
* load_parambin_HRTF_from_binary()
......@@ -127,6 +169,28 @@ ivas_error load_parambin_HRTF_from_binary(
);
#ifdef NONBE_FIX_BINARY_BINAURAL_READING
/*---------------------------------------------------------------------*
* destroy_parambin_hrtf()
*
* free memory allocated for Parambin HRTF binary data into the handle
*---------------------------------------------------------------------*/
void destroy_parambin_hrtf(
IVAS_DEC_HRTF_PARAMBIN_HANDLE *hHrtfParambin /* i/o: Parambin HRTF handle */
);
/*---------------------------------------------------------------------*
* destroy_td_hrtf()
*
* Destroy the HRTF TD handle
*---------------------------------------------------------------------*/
void destroy_td_hrtf(
IVAS_DEC_HRTF_HANDLE *hHRTF /* i/o: HRTF handle */
);
#else
/*---------------------------------------------------------------------*
* dealloc_HRTF_binary()
*
......@@ -137,4 +201,5 @@ ivas_error dealloc_HRTF_binary(
IVAS_DEC_HRTF_HANDLE hHrtf /* i/o: HRTF handle */
);
#endif
#endif /* IVAS_HRTF_FILE_READER_H */
......@@ -435,7 +435,7 @@ static ivas_error read_bin_bits(
*pTarget = 0;
for ( n = 0; n < nBits; n++ )
{
nByte = ( this->readOffset + n ) >> 3;
nByte = (uint32_t) ( ( this->readOffset + n ) >> 3 );
bit = this->pBitstream[nByte] >> ( 7 - ( ( this->readOffset + n ) % 8 ) ) & 1;
*pTarget = ( *pTarget << 1 ) + bit;
}
......
......@@ -298,7 +298,11 @@ ivas_error split_rend_read_bits_from_file(
return IVAS_ERR_FAILED_FILE_READ;
}
#ifdef FIX_WARNING_SPLIT_RENDER
header_len = (int32_t) strlen( header );
#else
header_len = strlen( header );
#endif
/* read frame header */
for ( i = 0; i < header_len; i++ )
......
......@@ -91,6 +91,10 @@ class IvasBuildAndRunChecks(IvasScriptsCommon.IvasScript):
self.parser.add_argument(
"--rebuild", help="force a rebuild of the binaries", action="store_true"
)
self.parser.add_argument(
"--usan_supp_file", help="suppression file for undef behaviour sanitizer",
default=None,
)
def run(self):
......@@ -116,6 +120,11 @@ class IvasBuildAndRunChecks(IvasScriptsCommon.IvasScript):
else:
checks = self.args["checks"]
usan_supp_file = None
# need to convert to abs path as runtime dir will be different from calling dir
if self.args["usan_supp_file"] is not None:
usan_supp_file = os.path.abspath(self.args["usan_supp_file"])
if self.args["svn"]:
br = IvasBuilderAndRunner.fromSvn(
self.args["svn"],
......@@ -157,6 +166,7 @@ class IvasBuildAndRunChecks(IvasScriptsCommon.IvasScript):
format_select_list=modes,
formats_fname=self.args["format_file"],
max_workers=self.args["max_workers"],
usan_supp_file=usan_supp_file,
)
IvasScriptsCommon.runner_setup(
br.build_and_run_dict[check]["runner"], self.args
......@@ -168,8 +178,10 @@ class IvasBuildAndRunChecks(IvasScriptsCommon.IvasScript):
if self.args["rebuild"] == True:
br.force_build = True
checks_ret_val = list()
for check in checks:
br.run(check)
ret_val = br.run(check)
checks_ret_val.append(ret_val)
if self.args["create_html_output"]:
cmd = ["git", "rev-parse", "HEAD"]
commit_hash = subprocess.run(cmd, capture_output=True).stdout.decode("utf8")
......@@ -194,11 +206,11 @@ class IvasBuildAndRunChecks(IvasScriptsCommon.IvasScript):
)
returncode = 0
for check in checks:
for check, ret_val in zip(checks, checks_ret_val):
runner = br.build_and_run_dict[check]["runner"]
failed_encs = runner.failed_modes["enc"]
failed_decs = runner.failed_modes["dec"]
if len(failed_encs) > 0 or len(failed_decs) > 0:
if len(failed_encs) > 0 or len(failed_decs) > 0 or ret_val != 0:
returncode = RET_CODE_FAILURE
return returncode
......
......@@ -33,40 +33,52 @@
import argparse
import concurrent.futures
import os
import pathlib
import re
import shutil
import subprocess
import sys
import threading
from itertools import repeat
from pyaudio3dtools.audiofile import readfile
from pyaudio3dtools.audioarray import compare
FILES_EQUAL = "File A = File B"
SNR_EXPR = r"SNR\s+=(.+)dB\s*\(File B Gain = (.+)\)"
SNR_EXPR = r"SNR\s+=(.+)dB\s*\(.+= (.+)\)"
SEG_SNR_EXPR = r"Seg. SNR\s+=(.+)dB"
DIFF_EXPR = r"Max Diff\s+=\s+(\d+)"
DIFF_STR = {
"CompAudio": "{label} Max. diff (PCM) for file {f}: {diff}",
"mld": "{label} MLD diff for file {f}: {diff}",
}
def main(args):
if shutil.which("CompAudio") is None:
print("CompAudio not in PATH - abort.")
tool = args.tool
if shutil.which(tool) is None:
print(f"{tool} not in PATH - abort.")
sys.exit(-1)
num_files_diff = 0
with OutFileManager(args.out_file) as out_file:
if args.diffs_only:
print("Only printing differing files!", file=out_file)
print("Only printing differing files!")
fol1, fol2 = os.path.normpath(args.folder1), os.path.normpath(args.folder2)
common_files = get_common_files(fol1, fol2)
diff_files = get_diff_files(fol1, fol2)
num_files_diff = len(diff_files)
print(f"Comparing {len(common_files)} files...", file=out_file)
print(f"Comparing {len(common_files)} files...")
outputs = dict()
if args.num_threads > 1:
if args.num_threads == 1:
# if only one thread is passed, do everything in the main thread
# to allow for meaningful debugging if needed
for f in common_files:
compare_files(f, fol1, fol2, outputs, tool)
else:
with concurrent.futures.ThreadPoolExecutor(
max_workers=args.num_threads
) as exc:
......@@ -76,20 +88,26 @@ def main(args):
repeat(fol1),
repeat(fol2),
repeat(outputs),
repeat(tool),
)
else:
# if only one thread is passed, do everything in the main thread
# to allow for meaningful debugging if needed
for f in common_files:
compare_files(f, fol1, fol2, outputs)
if args.sort:
out = dict(sorted(outputs.items(), key=lambda item: item[1]))
else:
out = outputs
for f, output_tuple in out.items():
diff, snr, gain, seg_snr = output_tuple
# write csv header
if out_file is not None:
if tool == "CompAudio":
out_file.write("filename,diff\n")
elif tool == "mld":
out_file.write("filename,mld\n")
for f, tool_output in out.items():
if tool == "CompAudio":
diff, snr, gain, seg_snr = tool_output
elif tool == "mld":
diff = tool_output
if diff > 0:
num_files_diff = num_files_diff + 1
......@@ -99,38 +117,47 @@ def main(args):
label = "[OKAY]"
else:
label = "[FAIL]"
result = f"{label} Max. diff (PCM) for file {f}: {diff}"
result = DIFF_STR[tool].format(label=label, f=f, diff=diff)
if args.verbose and diff != 0.0:
if tool == "CompAudio" and args.verbose and diff != 0.0:
result += f", SNR = {snr:4.2f} dB (File 2 Gain = {gain:4.3f})"
result += f", Seg. SNR = {seg_snr:4.2f} dB"
print(result, file=out_file)
print(result)
if out_file is not None:
out_file.write(f"{f},{diff}\n")
if num_files_diff > 0:
print(f"{num_files_diff} files differ/don't exist", file=out_file)
print(f"{num_files_diff} files differ/don't exist")
else:
print(f"All files are bitexact", file=out_file)
print(f"All files are bitexact")
def compare_files(f, fol1, fol2, outputs_dict):
def compare_files(f, fol1, fol2, outputs_dict, tool):
"""
Compare file f in both folders fol1 and fol2 using CompAudio and
Compare file f in both folders fol1 and fol2 using the given tool and
store the parsed difference in outputs_dict.
"""
f1 = os.path.join(fol1, f)
f2 = os.path.join(fol2, f)
cmd = f"CompAudio {f1} {f2}"
if tool == "CompAudio":
cmd = f"{tool} {f1} {f2}"
try:
output = subprocess.check_output(cmd.split(" "))
except subprocess.CalledProcessError:
print("CompAudio returned a non-zero exit status. Check your files.")
print(f"{tool} returned a non-zero exit status. Check your files.")
sys.exit(-1)
output_tuple = _parse_comp_audio(output)
tool_output = _parse_comp_audio(output)
elif tool == "mld":
s1, fs1 = readfile(f1, outdtype="int16")
s2, fs2 = readfile(f2, outdtype="int16")
cmp_result = compare(s1, s2, fs1, per_frame=False, get_mld=True)
tool_output = cmp_result["MLD"]
with threading.Lock():
outputs_dict.update({f: output_tuple})
outputs_dict.update({f: tool_output})
def get_common_files(fol1, fol2):
......@@ -220,7 +247,6 @@ class OutFileManager:
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Compare .wav files in two folders using CompAudio"
)
......@@ -251,10 +277,16 @@ if __name__ == "__main__":
"--out_file",
type=str,
default=None,
help="If given, write output diffs to this file",
help="If given, write output diffs to this file as comma-separated values (csv)",
)
parser.add_argument(
"-t", "--num_threads", type=int, default=None, help="Number of threads to use"
)
parser.add_argument(
"-t", "--num_threads", type=int, default=1, help="Number of threads to use"
"--tool",
choices=["mld", "CompAudio"],
default="CompAudio",
help="Compare tool to run",
)
args = parser.parse_args()
......
......@@ -31,7 +31,7 @@
# Allows to convert SOFA file(s) to rom tables files (*.c|h) or binaural binary file(s)
## Requirements
- MATLAB >= R2020b
- MATLAB >= R2017b
- Signal Processing Toolbox
- C/C++ compiler
- Linux (Ubuntu) :
......@@ -89,7 +89,7 @@
- [`td_object_renderer`](../../scripts/td_object_renderer)
- See [`README.md`](../../scripts/td_object_renderer/modeling_tool/README.md) in the folder.
- Generate part of the ROM files [`ivas_rom_TdBinauralRenderer.h`](../../lib_rend/ivas_rom_TdBinauralRenderer.h), [`ivas_rom_TdBinauralRenderer.c`](../../lib_rend/ivas_rom_TdBinauralRenderer.c), and TD renderer binary file.
- **Warning**: The computed values depend on MATLAB and OS versions used. IVAS tests are still BE.
- **Warning**: The "fastconvReverberationTimes" computed values depend on MATLAB and OS versions used. Current values are computed with matlab 2017b on windows as mentioned in the rom file.
### SOFA files:
- HRIRs sofa files for testing are stored in [`HRIRs_sofa`](HRIRs_sofa) folder
......@@ -117,13 +117,3 @@ See [`scripts/ThirdPartyLegalNotices`](../../scripts/ThirdPartyLegalNotices) for
- `ivas_binaural_mixconv_hrir_*kHz.bin`: file containing tables values for IVAS mixer conv binaural renderer for HRIR for one sample rate.
- `ivas_binaural_mixconv_brir_*kHz.bin`: file containing tables values for IVAS mixer conv binaural renderer for BRIR for one sample rate.
- Without MATLAB only binary files for mixer conv renderer BRIR can be generated.
- Run, for example, to use IVAS renderer as a BRIR convolver run successively:
```shell
./generate_crend_ivas_tables -lib_rend_path ./ -brir_optim_config_path ./brir_no_optim.cfg -binary_files_path ./binaural_renderers_hrtf_data -binary_common_file_name IIS_BRIR_officialMPEG_Combined_no_optim 5 ./BRIRs_sofa/IIS_BRIR_officialMPEG_Combined.sofa
./tables_format_converter -output_file_path ../binaural_renderers_hrtf_data -output_file_name brir_no_optim -input_mixerconv_brir_file_path ../binaural_renderers_hrtf_data -input_mixerconv_brir_file_name IIS_BRIR_officialMPEG_Combined_no_optim
```
and then to complete, the `IVAS_rend` command line
```shell
IVAS_rend -hrtf ./scripts/binaurelRenderer_interface/binaural_renderers_hrtf_data/brir_no_optim_48kHz.bin ...
```
......@@ -27,8 +27,7 @@ set(SOURCE_FILES_C
${IVAS_REND_PATH}/ivas_rom_binauralRenderer.c
${IVAS_REND_PATH}/ivas_rom_binaural_crend_head.c
${IVAS_REND_PATH}/ivas_rom_rend.c
${IVAS_UTIL_PATH}/cmdl_tools.c
)
${IVAS_UTIL_PATH}/cmdl_tools.c)
set(SOURCE_FILES_H
${IVAS_REND_PATH}/ivas_rom_binauralRenderer.h
......
......@@ -57,11 +57,26 @@
#define DEFAULT_BIN_FILE_EXT ".bin"
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
#define IVAS_NB_RENDERER_TYPE 7
#else
#define IVAS_NB_RENDERER_TYPE 6
#endif
#define IVAS_NB_AUDIO_CONFIG 4
#define IVAS_NB_SAMPLERATE 3
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
const HRTF_READER_RENDERER_TYPE rend_types[IVAS_NB_RENDERER_TYPE] = {
HRTF_READER_RENDERER_BINAURAL_FASTCONV,
HRTF_READER_RENDERER_BINAURAL_FASTCONV_ROOM,
HRTF_READER_RENDERER_BINAURAL_PARAMETRIC,
HRTF_READER_RENDERER_BINAURAL_MIXER_CONV,
HRTF_READER_RENDERER_BINAURAL_MIXER_CONV_ROOM,
HRTF_READER_RENDERER_BINAURAL_OBJECTS_TD,
HRTF_READER_RENDERER_BINAURAL_REVERB_ALL
};
#else
const RENDERER_TYPE rend_types[IVAS_NB_RENDERER_TYPE] = {
RENDERER_BINAURAL_FASTCONV,
RENDERER_BINAURAL_FASTCONV_ROOM,
......@@ -70,6 +85,7 @@ const RENDERER_TYPE rend_types[IVAS_NB_RENDERER_TYPE] = {
RENDERER_BINAURAL_MIXER_CONV_ROOM,
RENDERER_BINAURAL_OBJECTS_TD
};
#endif
const BINAURAL_INPUT_AUDIO_CONFIG input_cfgs[IVAS_NB_AUDIO_CONFIG] = {
BINAURAL_INPUT_AUDIO_CONFIG_COMBINED,
......@@ -125,16 +141,31 @@ void rom2bin_terminat( void );
char *to_upper( char *str );
void convert_backslash( char *str );
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
char *create_reverb( int32_t frequency, int32_t *hrtf_size );
#endif
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
char *create_hrtf_crend( HRTF_READER_RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, int32_t *hrtf_size /*OUT*/ );
char *create_hrtf_fastconv( HRTF_READER_RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t *hrtf_size );
#else
char *create_hrtf_crend( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, int32_t *hrtf_size /*OUT*/ );
char *create_hrtf_fastconv( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t *hrtf_size );
#endif
char *create_hrtf_parametric( int32_t *hrtf_size );
char *create_hrtf_tdrend( int32_t frequency, int32_t *hrtf_size /*OUT*/ );
int32_t read_hrtf_size( char *hrtf );
int16_t check_bin_file( FILE *hrtf_bin_file );
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
int16_t check_hrtf_data( HRTF_READER_RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, char *hrtf_data_in, int32_t hrtf_size_in );
/*---------------------------------------------------------------------*/
int16_t get_crend_hrtf_tables( HRTF_READER_RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, crend_hrtf_tables_pointers *hrtf_table_ptrs /*OUT*/, crend_hrtf_tables_dimensions *hrtf_table_dims /*OUT*/ );
#else
int16_t check_hrtf_data( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, char *hrtf_data_in, int32_t hrtf_size_in );
/*---------------------------------------------------------------------*/
int16_t get_crend_hrtf_tables( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, crend_hrtf_tables_pointers *hrtf_table_ptrs /*OUT*/, crend_hrtf_tables_dimensions *hrtf_table_dims /*OUT*/ );
#endif
int32_t compute_crend_hrtf_data_size( crend_hrtf_tables_pointers *hrtf_table_ptrs, crend_hrtf_tables_dimensions *hrtf_table_dims );
/*---------------------------------------------------------------------*
......@@ -161,6 +192,10 @@ void usage_tables_format_converter( void )
"-48 : Select 48 kHz sampling frequency (no multiple values, all frequencies by default).\n" );
fprintf( stdout, "-input_td_file_path : if exist path of binary files for time-domain renderer.\n" );
fprintf( stdout, "-input_td_file_name : if exist common name of input td file with extension.\n" );
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
fprintf( stdout, "-input_reverb_file_path : if exist path of binary files for reverb.\n" );
fprintf( stdout, "-input_reverb_file_name : if exist name of input reverb file with extension.\n" );
#endif
fprintf( stdout, "-input_fastconv_file_path : if exist path of binary file for fastconv renderer.\n" );
fprintf( stdout, "-input_fastconv_file_name : if exist name of input fastconv file with extension.\n" );
fprintf( stdout, "-input_param_file_path : if exist path of binary file for parametric renderer.\n" );
......@@ -200,6 +235,10 @@ char *input_mixerconv_bin_hrir_path = NULL;
char *input_mixerconv_bin_brir_path = NULL;
char *input_mixerconv_bin_hrir_file_name = NULL;
char *input_mixerconv_bin_brir_file_name = NULL;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
char *input_reverb_file_path = NULL;
char *input_reverb_file_name = NULL;
#endif
int16_t nb_freq = IVAS_NB_SAMPLERATE;
const int32_t *freq_ptr = sample_rates;
......@@ -249,6 +288,12 @@ int main( int argc, char *argv[] )
{
nbHRTFMax += IVAS_NB_SAMPLERATE;
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( input_reverb_file_name != NULL )
{
nbHRTFMax += IVAS_NB_SAMPLERATE;
}
#endif
startFreq = 0;
if ( selected_frequency != 0 )
......@@ -304,7 +349,11 @@ int main( int argc, char *argv[] )
hrtf_size = 0;
switch ( rend_types[i] )
{
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
case HRTF_READER_RENDERER_BINAURAL_FASTCONV:
#else
case RENDERER_BINAURAL_FASTCONV:
#endif
if ( ( input_fastconv_bin_path != NULL ) && ( input_fastconv_bin_file_name != NULL ) )
{
for ( j = 0; j < IVAS_NB_AUDIO_CONFIG; j++ )
......@@ -335,7 +384,11 @@ int main( int argc, char *argv[] )
}
}
break;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
case HRTF_READER_RENDERER_BINAURAL_FASTCONV_ROOM:
#else
case RENDERER_BINAURAL_FASTCONV_ROOM:
#endif
if ( ( input_fastconv_bin_path != NULL ) && ( input_fastconv_bin_file_name != NULL ) )
{
/* Only one freq. for fastconv */
......@@ -363,7 +416,11 @@ int main( int argc, char *argv[] )
}
}
break;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
case HRTF_READER_RENDERER_BINAURAL_PARAMETRIC:
#else
case RENDERER_BINAURAL_PARAMETRIC:
#endif
/* Parametric will always have just one set regardless of input and frequency. */
if ( ( input_param_bin_path != NULL ) && ( input_param_bin_file_name != NULL ) )
{
......@@ -391,7 +448,11 @@ int main( int argc, char *argv[] )
}
}
break;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
case HRTF_READER_RENDERER_BINAURAL_MIXER_CONV:
#else
case RENDERER_BINAURAL_MIXER_CONV:
#endif
if ( ( input_mixerconv_bin_hrir_path != NULL ) && ( input_mixerconv_bin_hrir_file_name != NULL ) )
{
int start_nbHRTF = nbHRTF;
......@@ -422,7 +483,11 @@ int main( int argc, char *argv[] )
}
}
break;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
case HRTF_READER_RENDERER_BINAURAL_MIXER_CONV_ROOM:
#else
case RENDERER_BINAURAL_MIXER_CONV_ROOM:
#endif
if ( ( input_mixerconv_bin_brir_path != NULL ) && ( input_mixerconv_bin_brir_file_name != NULL ) )
{
setOfHRTF[nbHRTF] = create_hrtf_crend( rend_types[i], BINAURAL_INPUT_AUDIO_CONFIG_COMBINED, freq_ptr[k], &hrtf_size );
......@@ -450,7 +515,11 @@ int main( int argc, char *argv[] )
}
}
break;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
case HRTF_READER_RENDERER_BINAURAL_OBJECTS_TD:
#else
case RENDERER_BINAURAL_OBJECTS_TD:
#endif
if ( ( input_td_bin_path != NULL ) && ( input_td_bin_file_name != NULL ) )
{
setOfHRTF[nbHRTF] = create_hrtf_tdrend( freq_ptr[k], &hrtf_size );
......@@ -477,6 +546,35 @@ int main( int argc, char *argv[] )
}
}
break;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
case HRTF_READER_RENDERER_BINAURAL_REVERB_ALL:
if ( ( input_reverb_file_path != NULL ) && ( input_reverb_file_name != NULL ) )
{
setOfHRTF[nbHRTF] = create_reverb( freq_ptr[k], &hrtf_size );
if ( hrtf_size == -1 )
{
fprintf( stderr, "Creation of reverb (%d) failed!\n\n", freq_ptr[k] );
for ( l = 0; l < nbHRTF; l++ )
{
free( setOfHRTF[l] );
}
free( setOfHRTF );
rom2bin_terminat();
return -1;
}
else
{
if ( setOfHRTF[nbHRTF] != NULL )
{
nbHRTF++;
fileSize += hrtf_size;
if ( hrtf_size_max < hrtf_size )
hrtf_size_max = hrtf_size;
}
}
}
break;
#endif
default:
break;
}
......@@ -572,7 +670,11 @@ int main( int argc, char *argv[] )
* create_hrtf_crend()
*
*---------------------------------------------------------------------*/
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
char *create_hrtf_crend( HRTF_READER_RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, int32_t *hrtf_size )
#else
char *create_hrtf_crend( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, int32_t *hrtf_size )
#endif
{
int32_t mixerconv_hrtf_header_size, mixerconv_hrtf_data_size;
char *mixerconv_hrtf = NULL, *mixerconv_hrtf_wptr;
......@@ -586,7 +688,11 @@ char *create_hrtf_crend( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG in
char *configuration_name = "";
// Example : ivas_hrfilters_mixerconv_Combined_HRIR_48kHz.bin
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( rend_type == HRTF_READER_RENDERER_BINAURAL_MIXER_CONV )
#else
if ( rend_type == RENDERER_BINAURAL_MIXER_CONV )
#endif
{
if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
{
......@@ -611,7 +717,11 @@ char *create_hrtf_crend( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG in
sprintf( full_in_mixerconv_path, "%s/%s_%s_%dkHz%s", input_mixerconv_bin_hrir_path, input_mixerconv_bin_hrir_file_name, configuration_name, frequency / 1000, DEFAULT_BIN_FILE_EXT );
#endif
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
else if ( rend_type == HRTF_READER_RENDERER_BINAURAL_MIXER_CONV_ROOM )
#else
else if ( rend_type == RENDERER_BINAURAL_MIXER_CONV_ROOM )
#endif
{
if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
{
......@@ -722,9 +832,11 @@ char *create_hrtf_tdrend( int32_t frequency, int32_t *hrtf_size )
char *td_hrtf = NULL, *td_hrtf_wptr, *full_in_td_path = NULL;
// left/right and coherences for late reverb table sizes
#ifndef FIX_638_ENERGIE_IAC_ROM_TABLES
int32_t td_hrtf_coh_and_ener_size;
int32_t data_size_tmp;
int32_t td_hrtf_data_size_new;
#endif
*hrtf_size = 0;
......@@ -758,9 +870,13 @@ char *create_hrtf_tdrend( int32_t frequency, int32_t *hrtf_size )
// Raw data size (4 bytes)
td_hrtf_header_size = sizeof( int32_t ) + sizeof( int32_t ) + sizeof( int32_t ) + sizeof( uint32_t );
#ifndef FIX_638_ENERGIE_IAC_ROM_TABLES
td_hrtf_coh_and_ener_size = sizeof( float ) * 3 * LR_IAC_LENGTH_NR_FC;
td_hrtf_data_size_new = td_hrtf_data_size + td_hrtf_coh_and_ener_size;
*hrtf_size = td_hrtf_header_size + td_hrtf_data_size_new;
#else
*hrtf_size = td_hrtf_header_size + td_hrtf_data_size;
#endif
td_hrtf = (char *) malloc( *hrtf_size );
if ( td_hrtf == NULL )
......@@ -779,7 +895,11 @@ char *create_hrtf_tdrend( int32_t frequency, int32_t *hrtf_size )
// Get the HRTF header
// Renderer type
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
*( (int32_t *) ( td_hrtf_wptr ) ) = HRTF_READER_RENDERER_BINAURAL_OBJECTS_TD;
#else
*( (int32_t *) ( td_hrtf_wptr ) ) = RENDERER_BINAURAL_OBJECTS_TD;
#endif
td_hrtf_wptr += sizeof( int32_t );
// Decoder output format
......@@ -791,7 +911,11 @@ char *create_hrtf_tdrend( int32_t frequency, int32_t *hrtf_size )
td_hrtf_wptr += sizeof( int32_t );
// Raw data size
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
memcpy( td_hrtf_wptr, &( td_hrtf_data_size ), sizeof( uint32_t ) );
#else
memcpy( td_hrtf_wptr, &( td_hrtf_data_size_new ), sizeof( uint32_t ) );
#endif
td_hrtf_wptr += sizeof( uint32_t );
// Get the HRTF raw data
......@@ -809,6 +933,7 @@ char *create_hrtf_tdrend( int32_t frequency, int32_t *hrtf_size )
}
td_hrtf_wptr += td_hrtf_data_size;
#ifndef FIX_638_ENERGIE_IAC_ROM_TABLES
// Left/right and coherence late reverb tables
data_size_tmp = sizeof( float ) * LR_IAC_LENGTH_NR_FC;
if ( frequency == 48000 )
......@@ -838,6 +963,7 @@ char *create_hrtf_tdrend( int32_t frequency, int32_t *hrtf_size )
memcpy( td_hrtf_wptr, &( defaultHRIR_coherence_16kHz ), data_size_tmp );
td_hrtf_wptr += data_size_tmp;
}
#endif
fclose( input_td_bin_file );
input_td_bin_file = NULL;
}
......@@ -853,11 +979,123 @@ char *create_hrtf_tdrend( int32_t frequency, int32_t *hrtf_size )
return td_hrtf;
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
/*---------------------------------------------------------------------*
* create_reverb()
*
*---------------------------------------------------------------------*/
char *create_reverb( int32_t frequency, int32_t *hrtf_size )
{
FILE *input_reverb_file = NULL;
int32_t reverb_header_size, reverb_data_size;
char *reverb = NULL, *reverb_wptr, *full_in_reverb_path = NULL;
*hrtf_size = 0;
full_in_reverb_path = (char *) malloc( sizeof( char ) * ( strlen( input_reverb_file_path ) + 1 + strlen( input_reverb_file_name ) + 1 + strlen( "Reverb" ) + 1 + 5 + strlen( DEFAULT_BIN_FILE_EXT ) + 1 ) );
if ( full_in_reverb_path == NULL )
{
fprintf( stderr, "Memory issue for full input td path!\n\n" );
rom2bin_terminat();
return NULL;
}
#ifdef _WIN32
sprintf( full_in_reverb_path, "%s\\%s_%s_%dkHz%s", input_reverb_file_path, input_reverb_file_name, "Reverb", frequency / 1000, DEFAULT_BIN_FILE_EXT );
#else
sprintf( full_in_reverb_path, "%s/%s_%s_%dkHz%s", input_reverb_file_path, input_reverb_file_name, "Reverb", frequency / 1000, DEFAULT_BIN_FILE_EXT );
#endif
input_reverb_file = fopen( full_in_reverb_path, "rb" );
if ( input_reverb_file != NULL )
{
fseek( input_reverb_file, 0, SEEK_END );
reverb_data_size = ftell( input_reverb_file );
fseek( input_reverb_file, 0, SEEK_SET );
// Header [Declaration of the HRTF]
// Renderer type (4 bytes) : See "RENDERER_TYPE"
// Decoder output format (4 bytes) : See "BINAURAL_INPUT_AUDIO_CONFIG"
// Sampling Frequency (4 bytes)
// Raw data size (4 bytes)
reverb_header_size = sizeof( int32_t ) + sizeof( int32_t ) + sizeof( int32_t ) + sizeof( uint32_t );
*hrtf_size = reverb_data_size + reverb_header_size;
reverb = (char *) malloc( *hrtf_size );
if ( reverb == NULL )
{
fprintf( stderr, "Memory allocation for the block failed!\n\n" );
fclose( input_reverb_file );
*hrtf_size = -1;
free( input_reverb_file );
full_in_reverb_path = NULL;
return NULL;
}
memset( reverb, 0x00, *hrtf_size );
reverb_wptr = reverb;
// Get the HRTF header
// Renderer type
*( (int32_t *) ( reverb_wptr ) ) = HRTF_READER_RENDERER_BINAURAL_REVERB_ALL;
reverb_wptr += sizeof( int32_t );
// Decoder output format
*( (int32_t *) ( reverb_wptr ) ) = BINAURAL_INPUT_AUDIO_CONFIG_UNDEFINED;
reverb_wptr += sizeof( int32_t );
// Sampling Frequency
memcpy( reverb_wptr, &( frequency ), sizeof( int32_t ) );
reverb_wptr += sizeof( int32_t );
// Raw data size
memcpy( reverb_wptr, &( reverb_data_size ), sizeof( uint32_t ) );
reverb_wptr += sizeof( uint32_t );
// Get the HRTF raw data
if ( fread( reverb_wptr, reverb_data_size, 1, input_reverb_file ) != 1 )
{
fprintf( stderr, "Reading of the td hrtf failed!\n\n" );
fclose( input_reverb_file );
free( input_reverb_file );
full_in_reverb_path = NULL;
free( reverb );
free( full_in_reverb_path );
full_in_reverb_path = NULL;
*hrtf_size = -1;
return NULL;
}
fclose( input_reverb_file );
input_reverb_file = NULL;
}
else
{
fprintf( stderr, "Opening of file %s failed!\n\n", full_in_reverb_path );
*hrtf_size = -1;
return NULL;
}
free( full_in_reverb_path );
full_in_reverb_path = NULL;
return reverb;
}
#endif
/*---------------------------------------------------------------------*
* create_hrtf_fastconv()
*
*---------------------------------------------------------------------*/
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
char *create_hrtf_fastconv( HRTF_READER_RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t *hrtf_size )
#else
char *create_hrtf_fastconv( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t *hrtf_size )
#endif
{
char *fastconv_hrtf = NULL, *fastconv_hrtf_wptr;
int32_t fastconv_hrtf_data_size;
......@@ -909,7 +1147,11 @@ char *create_hrtf_fastconv( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG
char *full_in_fastconv_path = NULL;
FILE *input_fastconv_bin_file = NULL;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( ( rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV_ROOM ) && ( ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) || ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) || ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) ) )
#else
if ( ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM ) && ( ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) || ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) || ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) ) )
#endif
{
/* No FOA, HOA2, HOA3 BRIRs */
return NULL;
......@@ -1238,7 +1480,11 @@ char *create_hrtf_parametric( int32_t *hrtf_size )
hrtf_wptr = hrtf;
// Renderer type - we use only parametric room type here to cover both cases
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
*( (int32_t *) ( hrtf_wptr ) ) = HRTF_READER_RENDERER_BINAURAL_PARAMETRIC_ROOM;
#else
*( (int32_t *) ( hrtf_wptr ) ) = RENDERER_BINAURAL_PARAMETRIC_ROOM;
#endif
hrtf_wptr += sizeof( int32_t );
// Decoder output format - not relevant parametric binaural renderer
......@@ -1324,7 +1570,11 @@ char *create_hrtf_parametric( int32_t *hrtf_size )
* get_crend_hrtf_tables()
*
*---------------------------------------------------------------------*/
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
int16_t get_crend_hrtf_tables( HRTF_READER_RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, crend_hrtf_tables_pointers *hrtf_table_ptrs /*OUT*/, crend_hrtf_tables_dimensions *hrtf_table_dims /*OUT*/ )
#else
int16_t get_crend_hrtf_tables( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, crend_hrtf_tables_pointers *hrtf_table_ptrs /*OUT*/, crend_hrtf_tables_dimensions *hrtf_table_dims /*OUT*/ )
#endif
{
int16_t result = -1;
uint16_t iChan, iIR, iIter, iIndex, max_num_iterations;
......@@ -1336,7 +1586,11 @@ int16_t get_crend_hrtf_tables( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CON
memset( &hrtf_table_ptrs_out, 0x00, sizeof( crend_hrtf_tables_pointers ) );
memset( &hrtf_table_dims_out, 0x00, sizeof( crend_hrtf_tables_dimensions ) );
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( rend_type == HRTF_READER_RENDERER_BINAURAL_MIXER_CONV )
#else
if ( rend_type == RENDERER_BINAURAL_MIXER_CONV )
#endif
{
if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
{
......@@ -1578,7 +1832,11 @@ int16_t get_crend_hrtf_tables( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CON
hrtf_table_dims_out.max_num_ir = 4;
}
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
else if ( rend_type == HRTF_READER_RENDERER_BINAURAL_MIXER_CONV_ROOM )
#else
else if ( rend_type == RENDERER_BINAURAL_MIXER_CONV_ROOM )
#endif
{
if ( input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED )
{
......@@ -1768,7 +2026,11 @@ int32_t compute_crend_hrtf_data_size( crend_hrtf_tables_pointers *hrtf_table_ptr
}
hrtf_data_size += sizeof( uint16_t ); // index_frequency_max_diffuse
#ifdef FIX_INV_DIFFUSE_WEIGHT
hrtf_data_size += hrtf_table_dims->max_num_ir * BINAURAL_CHANNELS * sizeof( float ); // inv_diffuse_weight
#else
hrtf_data_size += hrtf_table_dims->max_num_ir * sizeof( float ); // inv_diffuse_weight
#endif
hrtf_data_size += sizeof( uint16_t ); // max_total_num_fsamp_per_iteration
// coeff_re & coeff_im : The size depends on pIndex_frequency_max
for ( iIR = 0, iIndex = 0; iIR < hrtf_table_dims->max_num_ir; iIR++ )
......@@ -1917,7 +2179,11 @@ int16_t check_bin_file( FILE *hrtf_bin_file )
*
*---------------------------------------------------------------------*/
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
int16_t check_hrtf_data( HRTF_READER_RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, char *hrtf_data_in, int32_t hrtf_size_in )
#else
int16_t check_hrtf_data( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG input_cfg, int32_t frequency, char *hrtf_data_in, int32_t hrtf_size_in )
#endif
{
int16_t result;
int32_t hrtf_data_size, ctrl_size, iChan, iIR, iIndex, iIter;
......@@ -1927,6 +2193,14 @@ int16_t check_hrtf_data( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG in
crend_hrtf_tables_dimensions tabs_dims;
crend_hrtf_tables_pointers tabs_ptrs;
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
if ( rend_type == HRTF_READER_RENDERER_BINAURAL_OBJECTS_TD || rend_type == HRTF_READER_RENDERER_BINAURAL_REVERB_ALL ||
rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV || rend_type == HRTF_READER_RENDERER_BINAURAL_FASTCONV_ROOM ||
rend_type == HRTF_READER_RENDERER_BINAURAL_PARAMETRIC || rend_type == HRTF_READER_RENDERER_BINAURAL_PARAMETRIC_ROOM )
{
return 0;
}
#else
if ( rend_type == RENDERER_BINAURAL_OBJECTS_TD ||
rend_type == RENDERER_BINAURAL_FASTCONV || rend_type == RENDERER_BINAURAL_FASTCONV_ROOM ||
rend_type == RENDERER_BINAURAL_PARAMETRIC || rend_type == RENDERER_BINAURAL_PARAMETRIC_ROOM )
......@@ -1934,6 +2208,7 @@ int16_t check_hrtf_data( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG in
return 0;
}
#endif
memset( &tabs_dims, 0x00, sizeof( crend_hrtf_tables_dimensions ) );
memset( &tabs_ptrs, 0x00, sizeof( crend_hrtf_tables_pointers ) );
......@@ -2056,7 +2331,11 @@ int16_t check_hrtf_data( RENDERER_TYPE rend_type, BINAURAL_INPUT_AUDIO_CONFIG in
hrtf_data_in_rptr += sizeof( uint16_t );
// inv_diffuse_weight
#ifdef FIX_INV_DIFFUSE_WEIGHT
ctrl_size = tabs_dims.max_num_ir * BINAURAL_CHANNELS * sizeof( float );
#else
ctrl_size = tabs_dims.max_num_ir * sizeof( float );
#endif
if ( memcmp( tabs_ptrs.inv_diffuse_weight, hrtf_data_in_rptr, ctrl_size ) != 0 )
{
fprintf( stderr, "check_hrtf_data of binary file failed: bad inv_diffuse_weight!\n\n" );
......@@ -2337,6 +2616,33 @@ int rom2bin_init( int argc, char *argv[] )
#endif
i++;
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
else if ( strcmp( to_upper( argv[i] ), "-INPUT_REVERB_FILE_PATH" ) == 0 )
{
i++;
if ( strlen( argv[i] ) == 0 )
{
fprintf( stderr, "Wrong input reverb file path: %s\n\n", argv[i] );
usage_tables_format_converter();
return -1;
}
convert_backslash( argv[i] );
input_reverb_file_path = malloc( strlen( argv[i] ) + 1 );
strcpy( input_reverb_file_path, argv[i] );
#ifdef _WIN32
if ( input_reverb_file_path[strlen( input_reverb_file_path ) - 1] == '\\' )
{
input_reverb_file_path[strlen( input_reverb_file_path ) - 1] = '\0';
}
#else
if ( input_reverb_file_path[strlen( input_reverb_file_path ) - 1] == '/' )
{
input_reverb_file_path[strlen( input_reverb_file_path ) - 1] = '\0';
}
#endif
i++;
}
#endif
else if ( strcmp( to_upper( argv[i] ), "-INPUT_MIXERCONV_HRIR_FILE_PATH" ) == 0 )
{
i++;
......@@ -2437,6 +2743,21 @@ int rom2bin_init( int argc, char *argv[] )
#endif
i++;
}
#ifdef FIX_638_ENERGIE_IAC_ROM_TABLES
else if ( strcmp( to_upper( argv[i] ), "-INPUT_REVERB_FILE_NAME" ) == 0 )
{
i++;
if ( strlen( argv[i] ) == 0 )
{
fprintf( stderr, "Wrong input reverb file name: %s\n\n", argv[i] );
usage_tables_format_converter();
return -1;
}
input_reverb_file_name = malloc( strlen( argv[i] ) + 1 );
strcpy( input_reverb_file_name, argv[i] );
i++;
}
#endif
else if ( strcmp( to_upper( argv[i] ), "-INPUT_TD_FILE_NAME" ) == 0 )
{
i++;
......