Skip to content

Commit f65ac0b

Browse files
authored
Merge pull request #75 from GoogleChrome/74-add-HRIR-data-for-soa
Add HRIR data for 2nd-order ambisonics renderering
2 parents 51e50be + 059148a commit f65ac0b

File tree

12 files changed

+175
-86
lines changed

12 files changed

+175
-86
lines changed

build/omnitone.js

Lines changed: 66 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2010,9 +2010,9 @@ const FOAVirtualSpeaker = __webpack_require__(7);
20102010
const HOAConvolver = __webpack_require__(8);
20112011
const HOARenderer = __webpack_require__(16);
20122012
const HOARotator = __webpack_require__(9);
2013-
const Polyfill = __webpack_require__(18);
2013+
const Polyfill = __webpack_require__(19);
20142014
const Utils = __webpack_require__(0);
2015-
const Version = __webpack_require__(19);
2015+
const Version = __webpack_require__(20);
20162016

20172017
// DEPRECATED in V1, in favor of BufferList.
20182018
const AudioBufferManager = __webpack_require__(5);
@@ -2614,33 +2614,36 @@ function FOARenderer(context, config) {
26142614
renderingMode: RenderingMode.AMBISONIC,
26152615
};
26162616

2617-
if (config.channelMap) {
2618-
if (Array.isArray(config.channelMap) && config.channelMap.length === 4) {
2619-
this._config.channelMap = config.channelMap;
2620-
} else {
2621-
Utils.throw(
2622-
'FOARenderer: Invalid channel map. (got ' + config.channelMap + ')');
2617+
if (config) {
2618+
if (config.channelMap) {
2619+
if (Array.isArray(config.channelMap) && config.channelMap.length === 4) {
2620+
this._config.channelMap = config.channelMap;
2621+
} else {
2622+
Utils.throw(
2623+
'FOARenderer: Invalid channel map. (got ' + config.channelMap
2624+
+ ')');
2625+
}
26232626
}
2624-
}
26252627

2626-
if (config.hrirPathList) {
2627-
if (Array.isArray(config.hrirPathList) &&
2628-
config.hrirPathList.length === 2) {
2629-
this._config.pathList = config.hrirPathList;
2630-
} else {
2631-
Utils.throw(
2632-
'FOARenderer: Invalid HRIR URLs. It must be an array with ' +
2633-
'2 URLs to HRIR files. (got ' + config.hrirPathList + ')');
2628+
if (config.hrirPathList) {
2629+
if (Array.isArray(config.hrirPathList) &&
2630+
config.hrirPathList.length === 2) {
2631+
this._config.pathList = config.hrirPathList;
2632+
} else {
2633+
Utils.throw(
2634+
'FOARenderer: Invalid HRIR URLs. It must be an array with ' +
2635+
'2 URLs to HRIR files. (got ' + config.hrirPathList + ')');
2636+
}
26342637
}
2635-
}
26362638

2637-
if (config.renderingMode) {
2638-
if (Object.values(RenderingMode).includes(config.renderingMode)) {
2639-
this._config.renderingMode = config.renderingMode;
2640-
} else {
2641-
Utils.log(
2642-
'FOARenderer: Invalid rendering mode order. (got' +
2643-
config.renderingMode + ') Fallbacks to the mode "ambisonic".');
2639+
if (config.renderingMode) {
2640+
if (Object.values(RenderingMode).includes(config.renderingMode)) {
2641+
this._config.renderingMode = config.renderingMode;
2642+
} else {
2643+
Utils.log(
2644+
'FOARenderer: Invalid rendering mode order. (got' +
2645+
config.renderingMode + ') Fallbacks to the mode "ambisonic".');
2646+
}
26442647
}
26452648
}
26462649

@@ -2667,6 +2670,10 @@ FOARenderer.prototype._buildAudioGraph = function() {
26672670
this._foaRouter.output.connect(this._foaRotator.input);
26682671
this._foaRotator.output.connect(this._foaConvolver.input);
26692672
this._foaConvolver.output.connect(this.output);
2673+
2674+
this.input.channelCount = 4;
2675+
this.input.channelCountMode = 'explicit';
2676+
this.input.channelInterpretation = 'discrete';
26702677
};
26712678

26722679

@@ -2860,6 +2867,7 @@ const BufferList = __webpack_require__(1);
28602867
const HOAConvolver = __webpack_require__(8);
28612868
const HOARotator = __webpack_require__(9);
28622869
const TOAHrirBase64 = __webpack_require__(17);
2870+
const SOAHrirBase64 = __webpack_require__(18);
28632871
const Utils = __webpack_require__(0);
28642872

28652873

@@ -2937,8 +2945,8 @@ function HOARenderer(context, config) {
29372945
this._config.renderingMode = config.renderingMode;
29382946
} else {
29392947
Utils.log(
2940-
'HOARenderer: Invalid rendering mode. (got ' + config.renderingMode +
2941-
') Fallbacks to "ambisonic".');
2948+
'HOARenderer: Invalid rendering mode. (got ' +
2949+
config.renderingMode + ') Fallbacks to "ambisonic".');
29422950
}
29432951
}
29442952

@@ -2963,6 +2971,10 @@ HOARenderer.prototype._buildAudioGraph = function() {
29632971
this.input.connect(this._bypass);
29642972
this._hoaRotator.output.connect(this._hoaConvolver.input);
29652973
this._hoaConvolver.output.connect(this.output);
2974+
2975+
this.input.channelCount = this._config.numberOfChannels;
2976+
this.input.channelCountMode = 'explicit';
2977+
this.input.channelInterpretation = 'discrete';
29662978
};
29672979

29682980

@@ -2973,9 +2985,16 @@ HOARenderer.prototype._buildAudioGraph = function() {
29732985
* @param {function} reject - Rejection handler.
29742986
*/
29752987
HOARenderer.prototype._initializeCallback = function(resolve, reject) {
2976-
const bufferList = this._config.pathList
2977-
? new BufferList(this._context, this._config.pathList, {dataType: 'url'})
2978-
: new BufferList(this._context, TOAHrirBase64);
2988+
let bufferList;
2989+
if (this._config.pathList) {
2990+
bufferList =
2991+
new BufferList(this._context, this._config.pathList, {dataType: 'url'});
2992+
} else {
2993+
bufferList = this._config.ambisonicOrder === 2
2994+
? new BufferList(this._context, SOAHrirBase64)
2995+
: new BufferList(this._context, TOAHrirBase64);
2996+
}
2997+
29792998
bufferList.load().then(
29802999
function(hrirBufferList) {
29813000
this._hoaConvolver.setHRIRBufferList(hrirBufferList);
@@ -3094,6 +3113,21 @@ module.exports = OmnitoneTOAHrirBase64;
30943113

30953114
/***/ }),
30963115
/* 18 */
3116+
/***/ (function(module, exports) {
3117+
3118+
const OmnitoneSOAHrirBase64 = [
3119+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+/wQA8/8ZAPr/DAD+/wMA/v8KAAQA/f8DAAMABADs//z/8v/z/8f/R/90/ob+//zAAWsDAwY3DKn9//tu93DvkwI6An4CuwJ0/BH7VPux92X0Gu7N/EX9mgfqCkkIiRMgBd4NQQGL/c0G/xBxAKELZATUA/sIHRSx+fkCyAUmBNEJIARlAdHz2AjNACcIsAW4AlECsvtJ/P/7K/tf++n8aP4W+g0FXAElAMn8nQHn/sT+Zv7N+9X2xvzM/O3+EvpqBBD7SQLd+vb/sPlw/JD72/3n+Rr+L/wS/vz6UQGg/Nf+Av5L/5X9Gv2//SP+mf3j/lf+v/2B/ZH/5P05/iL9MP9F/uf9UP4v/qv9mv7o/Xn+wP2k/8L+uP5J/tD+Dv/Y/bL+mP72/n3+pP+7/hAA+/5zAGH+Z/+u/g8Azv2y/6L+//9o/iIADP8VACz/CwCN/pb/1v4yAFP+wf+4/jsAcf5VAP3+bADa/nMA6f4sAOT+IQBd/v7/7v6aAIL+QADe/nEA0P4yAKz+CQCo/moAuf5xAN7+mAC8/jcANf9eAPX+IAA1/1kAAP9hAMz+PQD5/m0A2/4gAPr+UQDh/jQAEv9BAPH+FABN/zkASv9DADP/BABe/1IAGf8oAE3/RQAw/zIAQf8mADn/GgBE/xIAR/8hAD7/BABy/zEAKP/0/07/GwBX/z4ARf8mAFr/QQBV/zUAVP8eAFz/JABt/0EAUP8MAHz/KgBr/ycAYv8EAH3/MABl/x8Agv8bAIj/GgBv//z/ff8AAJX/IABu/+T/jv/r/4z/9/9n/77/pP8JAJD/EQCJ//r/q/8WAJ//GQCU/xYAtv8qAKr/PQCW/ysAwf8+ALb/OgC3/ygAz/8uAM7/OgDH/ygAz/8kAMz/OgC//xsA1f8qAMn/LwDN/xcA1f8oAMv/JQDR/xMAzf8bAM//HgDU/wUA2v8ZANL/EwDW/wEA1f8ZAMz/BwDX/wIA0v8SANT/BQDW/wMA0/8PANT/AADY/wIA1f8MANX/+f/a/wUA0v8IANf/+//Y/wUA0/8DANr/+f/Y/wQA1v8BANr/+f/Z/wUA1//8/9z/+v/Y/wYA2f/8/93//v/Y/wUA2v/9/93////Z/wUA3P/8/97/AgDa/wMA3v/8/97/AwDb/wIA3//9/97/BADd/wEA4f///9//BQDf/wAA4v8AAN//BQDf/wAA4/8CAN//BADh/wAA4/8DAOD/BADi////4/8DAOH/AwDk/wAA5P8FAOL/AgDl/wEA5P8FAOL/AQDl/wEA4/8EAOL/AQDj/wIA4P8DAN//AADg/wIA3v8CAOD/AADh/wEA4v8AAOP/AADm/wAA6P8AAOz/AADu/wAA",
3120+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD//////f/+//7///8AAP////8BAAEA/f8AAAEAAQAFAAUA9//6/x0A2f/9/xMA3P+jAE//of9HAKP//gCj/77/Z/vi/28D9/ywDJAJIvr6AsX0Xec4BhcGzf23DZP7yfZ6C1//nwBDBIHyYgob/Tf3sQ41ANoKRA/A+E7yffAa9gD5EQUBDMwMygiqAHMAqPqhAGUB2/gE+a78H/+4APT6DwIUAA0HNwMhBfL8E/90A5n7dP9cALIC+v5C/q0AOv9kAogBHv01/+3/qAQD/ub8T/4vAOUA5P6KATv+ywEYAeT+KP6i/3gCFP6h/hr/+P83ACL/VADn/8UARQJI/4MAu/8qAlj+wf4iAPb/LgFJ/8QAUABAAI4ABf+k/3X/YgFK/ij/j/9HADoAi/+WAA0BVwC/ACL/LACe//cARv9i/xgAUgA0ACj/FgBgAIj/5P9M/7z/zv8/AKz/gv8sAEQA6/+I/yYAawDL/7T/xf8qAOv/FQCu/5n/EgAyAO3/i/9LAE4A+//R//P/FgDe/8z/u/8DADIALAAZALL/TAA8ABwAo//1/xwA/P/L/z0A6P8jAN7/7v+a/zAAwf/7/3//KQAuACwA9v8RAGYAIwBNADgAKgASAF0ADgANACEAMQDH//H/LQACAB0Ay////x0APAABAAQA2v8iAAcAEgDE/+v/FQD+/+P/DAD1/97/6v/4//X/EwD4/+7/5P8cAA0ACQDH//7/CQAXAAEA/P/5//j/CwAWAAEABQD9//n/AQAWAB0A7v/k/wAACQAmAP//9/8AAPn/8/8aAO//6/8fAOv/5v8hAP//5/8PAOf/AAAGAPn/6v8JAAYABgABAOv/1//1//L/+P8DABcA6f/8/wMACgD7/xAA3v/2//z/DADu//z/5v/5/wEA/P/6//7/7v/x/wQABgD5/wAA8v/w/wkAEQD2//j/+v8EAAcAEAD3//v/+v8CAAAACQD3//v//v/9/wUADAD2//X/AgAHAAAABwD2//T/BgAKAP7/AQD4//r/BAAIAPn/AAD3//f/BQAHAPv//v/7//n/BQAJAPj/+v/9//7/AgAGAPj/+f8BAAEAAgAFAPn/+v8BAAIAAAAEAPn/+f8CAAQA/v8BAPr/+v8CAAQA/P////v//P8CAAQA+//+//3//f8CAAUA+v/9//////8AAAQA+v/8////AAD//wIA+//8/wAAAQD+/wEA+//8/wAAAgD9/////P/9/wEAAgD8//7//f/9/wAAAgD8//3//v/+////AQD8//z/////////AAD8//3///8AAP7/AAD9//7///8AAP7////+//////8AAP7////+////////////////////",
3121+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD//////v8AAP///////wAAAAAAAP7/AQABAAAABwD///X/BQAjAPL/CQDb/9D/GAAb/7sAYwCW/z0BcP/X/7T/2QDW+wH8yANCCCUJ5QT++UXmhPwhA78FuAxH+p78ifudBlAG9vmu/lAK2fdlB///cfjoCa0E7Akn9Yb/zvba+AkAHPywBGEBFwUNAL8AXAAGA20DFvmR/kz+F/06Ag/+GwHl/5EEKgJd/q0AP/ym/9n6EfxY/2H+/QFtAC4C6QBDAaMCo/20/+3/3f/p/fL9rv9V/6cBhQHuAX4AcwJYAaH/IP/P/gsApP0LAe7/sQBuAI0AAgGDAE4BzACe/5X//v+v/+f+Zf+gAOv/5QBhAOIApAANASYAuP+h/8b/HQBr/9//bACWAGEAFAB5AD0AWQDU/+D/Yf/p//D/s/+R/4QAMQBvABEAkQBfABQAJgDW/wwA8/8XALz/vf8zAFAAKwD1/zEAPwDJ/x0A7/8LAOX/FwDR//H/EQAdAO//6P8QAFEA2f8WABEAMgDy/xIA+f/s/xAALgDv////HQAvAPT/+f8iAAYAEgAFABoAGgD//w0A+f/0/xsAHgDx/9f/GAACAPH/8f8JAPf/GwALABEA7/8cAPT/CgD2//j/BQD8/+3/OgAgAAYA9f8PAN7/DgD9/9r/1//3/+3/9//1//b/8//5//f/AgAJAOf/+v8OAAMACwD9/+7/5f8eAAEA9//q//7/8P8WAP7/+//4/wIA+f8TAAIA9f/5/wcA+P8iAAgA9v/n/xoA//8gAAUABwDj/wAA9v8BAAUAFQDn/wMA7v8QABAAEQDm/wwA8f8aAAAABwDu/wcACgASAAEA7//w//f/BgARAAkA6P/3/wcADgAKAAYA4f/4/wYADgAAAPr/8P/9/xQACgAHAPn/7//9/xEAAgD+//L/8v/8/xUAAwDw//H/9f8CAAsA/v/q//L/+f8FAAYA/P/r//j///8GAAkA+//o//j/AQAIAP//+v/o//v/CAAIAPv/+P/w/wEACQAHAPj/+f/0/wIACwAFAPb/+f/4/wQACwACAPP/+f/+/wYACAD///L/+/8BAAYABQD9//P//P8FAAUAAgD7//T//f8HAAQA///7//f///8IAAMA/P/6//r/AQAIAAEA+v/6//3/AgAHAAAA+f/7/wAAAwAFAP7/+P/8/wIAAgACAP3/+f/9/wMAAwAAAPz/+v/+/wQAAgD+//z/+/8AAAQAAQD8//z//f8BAAQAAAD7//3///8BAAMA///7//3/AAACAAEA/v/7//7/AQABAAAA/v/9////AQAAAP///v/+////AAD/////////////////////////////",
3122+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD////////+//////8AAAAA/v/+/wAAAQD8//3/CQAJAP3/+v8PAAcApABlABkBkwCO/i//lfqa/HQAcf/3BdkCzwJcBCMC0wMN/9/9wgI7AaECYfxV/Tf83vhn/xrt8Owx/8n7cgHABYb43QcZDh4WugNrA7P74gHu/9z/zv0t/acCiQHY/iv4qQOl/ysCE/0//XT9Sf4O//j9xfupAn394gHO+rsCXAFIAxQC9wIXBgcD2AQuAnb/9gJh/6wAVfxEAI4Bvf7oAFv/bALsAMQBe/88/joAT/4dAH39/v9LAXn/gwDI//QBdABcAA0A7f4lAMn///+9/tv/iABp/13/pP/dALv/w/8MAHv//f+y/6////7U/5AAZP+Z/8r/nQDR/5r/DwDr/xAA4v+s/3z/+P9uAOv/t/82AGcAHgCb/yQAFQBGAM7/CgD3/xoAegAaAOz/CgBHAA8Adv8/AAAABQC2/xIAAAA7ABQAKgCj/z4AAQAXAJz/JAADAAcA8f/1/2AAAQAlAPD/NgDx/1wA7v/4/wMAZADv//3/HQAkAFoA8P9FAPv/FgBIAPf/WQAHAEUACQD0/xIAQwDu/wMAwP9VALn/XwCw/yEA5f8sAPj/FgDD/1YAyv8rAOX/HQDo//j/IQAQACAAHwD9/yQAHQBAABgABQAiAAUAKAD3/wkACwAKAAMABwAJAPb/+f8GAOr/JQAHABMA6P8TAA4AGgD//woA8/8ZAP//GADu/w0A9v8SAAMABwD4/wQA5P8XAAQACgDq/wUA+/8VAAcACADs/xIAAAATAPH/+v/1//T/7f///+z/+v/y/+//9/8KAAcACgAJAPT/BAAKAAAABgAIAPL/9v8KAAMABAACAPr/9v8OAAIA+P/x//v/+f8MAPb/+P/w/wQA9f8MAPn////7/woA/v8PAAEAAgD1/xAAAQAPAP//AwD//xQABwALAAAABgADABAAAgAHAAAACAABAA8ABQAFAAMABwAEAA4ABwADAAEACQAFAAoAAwD//wAACQADAAUAAQD/////CAABAAMAAAD/////BwACAAEAAAD/////BwACAP7///8BAAAABgABAP7///8CAAAABAAAAP7///8DAAAAAwAAAP3///8DAAAAAQAAAP3//v8EAAAAAAD+//////8EAP/////+/wAA/v8EAP/////+/wEA/v8EAP///v/+/wIA//8DAP///v/+/wIA//8BAP///v/+/wMA//8BAP/////+/wMA//8AAP//AAD+/wQA//8AAP7/AQD//wIA////////AQD//wIA////////AQAAAAEAAAAAAP//AQD//wEAAAAAAP//AQAAAAEAAAAAAAAA",
3123+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+/wAA+v8AAPz/AAD//wAA/f8AAAEAAAD+/wAACQAAAAQAAAAZAAAAtgAAAFsBAABW/gAAH/oAAGcBAABoBwAAlAAAAO3/AAARAQAA+wIAAEoEAACe/gAAiv4AALD0AADJ8wAAkQQAAF34AABi8QAAPQAAAAH2AAD19AAADAMAAJwGAACTEAAA0AwAAJkHAACOBwAAuQEAANcDAAC6AgAAHwUAAHEFAAB0AwAAbgEAADz+AADYAQAAGAAAAJwCAADgAAAA//0AAMn+AAAT/AAAwP8AAOn9AAAJAAAAewEAAOn+AACN/wAAOv0AAO3+AADN/gAAcP8AACj/AACq/gAA+f4AAML9AACa/wAA/f4AAN7/AABo/wAA6/4AAE//AAAC/wAAEQAAAHX/AAB0AAAA5f8AAEwAAAB3AAAA5/8AAMIAAABCAAAAzgAAAE8AAAB3AAAAKAAAADMAAACqAAAALwAAAK4AAAASAAAAVgAAACgAAAAtAAAATAAAAP3/AAA7AAAA2/8AACQAAADw/wAALQAAADEAAAAlAAAAbAAAADMAAABUAAAAEAAAACgAAAD1/wAA9v8AAPr/AADu/wAALgAAABIAAABUAAAARAAAAGUAAABGAAAAOAAAAGAAAAAuAAAARQAAACEAAAAfAAAAAAAAAAkAAAAQAAAAAwAAABIAAADs/wAAEAAAAAYAAAASAAAAIgAAABEAAAADAAAABAAAAA8AAAD4/wAAHQAAAAsAAAAIAAAADgAAAP//AAAcAAAADwAAAAYAAAASAAAAFwAAAAMAAAAYAAAAEgAAAPr/AAAQAAAADQAAAAoAAAD3/wAABgAAAPb/AADf/wAA/v8AAPL/AAD6/wAAFAAAAAQAAAAEAAAAGwAAAAEAAAAMAAAAIAAAAAIAAAAdAAAAGAAAAAIAAAAcAAAAEgAAAAcAAAAeAAAADwAAAAQAAAAeAAAABAAAAAYAAAAZAAAAAQAAAA4AAAATAAAA/v8AAAoAAAAOAAAA+/8AAAsAAAAJAAAA+f8AAAsAAAABAAAA+f8AAAoAAAD9/wAA+v8AAAcAAAD5/wAA+v8AAAUAAAD3/wAA/f8AAAQAAAD2/wAAAAAAAAEAAAD3/wAAAgAAAAAAAAD4/wAAAwAAAP7/AAD6/wAABAAAAP3/AAD8/wAABAAAAPv/AAD+/wAAAwAAAPv/AAD//wAAAQAAAPv/AAAAAAAAAAAAAPv/AAACAAAA//8AAPz/AAACAAAA/v8AAP3/AAACAAAA/f8AAP7/AAABAAAA/f8AAP//AAABAAAA/f8AAAAAAAAAAAAA/v8AAAEAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
3124+
];
3125+
3126+
module.exports = OmnitoneSOAHrirBase64;
3127+
3128+
3129+
/***/ }),
3130+
/* 19 */
30973131
/***/ (function(module, exports, __webpack_require__) {
30983132

30993133
"use strict";
@@ -3172,7 +3206,7 @@ exports.patchSafari = function() {
31723206

31733207

31743208
/***/ }),
3175-
/* 19 */
3209+
/* 20 */
31763210
/***/ (function(module, exports, __webpack_require__) {
31773211

31783212
"use strict";
@@ -3202,7 +3236,7 @@ exports.patchSafari = function() {
32023236
* Omnitone library version
32033237
* @type {String}
32043238
*/
3205-
module.exports = '1.0.5';
3239+
module.exports = '1.0.6';
32063240

32073241

32083242
/***/ })

build/omnitone.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

doc/Omnitone.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2825,7 +2825,7 @@ <h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="Omnito
28252825
<br class="clear">
28262826

28272827
<footer>
2828-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Fri Oct 20 2017 13:05:26 GMT-0700 (PDT)
2828+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Oct 31 2017 15:56:04 GMT-0700 (PDT)
28292829
</footer>
28302830

28312831
<script> prettyPrint(); </script>

doc/global.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ <h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="Omnito
263263
<br class="clear">
264264

265265
<footer>
266-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Fri Oct 20 2017 13:05:26 GMT-0700 (PDT)
266+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Oct 31 2017 15:56:04 GMT-0700 (PDT)
267267
</footer>
268268

269269
<script> prettyPrint(); </script>

doc/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ <h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="Omnito
149149
<br class="clear">
150150

151151
<footer>
152-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Fri Oct 20 2017 13:05:26 GMT-0700 (PDT)
152+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Oct 31 2017 15:56:04 GMT-0700 (PDT)
153153
</footer>
154154

155155
<script> prettyPrint(); </script>

doc/omnitone.js.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ <h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="Omnito
309309
<br class="clear">
310310

311311
<footer>
312-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Fri Oct 20 2017 13:05:26 GMT-0700 (PDT)
312+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Oct 31 2017 15:56:04 GMT-0700 (PDT)
313313
</footer>
314314

315315
<script> prettyPrint(); </script>

examples/hoa-renderer.html

Lines changed: 53 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ <h1>
3030
<code>HOARenderer</code> is an optimized higher-order ambisonic renderer
3131
based on the integrated convolution (SH-MaxRe HRIR). This renderer
3232
supports arbitrary order ambisonic rendering, provided the user supplies
33-
the appropriate SH-MaxRe HRIRs.
33+
the appropriate SH-MaxRe HRIRs. You may toggle between 2nd and 3rd order
34+
ambisonic renderer.
3435
</p>
3536
<div id="secSource">
3637
<p>
@@ -61,7 +62,9 @@ <h2>
6162
<input oninput="adjustGain(this);" id="eRangeGain" type="range" min=
6263
"-60" max="24" value="0" step="1">
6364
</dd>
64-
</dl><button id="eButtonPlayback" disabled>Play</button>
65+
</dl>
66+
<button id="eButtonPlayback" disabled>Play</button>
67+
<button id="eButtonAmbisonicOrder" disabled>3rd Order</button>
6568
</div>
6669
<div id="footer">
6770
<p>
@@ -77,13 +80,15 @@ <h2>
7780
var exampleInitialized = false;
7881

7982
var audioContext;
80-
var hoaRenderer;
83+
var toaRenderer;
84+
var soaRenderer;
8185
var currentBufferSource;
8286
var inputGain;
83-
var mergedTOABuffer;
87+
var contentBuffer;
8488
var rotationMatrix3 = new Float32Array(9);
8589

8690
var eButtonPlayback;
91+
var eButtonAmbisonicOrder;
8792
var eRangeAzimuth;
8893
var eRangeElevation;
8994
var eRangeGain;
@@ -142,17 +147,27 @@ <h2>
142147
rotationMatrix3[7] = forward[1];
143148
rotationMatrix3[8] = forward[2];
144149

145-
hoaRenderer.setRotationMatrix3(rotationMatrix3);
150+
eButtonAmbisonicOrder.textContent === '3rd Order'
151+
? toaRenderer.setRotationMatrix3(rotationMatrix3)
152+
: soaRenderer.setRotationMatrix3(rotationMatrix3);
146153
}
147154

148-
function onToggleButton(event) {
155+
function onGainSliderChange() {
156+
if (!exampleInitialized)
157+
return;
158+
159+
document.getElementById('eLabelGain').textContent = eRangeGain.value;
160+
inputGain.gain.value = Math.pow(10, parseFloat(eRangeGain.value) / 20);
161+
}
162+
163+
function onTogglePlayback(event) {
149164
if (!exampleInitialized)
150165
return;
151166

152167
switch (event.target.textContent) {
153168
case 'Play':
154169
currentBufferSource = audioContext.createBufferSource();
155-
currentBufferSource.buffer = mergedTOABuffer;
170+
currentBufferSource.buffer = contentBuffer;
156171
currentBufferSource.loop = true;
157172
currentBufferSource.connect(inputGain);
158173
currentBufferSource.start();
@@ -166,39 +181,60 @@ <h2>
166181
}
167182
}
168183

169-
function onGainSliderChange() {
184+
function onToggleAmbisonicOrder(event) {
170185
if (!exampleInitialized)
171186
return;
172187

173-
document.getElementById('eLabelGain').textContent = eRangeGain.value;
174-
inputGain.gain.value = Math.pow(10, parseFloat(eRangeGain.value) / 20);
188+
switch (event.target.textContent) {
189+
case '3rd Order':
190+
toaRenderer.setRenderingMode('off');
191+
soaRenderer.setRenderingMode('ambisonic');
192+
soaRenderer.setRotationMatrix3(rotationMatrix3);
193+
event.target.textContent = '2nd Order';
194+
break;
195+
case '2nd Order':
196+
soaRenderer.setRenderingMode('off');
197+
toaRenderer.setRenderingMode('ambisonic');
198+
toaRenderer.setRotationMatrix3(rotationMatrix3);
199+
event.target.textContent = '3rd Order';
200+
break;
201+
}
175202
}
176203

177204
function onLoad() {
178205
eButtonPlayback = document.getElementById('eButtonPlayback');
206+
eButtonAmbisonicOrder =
207+
document.getElementById('eButtonAmbisonicOrder');
179208
eRangeAzimuth = document.getElementById('eRangeAzimuth');
180209
eRangeElevation = document.getElementById('eRangeElevation');
181210
eRangeGain = document.getElementById('eRangeGain');
182211

183-
eButtonPlayback.onclick = onToggleButton;
184-
eButtonPlayback.disabled = true;
212+
eButtonPlayback.onclick = onTogglePlayback;
213+
eButtonAmbisonicOrder.onclick = onToggleAmbisonicOrder;
185214
eRangeGain.oninput = onGainSliderChange;
186215
eRangeAzimuth.oninput = onDirectionChange;
187216
eRangeElevation.oninput = onDirectionChange;
188217

189218
audioContext = new AudioContext();
190219
inputGain = audioContext.createGain();
191-
hoaRenderer = Omnitone.createHOARenderer(audioContext);
220+
toaRenderer = Omnitone.createHOARenderer(audioContext);
221+
soaRenderer = Omnitone.createHOARenderer(audioContext,
222+
{ambisonicOrder: 2});
192223

193224
Promise.all([
194225
Omnitone.createBufferList(audioContext, exampleSoundPathList),
195-
hoaRenderer.initialize()
226+
toaRenderer.initialize(),
227+
soaRenderer.initialize()
196228
]).then((results) => {
197-
mergedTOABuffer =
229+
contentBuffer =
198230
Omnitone.mergeBufferListByChannel(audioContext, results[0]);
199-
inputGain.connect(hoaRenderer.input);
200-
hoaRenderer.output.connect(audioContext.destination);
231+
inputGain.connect(soaRenderer.input);
232+
inputGain.connect(toaRenderer.input);
233+
soaRenderer.output.connect(audioContext.destination);
234+
toaRenderer.output.connect(audioContext.destination);
235+
soaRenderer.setRenderingMode('off');
201236
eButtonPlayback.disabled = false;
237+
eButtonAmbisonicOrder.disabled = false;
202238
exampleInitialized = true;
203239
});
204240
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "omnitone",
3-
"version": "1.0.5",
3+
"version": "1.0.6",
44
"description": "Spatial Audio Decoder in Web Audio API",
55
"main": "build/omnitone.js",
66
"keywords": [

0 commit comments

Comments
 (0)