{"id":5430,"date":"2019-06-26T07:59:52","date_gmt":"2019-06-26T05:59:52","guid":{"rendered":"https:\/\/demdlx704as001.ad.harman.com\/?page_id=5430"},"modified":"2024-06-14T06:38:12","modified_gmt":"2024-06-14T04:38:12","slug":"xaf-integration-guide","status":"publish","type":"page","link":"https:\/\/audioworx.transfunnel.co\/old\/?page_id=5430","title":{"rendered":"xAF Integration Guide"},"content":{"rendered":"<link rel='stylesheet' href='https:\/\/audioworx.transfunnel.co\/old\/wp-content\/plugins\/documentor\/skins\/mint\/style.css' type='text\/css' media='all' \/><div id=\"documentor-46\" class=\"documentor-mint documentor-wrap\" data-docid = \"46\" data-epid = \"5430\" ><div class=\"documentor-topicons doc-noprint\"><span class=\"doc-topiconswrap\"><a class=\"doc-print\" data-printspath=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/plugins\/documentor\/skins\/mint\/print.css\"> <span class=\"icon-print2 doc-icons\"><\/span> <\/span><\/a><\/span><div class=\"cleardiv\"><\/div><div class=\"clrright\"><\/div><\/div><div class=\"document-wrapper\"><div class=\"doc-menu toggle doc-noprint\"><span class=\"doc-search\">\n\t\t\t\t\t<input type=\"text\" name=\"search_document\" class=\"search-document\" placeholder=\"Search\" \/>\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/plugins\/documentor\/skins\/mint\/images\/search.png\" \/>\n\t\t\t\t<\/span><div class=\"doc-menurelated\"><ol class=\"doc-list-front\"><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#overview-and-scope-of-this-document-4\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#overview-and-scope-of-this-document-4\" data-sec-counter=\"1\" data-section-id=\"562\">Purpose of this Document<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#w-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#w-release\" data-sec-counter=\"2\" data-section-id=\"3087\">W Release (current release)<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#potentially-relevant-changes\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#potentially-relevant-changes\" data-sec-counter=\"2.1\" data-section-id=\"3088\">Potentially Relevant Changes<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#audio-object-tuning-changes-2\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#audio-object-tuning-changes-2\" data-sec-counter=\"2.2\" data-section-id=\"3089\">Audio Object Changes<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#v-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#v-release\" data-sec-counter=\"3\" data-section-id=\"2999\">V Release<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#potentially-relevant-changes-rename-this-later\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#potentially-relevant-changes-rename-this-later\" data-sec-counter=\"3.1\" data-section-id=\"3000\">Potentially Relevant Changes<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#audio-object-tuning-changes\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#audio-object-tuning-changes\" data-sec-counter=\"3.2\" data-section-id=\"3002\">Audio Object Tuning Changes<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#u-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#u-release\" data-sec-counter=\"4\" data-section-id=\"2833\">U Release<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#xtp-contract-between-cores-and-mcu\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#xtp-contract-between-cores-and-mcu\" data-sec-counter=\"4.1\" data-section-id=\"2834\">xTP Update<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#audio-object-exceptions\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#audio-object-exceptions\" data-sec-counter=\"4.2\" data-section-id=\"2835\">Audio Object Exceptions<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#updated-file-sending\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#updated-file-sending\" data-sec-counter=\"4.3\" data-section-id=\"2836\">Updated File Sending (xTP)<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#dsfd-file-format\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#dsfd-file-format\" data-sec-counter=\"4.4\" data-section-id=\"2837\">DSFD File Format (SizeOfAdditionalVars)<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#audio-objects-with-tuning-minor-version-changes-u-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#audio-objects-with-tuning-minor-version-changes-u-release\" data-sec-counter=\"4.5\" data-section-id=\"2839\">Audio Objects with tuning minor version changes (U-release)<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#t-release-section\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#t-release-section\" data-sec-counter=\"5\" data-section-id=\"2346\">T-Release<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#t-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#t-release\" data-sec-counter=\"5.1\" data-section-id=\"2345\">Block Control API<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#interface-related-changes\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#interface-related-changes\" data-sec-counter=\"5.2\" data-section-id=\"2351\">Interface related changes<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#master-preset-controller\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#master-preset-controller\" data-sec-counter=\"5.3\" data-section-id=\"2353\">Master Preset Controller<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#application-related-changes\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#application-related-changes\" data-sec-counter=\"5.4\" data-section-id=\"2352\">Application related changes<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#audio-objects-with-min-tuning-version-changes\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#audio-objects-with-min-tuning-version-changes\" data-sec-counter=\"5.5\" data-section-id=\"2355\">Audio Objects with tuning minor version changes<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#s-release-name-to-be-changed\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#s-release-name-to-be-changed\" data-sec-counter=\"6\" data-section-id=\"2006\">S-Release<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#master-control-api-change\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#master-control-api-change\" data-sec-counter=\"6.1\" data-section-id=\"2007\">Master Control API change<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#memory-allocator-api-change\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#memory-allocator-api-change\" data-sec-counter=\"6.2\" data-section-id=\"2291\">Memory Allocator API change<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#preset-loading-configurability-overrides\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#preset-loading-configurability-overrides\" data-sec-counter=\"6.3\" data-section-id=\"2335\">Preset Loading Configurability \/ Overrides<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#preset-and-slotmap-writes-over-xtp\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#preset-and-slotmap-writes-over-xtp\" data-sec-counter=\"6.4\" data-section-id=\"2337\">Preset and Slotmap writes over xTP<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#streaming-and-probepoints\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#streaming-and-probepoints\" data-sec-counter=\"6.5\" data-section-id=\"2717\">Streaming and ProbePoints<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#legacy-releases\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#legacy-releases\" data-sec-counter=\"7\" data-section-id=\"3092\">Legacy Releases<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#r\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#r\" data-sec-counter=\"7.1\" data-section-id=\"1968\">Rolling Stones <\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#tuning-memory-consolidation-object-update\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#tuning-memory-consolidation-object-update\" data-sec-counter=\"7.1.1\" data-section-id=\"1970\">Tuning Memory Consolidation Object Update<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#configuring-memory-latency-level\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#configuring-memory-latency-level\" data-sec-counter=\"7.1.2\" data-section-id=\"1971\">Configuring Memory Latency Level<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#framework-feature-configurability\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#framework-feature-configurability\" data-sec-counter=\"7.1.3\" data-section-id=\"1979\">Framework Feature Configurability<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#clarifi-memory-allocation-for-optimized-mcps-on-gul\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#clarifi-memory-allocation-for-optimized-mcps-on-gul\" data-sec-counter=\"7.1.4\" data-section-id=\"2001\">ClariFi memory allocation for optimized MCPS on GUL<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#queen-current-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#queen-current-release\" data-sec-counter=\"7.2\" data-section-id=\"1911\">Queen<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#framework-initialization\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#framework-initialization\" data-sec-counter=\"7.2.1\" data-section-id=\"1910\">Framework Initialization<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#memory-latency-level-configurability\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#memory-latency-level-configurability\" data-sec-counter=\"7.2.2\" data-section-id=\"1939\">Memory Latency Level Configurability<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#in-place-computation\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#in-place-computation\" data-sec-counter=\"7.2.3\" data-section-id=\"1937\">In Place Computation<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#windows-application-library-separation\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#windows-application-library-separation\" data-sec-counter=\"7.2.4\" data-section-id=\"1938\">Windows application library separation<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#core-type-in-sfd\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#core-type-in-sfd\" data-sec-counter=\"7.2.5\" data-section-id=\"1935\">Core type in SFD<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#deprecated-xtp-commands\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#deprecated-xtp-commands\" data-sec-counter=\"7.2.6\" data-section-id=\"1936\">Deprecated xTP commands<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#platform-input-and-output-buffers\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#platform-input-and-output-buffers\" data-sec-counter=\"7.2.7\" data-section-id=\"1945\">Platform input and output buffers<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#p-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#p-release\" data-sec-counter=\"7.3\" data-section-id=\"1832\">Pink Floyd<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#memory-reader-official-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#memory-reader-official-release\" data-sec-counter=\"7.3.1\" data-section-id=\"1833\">Memory Reader Official Release<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#new-core-objects\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#new-core-objects\" data-sec-counter=\"7.3.2\" data-section-id=\"1874\">New Core Objects<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#float-to-fixed-core-object-2\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#float-to-fixed-core-object-2\" data-sec-counter=\"7.3.2.1\" data-section-id=\"1873\">Float To Fixed Core Object<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#fixed-to-float-core-object-2\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#fixed-to-float-core-object-2\" data-sec-counter=\"7.3.2.2\" data-section-id=\"1872\">Fixed To Float Core Object<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#core-objects-design-details\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#core-objects-design-details\" data-sec-counter=\"7.3.2.3\" data-section-id=\"1871\">Core Objects Design Details<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#loadseti-callback\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#loadseti-callback\" data-sec-counter=\"7.3.3\" data-section-id=\"1877\">LoadSeti Callback<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#caccelerator-class-update\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#caccelerator-class-update\" data-sec-counter=\"7.3.4\" data-section-id=\"1876\">CAccelerator Class Update<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#memory-requirement-api\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#memory-requirement-api\" data-sec-counter=\"7.3.5\" data-section-id=\"1878\">Memory Requirement API<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#oasis-current-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#oasis-current-release\" data-sec-counter=\"7.4\" data-section-id=\"1756\">Oasis<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#bao-separation\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#bao-separation\" data-sec-counter=\"7.4.1\" data-section-id=\"1758\">BAO Separation<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#bao-object-configuration\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#bao-object-configuration\" data-sec-counter=\"7.4.1.1\" data-section-id=\"1792\">BAO Object Configuration<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#moving-the-public-header-files\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#moving-the-public-header-files\" data-sec-counter=\"7.4.2\" data-section-id=\"1762\">Moving configurable BAO header files<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#platform-api\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#platform-api\" data-sec-counter=\"7.4.3\" data-section-id=\"1761\">Platform API<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#nirvana-current-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#nirvana-current-release\" data-sec-counter=\"7.5\" data-section-id=\"1711\">Nirvana<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#m-miles-davis\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#m-miles-davis\" data-sec-counter=\"7.6\" data-section-id=\"1587\">Miles Davis<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#platform-api-changes\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#platform-api-changes\" data-sec-counter=\"7.6.1\" data-section-id=\"1588\">Platform API Changes<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#additions\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#additions\" data-sec-counter=\"7.6.2\" data-section-id=\"1615\">Additions M <\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#metallica-current-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#metallica-current-release\" data-sec-counter=\"7.7\" data-section-id=\"1546\">LED ZEPPELIN<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#audio-core\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#audio-core\" data-sec-counter=\"7.7.1\" data-section-id=\"1547\">Audio Core - Overview<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#audio-core-usage\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#audio-core-usage\" data-sec-counter=\"7.7.2\" data-section-id=\"1548\">Audio Core - Usage<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#xtp-interface\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#xtp-interface\" data-sec-counter=\"7.7.3\" data-section-id=\"1549\">xTP Interface<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#current-release\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#current-release\" data-sec-counter=\"7.8\" data-section-id=\"1278\">KISS<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#initialization-message-parser-api-update\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#initialization-message-parser-api-update\" data-sec-counter=\"7.8.1\" data-section-id=\"1277\">Initialization Message Parser - API Update<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#i-j\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#i-j\" data-sec-counter=\"7.9\" data-section-id=\"1279\">JOURNEY<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#multiple-instance-multiple-core-support-for-dynamic-sfd-with-gtt\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#multiple-instance-multiple-core-support-for-dynamic-sfd-with-gtt\" data-sec-counter=\"7.9.1\" data-section-id=\"567\">Multiple Instance Multiple Core support for dynamic SFD with GTT<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#control-module-configuration\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#control-module-configuration\" data-sec-counter=\"7.9.2\" data-section-id=\"566\">Control Module Configuration<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#h-i\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#h-i\" data-sec-counter=\"7.10\" data-section-id=\"1280\">INXS<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#master-preset-control-module-configuration\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#master-preset-control-module-configuration\" data-sec-counter=\"7.10.1\" data-section-id=\"565\">Master Preset Control Module Configuration<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#passing-in-memory-allocators-and-deallocators-to-interface-classes\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#passing-in-memory-allocators-and-deallocators-to-interface-classes\" data-sec-counter=\"7.10.2\" data-section-id=\"1347\">Passing in memory allocators and deAllocators to interface classes<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#f-g\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#f-g\" data-sec-counter=\"7.11\" data-section-id=\"1282\">HERBIE HANCOCK<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#g-h\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#g-h\" data-sec-counter=\"7.12\" data-section-id=\"1281\">GENESIS<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#modified-hardware-abstraction-concept\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#modified-hardware-abstraction-concept\" data-sec-counter=\"7.12.1\" data-section-id=\"569\">Modified Hardware Abstraction Concept<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#0x6b-implemented-and-audio-object-tunestatextp-function-for-dynamic-control\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#0x6b-implemented-and-audio-object-tunestatextp-function-for-dynamic-control\" data-sec-counter=\"7.12.2\" data-section-id=\"571\">0x6B Implemented and Audio Object tuneStateXTP function for dynamic control<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#library-management\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#library-management\" data-sec-counter=\"7.12.3\" data-section-id=\"573\">Library Management<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#additional-object-configuration-for-audio-objects\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#additional-object-configuration-for-audio-objects\" data-sec-counter=\"7.12.4\" data-section-id=\"574\">Additional Object Configuration for Audio Objects<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#object-api-modified-including-object-modes\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#object-api-modified-including-object-modes\" data-sec-counter=\"7.12.5\" data-section-id=\"575\">Object API modified including object modes<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#xml-flag-deprecated\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#xml-flag-deprecated\" data-sec-counter=\"7.12.6\" data-section-id=\"576\">XML flag deprecated<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#overlays\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#overlays\" data-sec-counter=\"7.12.7\" data-section-id=\"577\">Overlays<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#foo-fighters\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#foo-fighters\" data-sec-counter=\"7.13\" data-section-id=\"1287\">FOO FIGHTERS<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#eagles\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#eagles\" data-sec-counter=\"7.14\" data-section-id=\"1288\">EAGLES<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#deep-purple\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#deep-purple\" data-sec-counter=\"7.15\" data-section-id=\"1284\">DEEP PURPLE<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#background-tasks\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#background-tasks\" data-sec-counter=\"7.15.1\" data-section-id=\"568\">Background Tasks<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#coldplay\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#coldplay\" data-sec-counter=\"7.16\" data-section-id=\"1285\">COLDPLAY<\/a><span class=\"doc-mtoggle expand\"><\/span><div class=\"doc-menu-border\"><\/div><ol><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#method-to-set-control-out-from-one-object-to-another\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#method-to-set-control-out-from-one-object-to-another\" data-sec-counter=\"7.16.1\" data-section-id=\"578\">Method to set control out from one object to another<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#file-and-flash-io-abstraction\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#file-and-flash-io-abstraction\" data-sec-counter=\"7.16.2\" data-section-id=\"572\">File and Flash IO Abstraction<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#logging\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#logging\" data-sec-counter=\"7.16.3\" data-section-id=\"579\">Logging<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#tuning-sets-seti-implemented\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#tuning-sets-seti-implemented\" data-sec-counter=\"7.16.4\" data-section-id=\"570\">Tuning Sets (SETi) implemented<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#beatles\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#beatles\" data-sec-counter=\"7.17\" data-section-id=\"1283\">BEATLES<\/a><div class=\"doc-menu-border\"><\/div><\/li><li class=\"doc-actli\"><a class=\"documentor-menu\" href=\"#acdc\"  style=\"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\" data-href=\"#acdc\" data-sec-counter=\"7.18\" data-section-id=\"1286\">ACDC<\/a><div class=\"doc-menu-border\"><\/div><\/li><\/ol><\/li><\/ol><\/div><\/div><div class=\"doc-sec-container\" id=\"documentor_seccontainer\"><div class=\"doc-sectionwrap\" id=\"overview-and-scope-of-this-document-4_wrap\"><div class=\"documentor-section  section-562\" id=\"overview-and-scope-of-this-document-4\" data-section-id=\"562\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">1.<\/span><span class=\"title-text\">Purpose of this Document<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#overview-and-scope-of-this-document-4')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" >The purpose of this document is to help developers integrate the xAF framework Release.\r\n<blockquote>Features which are provided:\r\n<ul>\r\n \t<li>Instantiation of core signal flows, complete with SRC.\r\n<ul>\r\n \t<li>Each core will instantiate a single\u00a0 instance of a new class: <em>CAudioCore<\/em>. This is the single point of contact for the platform core.<\/li>\r\n<\/ul>\r\n<\/li>\r\n \t<li>Integrated xTP support<\/li>\r\n \t<li>Simplified IPC (single API)<\/li>\r\n \t<li>Clear requirements for user (abstract methods and class based system)<\/li>\r\n \t<li>Changes listed which require attention from user and\/or integrator<\/li>\r\n \t<li>New audio object(s)<\/li>\r\n \t<li>Breacking changes<\/li>\r\n<\/ul>\r\n<\/blockquote>\r\n<p class=\"note\">The changes listed are always compared to the previous release. Upgrading from older versions may require an iterative process to update all mandatory APIs.<\/p>\r\n<strong>Platforms and further Information<\/strong>\r\n\r\nFor more details on supported platforms and other information under\u00a0 <span style=\"color: #0000ff;\">https:\/\/confluence.harman.com\/confluence\/pages\/viewpage.action?spaceKey=INTAXRSDK&amp;title=Harman+AudioworX+-+Audio+Algorithm+Catalogue.<\/span><\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on July 4, 2024<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"w-release_wrap\"><div class=\"documentor-section  section-3087\" id=\"w-release\" data-section-id=\"3087\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">2.<\/span><span class=\"title-text\">W Release<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#w-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"potentially-relevant-changes_wrap\"><div class=\"documentor-section  section-3088\" id=\"potentially-relevant-changes\" data-section-id=\"3088\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">2.1.<\/span><span class=\"title-text\">Potentially Relevant Changes<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#potentially-relevant-changes')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"heading\">MasterPresetController<\/p>\n<ul>\n<li>Methods of MasterPresetControl.h have been moved to CMasterPresetControl class and not available as static functions anymore. In order to call MPC related functions manually now an instance of the MPC class is required.<\/li>\n<li>xTPInterpreter, MPC and Device parser are extended due to custom actions and Core Object settings in Master preset controller :\n<ul>\n<li>Core object processing state changes<\/li>\n<li>Custom actions\n<ul>\n<li>Control set<\/li>\n<li>Custom xTP commands<\/li>\n<li>Audio Object processing state<\/li>\n<li>Refresh control (not yet supported in GTT)<\/li>\n<li>Prepared for Swoosh (not yet supported on MPC GUI side)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Below two APIs are changed from previous version of xAF and it is aligned in AudioworX CCB meeting<\/li>\n<li><em>IxTPInterpreter::handleSlotUpdate()\u00a0<\/em>\n<ul>\n<li>m_MasterPresetControl is a class and not a structure. Hence integrator should use :MasterPresetControl.m_SlotMap<\/li>\n<\/ul>\n<\/li>\n<li><em>IxTPInterpreter::loadDefaultSlot()\u00a0<\/em>\n<ul>\n<li>m_MasterPresetControl is a class and not a structure. Hence integrator should use :MasterPresetControl.xAFGetDefaultSlot(m_SlotRequested)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"heading\">xTPInterpreter<\/p>\n<ul>\n<li><strong>switchInstanceState <\/strong>method was renamed to <strong>switchCoreObjectState<\/strong><\/li>\n<li><strong>m_MasterPresetControl<\/strong> type has changed from <strong>xAFMasterPresetControl<\/strong> to <strong>CMasterPresetControl<\/strong><\/li>\n<li><strong>core object id<\/strong> (16-bit) is being used instead of <strong>instance id<\/strong> (8-bit) for below virtual methods mentioned.<\/li>\n<li>virtual methods <strong>modified<\/strong>\n<ul>\n<li>xAF_Error <strong>switchCoreObjectState<\/strong>(MessageBuffer&amp; message, xUInt8 core, <strong>xUInt16 coreObjID<\/strong>, CalcStates targetState, xFloat32 fadeTime) const;<\/li>\n<li>xAF_Error <strong>onStateChange<\/strong>(MessageBuffer&amp; msgBuf, xUInt8 core, <strong>xUInt16 coreObjectID<\/strong>, CalcStates rampState)<\/li>\n<li>xAF_Error onSlotLoaded(MessageBuffer&amp; msgBuf, xUInt8 core, <strong>xUInt16 coreObjectID<\/strong>, slotloadingstatus status)<\/li>\n<\/ul>\n<\/li>\n<li>new virtual method has been <strong>added<\/strong>\n<ul>\n<li>xAF_Error <strong>filterPresets<\/strong>()<\/li>\n<li>xAF_Error <strong>processAction<\/strong>(const xAFAction&amp; action)<\/li>\n<li>xAF_Error <strong>handleFileUpdate<\/strong>(xUInt16 fileID)<\/li>\n<li>xAF_Error <strong>handleFileMapUpdateInternal<\/strong>()<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"heading\">AudioCore<\/p>\n<ul>\n<li>swoosh support added (switch between current and new preset without ramping)<\/li>\n<\/ul>\n<p class=\"heading\">ChunkParser<\/p>\n<ul>\n<li>getCheckSum() <strong>const<\/strong><\/li>\n<li>getCheckSumAlgorithm <strong>const<\/strong><\/li>\n<\/ul>\n<p class=\"heading\">SetiParser<\/p>\n<ul>\n<li>Added support for swoosh (optional parameter in the constructor)\n<ul>\n<li>SETIParser(CAudioProcessingBase* framework, <strong>xBool swooshEnabled = false<\/strong>);<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"heading\">Seti Files<\/p>\n<ul>\n<li>added a new chunk type for audio object state changes per preset<\/li>\n<\/ul>\n<p class=\"heading\">Device load slot status<\/p>\n<ul>\n<li>slotloadingstatus enum extended by 2 additional states\n<ul>\n<li>enum slotloadingstatus<br \/>\n{<br \/>\nXTP_DEVICE_SLOT_LOADED = 0x00,<br \/>\nXTP_DEVICE_SLOT_LOADING_IN_PROGRESS,<br \/>\nXTP_DEVICE_SLOT_LOAD_NOT_POSSIBLE,<br \/>\nXTP_DEVICE_NUM_LOAD_SLOT_STATUS<br \/>\n};<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"heading\">FileController<\/p>\n<div>\n<p>File Controller feature allows user to select and manage multiple files on the embedded device (DSP side). GTT&#8217;s file controller UI is used for this purpose.<\/p>\n<ul>\n<li>xTPInterpreter module is updated to support file controller related xTP commands.\n<ul>\n<li>StaticStorageInterface class has <em>getSize<\/em> virtual method to be implemented by platform\n<div style=\"padding-left: 120px;\"><\/div>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div style=\"padding-left: 120px;\"><em>class StaticStorageInterface : public IOBase<\/em><\/div>\n<div style=\"padding-left: 120px;\"><em>{<\/em><\/div>\n<div style=\"padding-left: 120px;\"><em>\u00a0 \u00a0public:<\/em><\/div>\n<div style=\"padding-left: 120px;\"><em>\u00a0 \u00a0&#8230;<\/em><\/div>\n<div style=\"padding-left: 120px;\"><em>\u00a0 \u00a0virtual xUInt32 getSize() = 0;<\/em><\/div>\n<div style=\"padding-left: 120px;\"><em>};<\/em><\/div>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><em>FLMP<\/em> and <em>ANYFILE<\/em> are added as flash file types<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div style=\"padding-left: 120px;\"><em>typedef enum FLASHFILETYPE<\/em><\/div>\n<div style=\"padding-left: 120px;\"><em>{<\/em><\/div>\n<div style=\"padding-left: 120px;\"><em>\u00a0 &#8230;<\/em><\/div>\n<div style=\"padding-left: 120px;\"><em>\u00a0 FLMP, \u00a0 \u00a0\/\/ file map<\/em><\/div>\n<div style=\"padding-left: 120px;\"><em>\u00a0 ANYFILE, \u00a0\/\/ any file including wav, pcm<\/em><\/div>\n<div style=\"padding-left: 120px;\"><em>} flashfileType;<\/em><\/div>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><em>FLMP<\/em> is for <em>filemap.<\/em> There is single filemap file per device. it contains information about all files. each file has fileID, name, size and checksum.<\/li>\n<li><em>ANYFILE\u00a0<\/em>is for pcm, wav or any other file. Each file has a unique id.<\/li>\n<\/ul>\n<\/li>\n<li>\n<div><em>StaticStorageInterface* openMemoryStorage(memAlloc alloc, flashfileType type, xUInt32 coreID, xUInt32 instanceID, IOBase::AccessMode mode, xUInt16 contextID);<\/em><\/div>\n<ul>\n<li>\n<div>Platform already implements this function. Platform passes this function during xtp interpreter initialization. Implementation has to updated to handle newly added flashfiletypes &#8212; <em>FLMP<\/em> and <em>ANYFILE<\/em><\/div>\n<\/li>\n<li>when type is <em>FLMP<\/em>,\u00a0 <em>coreID\/<\/em>instanceID\/contextID are not relevant. <em>FLMP<\/em> is single file per device.<\/li>\n<li>when type is <em>ANYFILE<\/em>, <em>contextID<\/em> is fileID. Each file is identified by a unique <em>fileID<\/em>. <em>coreID<\/em> and <em>instanceID<\/em> are not relevant.<\/li>\n<\/ul>\n<\/li>\n<li><em>IxTPInterpreter::onXTPMessageFileController()<\/em>\n<ul>\n<li>Method handles all the xTP commands related to the file controller.<\/li>\n<\/ul>\n<\/li>\n<li><em>IxTPInterpreter::handleFileMapUpdate()<\/em>\n<ul>\n<li>Virtual method that is called by <em>IxTPInterpreter<\/em> after <em>filemap<\/em> is received. Platform implements this function. <em>Filemap<\/em> parsing with <em>DeviceParser<\/em> is done here<\/li>\n<\/ul>\n<\/li>\n<li><em>IxTPInterpreter::handleFileUpdate()<\/em>\n<ul>\n<li>Virtual method that is called by <em>IxTPInterpreter<\/em> after a file is received. It is optional for platform to implement this.<\/li>\n<\/ul>\n<\/li>\n<li><em>DeviceParser::readFileControllerProps()<\/em>\n<ul>\n<li>Parses filemap. used by platform&#8217;s implementation of <em>IxTPInterpreter::handleFileMapUpdate()<\/em><\/li>\n<\/ul>\n<\/li>\n<li>DeviceParser::getFileControllerResults()\n<ul>\n<li>For getting a copy of filemap data structure <em>xAFFileMap. <\/em>Used by <em>IxTPInterpreter::handleFileMapUpdate()<\/em> after sucessfully parsing <em>filemap.<\/em><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<div><em>AudioCore <\/em>or <em>AudioCoreBase<\/em> instatiation<\/div>\n<ul>\n<li>\n<div><em>virtual StaticStorageInterface* getOpenStoragePtr(flashfileType type, unsigned int contextualData, IOBase::AccessMode mode) const = 0;<\/em><\/div>\n<ul>\n<li>Platform already implements this virtual method when instantiating AudioCore or AudioCoreBase class. In order to support the newly added flashfiletypes &#8212; <em>FLMP<\/em> and <em>ANYFILE, <\/em>platform has to update the implementation of this function<em>.<\/em><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<p class=\"heading\">Logger<\/p>\n<p>A logger is introduced that has 5 severity levels which are, &#8216;CRITICAL&#8217;, &#8216;ERROR&#8217;, &#8216;WARNING&#8217;, &#8216;INFO&#8217; &amp; &#8216;DEBUG&#8217;. Audio objects and the framework\/system have their own separate flags for enabling logs. By default, the audio objects will have all its log statements compiled out. To see logs from the audio object, code has to be recompiled with the necessary flag.<\/p>\n<table style=\"border-collapse: collapse; width: 90.7502%;\" border=\"1\">\n<tbody>\n<tr>\n<td style=\"width: 18.8938%;\"><strong>Implementation<\/strong><\/td>\n<td style=\"width: 71.8564%;\">\n<p>To add log statements, the developer will inherit from the IxAFLog class declared in xaflog.h. Following this, the class that is logging will define a function called logger with the following argument list:<\/p>\n<p>void logger(xAFLogLevel level, const xInt8* const fmtStr, &#8230;) const<\/p>\n<p>The main purpose of this function is to access the type and ID of the object that is logging. For example, the type could indicate that it is the audio object that is logging, and the ID could indicate the block ID, virtual core ID and core object ID. The ID and the type are then passed on to another function that is implemented by the platform:<\/p>\n<p>void xAFLogMessage(xAFLogLevel logLevel, xAFLogObject objType, xUInt32 objectID, const xInt8* message)<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.8938%;\"><strong>Usage<\/strong><\/td>\n<td style=\"width: 71.8564%;\">Example log statements for audio object:<\/p>\n<ul>\n<li>XAFLOG_AO_INFO(&#8220;Gain value for channel %d is %f\u201d, channel, m_Coeffs[channel]);<\/li>\n<li>XAFLOG_AO_DEBUG(\u201cValue of tuneSize = %d\u201d, tuneSize);<\/li>\n<li>XAFLOG_AO_ERROR(\u201cSubblock value exceeded!\u201d);<\/li>\n<\/ul>\n<p>Example log statements for the framework is:<\/p>\n<ul>\n<li>XAFLOG_INFO(&#8220;Start init audioObj\u201d);<\/li>\n<li>XAFLOG_WARNING(\u201cFailed to load configuration, defaulting to %d in and\u00a0 %d out, m_CurrentInputs, m_CurrentOutputs);<\/li>\n<li>XAFLOG_ERROR(\u201cQueryPerformanceFrequency failed!\u201d);<\/li>\n<\/ul>\n<p>Logs for audio objects are disabled by default. The macro to enable them in cmake is: <span class=\"ui-provider a b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak\" dir=\"ltr\">XAFLOG_CONFIG_AO. Another option to enable them is to use the cmd line argument while executing the python build script (&#8211;logConfigAO=logLevel; logLevels=[&#8216;none&#8217;, &#8216;critical&#8217;, &#8216;error&#8217;, &#8216;warning&#8217;, &#8216;info&#8217;, &#8216;debug&#8217;])\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.8938%;\"><strong>Backwards incompatible change<\/strong><\/td>\n<td style=\"width: 71.8564%;\">The earlier logging mechanism had two functions for setting and getting the logger function, which are now removed.<\/p>\n<ul>\n<li>void setLog(void(*log)(const xInt8* message))<\/li>\n<li>logDel getLog() const OVERRIDE;<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on July 4, 2024<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"audio-object-tuning-changes-2_wrap\"><div class=\"documentor-section  section-3089\" id=\"audio-object-tuning-changes-2\" data-section-id=\"3089\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">2.2.<\/span><span class=\"title-text\">Audio Object Changes<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#audio-object-tuning-changes-2')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"heading\"><span class=\"emph\">Major Tuning version changes (backwards incompatible changes -&gt; possible tuning data loss for the mentioned AOs)<\/span><\/p>\n<p><span class=\"emph\">Basic audio object(s)<\/span><\/p>\n<ul>\n<li>FilePlayer (0.1 -&gt; 0.2)<\/li>\n<\/ul>\n<p><span class=\"emph\">Advanced audio object(s)<\/span><\/p>\n<ul>\n<li>no objects<\/li>\n<\/ul>\n<p class=\"heading\"><span class=\"emph\">Minor Tuning version changes (backwards compatible change -&gt; tuning data retained)<\/span><\/p>\n<p><span class=\"emph\">Basic audio object(s)<\/span><\/p>\n<ul>\n<li>Delay (0.2 -&gt; 0.3)<\/li>\n<li>LevelMonitor (0.0 -&gt; 0.1)<\/li>\n<li>Volume (0.2 -&gt; 0.3)<\/li>\n<li>ControlMath (0.3 -&gt; 0.6)<\/li>\n<li>ControlMultiAdder (0.0 -&gt; 0.1)<\/li>\n<li>Lut (0.1 -&gt; 0.2)<\/li>\n<li>FastConv (0.0 -&gt; 0.1)<\/li>\n<li>FaderMixer (0.0 -&gt; 0.1)<\/li>\n<li>MatrixMixer (0.3 -&gt; 0.7)<\/li>\n<li>Splitter (0.0 -&gt; 0.2)<\/li>\n<li>WaveGenerator (0.2 -&gt; 0.3)<\/li>\n<\/ul>\n<p><span class=\"emph\">Advanced audio object(s)<\/span><\/p>\n<ul>\n<li>AudioLevelizer2 (newly added)<\/li>\n<li>AlaControl (0.1 -&gt; 0.2)<\/li>\n<li>Compressor (0.0 -&gt; 0.1)<\/li>\n<li>FiraMimo (0.0 -&gt; 0.2)<\/li>\n<li>FirMimo (0.2 -&gt; 0.3)<\/li>\n<li>MonoDetect (0.0 -&gt; 0.1)<\/li>\n<li>PowerManager (0.0 -&gt; 0.1)<\/li>\n<li>VenueVerb (0.4 -&gt; 0.5)<\/li>\n<\/ul>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on July 4, 2024<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"v-release_wrap\"><div class=\"documentor-section  section-2999\" id=\"v-release\" data-section-id=\"2999\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">3.<\/span><span class=\"title-text\">V Release<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#v-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"potentially-relevant-changes-rename-this-later_wrap\"><div class=\"documentor-section  section-3000\" id=\"potentially-relevant-changes-rename-this-later\" data-section-id=\"3000\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">3.1.<\/span><span class=\"title-text\">Potentially Relevant Changes<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#potentially-relevant-changes-rename-this-later')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p><span style=\"font-size: 14pt;\">CoreInfo structure change.<\/span><\/p>\n<p>This is not relevant except in a case where the platform developer is instantiating an AudioCore from hardcoded info (or they have some utility to generate this info).<\/p>\n<p>The CoreInfo structure has been modified as follows:<\/p>\n<p>Member numProbePoints removed.<\/p>\n<p>New member added of type &#8216;StreamingInfo&#8217; which has the following definiton:<\/p>\n<p>struct StreamingInfo<br \/>\n{<br \/>\nStreamingInfo();<br \/>\nxUInt8 numProbePoints; \/\/\/&lt; number of parallel probe points required; this numnber will define the actual queue size for ProbePoints<br \/>\nxUInt8 numSfdMeters; \/\/\/&lt; number of sfd meters. The size required is numSfdMeters * sizeof(float).<br \/>\nxUInt32 streamingDataSzInBytes; \/\/\/&lt; number of bytes required for streaming of variables like state variables, state mem of third party etc.,<br \/>\n};<\/p>\n<p><span style=\"font-size: 14pt;\">THXParser return value change<\/span><\/p>\n<p><span style=\"font-size: 12pt;\">This file is not commonly used outside of xAF but just in case: the read function will now return 0 for an EOF rather than -1.\u00a0 This change follows a change in the chunk parser file to correctly detect error cases.<\/span><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on November 29, 2023<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"audio-object-tuning-changes_wrap\"><div class=\"documentor-section  section-3002\" id=\"audio-object-tuning-changes\" data-section-id=\"3002\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">3.2.<\/span><span class=\"title-text\">Audio Object Tuning Changes<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#audio-object-tuning-changes')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The following audio objects have minor tuning changes which can be automatically upgraded inside GTT.<\/p>\n<p>Control Math (0.2 -&gt; 0.3)<\/p>\n<p>Delay (0.1 -&gt; 0.2)<\/p>\n<p>File Player (1.0 -&gt; 1.1)<\/p>\n<p>Limiter (0.3 -&gt; 0.4)<\/p>\n<p>Matrix Mixer (0.1 -&gt; 0.3)<\/p>\n<p>Parameter Biquad (1.0 -&gt; 1.1)<\/p>\n<p>Tone Control Extended (1.2 -&gt; 1.3)<\/p>\n<p>Volume (1.1 -&gt; 1.2)<\/p>\n<p>XOver Biquad (0.0 -&gt; 0.1)<\/p>\n<p>&nbsp;<\/p>\n<p>CFQLS (1.2 -&gt; 1.3)<\/p>\n<p>ClariFi (1.0 -&gt; 1.1)<\/p>\n<p>Compressor (0.2 -&gt; 0.3)<\/p>\n<p>Compander (0.0 -&gt; 1.0)<\/p>\n<p>Ducker (1.0 -&gt; 2.1)<\/p>\n<p>FIRAMIMO (3.0 -&gt; 4.0)<\/p>\n<p>Logic7 (1.2 -&gt; 1.3)<\/p>\n<p>MultiStageEnvelope (1.0 -&gt; 1.2)<\/p>\n<p>NSPCenterExtraction (1.0 -&gt; 6.0)<\/p>\n<p>QLS (1.2 -&gt; 1.3)<\/p>\n<p>VenueVerb (1.3 -&gt; 1.4)<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 12, 2023<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"u-release_wrap\"><div class=\"documentor-section  section-2833\" id=\"u-release\" data-section-id=\"2833\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">4.<\/span><span class=\"title-text\">U Release<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#u-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"xtp-contract-between-cores-and-mcu_wrap\"><div class=\"documentor-section  section-2834\" id=\"xtp-contract-between-cores-and-mcu\" data-section-id=\"2834\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">4.1.<\/span><span class=\"title-text\">xTP Contract between cores and MCU<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#xtp-contract-between-cores-and-mcu')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>Previously there was an unfair expectation that was put on the MCU by the xTPInterpreter implementation.\u00a0 This expectation was that any request sent from xTPInterpreter to another core would block on that send, and the next line would already have the response to the query.\u00a0 xTPInterpreter has been updated to be send messages without the expectation of immediate response.\u00a0 It now expects \u2018XTP_NO_RESPONSE\u2019 to be returned by any core IPC message, and the actual response to come back from the core on a separate thread (which will make its way to xtpInterpreter\u2019s sendMessage function).<\/p>\n<p>Flow:<\/p>\n<p class=\"actions\">IxTPInterpreter =&gt; m_IPCInterfaces[coreID]-&gt;sendMessage =&gt; platform IPC =&gt; AudioCore-&gt;onXTPMessage()<\/p>\n<p>ReturnFlow:<\/p>\n<p class=\"actions\">AudioCore-&gt;onXTPMessage()[return value] =&gt; platformIPC =&gt; IxTPInterpreter-&gt;sendMessage()<\/p>\n<p>When sending to the core from xtpInterpreter platform IPC should return XTP_NO_RESPONSE unless there is some actual error in sending the IPC message \u2013 it can return some error code in this case (or generically xAF_FAILURE).<\/p>\n<p>After processing an XTP message on the core (the context is within the receive method in platform IPC code) if the message length (msgBuf.msgLen) is &gt; 0 then this message should be sent back to the MCU. The return value of the function can be either xAF_SUCCESS, or some error.\u00a0 In the case of an error the error has already been encoded into an xTP error response \u2013 but the platform can use this error for logging as well if they wish.\u00a0 XTP_NO_RESPONSE should not be expected here as the core should return any unhandled commands as an error (in AudioCoreBase).<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on July 31, 2023<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"audio-object-exceptions_wrap\"><div class=\"documentor-section  section-2835\" id=\"audio-object-exceptions\" data-section-id=\"2835\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">4.2.<\/span><span class=\"title-text\">Audio Object Exceptions<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#audio-object-exceptions')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>We have changed the internally used macro for exceptions to avoid clashing with platform definitions.\u00a0 Previously the macro was PLATFORM_ASSERT but now the macro is XAF_ASSERT.\u00a0 (XafAssert.h)<\/p>\n<p>In general we do not want any audio object throwing exceptions.\u00a0 In the future we will be considering updating the Audio Object API to allow returning errors from init &#8211; this was avoided in the past because of the breaking change it would introduce but throwing exceptions is a worse way to handle init errors.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 27, 2023<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"updated-file-sending_wrap\"><div class=\"documentor-section  section-2836\" id=\"updated-file-sending\" data-section-id=\"2836\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">4.3.<\/span><span class=\"title-text\">Updated File Sending (xTP)<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#updated-file-sending')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>Specifically in order to accommodate the AI object and its larger signal flows &#8211; but for other more extreme signal flows as well &#8211; we have updated the method of sending flash files over xTP.<\/p>\n<p>Previously there were two approaches &#8211; one which used an 8 bit counter and one which used a 4 byte offset and size.\u00a0 The 4 byte method was only used for tuning files and the preset info chunk, this is changed so that this approach is used for all formats now.\u00a0 This changes our max size from ~50KB-ish to 4GB.<\/p>\n<p>This change is covered automatically if the platform is using our xTPInterpreter file, but if some custom xTP code is used then the following commands have to be updated.<\/p>\n<p><strong><a href=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2023\/06\/xtp-sending-format-change.pdf\">xtp sending format change<\/a><\/strong><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 28, 2023<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"dsfd-file-format_wrap\"><div class=\"documentor-section  section-2837\" id=\"dsfd-file-format\" data-section-id=\"2837\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">4.4.<\/span><span class=\"title-text\">DSFD File Format<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#dsfd-file-format')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The size of additional variable data (which is a member of audio object properties within signal flow data) has been changed from 2 bytes to 4 bytes to accommodate the AI Object (which greatly exceeded 64kb).\u00a0 GTT and xAF are updated to handle this change &#8211; and old (previously saved) sfd files should still work.\u00a0 For reference the parser changed is\u00a0<em>DSFDParser<\/em>.<\/p>\n<p>Old files have a different chunk ID which is supported in the updated parser (it will read 2 bytes instead of 4) but new files have a new chunk ID which specifies it uses 4 bytes instead.\u00a0 If you try to load a new file in an old version of the framework you will get an error (because the chunk ID is unknown).<\/p>\n<p>When using U release GTT with U release xaf &#8211; you will get the updated chunk ID when sending data.<\/p>\n<p>U release GTT and previous xaf release will give you the old chunk ID.<\/p>\n<p>Previous GTT and new xaf will also give you the old chunk ID (but it will load).<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 27, 2023<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"audio-objects-with-tuning-minor-version-changes-u-release_wrap\"><div class=\"documentor-section  section-2839\" id=\"audio-objects-with-tuning-minor-version-changes-u-release\" data-section-id=\"2839\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">4.5.<\/span><span class=\"title-text\">Audio Objects with tuning minor version changes (U-release)<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#audio-objects-with-tuning-minor-version-changes-u-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The following audio objects have changed their tuning minor version:<\/p>\n<ul>\n<li>LUT (1.0 -&gt; 1.1)<\/li>\n<li>TonecontrolExtended (1.1 -&gt; 1.2)<\/li>\n<li>ControlMath (1.1-&gt;1.2)<\/li>\n<li>ALA Control (2.0-&gt;2.1)<\/li>\n<li>Compressor (0.2-&gt;0.3)<\/li>\n<li>FIR MIMO (1.1-&gt;1.2)<\/li>\n<li>Venue Verb (1.1-&gt;1.3)<\/li>\n<li>VNC Control (4.0-&gt;4.1)<\/li>\n<\/ul>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on July 5, 2023<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"t-release-section_wrap\"><div class=\"documentor-section  section-2346\" id=\"t-release-section\" data-section-id=\"2346\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">5.<\/span><span class=\"title-text\">T-Release<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#t-release-section')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"t-release_wrap\"><div class=\"documentor-section  section-2345\" id=\"t-release\" data-section-id=\"2345\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">5.1.<\/span><span class=\"title-text\">Block Control API<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#t-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>Block Control API is added in this release to enable sending multiple control signals from one audio object (AO) to another in one functional call.<\/p>\n<div>\n<div>added APIs in AudioObject.h<\/div>\n<ul>\n<li><strong><em>\u00a0 \u00a0 virtual xAF_Error controlSet(xSInt32 index, xUInt32 sizeBytes, const void * const pValues);<\/em><\/strong><\/li>\n<\/ul>\n<div>\n<div>\n<ul>\n<li><strong><em>\u00a0 \u00a0 void setControlOut(xSInt32 index, xUInt32 sizeBytes, const void * const pValues);<\/em><\/strong><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p>In GTT&#8217;s SFD, when an AO implements Block Control API, Block Control inputs and outputs are shown as dark orange dots. Block Control connections between two AOs are represented by think orange lines. Regular control inputs and outputs continue to be in light orange color. Regular control connections between two AOs continue to be in light orange colors.<\/p>\n<p>Integration involves these steps. Please refer ControlGrouper implementation for reference<\/p>\n<ul>\n<li>declare support for Block Control in static meta data and dynamic metadata<\/li>\n<li>in the <em>getObjectIo <\/em>implementation specify control group as one control input<\/li>\n<li>in the createDynamicMetadata API, fill-in Group number appropriately.\n<ul>\n<li>\n<div>\n<div><em>typedef struct <\/em><em>{<\/em><\/div>\n<div><em>\u00a0 \u00a0 \u00a0 \u00a0 xFloat32 Min; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/\/&lt; min value for control signals for the selected mode<\/em><\/div>\n<div><em>\u00a0 \u00a0 \u00a0 \u00a0 xFloat32 Max; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/\/&lt; max value for control signals for the selected mode<\/em><\/div>\n<div><em>\u00a0 \u00a0 \u00a0 \u00a0 std::string \u00a0Label; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/\/&lt; label for current control<\/em><\/div>\n<div><em><strong>\u00a0 \u00a0 \u00a0 \u00a0 xSInt32 \u00a0 Group; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/\/&lt; group number<\/strong><\/em><\/div>\n<div><em>\u00a0 \u00a0 } metaDataControlDescription;<\/em><\/div>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<li>to received Block Control input, use <em>controlSet(xSInt32 index, xUInt32 sizeBytes, const void * const pValues)<\/em> API in the implementation<\/li>\n<li>to send Block Control output, use <em>setControlOut(xSInt32 index, xUInt32 sizeBytes, const void * const pValues)<\/em>\u00a0API in the implementation<\/li>\n<\/ul>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on November 16, 2022<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"interface-related-changes_wrap\"><div class=\"documentor-section  section-2351\" id=\"interface-related-changes\" data-section-id=\"2351\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">5.2.<\/span><span class=\"title-text\">Interface related changes<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#interface-related-changes')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"heading\">DeviceParser<\/p>\n<p>The get method was changed to avoid a casting from void** and doing null pointer checks. The new api will set the data for the given parameter and given target type, which are given as a reference.<\/p>\n<p><img fetchpriority=\"high\" fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-18733\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/DeviceParser.png\" alt=\"\" width=\"1262\" height=\"127\" \/><\/p>\n<p class=\"heading\">Messages<\/p>\n<p>New flash types have been added to support reading audio data formats stored as wav or raw pcm data<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-18734\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/Messages.png\" alt=\"\" width=\"278\" height=\"239\" \/><\/p>\n<p class=\"heading\">xTPUtil<\/p>\n<p>Error message function APIs got updated to have a consistent and type safe parameter handling.<\/p>\n<ul>\n<li><span class=\"emph\">returnFailXTP<\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-18737\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/returnFailXTP_1-1.png\" alt=\"\" width=\"573\" height=\"101\" \/><\/p>\n<ul>\n<li><span class=\"emph\">returnFailXTPWithFullErrorID<\/span><\/li>\n<\/ul>\n<p>This function was extended to make use of the MessageBuffer type and a more convenient usage of parameters.<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-18736\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/returnFailXTP_2.png\" alt=\"\" width=\"1227\" height=\"158\" \/><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 9, 2022<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"master-preset-controller_wrap\"><div class=\"documentor-section  section-2353\" id=\"master-preset-controller\" data-section-id=\"2353\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">5.3.<\/span><span class=\"title-text\">Master Preset Controller<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#master-preset-controller')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"heading\">Master Preset Control<\/p>\n<p>All Master preset controller changes are mentioned in this section.<\/p>\n<ul>\n<li><span class=\"emph\">AudioCoreBase.h<\/span><\/li>\n<\/ul>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-18742\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/MPC.png\" alt=\"\" width=\"819\" height=\"392\" \/><\/p>\n<p>&nbsp;<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 8, 2022<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"application-related-changes_wrap\"><div class=\"documentor-section  section-2352\" id=\"application-related-changes\" data-section-id=\"2352\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">5.4.<\/span><span class=\"title-text\">Application related changes<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#application-related-changes')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"heading\">Static storage interface<\/p>\n<p>This extension in the application is required to support the new flash types required for the File Player audio object which will be released soon.<\/p>\n<p>For the VirtualAmp application on windows Fileinterface is used to get access to the files. On embedded it is up to platform to decide which interface to return and how to handle the access to the audio files.<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-18748\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/getStoragePtr.png\" alt=\"\" width=\"1226\" height=\"308\" \/><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 9, 2022<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"audio-objects-with-min-tuning-version-changes_wrap\"><div class=\"documentor-section  section-2355\" id=\"audio-objects-with-min-tuning-version-changes\" data-section-id=\"2355\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">5.5.<\/span><span class=\"title-text\">Audio Objects with tuning minor version changes<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#audio-objects-with-min-tuning-version-changes')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The following audio objects have changed their tuning minor version during T-Release:<\/p>\n<ul>\n<li>\n<p class=\"text\" style=\"color: #000000; margin: 0in; font-family: Calibri; font-size: 11.0pt;\">Compressor<\/p>\n<\/li>\n<\/ul>\n<p style=\"color: #000000; margin: 0in; font-family: Calibri; font-size: 11.0pt;\"><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-18900 alignleft\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/compressor.png\" alt=\"\" width=\"451\" height=\"41\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\n<p style=\"color: #000000; margin: 0in; font-family: Calibri; font-size: 11.0pt;\">FIRAMIMO<\/p>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-18901 alignleft\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/firamimo.png\" alt=\"\" width=\"366\" height=\"41\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\n<p style=\"color: #000000; margin: 0in; font-family: Calibri; font-size: 11.0pt;\">Limiter<\/p>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-18902 alignleft\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/limiter.png\" alt=\"\" width=\"403\" height=\"36\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\n<p style=\"color: #000000; margin: 0in; font-family: Calibri; font-size: 11.0pt;\">Logic7<\/p>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-18903 alignleft\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/logic7.png\" alt=\"\" width=\"378\" height=\"41\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Wave generator<\/li>\n<\/ul>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-18905 alignleft\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/wavegenerator.png\" alt=\"\" width=\"418\" height=\"39\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Template<\/li>\n<\/ul>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-18904 alignleft\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/12\/template.png\" alt=\"\" width=\"455\" height=\"72\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 13, 2022<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"s-release-name-to-be-changed_wrap\"><div class=\"documentor-section  section-2006\" id=\"s-release-name-to-be-changed\" data-section-id=\"2006\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">6.<\/span><span class=\"title-text\">S-Release <\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#s-release-name-to-be-changed')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"master-control-api-change_wrap\"><div class=\"documentor-section  section-2007\" id=\"master-control-api-change\" data-section-id=\"2007\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">6.1.<\/span><span class=\"title-text\">Master Control API change<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#master-control-api-change')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>Due to some leftovers how the master controller has initialized its memory there were some hard coded static arrays used which had a max size of 10. This is a bug when using more than 10 controls in the project.<\/p>\n<p>This bug got fixed, but requires a really small api change on application code side.<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14612\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2022\/02\/master-control-api-change-1.png\" alt=\"\" width=\"1103\" height=\"59\" \/><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on February 24, 2022<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"memory-allocator-api-change_wrap\"><div class=\"documentor-section  section-2291\" id=\"memory-allocator-api-change\" data-section-id=\"2291\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">6.2.<\/span><span class=\"title-text\">Memory Allocator API change<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#memory-allocator-api-change')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>Data buffers placed in low latency memory leads to lower MIPS consumption and hence there will be numerous request for low latency memory. As there is limited low latency memory, the allocator allocates in the next available higher latency memory whenever the requested low latency memory is not available. Hence the memory statistics compiled with the requested latency might not be correct.<\/p>\n<p>An additional argument is passed to the memory allocator APIs to return the allocated latency for the requested data segment and this assigned latency level is used for calculating the memory usage at each latency level.<\/p>\n<p>The memory allocator APIs in the following xAF types header files are changed as shown below:<\/p>\n<p><strong>XafTypesC.h:<\/strong><\/p>\n<p><em><strong>typedef void<\/strong>* (*memAlloc)(<strong>unsigned int<\/strong> size, <strong>unsigned int<\/strong> align, <strong>enum<\/strong> xAF_HEAP, <strong>enum<\/strong> <strong>xAF_memLatency <\/strong>requestedLatency, <strong>xAF_memLatency<\/strong>* assignedLatency);<\/em><\/p>\n<p><strong>XafTypes.h:<\/strong><\/p>\n<p><em><strong>typedef void<\/strong>* (&amp;memAllocRef)(<strong>unsigned int<\/strong> size, <strong>unsigned int<\/strong> align, <strong>enum xAF_HEAP<\/strong> heap, <strong>enum xAF_memLatency<\/strong> requestedLatency, <strong>xAF_memLatency<\/strong>* assignedLatency);<\/em><\/p>\n<p>In the below classes, the APIs related to memory allocation are changed as given below:<\/p>\n<p><strong>CAudioCoreBase:<\/strong><\/p>\n<p><em><strong>void<\/strong>* m_Allocator(<strong>unsigned int<\/strong> size, <strong>unsigned int<\/strong> align, <strong>enum xAF_HEAP<\/strong> heap, <strong>enum xAF_memLatency<\/strong> requestedLatency, <strong>xAF_memLatency<\/strong>* assignedLatency);<\/em><\/p>\n<p><strong>InitializationMsgParser:<\/strong><\/p>\n<p><em><strong>void<\/strong>* m_memAlloc(<strong>unsigned int<\/strong> size, <strong>unsigned int<\/strong> align, <strong>enum xAF_HEAP<\/strong> heap, <strong>enum xAF_memLatency<\/strong> requestedLatency, <strong>xAF_memLatency<\/strong>* assignedLatency);<\/em><\/p>\n<p><strong>CAudioProcessingBase:<\/strong><\/p>\n<p><em><strong>void<\/strong>* heapCreator(<strong>unsigned int<\/strong> size, <strong>unsigned int<\/strong> align, <strong>enum xAF_HEAP<\/strong> heap, <strong>enum xAF_memLatency<\/strong> requestedLatency, <strong>xAF_memLatency<\/strong>* assignedLatency);<\/em><\/p>\n<p><strong>ChunkParserMem:<\/strong><\/p>\n<p><em><strong>void<\/strong>* m_memAlloc(<strong>unsigned int<\/strong> size, <strong>unsigned int<\/strong> align, <strong>enum xAF_HEAP<\/strong> heap, <strong>enum xAF_memLatency<\/strong> requestedLatency, <strong>xAF_memLatency<\/strong>* assignedLatency);<\/em><\/p>\n<p>The template to create object is also modified as below:<\/p>\n<p><em>createObject(<strong>void<\/strong>* (*heapCreator)(<strong>unsigned int<\/strong> size, <strong>unsigned int<\/strong> alignment, <strong>enum xAF_HEAP <\/strong>heap, <strong>enum xAF_memLatency <\/strong>requestedLatency, <strong>xAF_memLatency<\/strong>* assignedLatency)) {}<\/em><\/p>\n<p>In addition, following extern APIs used outside the framework are also modified:<\/p>\n<p><em>extern CAudioObject* createAudioObject(<strong>int<\/strong> id, void* (*heapCreator)(<strong>unsigned int<\/strong> size, <strong>unsigned int<\/strong> alignment, <strong>enum xAF_HEAP <\/strong>heap, <strong>enum xAF_memLatency <\/strong>requestedLatency, <strong>xAF_memLatency<\/strong>* assignedLatency));<\/em><\/p>\n<p><em>extern CAudioObjectToolbox* createAudioObjectToolbox(<strong>int<\/strong> id, void*(*heapCreator)(<strong>unsigned int<\/strong> size, <strong>unsigned int<\/strong> alignment, <strong>enum xAF_HEAP <\/strong>heap, <strong>enum xAF_memLatency <\/strong>requestedLatency, <strong>xAF_memLatency<\/strong>* assignedLatency));<\/em><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on May 17, 2022<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"preset-loading-configurability-overrides_wrap\"><div class=\"documentor-section  section-2335\" id=\"preset-loading-configurability-overrides\" data-section-id=\"2335\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">6.3.<\/span><span class=\"title-text\">Preset Loading Configurability \/ Overrides<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#preset-loading-configurability-overrides')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>For this release (s+2) &#8211; the way master preset controller has been implemented has changed a good bit.\u00a0 Much of the code that was required to be implemented by the platform team is now internal to the xTPInterpreter.\u00a0 There are two primary reasons for this.<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li>We want less wasted work on the platform side (easier implementation and maintenance)<\/li>\n<li>We&#8217;ve changed process for loading slots so that the xTPInterpreter has the ability to respond to each phase of the process.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>At the same time we have added the ability for a preset to request not to ramp before its load.<\/p>\n<p>Previously the setup was more of a fire and forget &#8211; the ramping data and preset data was sent out to each core, which took care of everything and then sent a status message after the ramp up was complete.<\/p>\n<p>Now the process is as follows:<\/p>\n<ol>\n<li>for each instance with a preset that requires muting, the state switch command is sent (ramp time is set for the entire slot)<\/li>\n<li>after the instance is muted it returns to the master core (xTPInterpreter) to get the next step (onStateChange)\n<ol>\n<li>This method is virtual and the platform can use it to provide custom scenario handling<\/li>\n<\/ol>\n<\/li>\n<li>each preset load command is sent<\/li>\n<li>likewise after each load is completed there is a callback to the xTPInterpreter class which is virtual and can be modified (onSlotLoaded)<\/li>\n<li>Each instance which was muted in the first step is now unmuted &#8211; and once again there is a callback to the onStateChange method<\/li>\n<\/ol>\n<p>The idea here is to enable synchronization between cores, and enable the platform to respond to custom scenarios where the functionality provided in the slot map through GTT is not meeting a specific requirement.<\/p>\n<p>If you&#8217;re responsible for integration &#8211; you will need to:<\/p>\n<ol>\n<li>utilize the provided methods which were moved from your child xTPInterpreter implementation into xTPInterpreter itself.\n<ol>\n<li>You may or may not have used these methods from our winpc code which were moved:\n<ol>\n<li>onSlotLoaded<\/li>\n<li>onStateChange<\/li>\n<li>groupPresetBasedOnInstance (deleted)<\/li>\n<li>loadPresets &#8211; this is still the entry point to the whole process<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>xTPInterpreter now utilizes allocators &#8211; so your initialize function call will need to be updated.<\/li>\n<li>master preset control API was changed to use the correct sized primitives in some cases (mostly going from uint to uchar) &#8211; probably not relevant unless you&#8217;re using these API&#8217;s for a different purpose<\/li>\n<li>The method &#8216;handleSlotUpdate&#8217; is now returns an xAF_Error as status and has specific requirements:\n<ol>\n<li><code data-application=\"com.atlassian.bitbucket-server\" data-language=\"c\"> \/*! \/\/xTPInterpreter.h<br \/>\n*   Abstract method to fire when a new preset map is received<br \/>\n*   The implementer should deinit (if req) load and init master preset controller (m_MasterPresetControl) in this method<br \/>\n*   \\return     status of the operation [xAF_SUCCESS]<br \/>\n*\/<br \/>\nvirtual xAF_Error handleSlotUpdate() = 0;<\/code><\/li>\n<\/ol>\n<\/li>\n<li>Whatever memory you allocated to keep track of presets can be deleted now<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on September 13, 2022<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"preset-and-slotmap-writes-over-xtp_wrap\"><div class=\"documentor-section  section-2337\" id=\"preset-and-slotmap-writes-over-xtp\" data-section-id=\"2337\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">6.4.<\/span><span class=\"title-text\">Preset and Slotmap writes over xTP<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#preset-and-slotmap-writes-over-xtp')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>GTT\/Platform can use xTP commands to send Preset and Slotmap files over xTP.<\/p>\n<p>xTPInterpreter running as part of the master preset controller on micro\/dsp, uses InitializationMsgParser module. InitializationMsgParser uses static storage callback API. This API implemented in plaform code, is expected to return the handle of type <em>StaticStorageInterface*<\/em>, based on <em>flashfileType<\/em> and other relevant arguments.<\/p>\n<div>\n<div>\n<div>API before S release<\/div>\n<div>\n<div>\n<div><em>\u00a0 \u00a0 \u00a0typedef enum FLASHFILETYPE { DSFD = 0,\u00a0 CTRL, \u00a0SLMP,\u00a0 CORE,\u00a0 TUNE,\u00a0 DEVC,\u00a0 DEVR } flashfileType;<\/em><\/div>\n<\/div>\n<\/div>\n<div>\u00a0 \u00a0 \u00a0typedef StaticStorageInterface* (*openMemoryStorage_t)(memAlloc alloc, flashfileType type, xUInt32 coreID, xUInt32 instanceID, IOBase::AccessMode mode, xUInt16 presetID);<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>API extended from S release:<\/p>\n<p><em>\u00a0 \u00a0 \u00a0typedef enum FLASHFILETYPE { DSFD = 0,\u00a0 CTRL, \u00a0SLMP, CORE,\u00a0 TUNE,\u00a0 DEVC,\u00a0 DEVR, PRIN } flashfileType;<\/em><\/p>\n<p><em>\u00a0 \u00a0 \u00a0typedef StaticStorageInterface* (*openMemoryStorage_t)(memAlloc alloc, flashfileType type, xUInt32 coreID, xUInt32 instanceID, IOBase::AccessMode mode, xUInt16 presetID);<br \/>\n<\/em><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<p>There are three xTP commands related this topic. Please refer xTP Specification document for the details. GTT sends these in the order shown below, when user clicks on SendToDevice button in Preset Controller window.<\/p>\n<ul>\n<li>send presetConfig (aka. preset info)\n<ul>\n<li>preset and slotmap size information sent over xTP. Implementation is optional.<\/li>\n<li>flashfilteType of PRIN is used<\/li>\n<\/ul>\n<\/li>\n<li>send presets. preset data correspoding to each preset ID\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>preset data binary data sent over xTP.<\/li>\n<li>flashfilteType of TUNE is used<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>send slotmap\n<ul>\n<li>slotmap data sent over xTP. This command already exists before S release<\/li>\n<li>flashfilteType of is SLMP is used<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>There is no change to the AudioCore callback API implemented by platform on DSP.<\/p>\n<div>\n<div><em>\u00a0 \u00a0 StaticStorageInterface* getOpenStoragePtr(flashfileType type, unsigned int contextualData, IOBase::AccessMode mode)<\/em>;<\/div>\n<\/div>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on September 14, 2022<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"streaming-and-probepoints_wrap\"><div class=\"documentor-section  section-2717\" id=\"streaming-and-probepoints\" data-section-id=\"2717\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">6.5.<\/span><span class=\"title-text\">Streaming and ProbePoints<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#streaming-and-probepoints')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>In previous releases, the streaming and probe point queue memory was always allocated to the maximum size. This &#8220;problem&#8221; has been solved by adding a new configuration to the virtual cores. From the S release onwards, the user can configure whether live streaming is required and how many probe points are needed. According to these settings, xAF will allocate the memory for the ProbePoint queue.<\/p>\n<p>If unchecked, no memory is allocated in the AudioCore class, i.e. no instance of the ProbePoint queue is created. A value of 0 will only allocate memory for state variable streaming, resulting in 2 * 16 * 4 = 128 bytes (safety factor * max state variables * sizeof(float)). For each enabled probe point, the queue is increased by the largest block length used in the xAF instances, multiplied by sizeof(float).<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-21822\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2023\/05\/ProbePoint_enable_core.png\" alt=\"\" width=\"350\" height=\"320\" \/><\/p>\n<p>The streaming data is queued in the audio cores owned by ProbePointQueue and must be unqueued by the platform according to its preference.<\/p>\n<p><span class=\"emph\">Option 1:<\/span> Create a separate thread that is called whenever the CPU is not busy with audio processing. The tricky part here is to ensure that this thread gets the right priority to send its data, which is not an issue for state variable data, but could become a challenge with audio probe points.<\/p>\n<p><span class=\"emph\">Option 2:<\/span> Call dequeue immediately after AudioCores calc has been executed. This is the preferred option from a Windows perspective, as the timing is difficult to handle on Windows while using blocking socket calls.<\/p>\n<p class=\"note\">An example for both options can be found in the VstInOutRouter in the awx_winpc repository<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on May 8, 2023<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"legacy-releases_wrap\"><div class=\"documentor-section  section-3092\" id=\"legacy-releases\" data-section-id=\"3092\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.<\/span><span class=\"title-text\">Legacy Releases<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#legacy-releases')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"r_wrap\"><div class=\"documentor-section  section-1968\" id=\"r\" data-section-id=\"1968\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.1.<\/span><span class=\"title-text\">Rolling Stones<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#r')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"tuning-memory-consolidation-object-update_wrap\"><div class=\"documentor-section  section-1970\" id=\"tuning-memory-consolidation-object-update\" data-section-id=\"1970\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.1.1.<\/span><span class=\"title-text\">AO Update Integration Guide<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#tuning-memory-consolidation-object-update')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><ul>\n<li><strong>REMEMBER! Naming is important just like audio object naming. Class names and file names must match the patterns described here.<\/strong><\/li>\n<li><strong>Also &#8211; the directory structure here is in reference to xAF but AAT objects follow a similar structure.<\/strong><\/li>\n<\/ul>\n<ol>\n<li>Enable Object (if disabled for update)\n<ol>\n<li>public\/include\/audioobjectids.h<\/li>\n<li>cmake for object\n<ol>\n<li>private\/src\/&lt;category&gt;\/CMakeLists.txt\n<ol>\n<li>If a newly enabled category \u2013 disable other objects<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>The following files are specific to xAF but I am leaving them in here to show that we build different libraries for each file type.\u00a0 This is important for being able to separate toolbox and testing code from executable code.\n<ol>\n<li>Update framework\/buildToolbox.cmake\u00a0 \u00a0 (<em>linked only for toolbox usage<\/em>)\n<ol>\n<li>include(${CMAKE_CURRENT_SOURCE_DIR}\/basic\/toolbox\/CMakeLists.txt)<\/li>\n<\/ol>\n<\/li>\n<li>Update framework\/buildMemRecs.cmake\u00a0 (<em>linked for toolbox and unit test usage<\/em>)\n<ol>\n<li>include(${CMAKE_CURRENT_SOURCE_DIR}\/filter\/memrecs\/CMakeLists.txt)<\/li>\n<\/ol>\n<\/li>\n<li>Update framework\/buildBao.cmake\u00a0 (<em>the object code itself, always linked<\/em>)\n<ol>\n<li>include(${CMAKE_CURRENT_SOURCE_DIR}\/filter\/CMakeLists.txt)<\/li>\n<\/ol>\n<\/li>\n<li>see basic\/toolbox and basic\/memrecs<\/li>\n<\/ol>\n<\/li>\n<li>Memory Records -&gt; new class : inherit from <em>CMemoryRecordProperties <\/em>and the object itself\n<ol>\n<li>see basic\/memrecs\/GainMemRecs<\/li>\n<li><em>class CMemRecs : public CGain, public CMemoryRecordProperties<\/em><\/li>\n<\/ol>\n<\/li>\n<li>Object toolbox method put in a toolbox class. which inherit from AudioObjectToolbox class and the object\u2019s memrec class. Add cpp files and header files\n<ol>\n<li>see basic\/toolbox\/GainToolbox<\/li>\n<li><em>class CGainToolbox : public CAudioObjectToolbox, public CGainMemRecs<\/em><\/li>\n<\/ol>\n<\/li>\n<li>Update your CMake files w\/ your new cpp files<\/li>\n<li>Update unit tests\n<ol>\n<li>DDF tests to be new class inheriting from the object&#8217;s toolbox (so it can run exclusively on platforms which the tool executes, say windows)\n<ol>\n<li><em>CGainToolboxTest : public AudioObjectUTBase, public CGainToolbox<\/em><\/li>\n<\/ol>\n<\/li>\n<li>standard &#8216;audio&#8217; tests inherit from the object&#8217;s memrec class (this is so we can correctly instantiate the object on target)\n<ol>\n<li><em>CGainUnitTest : public AudioObjectUTBase, public CGainMemRecs<\/em><\/li>\n<\/ol>\n<\/li>\n<li>update the category\u2019s cmake to conditionally include the toolbox cmake<\/li>\n<\/ol>\n<\/li>\n<li>Mem records test should not be part of toolbox cpp &#8211; there&#8217;s no way to actually verify except on target so it should be run there<\/li>\n<li>Remove code handling subblock overrun as it is now illegal ( we must assume not contiguous ) (assuming you want to save the code memory!)<\/li>\n<li>If the object has any tuning memory at all (state or param) then implement the following methods:\n<ol>\n<li>xInt8* getSubBlockPtr(xUInt16 subBlock)\n<ol>\n<li>This method should return NULL if a subblock is not supported, else the pointer to the start of the subblock requested<\/li>\n<\/ol>\n<\/li>\n<li>xSInt32 getSubBlockSize(xUInt16 subBlock)\n<ol>\n<li>This method should return the size in bytes of the requested subblock, or 0 if invalid<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>Every state variable that was handled in tuneStateXTP now has to be handled in tuneXTP along side parameters.\n<ol>\n<li>The subblock ID&#8217;s cannot overlap between the two (you cannot have subblock 0 state and subblock 0 parameter)<\/li>\n<\/ol>\n<\/li>\n<li>Analyze state variables for consolidation between state and param\n<ol>\n<li>ParameterBiquad simply deletes the states and uses only param now &#8211; this is because it is now legal to write directly to parameter memory during execution.\u00a0 This is now thread safe.<\/li>\n<\/ol>\n<\/li>\n<li>If memory was duplicated for latency purposes \u2013 optimize with subblock restructure<\/li>\n<li>DDF Code needs to be updated\n<ol>\n<li>Category is no longer designated on the STATE_VARIABLE tag<\/li>\n<li>Remember the above rules &#8211; one category per subblock &#8211; one subblock category definition period<\/li>\n<li>XMLHelper methods are updated but there are several ways to accomplish this :\n<ol>\n<li>On template declaration Add &#8220;IDOffset=0&#8221; if subblock is 0, and &#8220;Category=Tuning&#8221; or &#8220;State&#8221; for the category.\n<ol>\n<li>Example from FIR : &lt;Object HiQnetOffset=&#8221;1&#8243; Name=&#8221;Channel1&#8243; IDOffset=&#8221;0&#8243; Category=&#8221;Tuning&#8221; Template=&#8221;FIRTuning2&#8243; \/&gt;<\/li>\n<\/ol>\n<\/li>\n<li>On any object definition, the same applies.\u00a0 This will apply the category and subblock to ALL nested declarations. so make sure they are all in the same subblock\n<ol>\n<li>Example from Delay &#8211; the entire object is in one subblock : &lt;Object Name=&#8221;Delay_1_0_0&#8243; TargetOffset=&#8221;0x0&#8243; BlockID=&#8221;0.5.0&#8243; Category=&#8221;Tuning&#8221; IDOffset=&#8221;0&#8243; HiQnetAddress=&#8221;3.0.0&#8243; AudioObjectTypeId=&#8221;1006&#8243;&gt;<\/li>\n<\/ol>\n<\/li>\n<li>Also the template itself could hardcode a subblock and category &#8211; this isn&#8217;t really recommended as it isn&#8217;t a good use of templates.<\/li>\n<li>You can create a new level (same as #2 really) in your hierarchy where you define the category\/subblock\n<ol>\n<li>Example from Demux : &lt;Object Name=&#8221;Demux SubBlock 0&#8243; HiQnetOffset=&#8221;1&#8243; IDOffset=&#8221;0&#8243; Category=&#8221;Tuning&#8221;&gt;<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>Enable unit test category if disabled\n<ol>\n<li>private\/tests\/xaf_unit_test_config.cmake<\/li>\n<\/ol>\n<\/li>\n<li>Update unit\/integration test cmakes (in your category folder)\n<ol>\n<li>enable your test files\n<ol>\n<li>private\/test\/unit\/&lt;category&gt;\/CMakeLists.txt<\/li>\n<li>private\/test\/integration\/&lt;category&gt;\/CMakeLists.txt<\/li>\n<\/ol>\n<\/li>\n<li>disable others if they are currently enabled but this is a newly enabled category<\/li>\n<\/ol>\n<\/li>\n<li>Don&#8217;t forget to conditionally compile the toolbox unit tests for say Win32\/Win64<\/li>\n<\/ol>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 9, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"configuring-memory-latency-level_wrap\"><div class=\"documentor-section  section-1971\" id=\"configuring-memory-latency-level\" data-section-id=\"1971\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.1.2.<\/span><span class=\"title-text\">Configuring Memory Latency Level<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#configuring-memory-latency-level')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>Memory latency levels refers to the access speed of the memory segments. The access speed of the memory where the data is placed, significantly affects MIPS consumption of an algorithm. Thus in a given SFD, placing the data buffers (memory records) in the memory segments in an optimal way is crucial for overall MIPS consumption.<\/p>\n<p>The latency level of each memory record can be set in two ways &#8211;<\/p>\n<ol>\n<li>By the developer during coding based on the perceived complexity of the object<\/li>\n<li>By the Signal Flow Designer during design phase based on the existing objects in the design and the available resources on the platform.<\/li>\n<\/ol>\n<p>By default the latency levels of all the memory records of all the objects are set to the highest level (16) during instantiation. The developer can set the recommended latency level in the method &#8211; getMemRecords(). If the latency level for a specific memory record is not set in this method, the default level set during instantiation will remain. The latency level and other memory details (size and alignment) are passed to the GTT in response the function call &#8211; getTuningInformationBufferXML().<\/p>\n<p>With the details of all the memory records of all the objects through the method &#8211; getTuningInformationBufferXML() &#8211; GTT presents the information through the below GUI to the Signal Flow Designer.<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-14034\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2021\/12\/MemLatencyEditor.jpg\" alt=\"\" width=\"759\" height=\"578\" \/><\/p>\n<p>The Signal Flow Designer shall change the latency level (with the drop-down menu) for optimal performance based on the available resources and importance of this particular memory record among the other memory records of the other objects present within the signal flow. The total memory requirement for the signal flow in each memory level is displayed at the top. The desired memory latency table can also be exported to a file \/ imported from a file.<\/p>\n<p>These memory details are passed to the device as part of SFD.<\/p>\n<p>On boot-up the framework shall parse the SFD data with the DSFD Parser and allocate memory for each object at the configured latency level in the method &#8211; initFramework().<\/p>\n<p>&nbsp;<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 9, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"framework-feature-configurability_wrap\"><div class=\"documentor-section  section-1979\" id=\"framework-feature-configurability\" data-section-id=\"1979\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.1.3.<\/span><span class=\"title-text\">Framework Feature Configurability<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#framework-feature-configurability')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>With the R-Release a new configuration option has been added. By default the high configuration will be build. Following configurations are supported and can be selected:<\/p>\n<ul>\n<li><span class=\"emph\">low<\/span><\/li>\n<li><span class=\"emph\">high<\/span> (additional features)\n<ul>\n<li>Swag (Mips &amp; Memory)<\/li>\n<li>ProbePoint (formerly LiveStreaming)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>To utilize this functionality you can append this argument to the python build commands: <span class=\"emph\">&#8211;featureConfig=high or -fc=high<\/span><\/p>\n<p>These two commands result in mostly the same binary but with these exceptions.\u00a0 Low will exclude AudioProcessing and AudioCore and provide only AudioProcessingBase and AudioCoreBase.<\/p>\n<p>When implementing as a platform developer &#8211; either with or without AudioCore &#8211; you will choose your feature set by choosing which class to instantiate.<\/p>\n<p>Here are examples from our IVP project<\/p>\n<p>Implementing AudioCore for full features (when building with -fc=full) class<em> CVSTCore : public CAudioCore, public CWinCoreShared\u00a0<\/em><\/p>\n<p>Implementing AudioCoreBase for the basic features (no profiling or probe points) <em>class CVSTCoreLite : public CAudioCoreBase, public CWinCoreShared<\/em><\/p>\n<p>It is worth noting you can build full and instantiate the lite class &#8211; they&#8217;re included.\u00a0 You&#8217;ll just have to rely on your linker settings to exclude the extra code.<\/p>\n<p>As above &#8211; if implementing only for AudioProcessing the same applies.\u00a0 AudioProcessing vs AudioProcessingBase.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 15, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"clarifi-memory-allocation-for-optimized-mcps-on-gul_wrap\"><div class=\"documentor-section  section-2001\" id=\"clarifi-memory-allocation-for-optimized-mcps-on-gul\" data-section-id=\"2001\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.1.4.<\/span><span class=\"title-text\">ClariFi memory allocation for optimized MCPS on GUL<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#clarifi-memory-allocation-for-optimized-mcps-on-gul')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>Some of ClariFi memory records include FFT buffers. The MCPS performance of ClariFi standalone depends on allocation of these buffers to lower memory latency levels. More details on this is available <a href=\"https:\/\/audioworx.transfunnel.co\/old\/?page_id=4424#clarifi\">here.<\/a><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 14, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"queen-current-release_wrap\"><div class=\"documentor-section  section-1911\" id=\"queen-current-release\" data-section-id=\"1911\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.2.<\/span><span class=\"title-text\">Queen<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#queen-current-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"framework-initialization_wrap\"><div class=\"documentor-section  section-1910\" id=\"framework-initialization\" data-section-id=\"1910\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.2.1.<\/span><span class=\"title-text\">Framework Initialization<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#framework-initialization')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>To initialize the framework platform needs to call only <span class=\"emph\">CAudioProcessing::initFramework() <\/span>which will allocate memory for framework and audio objects and also initialize both framework and audio objects.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 9, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"memory-latency-level-configurability_wrap\"><div class=\"documentor-section  section-1939\" id=\"memory-latency-level-configurability\" data-section-id=\"1939\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.2.2.<\/span><span class=\"title-text\">Memory Latency Level Configurability<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#memory-latency-level-configurability')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>This feature provides control to a signal flow designer over memory latency selected for objects. The SFD designer can configure the memory latency levels using GTT to optimize the MIPS requirement.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 9, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"in-place-computation_wrap\"><div class=\"documentor-section  section-1937\" id=\"in-place-computation\" data-section-id=\"1937\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.2.3.<\/span><span class=\"title-text\">In Place Computation<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#in-place-computation')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>In-place computation feature allows audio objects to convey to the GTT the capability of operating audio object to use same buffers for input and output. Flag <span class=\"emph\">isInplaceComputationEnabled<\/span> can be checked in static metadata of the audio object from signal flow.<br \/>\n<span class=\"emph\">For isInplaceComputationEnabled audio objects, the audio object processing states bypass and stop would have the same behavior as bypass has the buffer usage limitation.<\/span><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 9, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"windows-application-library-separation_wrap\"><div class=\"documentor-section  section-1938\" id=\"windows-application-library-separation\" data-section-id=\"1938\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.2.4.<\/span><span class=\"title-text\">Windows application library separation<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#windows-application-library-separation')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The build process on Windows was done in one step to generate the library and dll. Now the application has been separated and placed in a new repository &#8211; awx_winpc.<\/p>\n<p>Hence forth library generation shall be done in xAF repo followed by dll\/application generation in the awx_winpc repo. Same procedure shall apply to build unit test application for Windows PC. To know exact commands refer readMe.txt in the respective repositories.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 9, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"core-type-in-sfd_wrap\"><div class=\"documentor-section  section-1935\" id=\"core-type-in-sfd\" data-section-id=\"1935\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.2.5.<\/span><span class=\"title-text\">Core type in SFD<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#core-type-in-sfd')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>While creating the device user needs to select target core type carefully.\u00a0 SFD might not work if user selected wrong core type because it is used to calculate memory records sizes.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 9, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"deprecated-xtp-commands_wrap\"><div class=\"documentor-section  section-1936\" id=\"deprecated-xtp-commands\" data-section-id=\"1936\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.2.6.<\/span><span class=\"title-text\">Deprecated xTP commands<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#deprecated-xtp-commands')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>Get memory size xTP command is deprecated.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 9, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"platform-input-and-output-buffers_wrap\"><div class=\"documentor-section  section-1945\" id=\"platform-input-and-output-buffers\" data-section-id=\"1945\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.2.7.<\/span><span class=\"title-text\">Platform input and output buffers<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#platform-input-and-output-buffers')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>Since xAF is reusing platform buffers, platform should give pointers to the inputs which has valid and non-overlapping memory.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 11, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"p-release_wrap\"><div class=\"documentor-section  section-1832\" id=\"p-release\" data-section-id=\"1832\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.3.<\/span><span class=\"title-text\">Pink Floyd<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#p-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"memory-reader-official-release_wrap\"><div class=\"documentor-section  section-1833\" id=\"memory-reader-official-release\" data-section-id=\"1833\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.3.1.<\/span><span class=\"title-text\">Memory Reader Official Release<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#memory-reader-official-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>We have a utility called memory reader, which implements the file I\/O interface.\u00a0 This class is used to stream data from a memory location as if it was an actual file.\u00a0 Previously this existed only as an internal tech tool, but users have requested it so now it is officially released.\u00a0 You can find the header in the public includes folder, under Interface.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on October 21, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"new-core-objects_wrap\"><div class=\"documentor-section  section-1874\" id=\"new-core-objects\" data-section-id=\"1874\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.3.2.<\/span><span class=\"title-text\">New Core Objects<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#new-core-objects')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>In this P release, following two new core objects are added:<\/p>\n<ul>\n<li>Float To Fixed<\/li>\n<li>Fixed To Float<\/li>\n<\/ul>\n<p>These objects works as part of the Audio Core class. The object will not handle more than one type of conversion per instance.<\/p>\n<p>This object is used to convert float or fixed to fixed or float.\u00a0 This is typically used for a system which outputs fixed point audio (say 24 bit in integer format) but processes in float.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 3, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"float-to-fixed-core-object-2_wrap\"><div class=\"documentor-section  section-1873\" id=\"float-to-fixed-core-object-2\" data-section-id=\"1873\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.3.2.1.<\/span><span class=\"title-text\">Float To Fixed Core Object<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#float-to-fixed-core-object-2')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The float to fixed (float2fixed) core object accepts audio buffers that are in floating point format and outputs buffers that are in fixed point format (16-bit, 24-bit, 32-bit etc). The user can configure the scalar value to indicate the required fixed point format of the output samples. This scalar value is multiplied with the floating point input samples to generate the fixed point output samples.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 3, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"fixed-to-float-core-object-2_wrap\"><div class=\"documentor-section  section-1872\" id=\"fixed-to-float-core-object-2\" data-section-id=\"1872\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.3.2.2.<\/span><span class=\"title-text\">Fixed To Float Core Object<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#fixed-to-float-core-object-2')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The fixed to float (fixed2float) core object accepts audio buffers that are in fixed point format (16-bit, 24-bit, 32-bit, etc) and outputs buffers that are in floating point format. The user can configure the scalar value to suit the fixed point format of the input samples. The fixed point input samples are divided by this scalar value to generate the floating point output samples.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 3, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"core-objects-design-details_wrap\"><div class=\"documentor-section  section-1871\" id=\"core-objects-design-details\" data-section-id=\"1871\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.3.2.3.<\/span><span class=\"title-text\">Core Objects Design Details<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#core-objects-design-details')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The details given below are common to both the core objects:<\/p>\n<ul>\n<li>Float To Fixed<\/li>\n<li>Fixed To Float<\/li>\n<\/ul>\n<p><strong>Design Variables<\/strong><\/p>\n<ul style=\"list-style-type: disc;\">\n<li>Configurable number of channels<\/li>\n<li>Supports all sample rates and block lengths<\/li>\n<li>Floating point scalar value provided as Additional Variable<\/li>\n<\/ul>\n<p><strong>Platform Dependencies<\/strong><br \/>\nThis core object shall be accessed through the Audio Core class of the xAF framework. The platform shall not directly interact with this core object.<\/p>\n<p><strong>API<\/strong><\/p>\n<p><strong>During Initialization:<\/strong><\/p>\n<ul style=\"list-style-type: square;\">\n<li><em>coreObjectTypeID getType()<\/em><br \/>\nReturns the core object ID :CORE_OBJ_FLOAT2FIXED (5) or CORE_OBJ_FIXED2FLOAT (6)<\/li>\n<li><em>xFloat32 getProcTime()<\/em><br \/>\nReturns the duration (in seconds) of one block of data.<\/li>\n<li><em>xUInt32 getInputSampleRate()<\/em><br \/>\nReturns the sample rate the object operates at.<\/li>\n<li><em>xUInt32 getOutputSampleRate()<\/em><br \/>\nReturns the sample rate the object operates at.<\/li>\n<li><em>xUInt16 getInputBlockLength()<\/em><br \/>\nReturns the input block length of the object.<\/li>\n<li><em>xUInt16 getOutputBlockLength()<\/em><br \/>\nReturns the output block length of the object.<\/li>\n<li><em>xUInt16 getNumAudioInputs()<\/em><br \/>\nReturns the number of input channels of the object.<\/li>\n<li><em>xUInt16 getNumAudioOutputs()<\/em><br \/>\nReturns the number of output channels of the object.<\/li>\n<li><em>xAF_Error init(const CoreObjectInfo&amp; objInfo, memAllocRef allocator, xUInt32&amp; memoryAllocated)<\/em><br \/>\nobjInfo Struct that has base info and pointer to additional config data<br \/>\nallocator Allocator method<br \/>\nmemoryAllocated Variable to return the amount of memory allocated[bytes]<\/li>\n<\/ul>\n<p>CoreObjectInfo:<br \/>\n<em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 xUInt16 numInputs; \u00a0 \u00a0 \u00a0 \u00a0\u00a0 \/\/ Number of channels<\/em><br \/>\n<em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 xUInt16 inBlockLen;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Input Block Length<\/em><br \/>\n<em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xUInt32 inSampleRate;\u00a0\u00a0 \/\/ Operational sample rate<\/em><br \/>\n<em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 void* coreObjConfig;<\/em><\/p>\n<p>Pointer to additional configuration data<br \/>\nByte 0 \u2013 3: Scalar value (4 bytes)<\/p>\n<p><strong>Audio Interrupts (Algorithm Execution):<\/strong><\/p>\n<ul style=\"list-style-type: square;\">\n<li><em>xAF_Error calc(float** inputs, float** outputs)<\/em><br \/>\ninputs: Pointer to audio input buffers<br \/>\noutputs: Pointer to audio output buffers<\/li>\n<\/ul>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 3, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"loadseti-callback_wrap\"><div class=\"documentor-section  section-1877\" id=\"loadseti-callback\" data-section-id=\"1877\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.3.3.<\/span><span class=\"title-text\">LoadSeti Callback<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#loadseti-callback')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>When a new preset data is to be applied, the instance output is ramped down to mute state and the new preset data is applied before ramping up the instance output to its normal level. This is to avoid any artifacts \/ glitches. The reading of new preset data from the memory and their application is handled in the function doMuteCycleOperation() that furthers calls the function loadSETIDataFromInterface().<\/p>\n<p>This function doMuteCycleOperation() was a blocking call that might span across multiple audio interrupts [calc()]. To have un-interrupted \/ non-blocked calc(), \u00a0provision is made to call back loadSETIDataFromInterface() from a different context. The default callback is provided by the framework that is made public to have the possibility to be called from the custom callback.<\/p>\n<p>Two new public APIs have been introduced:<\/p>\n<ul>\n<li>abstractedNonBlockingOps() \u2013 Default callback function that calls the below function<\/li>\n<li>handleNonBlockingOps() \u2013 this further calls loadSETIDataFromInterface()<\/li>\n<\/ul>\n<p><strong>API:<\/strong><\/p>\n<p>\/**<\/p>\n<p>*\u00a0\u00a0 Start mute cycle operation for the instance<\/p>\n<p>*\u00a0\u00a0 \\param\u00a0 cmdHdr\u00a0\u00a0\u00a0\u00a0\u00a0 To hold details of slot load command and status<\/p>\n<p>*\u00a0\u00a0 \\return\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Error, if any &#8211; this status is if the &#8216;thread&#8217; was started correctly or not<\/p>\n<p>*\/<\/p>\n<p>virtual xAF_Error abstractedNonBlockingOps(CxTPSlotLoadHeader* cmdHdr);<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>*\u00a0\u00a0 Handle actual processing of SETI files, could be on alternate thread depending on platform<\/p>\n<p>*\u00a0\u00a0 Stores state in m_NonBlockingResult<\/p>\n<p>*\u00a0\u00a0 \\param\u00a0 cmdHdr\u00a0\u00a0\u00a0\u00a0\u00a0 To hold details of slot load command and status<\/p>\n<p>*\/<\/p>\n<p>void handleNonBlockingOps(CxTPSlotLoadHeader* cmdHdr);<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 3, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"caccelerator-class-update_wrap\"><div class=\"documentor-section  section-1876\" id=\"caccelerator-class-update\" data-section-id=\"1876\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.3.4.<\/span><span class=\"title-text\">CAccelerator Class Update<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#caccelerator-class-update')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>To close the HW accelerator driver properly, the following two APIs were introduced in CAccelerator class.<\/p>\n<p>closeAccelerator() will be called by HAL which further calls closeHwAccelerator() API which will be implemented by platform.<\/p>\n<p>closeHwAccelerator() is a pure virtual function that shall be overridden by the platform code.<\/p>\n<p>\/**<\/p>\n<p>*\u00a0\u00a0 API called from HAL to close requested accelerator driver<\/p>\n<p>*\u00a0\u00a0 \\param isClosed\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 make sure accelerator is closed once<\/p>\n<p>*\u00a0\u00a0 \\param accelerator\u00a0\u00a0\u00a0\u00a0\u00a0 handle of accelerator<\/p>\n<p>*\u00a0\u00a0 \\return xAF_SUCCESS when successful<\/p>\n<p>*\/<\/p>\n<p>static xAF_Error closeAccelerator(xBool isClosed, CAccelerator&amp; accelerator);<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>*\u00a0\u00a0 To close Hardware accelerator driver<\/p>\n<p>*\u00a0\u00a0 \\return success if close is successful<\/p>\n<p>*\/<\/p>\n<p>virtual xAF_Error closeHwAccelerator() = 0;<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 3, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"memory-requirement-api_wrap\"><div class=\"documentor-section  section-1878\" id=\"memory-requirement-api\" data-section-id=\"1878\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.3.5.<\/span><span class=\"title-text\">Memory Requirement API<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#memory-requirement-api')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>A new API <em>retrieveTotalMemUsed ()<\/em> was introduced to track the memory allocation done by the core and framework. This API shall be called from the application to get the memory details.<\/p>\n<p>Another API \u2013 <em>resetMemAccumulators() <\/em>is introduced to clear all the memory counter variables to zero.<\/p>\n<p>&nbsp;<\/p>\n<p>API:<\/p>\n<p>\/**<\/p>\n<p>*\u00a0\u00a0 This method is used to retrieve the memory usage numbers<\/p>\n<p>*\u00a0\u00a0 \\param\u00a0 buffer\u00a0 A buffer allocated by the platform<\/p>\n<p>*\u00a0\u00a0 \\return Structure containing all the accumulated memory thus far<\/p>\n<p>*\/<\/p>\n<p><em>tTotalMemoryReq retrieveTotalMemUsed(xInt8* buffer = 0);<\/em><\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>*\u00a0\u00a0 Resets all memory accumulated values to 0<\/p>\n<p>*\/<\/p>\n<p><em>void resetMemAccumulators();<\/em><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 3, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"oasis-current-release_wrap\"><div class=\"documentor-section  section-1756\" id=\"oasis-current-release\" data-section-id=\"1756\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.4.<\/span><span class=\"title-text\">Oasis<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#oasis-current-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"bao-separation_wrap\"><div class=\"documentor-section  section-1758\" id=\"bao-separation\" data-section-id=\"1758\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.4.1.<\/span><span class=\"title-text\">BAO Separation<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#bao-separation')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>We&#8217;ve separated BAO&#8217;s so they can be linked individually to optimize memory. To do this, we have consolidated the method for generating the BAO &#8216;library&#8217; with the external audio object library.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on September 17, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"bao-object-configuration_wrap\"><div class=\"documentor-section  section-1792\" id=\"bao-object-configuration\" data-section-id=\"1792\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.4.1.1.<\/span><span class=\"title-text\">BAO Object Configuration<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#bao-object-configuration')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>Basic audio objects (BAOs) can be linked individually, versus linking all of them, to optimize memory.<\/p>\n<p>All BAO&#8217;s are always compiled, but linking is controlled by modifying a file which includes object ID&#8217;s.\u00a0 Simply comment out an object ID definition from the header belowand re-run the cmake to stop linking an object.<\/p>\n<p><em>AudioObjectIDs.h<\/em><\/p>\n<p>By default, this file is used by the internal CMAKE to select which BAO&#8217;s are linked.\u00a0 It is located in <em>public\/include<\/em>.\u00a0 <em>Note, AudioIO and ControlIn are\u00a0always linked.\u00a0\u00a0<\/em>Users can edit this file directly, or supply their own file.<\/p>\n<p>To supply your own AudioObjectID header :<\/p>\n<ul>\n<li>Copy the existing\u00a0<em>AudioObjectIDs.h\u00a0<\/em>file to use as your base (these ID&#8217;s are important! do not change)<\/li>\n<li>In your CMAKE which calls the external\/src cmake, set the variable below to your header file path\n<ul>\n<li>ID_PATH_BAO<\/li>\n<\/ul>\n<\/li>\n<li>If you do not set this variable, the script will default to the file in public\/include<\/li>\n<\/ul>\n<p>What happens:<\/p>\n<ul>\n<li>CMAKE runs a python script which crosschecks all ID&#8217;s provided to it through headers, with the include paths provided. (BAO header paths are provided for you)<\/li>\n<li>All successful matches are added to the external audio object switch statement that creates the objects.\u00a0 This is the only actual reference to the class, and causes the linkage.<\/li>\n<\/ul>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on September 17, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"moving-the-public-header-files_wrap\"><div class=\"documentor-section  section-1762\" id=\"moving-the-public-header-files\" data-section-id=\"1762\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.4.2.<\/span><span class=\"title-text\">Moving configurable BAO header files<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#moving-the-public-header-files')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The BAOs can be linked individually as discussed in the section &#8211; BAO separation.<\/p>\n<p>The header files of all the BAO <em>were<\/em> inside their respective sub-folders under the folder:<\/p>\n<p>\\extendable-audio-framework\\private\\include\\framework<\/p>\n<p>To facilitate the support of linking BAOs on requirement basis, the sub-folders with the header files of all the configurable BAOs under the above folder are moved to the new public folder:<\/p>\n<p>\\extendable-audio-framework\\public\\include\\AO<\/p>\n<p>Following are the sub-folders moved:<\/p>\n<ol>\n<li>basic<\/li>\n<li>control<\/li>\n<li>dynamic<\/li>\n<li>filter<\/li>\n<li>mixer<\/li>\n<li>monitor<\/li>\n<li>routing<\/li>\n<li>source<\/li>\n<\/ol>\n<p>Please note that the common utility files under the folders &#8211; basic and source &#8211; were not moved.<\/p>\n<p>Accordingly the include path of all the files that were using these header files were modified.<\/p>\n<p>Note, this change also took us towards relative include paths to allow simpler setup on external linking.\u00a0 We are moving towards only requiring &#8216;public\/include&#8217; to be added to the include paths.\u00a0 Now all internal CPP files include these headers with relative paths.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on September 17, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"platform-api_wrap\"><div class=\"documentor-section  section-1761\" id=\"platform-api\" data-section-id=\"1761\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.4.3.<\/span><span class=\"title-text\">Platform API<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#platform-api')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p><span style=\"text-decoration: underline;\"><strong>AudioCore API updates<\/strong><\/span><\/p>\n<p><strong><em>DequeueAll<\/em><\/strong><\/p>\n<p>There is a new public method in AudioCore that can be used to force dequeueing all messages.<\/p>\n<p><em>void AudioCore::dequeueAll();<\/em><\/p>\n<p>This method simply calls the normal dequeue method with unlimited time.\u00a0 It doesn&#8217;t have a purpose in the normal use of AudioCore but is provided in case there is a situation where a message MUST be processed immediately.<\/p>\n<p><strong><em>AudioCore Buffer Changes<\/em><\/strong><\/p>\n<p>The alignment requirements for AudioCore buffers are updated.\u00a0 The buffers must now be 16 byte aligned.\u00a0 This change is driven by the requirement in <em>AudioProcessing<\/em>.\u00a0 Note if you use <em>AudioProcessing<\/em> directly you will have to ensure those buffers are 16 byte aligned too.<\/p>\n<p>To be clear, each buffer within inputs (inputs[0], inputs[1]) must be allocated on a\u00a0 16 byte boundry.<\/p>\n<p><em>xAF_Error AudioCore::calc(xAFAudio** inputs, xAFAudio** outputs);<\/em><\/p>\n<p><em>xAF_Error CAudioProcessing::calc(xAFAudio** inputs, xAFAudio** outputs)<\/em><\/p>\n<p><span style=\"text-decoration: underline;\"><strong>Hardware Abstraction Layer (HAL) updates<\/strong><\/span><\/p>\n<p>Following are the additions to the HAL APIs:<\/p>\n<p>\/**<br \/>\n* \\brief Create the HAL instance in parallel to core class using singleton design pattern method.<br \/>\n* If the API is called first time and instance is not created, API will create instance.<br \/>\n* Otherwise it will return an error for trying to create the singleton twice.<br \/>\n* \\param alloc function for allocating memory<br \/>\n* \\param dealloc function for deallocating memory<br \/>\n* \\param osal pointer to application OSAL<br \/>\n* \\return xAF_SUCCESS after successfull instantiation of HAL instance<br \/>\n*\/<br \/>\nstatic xAF_Error createHalInstance(memAllocRef alloc, memDeAllocRef dealloc, COsal* osal);<\/p>\n<p><span style=\"text-decoration: underline;\"><strong>OS Abstraction Layer (OSAL)<br \/>\n<\/strong><\/span><\/p>\n<p>The audio framework and HAL can access OS resources by using the COsal supported by the target platform. The OSAL exposes APIs that can be used by audio framework and HAL to perform their tasks. COsal should be instantiated by the platform similar to instantiating core class. COsal should be instantiated once per device and same instance should be registered for multiple instances of core class or framework instance. The APIs in COsal class are listed below.<\/p>\n<p>\/**<br \/>\n* Creates a semaphore object, allocates required resources and assigns the values of maxValue and initialValue to it.<br \/>\n* \\param maxValue Maximum count value for the semaphore object<br \/>\n* \\param initialValue Initial value for the semaphore object<br \/>\n* \\return Pointer to semaphore object.<br \/>\n*\/<br \/>\nvirtual XAF_OSAL_SEM_HANDLE* osalSemCreate(xUInt8 maxValue, xUInt8 initialValue) const = 0;<\/p>\n<p>\/**<br \/>\n* Deletes the semaphore object and releases the allocated resources<br \/>\n* \\param sem Semaphore object to be deleted<br \/>\n* \\return xAF_SUCCESS when successful otherwise errorcode.<br \/>\n*\/<br \/>\nvirtual xAF_Error osalSemDestroy(XAF_OSAL_SEM_HANDLE* sem) const = 0;<\/p>\n<p>\/**<br \/>\n* \\brief Takes the semaphore object if it is available. Otherwise the calling task or thread<br \/>\n* will be blocked. This should not be called from interrupt service routine.<br \/>\n* \\param sem Semaphore object for synchronization<br \/>\n* \\return xAF_SUCCESS when successful otherwise errorcode.<br \/>\n*\/<br \/>\nvirtual xAF_Error osalSemWait(XAF_OSAL_SEM_HANDLE* sem) const = 0;<\/p>\n<p>\/**<br \/>\n* \\brief Takes the semaphore object if it is available. If the semaphore is not available,<br \/>\n* the calling task or thread will not be blocked.<br \/>\n* \\param sem Semaphore object for synchronization<br \/>\n* \\return xAF_SUCCESS when successful otherwise errorcode.<br \/>\n*\/<br \/>\nvirtual xAF_Error osalSemTryWait(XAF_OSAL_SEM_HANDLE* sem) const = 0;<\/p>\n<p>\/**<br \/>\n* Releases or signals the semaphore object.<br \/>\n* \\param sem Semaphore object for synchronization<br \/>\n* \\return xAF_SUCCESS when successful otherwise errorcode.<br \/>\n*\/<br \/>\nvirtual xAF_Error osalSemPost(XAF_OSAL_SEM_HANDLE* sem) const = 0;<\/p>\n<p>\/**<br \/>\n* \\brief Enables protection for shared resources from concurrency access<br \/>\n* The instructions below this API will be executed atomically<br \/>\n* \\return xAF_SUCCESS when successful otherwise errorcode.<br \/>\n*\/<br \/>\nvirtual xAF_Error osalEnterCriticalRegion() const = 0;<\/p>\n<p>\/**<br \/>\n* \\brief Disables protection for shared resources from concurrency access<br \/>\n* The instructions above this API will be executed atomically<br \/>\n* \\return xAF_SUCCESS when successful otherwise errorcode.<br \/>\n*\/<br \/>\nvirtual xAF_Error osalExitCriticalRegion() const = 0;<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on September 11, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"nirvana-current-release_wrap\"><div class=\"documentor-section  section-1711\" id=\"nirvana-current-release\" data-section-id=\"1711\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.5.<\/span><span class=\"title-text\">Nirvana<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#nirvana-current-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"m-miles-davis_wrap\"><div class=\"documentor-section  section-1587\" id=\"m-miles-davis\" data-section-id=\"1587\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.6.<\/span><span class=\"title-text\">Miles Davis<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#m-miles-davis')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"platform-api-changes_wrap\"><div class=\"documentor-section  section-1588\" id=\"platform-api-changes\" data-section-id=\"1588\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.6.1.<\/span><span class=\"title-text\">Platform API Changes<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#platform-api-changes')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>Some platform APIs were modified (with CCB approval). These APIs are listed and explained below:<\/p>\n<p class=\"heading\">CAudioProcessing related API changes<\/p>\n<p>If using the old-school xAF and are still allocating instances from the platform, this change is now needed:<\/p>\n<p style=\"text-align: left;\"><div class=\"doc-callouts doc-message\" style=\"\"> CAudioProcessing();\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ constructor without arguments\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0OLD<br \/>\nCAudioProcessing(<span class=\"emph\">alloc<\/span>, <span class=\"emph\">deAlloc<\/span>);\u00a0 \/\/ constructor now needs reference to memory allocator and deallocator\u00a0 <span class=\"emph\">NEW<\/span><\/div><br \/>\n<div class=\"doc-callouts doc-message\" style=\"\">retValue = newInst-&gt;initFramework(proc, objects, allocate, lObjMemInfo);\u00a0 \u00a0OLD<br \/>\nretValue = newInst-&gt;initFramework(<span class=\"emph\">proc<\/span>, <span class=\"emph\">objects<\/span>);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"emph\">NEW<\/span><\/div><\/p>\n<p><span class=\"emph\">newly added API`s: see addition<\/span><\/p>\n<p class=\"heading\">AudioCore related API changes<\/p>\n<p>With the latest AudioCore class in xAF<\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\">CAudioCore(allocatorDel alloc, deAllocatorDel deAlloc, simpleAllocatorDel simpleAlloc, simpleDeAllocatorDel simpleDeAlloc);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 OLD<br \/>\nCAudioCore(memAllocRef <span class=\"emph\">alloc<\/span>, memDeAllocRef <span class=\"emph\">deAlloc<\/span>);\u00a0 \/\/ constructor now needs only the reference to one memory allocator and deallocator\u00a0 \u00a0 \u00a0<span class=\"emph\">NEW<\/span><\/div><\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\">xAF_Error init(CoreInfo&amp; coreInfo, CoreObjectInfo coreObjInfo[], int objInfo[][NUM_MEMLATENCYTYPES]);\u00a0 \u00a0 OLD<br \/>\nxAF_Error init(int <span class=\"emph\">coreId<\/span>);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"emph\">NEW<\/span><\/div><\/p>\n<p>Audio Core now loads core files itself (the platform doesn&#8217;t need to do that anymore)<\/p>\n<p>The platform can still request the memory information (<em>objInfo<\/em>) from the instance member directly.<\/p>\n<p><span class=\"emph\">newly added API`s: see addition<\/span><\/p>\n<p class=\"heading\">Deprecating one of the two required platform memory allocators and de-allocators<\/p>\n<p>Prior to M, we had 2 memory allocators (and de-allocators) associated with porting Awx to a new platform.<\/p>\n<ul>\n<li><i>The first one was a simple one that takes size and alignment only<\/i><\/li>\n<li><i>The second takes heap pool requested as well as memory latency on TOP of size and alignment.<\/i><\/li>\n<\/ul>\n<p>In M, we deprecated the simple allocator and switched all components to use the second allocator described above:<\/p>\n<ul>\n<li>Audio Core ctor:<\/li>\n<\/ul>\n<p><div class=\"doc-callouts doc-message\" style=\"\">CAudioCore(allocatorDel alloc, deAllocatorDel deAlloc, simpleAllocatorDel simpleAlloc, simpleDeAllocatorDel simpleDeAlloc);<br \/>\nCAudioCore(allocatorDel alloc, deAllocatorDel deAlloc);<\/div><\/p>\n<ul>\n<li>Platform memory handler<\/li>\n<\/ul>\n<p><div class=\"doc-callouts doc-message\" style=\"\">StaticStorageInterface* openMemoryStorage(void* (*alloc)(unsigned int, unsigned int)&#8230;)<br \/>\nStaticStorageInterface* openMemoryStorage(void* (*alloc)(unsigned int, unsigned int, enum xAF_HEAP, enum xAF_memLatency)&#8230;)<\/div><\/p>\n<ul>\n<li><em>xAFInitMasterControl<\/em> and <em>xAFDeallocMasterControl<\/em> need to use the second allocator\u00a0 and deallocator instead of the simple ones<\/li>\n<li><em>xAFInitMasterPresetControl<\/em> and <em>xAFDeinitMasterPresetControl<\/em> need to use the second deallocator instead of the simple ones<\/li>\n<li><em>InitializationMsgParser<\/em> c-tor needs to be passed in the second allocator\/deallocator instead of the simple ones<\/li>\n<li>The <em>SFD<\/em> and <em>Device Parser init<\/em> methods needs to\u00a0be passed in the second allocator\/deallocator instead of the simple ones<\/li>\n<\/ul>\n<p class=\"heading\">Switching from Memory Pointers to Memory References<\/p>\n<p>In addition, for all the C++ (non C) classes above, the memory pointers being passed in have been switched to memory references instead.<\/p>\n<p class=\"heading\">IO Classes Modification Needed<\/p>\n<p>The File \/ Flash interface classes implemented by the platform inherit the generic classes and must implement the getInstanceOf method which has now changed to take in an allocator (don&#8217;t use new anymore &#8211; allocator passed must be used). For example for a file interface for win32 platform, the change looks something like:<\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\">FileInterface* getInstanceOf() { return new FileInterfaceWin32(); } \/\/ OLD<br \/>\nFileInterface* getInstanceOf(memAllocRef alloc) const<br \/>\n{<br \/>\nFileInterfaceWin32* retPtr = static_cast&lt;FileInterfaceWin32*&gt;(alloc(sizeof(FileInterfaceWin32), 4, GENERAL_PURPOSE_MEM, LEVEL5));<br \/>\nnew (retPtr) FileInterfaceWin32(); \/\/ In place new<br \/>\nreturn retPtr;<br \/>\n}<\/div><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on April 8, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"additions_wrap\"><div class=\"documentor-section  section-1615\" id=\"additions\" data-section-id=\"1615\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.6.2.<\/span><span class=\"title-text\">Additions<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#additions')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"heading\">Audio Core<\/p>\n<p><span class=\"emph\">Audio Interrupt Handling<\/span><\/p>\n<p>There is no specific API that needs to be implemented to make use of the new strategy &#8211; using AudioCore automatically enables using queues for state tuning and control.<\/p>\n<p><span class=\"emph\">Audio Core Helper methods<\/span><\/p>\n<ul>\n<li>getOutputBufferBlockSizes<\/li>\n<li>getInputBufferSampleRates<\/li>\n<li>getOutputBufferSampleRates methods have been added to the audio core class and can be called from the platform<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span class=\"emph\">Core Output Routing<\/span><\/p>\n<p>This method returns the routing of the core output to the platform.<\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Returns all output connections from the virtual cores<br \/>\n<span class=\"emph\">connections\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span>\u00a0 \u00a0The description of the connections out of this core. Each connection is described via source pin, destination core and pin<br \/>\n<span class=\"emph\">numConnections\u00a0 <\/span>\u00a0 The total number of connections out of the virtual core<br \/>\nreturns error, if any<\/p>\n<p>xAF_Error getCoreOutputRouting(tCoreOutConnection*&amp; <span class=\"emph\">connections<\/span>, xUInt16&amp; <span class=\"emph\">numConnections<\/span>) const;<\/p>\n<p><\/div><\/p>\n<p>&nbsp;<\/p>\n<p><span class=\"emph\">Resetting state history<\/span><\/p>\n<p>If the platform detects a NaN or needs to reset the history of objects within a signal flow, an API has been added to allow that. The platform triggers the method and the framework then takes care that all objects reset their history.<\/p>\n<p>From Audio Core:<\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Reset the history of the audio core &#8211; Sets the m_HistoryResetFlag to true<br \/>\nvoid resetStateHistory();<\/p>\n<p><\/div><\/p>\n<p class=\"heading\">AudioProcessing<\/p>\n<p><span class=\"emph\">Audio Interrupt Handling<\/span><\/p>\n<p>If the Audio Core class is not taken advantage of, then implementing the new audio interrupt handling system for tuning will require that the platform instantiate and implement the queeing as well as call the appropriate tune methods. If the changes below are not done in the platform, then there is no protection against interrupts that could result in audio corruption, NaNs, etc<\/p>\n<p><span style=\"text-decoration: underline;\"><strong>First<\/strong><\/span>, a queue manager needs to be instantiated. This will handle queuing tune state and control messages till the framework is ready to use them.<\/p>\n<p>&nbsp;<\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Init method, accepts mem for queue and references to audio proc instances<br \/>\n<strong>instances[in]\u00a0 \u00a0 \u00a0<\/strong>\u00a0array of instance pointers<br \/>\n<strong>instanceCount<\/strong>\u00a0 \u00a0 number of instance pointers in the array<br \/>\n<strong>mem[in]<\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 memory for the queue, must be queueSize * CQueueInstruction::getRequiredAllocSize() (bytes)<br \/>\n<strong>queueSize<\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0size of the queue (not size in bytes, size in num entities it can store)<br \/>\n<strong>time<\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0pointer to method to retrieve time<br \/>\n<strong>guardTime<\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0guard time to initialize m_QueueGuardTime to &#8211; default = 0<br \/>\nreturn error if any<\/p>\n<p>xAF_Error init(CAudioProcessing** <strong>instances<\/strong>, xUInt8 <strong>instanceCount<\/strong>, xUInt8* <strong>mem<\/strong>, xUInt16 <strong>queueSize<\/strong>, CTimeProfFn <strong>time<\/strong>, xFloat32 <strong>guardTime<\/strong> = 0.0f);<\/p>\n<p><\/div><\/p>\n<p><span style=\"text-decoration: underline;\"><strong>Second<\/strong><\/span>, when a state tuning\u00a0 message is received, call<\/p>\n<p>AudioProcessing &#8211;&gt;setAudioObjectStateForQueue() instead of AudioProcessing &#8211;&gt; setAudioObjectState()<\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Sets the state memory and queues tunes for an audio object in an ID-based addressing scheme (xTP)<br \/>\nAdds instructions to queue so that tuneStateXTP can be called from calc context<br \/>\n<strong>block ID<\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0of the object being tuned (unique per signal flow)<br \/>\n<strong>subBlock<\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sub id of the object indicated by &#8216;block&#8217;. Can mean a channel within the object<br \/>\n<strong>adr\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/strong>\u00a0 \u00a0 address of the state being tuned. Offset from the beginning of block (or subBlock if used)<br \/>\n<strong>data\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/strong>\u00a0 \u00a0 pointer to the data that is going to overwrite the audio object parameter memory<br \/>\n<strong>size<\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0(in bytes)\u00a0 length of data<br \/>\n<strong>objIndex[out]\u00a0<\/strong> \u00a0the object index (for array access)<br \/>\nreturn error, if any<\/p>\n<p>xAF_Error setAudioObjectStateForQueue(xSInt32 <strong>block<\/strong>, int <strong>subBlock<\/strong>, int <strong>adr<\/strong>, void* <strong>data<\/strong>, int <strong>size<\/strong>, xSInt32&amp; <strong>objIndex<\/strong>);<\/p>\n<p><\/div><\/p>\n<p>then add the instruction to the queue manager via<\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Queue a state instruction<br \/>\n<strong>attention<\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 execute only from the tuning threads<br \/>\n<strong>instruction[in]\u00a0\u00a0<\/strong>\u00a0 reference to instruction to queue<br \/>\nreturn error if any (queue full)<\/p>\n<p>xAF_Error queueInstruction(const CStateQueueInstruction&amp; <strong>instruction<\/strong>);<\/p>\n<p><\/div><\/p>\n<p><span style=\"text-decoration: underline;\"><strong>Third<\/strong><\/span>, when a control message is received, call<\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Queue a control instruction<br \/>\n<strong>attention<\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0execute only from the tuning threads<br \/>\n<strong>instruction[in]<\/strong>\u00a0 \u00a0 \u00a0reference to instruction to queue<br \/>\nreturn error if any (queue full)<\/p>\n<p>xAF_Error queueInstruction(const CControlQueueInstruction&amp; <strong>instruction<\/strong>);<\/p>\n<p><\/div><\/p>\n<p><strong>Finally,<\/strong> in the audio interrupt thread, after CAudioProcessing &#8211;&amp;gt; calc() is called, call dequeueAll on the queue manage<\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Iterate over all stored instructions and call the appropriate AudioProcessing methods<br \/>\n<strong>remainingTime<\/strong>\u00a0 \u00a0 \u00a0 \u00a0time left for queuing to run (micro seconds) not accounting for guard time<br \/>\nreturn xAF_SUCCESS if operation succeeded<\/p>\n<p>xAF_Error dequeueAll(xUInt32 <strong>remainingTime<\/strong>);<\/p>\n<p><\/div><\/p>\n<p>&nbsp;<\/p>\n<p><span class=\"emph\">Resetting state history<br \/>\n<\/span><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Reset the Core Object (AudioProcessing) history (history of the audio objects within)<br \/>\nvoid resetStateHistory() OVERRIDE;<br \/>\n<\/div><\/p>\n<p>The actual resetting of the history has been done for Parameter Biquad, Coefficient Biquad, Crossover Biquad, Tone Control and the delay objects so far.<\/p>\n<p><span class=\"emph\">deinit<br \/>\n<\/span><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<div>\n<div>Frees\u00a0all\u00a0memory\u00a0used\u00a0by\u00a0the\u00a0framework\u00a0instance<\/div>\n<\/div>\n<p>xAF_Error deinit();<br \/>\n<\/div><\/p>\n<p>&nbsp;<\/p>\n<p><span class=\"emph\">deleteStorageInterface<\/span><\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Delete the static storage interface ptr (usually requested by objects)<br \/>\n<span class=\"emph\">attention<\/span>\u00a0 \u00a0 \u00a0When an object wants to deallocate a reference to a flash or file interface requested via getNewFlashMemoryInterface() or getNewFileIOInterface, the object MUST release these pointers<br \/>\nby calling this method and passing in the pointer to the StaticStorageInterface<br \/>\n<span class=\"emph\">ioToDelete<\/span>\u00a0 \u00a0 Static Storage interface pointer to the memory to deallocate<\/p>\n<div>\n<div>\n<p>void\u00a0deleteStorageInterface(StaticStorageInterface*\u00a0<span class=\"emph\">ioToDelete<\/span>);<\/p>\n<p><\/div><\/p>\n<\/div>\n<\/div>\n<div><\/div>\n<div>\n<p><span style=\"font-style: italic; font-weight: bold;\">getProcessingState<\/span><\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<div>Gets the processing state of the object corresponding to the object index<\/div>\n<div>\n<div><span class=\"emph\">aoIdx\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span> Index of the audio object<\/div>\n<div><span class=\"emph\">state\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span> Processing state of the object<\/div>\n<div>return\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 0 if successful<\/div>\n<\/div>\n<div>\n<div>xAF_Error\u00a0getProcessingState(int\u00a0<span class=\"emph\">aoIdx<\/span>,\u00a0int&amp;\u00a0<span class=\"emph\">state<\/span>);<\/div>\n<\/div>\n<div>\n<div>\n<p><\/div><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<div>\n<div>\n<p><span style=\"font-style: italic; font-weight: bold;\">setProcessingState<\/span><\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<div>\n<div>\n<div>Sets\u00a0the\u00a0processing\u00a0state\u00a0of\u00a0the\u00a0object\u00a0corresponding\u00a0to\u00a0the\u00a0object\u00a0index<\/div>\n<\/div>\n<\/div>\n<div>\n<div><span class=\"emph\">aoIdx\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span> Index of the audio object<\/div>\n<div><span class=\"emph\">state\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span> Processing state of the object<\/div>\n<div>return\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 0 if successful<\/div>\n<\/div>\n<div>\n<div>xAF_Error setProcessingState(int <span class=\"emph\">aoIdx<\/span>,\u00a0int&amp;\u00a0<span class=\"emph\">state<\/span>);<\/div>\n<\/div>\n<div>\n<div>\n<p><\/div><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p class=\"heading\">HAL Layer<\/p>\n<p><strong>Hardware Abstraction Layer (HAL)<\/strong><\/p>\n<p>The target platforms have various types of hardware accelerators. These hardware accelerators are used to enhance the processing power of the audio objects. Each accelerator exposes different APIs to use them. HAL comes into picture for unifying the access for various hardware accelerators by exposing common APIs, audio objects can use them to access the accelerator.<\/p>\n<p>The HAL has to be instantiated in <strong>shared memory<\/strong> region so that all cores can access it. The API <strong><em>getHalInstance<\/em><\/strong> is used to instantiate the HAL.\u00a0 The HAL instance should then be registered to audio core (or AudioProcessing instance), whichever the platform is integrating<\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Create the HAL instance in parallel to the audio core class (or an xAF AudioProcessing instance)<br \/>\n<strong>alloc\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/strong>\u00a0 \u00a0 \u00a0function for allocating memory<br \/>\n<strong>dealloc<\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0function for deallocating memory<br \/>\n<strong>halInterface<\/strong>\u00a0 \u00a0 interface to HAL<br \/>\nreturn xAF_SUCCESS after successful instantiation of HAL instance<\/p>\n<p>static xAF_Error getHalInstance(memAllocRef <strong>alloc<\/strong>, memDeAllocRef <strong>dealloc<\/strong>, CHardwareAbstractionLayer*&amp; <strong>halInterface<\/strong>);<\/p>\n<p><\/div><\/p>\n<p>To then pass the HAL instance to Audio Core, use <strong>CAudioCore::setHalInterface<\/strong><\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Set the hardware accelerator interface for this core<br \/>\n<strong>halInterface<\/strong>\u00a0 \u00a0 \u00a0 HAL interface pointer<\/p>\n<p>void setHalInterface(CHardwareAbstractionLayer&amp; <strong>halInterface<\/strong>);<\/p>\n<p><\/div><\/p>\n<p>OR to pass the HAL instance to AudioProcessing, use <strong>CAudioProcessing<\/strong>::<strong>setHalInterface<\/strong><\/p>\n<p><div class=\"doc-callouts doc-message\" style=\"\"><\/p>\n<p>Set the hardware abstraction layer interface for the framework<br \/>\n<strong><em>halInterface<\/em><\/strong>&#8211;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 HAL interface pointer<\/p>\n<p>void CAudioProcessing::setHalInterface(CHardwareAbstractionLayer&amp; <strong><em>halInterface<\/em><\/strong>);<\/p>\n<p><\/div><\/p>\n<p>&nbsp;<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on April 9, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"metallica-current-release_wrap\"><div class=\"documentor-section  section-1546\" id=\"metallica-current-release\" data-section-id=\"1546\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.7.<\/span><span class=\"title-text\">LED ZEPPELIN<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#metallica-current-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"audio-core_wrap\"><div class=\"documentor-section  section-1547\" id=\"audio-core\" data-section-id=\"1547\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.7.1.<\/span><span class=\"title-text\">Audio Core - Overview<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#audio-core')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>See special addition to release notes here (mostly user info) <a href=\"https:\/\/jira.harman.com\/jira\/browse\/CASGTT2-13317\">Release Notes<\/a><\/p>\n<p>AudioCore is our new class which represents a core (in xTP terms) and a thread\/process in platform terms.\u00a0 This is the first object in the xAF hierarchy that allows the user to utilize different sampling rates and block lengths within its structure.\u00a0 AudioCore has existed behind the scenes for a while but we&#8217;re bringing it out into the light in this release.<\/p>\n<p><strong>Audio Core support is greatly expanded in this release.\u00a0 To take advantage of these features, you need to inherit from the base CAudioCore class and implement these methods:<\/strong><\/p>\n<ul>\n<li>virtual StaticStorageInterface* getOpenStoragePtr (flashfileType type, unsigned int contextualData, IOBase::AccessMode mode) const = 0;\n<ul>\n<li>method which ties various xAF data types to specific locations on the platform<\/li>\n<\/ul>\n<\/li>\n<li>virtual extObjDel getExternalObjectDel() const = 0;\n<ul>\n<li>method which provides the framework access to additional audio objects (this was an existing API for CAudioProcessing)<\/li>\n<\/ul>\n<\/li>\n<li>virtual CTicksFn getTicksDel() const = 0;\n<ul>\n<li>method which provides the framework access to a platform &#8216;tick&#8217; for benchmarking purposes. (this was an existing API for CAudioProcessing)<\/li>\n<\/ul>\n<\/li>\n<li>virtual CTimeProfFn getTimeDel() const = 0;\n<ul>\n<li>method which provides the framework access to a platform time (this was an existing API for CAudioProcessing)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Additionally, these methods from <em>ICoreInstanceComms<\/em>, which <em>CAudioCore<\/em> inherits from.<\/p>\n<ul>\n<li>virtual logDel getLog() const = 0;\n<ul>\n<li>this is used to log information from within <em>CAudioCore<\/em> and <em>CAudioProcessing<\/em><\/li>\n<\/ul>\n<\/li>\n<li>virtual IIPCInterface* getIPCInterface() const = 0;\n<ul>\n<li>returns a reference to the interface which can communicate to the xTPInterpreter<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>The following are virtual, so can be overridden for specific purposes.<\/strong><\/p>\n<ul>\n<li>virtual xAF_Error\u00a0 setInstanceMemoryLatencies(unsigned int instanceID);\n<ul>\n<li>In case a platform wants to override the default memory latencies for various xAF memory banks<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 10, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"audio-core-usage_wrap\"><div class=\"documentor-section  section-1548\" id=\"audio-core-usage\" data-section-id=\"1548\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.7.2.<\/span><span class=\"title-text\">Audio Core - Usage<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#audio-core-usage')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The VirtualAmp (VirtualAmpEffect.h\/cpp) files, which are located in the toolbox DLL and VST, will always be the most up to date when it comes to utilizing the xAF API, but we will go over some details here in addition.\u00a0 The <em>VirtualAmpEffect<\/em> class inherits from both <em>CAudioCore<\/em> and <em>IxTPInterpreter<\/em>.<\/p>\n<p><strong>Audio Core<\/strong><\/p>\n<ol>\n<li>\u00a0Implementation\n<ol>\n<li>For <em>CAudioCore\u00a0<\/em>to work, the abstract methods in the previous section are required.\u00a0 The platform will implement a class based on <em>CAudioCore\u00a0<\/em><strong>for each<\/strong> physical CPU core in the device. See VSTCore.cpp for example.<\/li>\n<li>Abstract Method Info\n<ol>\n<li>virtual StaticStorageInterface* getOpenStoragePtr (flashfileType type, unsigned int contextualData, IOBase::AccessMode mode) const = 0;\n<ol>\n<li><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/interface\/VSTCore.cpp?at=refs%2Fheads%2Fmaster#182\">getOpenStoragePtr<\/a><\/li>\n<\/ol>\n<\/li>\n<li>virtual extObjDel getExternalObjectDel() const = 0\n<ol>\n<li><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/interface\/VSTCore.cpp?at=refs%2Fheads%2Fmaster#221\">getExternalObjectDel<\/a><\/li>\n<li><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/VirtualAmpEffect.cpp?at=refs%2Fheads%2Fmaster#186\">getExtObject<\/a><\/li>\n<\/ol>\n<\/li>\n<li>virtual CTicksFn getTicksDel() const = 0;\n<ol>\n<li><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/interface\/VSTCore.cpp?at=refs%2Fheads%2Fmaster#226\">getTicksDel<\/a><\/li>\n<li><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/interface\/VSTCore.cpp?at=refs%2Fheads%2Fmaster#40\">ticksDel<\/a><\/li>\n<\/ol>\n<\/li>\n<li>virtual CTimeProfFn getTimeDel() const = 0;\n<ol>\n<li><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/interface\/VSTCore.cpp?at=refs%2Fheads%2Fmaster#231\">getTimeDel<\/a><\/li>\n<li><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/interface\/VSTCore.cpp?at=refs%2Fheads%2Fmaster#51\">timeDel<\/a><\/li>\n<\/ol>\n<\/li>\n<li>virtual logDel getLog() const = 0;\n<ol>\n<li><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/interface\/VSTCore.cpp?at=refs%2Fheads%2Fmaster#172\">getLog<\/a><\/li>\n<li><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/interface\/VSTCore.cpp?at=refs%2Fheads%2Fmaster#81\">VSTCoreLog<\/a><\/li>\n<\/ol>\n<\/li>\n<li>virtual IIPCInterface* getIPCInterface() const = 0;\n<ol>\n<li><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/interface\/VSTCore.cpp?at=refs%2Fheads%2Fmaster#177\">getIPCInterface<\/a><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>Construction\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li>The constructor (CAudioCore(allocatorDel alloc, deAllocatorDel deAlloc, simpleAllocatorDel simpleAlloc, simpleDeAllocatorDel simpleDeAlloc)) requires references to two pairs (hopefully one eventually) of alloc\/dealloc methods.\u00a0 These are used to create and destroy various internal structures during process and initialization.\n<ol>\n<li>Allocate and deallocate methods: <a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/VirtualAmpEffect.cpp?at=refs%2Fheads%2Fmaster#95-123\">VirtualAmpEffect<\/a><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>Core Data\n<ol>\n<li>Currently this is loaded externally and provided via the init method, but by &#8216;M&#8217; should also be internally created.<\/li>\n<li>To initialize the required structures, provide a core data file to an instance of CoreChunkParser\n<ol>\n<li>Core Chunk Parser will (if successful) give you two structures\n<ol>\n<li>CoreInfo<\/li>\n<li>CoreObjectInfo[]<\/li>\n<\/ol>\n<\/li>\n<li>These are both used to initialize AudioCore<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>Usage\n<ol>\n<li>Open an I\/O interface class which derives from <em>StaticStorageInterface (<a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/public\/include\/StaticStorageInterface.h?at=refs%2Fheads%2Fmaster\">see this<\/a>)<\/em> and points to your core data<\/li>\n<li>Use <em>CoreDataParser<\/em>\n<ol>\n<li><em>CoreDataParser<\/em> will use the interface to the data and decode it into usable structures.<\/li>\n<li>This method in VirtualAmpEffect accomplishes both steps 1 and 2 : <a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/VirtualAmpEffect.cpp?at=refs%2Fheads%2Fmaster#1075-1101\">loadCoreInfo<\/a><\/li>\n<\/ol>\n<\/li>\n<li>Create an instance of your <em>CAudioCore<\/em> class\n<ol>\n<li>In VST we initialize all of the core classes from the same place, this is not likely to be done on platform.<\/li>\n<li>CVSTCore(CVirtualAmpEffect&amp; dllOwner, allocatorDel alloc, deAllocatorDel deAlloc, simpleAllocatorDel simpleAlloc, simpleDeAllocatorDel simpleDeAlloc);<\/li>\n<li><em>m_AudioCores[coreId] = new CVSTCore(*this, allocate, deallocate, allocateMem, deallocateMem);\u00a0<\/em><\/li>\n<\/ol>\n<\/li>\n<li>Initialize the <em>CAudioCore<\/em> instance using the structures you retrieved from <em>CoreChunkParser<\/em>\n<ol>\n<li><em>retValue = m_AudioCores[coreId]-&gt;init((*dynCoreInfo), dynCoreObjectInfo, lObjMemInfo);<\/em><\/li>\n<\/ol>\n<\/li>\n<li>You can retrieve information about the initialized signal flows using various utility methods\n<ol>\n<li>xAF_Error <em>getInputBufferBlockSizes<\/em>(const xUInt16*&amp; sizes, xUInt16&amp; len); &#8211; return the buffers required for each input channel<\/li>\n<li>xAF_Error <em>getOutputBufferBlockSizes<\/em>(const xUInt16*&amp; sizes, xUInt16&amp; len); &#8211; return the buffers required for each output channel<\/li>\n<li>xAF_Error <em>getCoreInterruptDuration<\/em>(xFloat32&amp; timeInS); &#8211; return the time in seconds between each calc call<\/li>\n<li>unsigned int <em>getNumAudioInputs<\/em>() const { return m_NumInputs; }<\/li>\n<li>unsigned int <em>getNumAudioOutputs<\/em>() const { return m_NumOutputs; }<\/li>\n<\/ol>\n<\/li>\n<li>Finally, the method you call with audio!\n<ol>\n<li>xAF_Error calc(float** inputs, float** outputs); &#8211; platform allocates both input arrays and output arrays.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 10, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"xtp-interface_wrap\"><div class=\"documentor-section  section-1549\" id=\"xtp-interface\" data-section-id=\"1549\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.7.3.<\/span><span class=\"title-text\">xTP Interface<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#xtp-interface')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The VirtualAmp (VirtualAmpEffect.h\/cpp) files, which are located in the toolbox DLL and VST, will always be the most up to date when it comes to utilizing the xAF API, but we will go over some details here in addition.\u00a0 The <em>VirtualAmpEffect<\/em> class inherits from both <em>CAudioCore<\/em> and <em>IxTPInterpreter<\/em>.<\/p>\n<p><strong>xTPInterpreter and IIPCInterface<\/strong><\/p>\n<p>xTPInterpreter is the new xTP utility class.\u00a0 It will process xTP messages which come into the system.\u00a0 It is an interface which will allow you to ferry xTP messages from core to core without worrying about the parsing or command support.<\/p>\n<p>Before we can go too deep into xTP Interpreter, we need to discuss the <em>IIPCInterface<\/em> class (interface).\u00a0 This interface contains a single method:<\/p>\n<p>virtual int sendIPCMessage(unsigned char* msg, int len) = 0;<\/p>\n<p>This format is the only one used by xAF for core to core communication.\u00a0 The idea here is that the platform provides a version of this class for each route a signal needs to take, say from MCU to DSP1 and then another for the reverse.\u00a0 Implementation can be of any type the platform desires, but this is designed as a blocking call, so the code should spin while waiting for a response.<\/p>\n<p>The parameters are:<br \/>\n<strong>msg<\/strong>: the incoming message buffer<br \/>\n<strong>len<\/strong>: the length of the incoming message<br \/>\n<strong>return value<\/strong>: the length of the returned message.<br \/>\n<strong>Note that the same buffer is used for the returned message.<\/strong><\/p>\n<p><strong>The buffer is currently assumed to be 256 bytes.<\/strong><\/p>\n<p>For initialization of the interpreter, the platform will provide one <em>IIPCInterface<\/em> per <em>CAudioCore<\/em> in the system.<\/p>\n<p>Here is the list of abstract methods required for <em>IxTPInterpreter<\/em> child class creation.\u00a0 You will create one instance of this per platform and the type is specific to the architecture of that platform.<\/p>\n<ul>\n<li>virtual xUInt8 getRebootStatus() = 0;\n<ul>\n<li>Returns whether the device needs to be re-initialized or not\n<ul>\n<li>XTP_DEVICE_SIGNAL_FLOW_STATUS_ACTIVE &#8211; if no signal flow changes or immediately after successful reinit<\/li>\n<li>XTP_DEVICE_SIGNAL_FLOW_STATUS_RECREATION_IN_PROGRESS &#8211; if re-init is in progress<\/li>\n<li>XTP_DEVICE_SIGNAL_FLOW_STATUS_MANUAL_REBOOT_REQUIRED &#8211; if a manual reinit\/reboot is required<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>virtual xAF_Error initiateReboot() = 0;\n<ul>\n<li>Starts a reboot (or reload)<\/li>\n<\/ul>\n<\/li>\n<li>virtual xAF_Error loadPresets(CxTPSlotLoadHeader* hdr) = 0;\n<ul>\n<li>Load the presets<\/li>\n<\/ul>\n<\/li>\n<li>virtual void handleSlotUpdate() = 0;\n<ul>\n<li>Fires when new preset map is received<\/li>\n<\/ul>\n<\/li>\n<li>virtual char* getProductName(xUInt8&amp; size) = 0;\n<ul>\n<li>Return pointer to product name (max 20 chars)<\/li>\n<\/ul>\n<\/li>\n<li>virtual xAFMasterPresetControl&amp; getMasterPresetControl() = 0;\n<ul>\n<li>Getter for the instance of xAFMasterPresetControl<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Use the initialize method (xAF_Error initialize(IIPCInterface** ipcInterfaces, unsigned int numberOfCores, InitializationMsgParser&amp; msgParser)) to set up the class, once that is done (and successful) pass all received xTP messages into the onXTP method.\u00a0 As indicated in the method arguments, an initialized instance of InitializationMsgParser is also required.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 10, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"current-release_wrap\"><div class=\"documentor-section  section-1278\" id=\"current-release\" data-section-id=\"1278\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.8.<\/span><span class=\"title-text\">KISS<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#current-release')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"initialization-message-parser-api-update_wrap\"><div class=\"documentor-section  section-1277\" id=\"initialization-message-parser-api-update\" data-section-id=\"1277\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.8.1.<\/span><span class=\"title-text\">Initialization Message Parser - API Update<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#initialization-message-parser-api-update')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>The process for initializing the InitializationMsgParser has changed.\u00a0 This change helps enforce structure and removes the possibility invalid pointers can be passed in as arguments.<\/p>\n<p>See this CCB ticket for specific details :\u00a0 <a href=\"http:\/\/Jira Ticket\">https:\/\/jira.harman.com\/jira\/browse\/COCINTC-2242<\/a><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on September 6, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"i-j_wrap\"><div class=\"documentor-section  section-1279\" id=\"i-j\" data-section-id=\"1279\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.9.<\/span><span class=\"title-text\">JOURNEY<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#i-j')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"multiple-instance-multiple-core-support-for-dynamic-sfd-with-gtt_wrap\"><div class=\"documentor-section  section-567\" id=\"multiple-instance-multiple-core-support-for-dynamic-sfd-with-gtt\" data-section-id=\"567\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.9.1.<\/span><span class=\"title-text\">Multiple Instance Multiple Core support for dynamic SFD with GTT<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#multiple-instance-multiple-core-support-for-dynamic-sfd-with-gtt')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">In order to be able to use dynamic signal flow, a flash\/file I\/O scheme needs to be implemented on the desired target device. Please refer to Section &#8220;Tuning Sets (SETi) implemented&#8221; of this document. The way dynamic signal flow works is explained in the sections below.<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4516\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/014.jpg\" alt=\"\" width=\"802\" height=\"376\" \/><\/p>\n<h4 class=\"text\">Signal Design<\/h4>\n<p class=\"text\">The signal flow is designed in the GTT. Once completed, it is sent through an xTP message to the xAF. Refer to the GTT documentation for more information regarding how to design the signal flow in the SFD.<\/p>\n<h4 class=\"text\">Saving the signal flow on target device<\/h4>\n<p class=\"text\">On the target device, the xTP layer should have a way to use an instance of <em>InitializationMsgParser<\/em> class. This class is available in the interface library that is delivered with xAF. Below is an example of instantiating an instance:<\/p>\n<p class=\"text\">Note: initializationParser is initialized in platform code.<\/p>\n<p class=\"text\">When an instance command is received, the reference below should be used to parse the xTP message and store it in flash or where the target device choses. In the file where the xTP message parsing takes place, you should see the following:<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4517\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/015.jpg\" alt=\"\" width=\"842\" height=\"230\" \/><\/p>\n<h4 class=\"text\">Instantiating the Signal Flow from the signal flow stored on the device<\/h4>\n<p class=\"text\">Once the step above is complete, the signal flow can be instantiated by rebooting the system. To do this, the following code should be implemented along with the initialization of the framework. You can use the <em>DSFDParser<\/em> class, which is also included in the xAF interface library. Below is a brief example of how to load one instance onto a given core.<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4519\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/016-1.jpg\" alt=\"\" width=\"777\" height=\"760\" \/><\/p>\n<h4 class=\"text\">Example Implementation<\/h4>\n<p class=\"text\">In current release, examples are available for IVP and Summit. For IVP, the signal flow file, <em>sectXX.flash<\/em>, is stored in the IVP Plugins folder indicated by user settings. You can find a reference implementation on the xAF repo in the <em>VirtualAmpEffect<\/em>\u00a0file at the following location:<\/p>\n<p class=\"text\"><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/VirtualAmpEffect.cpp?at=refs%2Fheads%2Fmaster\">https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/VirtualAmpEffect.cpp?at=refs%2Fheads%2Fmaster<\/a><\/p>\n<p class=\"text\">On Summit, the SD card is used as a storage medium. You can find a reference implementation on the Summit repo on the xAF_examples branch. The projects that have implemented this are:<\/p>\n<ul>\n<li class=\"text\"><em>reference\/xaf_reference_app\/a15_app<\/em><\/li>\n<li class=\"text\"><em>reference\/xaf_reference_app\/c66_app<\/em><\/li>\n<li class=\"text\"><em>reference\/xaf_reference_app\/multicore_app<\/em><\/li>\n<\/ul>\n<p class=\"text\">You need to be concerned about the <em>src\/audiorouter.cpp<\/em> file.<\/p>\n<p class=\"text\">Example Link: <a href=\"https:\/\/bitbucket.harman.com\/projects\/GST\/repos\/car-audio-global-repository\/browse?at=release%2FAwx_Journey_10.0.19.25\">https:\/\/bitbucket.harman.com\/projects\/GST\/repos\/car-audio-global-repository\/browse?at=release%2FAwx_Journey_10.0.19.25<\/a><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 15, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"control-module-configuration_wrap\"><div class=\"documentor-section  section-566\" id=\"control-module-configuration\" data-section-id=\"566\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.9.2.<\/span><span class=\"title-text\">Control Module Configuration<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#control-module-configuration')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">Just as in dynamic signal flow, a flash\/file I\/O scheme needs to be implemented on the desired target device. Refer to Section &#8220;Tuning Sets (SETi) implemented&#8221; of this document. The following explains the way dynamic signal flow for control works.<\/p>\n<h4 class=\"text\">Master Control Design<\/h4>\n<p class=\"text\">The control flow is designed in the GTT. Once completed, it is sent through an xTP message to the xAF. Refer to the GTT documentation for more information on how to design the control flow in the SFD.<\/p>\n<h4 class=\"text\">Saving the master control data on the target device<\/h4>\n<p class=\"text\">On the target device, the xTP layer should have a way to use an instance of the <em>InitializationMsgParser<\/em> class. This class is available in the interface library that is delivered with the xAF. The <em>InitializationMsgParser <\/em>can be initialized as it is shown in Section &#8220;Multiple Instance Multiple Core support for dynamic SFD with GTT&#8221; of this document.<\/p>\n<p class=\"text\">Once it is initialized and xTP message, XTP_DEVICE (0x64), is received, it should trigger the <em>parseMessage<\/em> as shown below:<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4522\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/017.jpg\" alt=\"\" width=\"838\" height=\"435\" \/><\/p>\n<h4 class=\"text\">Instantiating the Control Module Flow from the Control Flow stored on the device<\/h4>\n<p class=\"text\">Once the step above is complete, the master control flow can be instantiated by rebooting the system. To do this, the code below should be implemented along with the initialization of the framework. You can use the <em>DeviceParser<\/em> class, which is also included in the interface library. Below is a brief example on how to load the master module.<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4523\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/018.jpg\" alt=\"\" width=\"789\" height=\"341\" \/><\/p>\n<p class=\"text\">Once <em>m_numPins<\/em> and <em>m_controlMsgMap<\/em> are populated, they can be used to instantiate the master module:<\/p>\n<p class=\"text\">xAFInitMasterControl(&amp;g_masterControl, m_controlMsgMap, m_numPins, UNUSED_VAR, memAlloc alloc);<\/p>\n<h4 class=\"text\">Example Implementation<\/h4>\n<p class=\"text\">In current release, examples are available for IVP. The control module file, <em>sect131072.flash<\/em>, is stored in the AudioFrameworkDLLS folder indicated by IVP. You can find a reference implementation on the xAF repo in the <em>VirtualAmpEffect<\/em> file at the following location:<\/p>\n<p class=\"text\"><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/VirtualAmpEffect.cpp?at=refs%2Fheads%2Fmaster\">https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/VirtualAmpEffect.cpp?at=refs%2Fheads%2Fmaster<\/a><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 16, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"h-i_wrap\"><div class=\"documentor-section  section-1280\" id=\"h-i\" data-section-id=\"1280\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.10.<\/span><span class=\"title-text\">INXS<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#h-i')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"master-preset-control-module-configuration_wrap\"><div class=\"documentor-section  section-565\" id=\"master-preset-control-module-configuration\" data-section-id=\"565\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.10.1.<\/span><span class=\"title-text\">Master Preset Control Module Configuration<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#master-preset-control-module-configuration')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">The purpose of this module is to facilitate configuring presets for the entire device containing multiple cores\/instances of xAF. Refer to the xAF Specification for more details.<\/p>\n<h4 class=\"text\">Master Preset Control Design<\/h4>\n<p class=\"text\">User can prepare the presets for each signal flow using GTT. Once the presets are prepared, user should prepare slot map which gives information on presets to be recalled for a particular slot. Refer GTT user guide for creating slot map and presets. Each slot can also be configured with fade in, fade out times using which platform can choose to apply Instance mute\/unmute while applying a new slot.<\/p>\n<h4 class=\"text\">Saving the master preset control map file and presets on the target device<\/h4>\n<p class=\"text\">Presets and slot map should be prepared and saved using Global Tuning Tool. Saving them on to the device is currently an offline process. Platform has to supply slot map during initialization of Master preset control Module and saved presets should be accessible by the particular cores where presets are recalled.<\/p>\n<p class=\"text\">Presets can also be saved on the device using the procedure saving\/loading seti files (more in section &#8220;Tuning Sets (SETi) implemented&#8221;).<\/p>\n<h4 class=\"text\">Instantiating the Master Preset Control Module with slot map stored on the device<\/h4>\n<p class=\"text\">To instantiate Master Preset Control Module, platform has to load the slot map prepared\/saved from Global Tuning Tool. Platform can use the <em>DeviceParser<\/em> class, which is included in the interface library to parse the slot map. Below is a brief example on how to load the slot map.<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4526\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/019.jpg\" alt=\"\" width=\"748\" height=\"290\" \/><\/p>\n<p class=\"text\">Once <em>m_presetCtrlMap<\/em> is populated with parsed slot map, it can be used to instantiate the master preset control module as shown below.<\/p>\n<p class=\"text\"><em>xAF_Error<\/em><em> err = xAFInitMasterPresetControl(&amp;g_masterPresetControl, m_presetCtrlMap, <\/em><em>&amp;allocateMem);<\/em><\/p>\n<p class=\"text\">After successful instantiation of the master preset control, the default slot gets loaded into the instance(s).<\/p>\n<h4 class=\"text\">Loading A New Slot<\/h4>\n<p class=\"text\">Master preset control module loads default slot during reboot. To load a different slot at runtime, the xTP command 0x64 with function Id 0x02 needs to be sent to the amplifier. Refer to the xTP specification for details on 0x64 command.<\/p>\n<p class=\"text\">This command supports two operations:<\/p>\n<ul>\n<li class=\"text\">\u201cGet Active Slot \u201d via operation Id \u201c0x02\u201d<\/li>\n<\/ul>\n<p class=\"text\">This command retrieves the currently active slot on the device. Platform can call <em>xAFSetActiveSlot()<\/em> to get Active slot<\/p>\n<ul>\n<li class=\"text\">\u201cLoad Slot \u201d via operation Id \u201c0x03\u201d.<\/li>\n<\/ul>\n<p class=\"text\">Load slot command loads the preset as per device id and slot id given in the command.<\/p>\n<p class=\"text\">To load the new slot following steps needs to be performed:<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4527\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/020.jpg\" alt=\"\" width=\"462\" height=\"581\" \/><\/p>\n<p class=\"text\">Detail about the APIs used to load a new slot is as below:<\/p>\n<ul>\n<li class=\"text\">Call <em>xAFGetRampTimes(<\/em><em>xAFMasterPresetControl<\/em><em>* <\/em><em>masterPresetControl<\/em><em>, <\/em><em>float<\/em><em>* <\/em><em>fadeInTime<\/em><em>, <\/em><em>float<\/em><em>* <\/em><em>fadeOutTime<\/em><em>, <\/em><em>unsigned<\/em> <em>int<\/em> <em>slotId<\/em><em>) <\/em>to get the fade in or fade out time<\/li>\n<li class=\"text\">Call <em>xAFGetNumPreset(<\/em><em>xAFMasterPresetControl<\/em><em>* <\/em><em>masterPresetControl<\/em><em>, <\/em><em>unsigned<\/em> <em>int<\/em><em>* <\/em><em>numPreset<\/em><em>, <\/em><em>unsigned<\/em> <em>int<\/em> <em>slotId<\/em><em>)<\/em> to get the number of presets for a particular slot<\/li>\n<li class=\"text\">Call <em>xAFLoadSlot(<\/em><em>xAFMasterPresetControl<\/em><em>* <\/em><em>masterPresetControl<\/em><em>, <\/em><em>xAFPreset<\/em><em>* <\/em><em>presets<\/em><em>, <\/em><em>unsigned<\/em> <em>int<\/em> <em>slotId<\/em><em>)<\/em> API to get a list of presets (contains preset id, core id and instance id) for a particular slot<\/li>\n<li class=\"text\">Call the following framework APIs\u00a0 <em>setInstanceMuteRampUpTime(float val), setInstanceMuteRampDownTime(float val<\/em>) to set the ramp times for performing instance mute operation<\/li>\n<\/ul>\n<p class=\"text\">A new slot is applied in steps of instance mute\/unmute cycle as follows:<\/p>\n<ul>\n<li class=\"text\">Call <em>setInstanceMuteState(<\/em><em>int<\/em> <em>val<\/em><em>)<\/em> API to initiate the instance mute. The response xTP command is sent back as the instance mute is in progress (0x01)<\/li>\n<li class=\"text\">Platform is responsible for polling the status of instance Mute by calling framework function <em>getInstanceMuteRampingState()<\/em><\/li>\n<li class=\"text\">Once Mute is completed platform can apply the preset file using framework API<em> loadSETIDataFromInterface(<\/em><em>IOBase<\/em><em>* <\/em><em>IOInterface<\/em><em>)<\/em><\/li>\n<li class=\"text\">Call <em>setInstanceMuteState(<\/em><em>int<\/em> <em>val<\/em><em>)<\/em> to unmute amplifier<\/li>\n<li class=\"text\">Once un-mute is completed slot is completed and a second response is sent back to<\/li>\n<li class=\"text\">GTT for indicating a successful load(0x00)<\/li>\n<\/ul>\n<h4 class=\"text\">Example Implementation<\/h4>\n<p class=\"text\">In INXS-Release, you can find a reference implementation on the xAF repo in the <em>VirtualAmpEffect<\/em> file at the following location:<\/p>\n<p class=\"text\"><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/VirtualAmpEffect.cpp?at=refs%2Fheads%2Fmaster\">https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/utils\/xAFVirtualAmp\/VirtualAmpEffect.cpp?at=refs%2Fheads%2Fmaster<\/a><\/p>\n<p class=\"text\"><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/src\/framework\/core\/MasterControl.c?at=refs%2Fheads%2Fmaster\">https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/private\/src\/framework\/core\/MasterControl.c?at=refs%2Fheads%2Fmaster<\/a><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 15, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"passing-in-memory-allocators-and-deallocators-to-interface-classes_wrap\"><div class=\"documentor-section  section-1347\" id=\"passing-in-memory-allocators-and-deallocators-to-interface-classes\" data-section-id=\"1347\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.10.2.<\/span><span class=\"title-text\">Passing in memory allocators and deAllocators to interface classes<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#passing-in-memory-allocators-and-deallocators-to-interface-classes')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p>In this release, instead of using &#8220;new&#8221; to allocate heap memory in xAF interface classes, pointers to memory allocator and de-allocator methods are now passed in during initialization:<\/p>\n<p>typedef void* (*memAlloc)(unsigned int, unsigned int);<br \/>\ntypedef void (*memDeAlloc)(void*);<\/p>\n<p>This was done for the following classes\/structs:<\/p>\n<p><span class=\"emph\">Master Control:<\/span><\/p>\n<p>When calling xAFInitMasterControl, the application now needs to pass in an allocator pointer, <em>alloc.\u00a0<\/em><\/p>\n<p>enum xAF_Error xAFInitMasterControl(xAFSMasterControl* p_masterControl, unsigned int* ControlConfig, unsigned int maxPins, unsigned int maxXafInstance, <span style=\"text-decoration: underline;\"><strong><em>memAlloc alloc<\/em><\/strong><\/span>);<\/p>\n<p>memAlloc is simply a pointer to a memory allocation method defined by the application:<\/p>\n<p>Similarly, for deallocation, a de-allocation memory pointer needs to also be passed in:<\/p>\n<p>void xAFDeallocMasterControl(xAFSMasterControl* p_masterControlstruct, <strong><em>memDeAlloc deAlloc<\/em><\/strong>);<\/p>\n<p><span class=\"emph\">Chunk Parser:<\/span><\/p>\n<p>ChunkParser is the base class that multiple parsing classes inherit from including DSFDParser and DeviceParser. When initializing it, the application has to pass both allocator and de-allocator pointers:<\/p>\n<p>xAF_Error init(IOBase* theInterface, char(&amp;identifierString)[4], <strong><em>memAlloc allocator, memDeAlloc deAllocator<\/em><\/strong>);<\/p>\n<p><span class=\"emph\">Initialization Message Parser:<\/span><\/p>\n<p>This class is responsible for saving the xTP signal flow data into flash\/persistent memory on an amplifier. Accordingly, a memory allocator needs to be passed into the method that allows the parser to access the flash memory:<\/p>\n<p>typedef FlashInterface* (*openMemoryStorage_t)(<strong><em>memAlloc alloc<\/em><\/strong>, flashfileType type, unsigned int coreID, unsigned int instanceID, IOBase::AccessMode mode);<\/p>\n<p>The allocator and deallocators also need to be passed into the method to initialize the parser:<\/p>\n<p>xAF_Error initParser(openMemoryStorage_t openPtr, <strong><em>memAlloc allocator, memDeAlloc deAllocator<\/em><\/strong>);<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on February 17, 2020<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"f-g_wrap\"><div class=\"documentor-section  section-1282\" id=\"f-g\" data-section-id=\"1282\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.11.<\/span><span class=\"title-text\">HERBIE HANCOCK<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#f-g')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"g-h_wrap\"><div class=\"documentor-section  section-1281\" id=\"g-h\" data-section-id=\"1281\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.12.<\/span><span class=\"title-text\">GENESIS<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#g-h')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"modified-hardware-abstraction-concept_wrap\"><div class=\"documentor-section  section-569\" id=\"modified-hardware-abstraction-concept\" data-section-id=\"569\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.12.1.<\/span><span class=\"title-text\">Modified Hardware Abstraction Concept<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#modified-hardware-abstraction-concept')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">Refer to the <a class=\"link-style\" href=\"https:\/\/audioworx.transfunnel.co\/old\/?page_id=4420\">Audio Object Developer Guide<\/a> for more information on this subject.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on September 4, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"0x6b-implemented-and-audio-object-tunestatextp-function-for-dynamic-control_wrap\"><div class=\"documentor-section  section-571\" id=\"0x6b-implemented-and-audio-object-tunestatextp-function-for-dynamic-control\" data-section-id=\"571\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.12.2.<\/span><span class=\"title-text\">0x6B Implemented and Audio Object tuneStateXTP function for dynamic control<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#0x6b-implemented-and-audio-object-tunestatextp-function-for-dynamic-control')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">The dynamic state write (0x6B) xTP command has been implemented on IVP and Summit. Once sent to the framework, it triggers the framework through setAudioObjectState() which then invokes the audio objects through <em>tuneStateXTP<\/em>. Dynamic data supports sub-blocks just like tuning data and follows an identical approach for set up and tuning. Refer to the \u201cAudio Object Developer Guide\u201c for more information.<\/p>\n<p class=\"text\">Below is an example of implementation when a message is received:<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4536\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/021.jpg\" alt=\"\" width=\"753\" height=\"145\" \/><\/p>\n<p class=\"text\">Once the framework receives the xTP message, it triggers the audio object through the newly introduced tuneStateXTP() function which operates similarly to tuneXTP(). Refer to the \u201cAudio Object Developer Guide\u201c for more information.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 15, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"library-management_wrap\"><div class=\"documentor-section  section-573\" id=\"library-management\" data-section-id=\"573\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.12.3.<\/span><span class=\"title-text\">Library Management<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#library-management')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><h4 class=\"text\">xAF libraries<\/h4>\n<p class=\"text\">The xAF is now delivered as a library for IVP, A15 and C66 processors. However, the option to build the xAF from an external repository is still available. Additionally, the xAF is now delivered with an interface library that contains many helper and utility classes. To build these libraries, refer to the \u201creadme.txt\u201c at the root of the xAF repository. For example: <em>build.py &#8211;platform=summit &#8211;target=A15 &#8211;profile=Release<\/em><\/p>\n<h4 class=\"text\">xAFBAO libraries<\/h4>\n<p class=\"text\">The xAFBao is the basic objects library which is delivered along with xAF library. However, the option to build this library is same as xAF library. The main reason of maintaining it separately is to keep framework and basic objects separate.<\/p>\n<h4 class=\"text\">xAFBasicOps libraries<\/h4>\n<p class=\"text\">Standard utility functions and vector related functions are part of this xAFBasicOps Library. Build procedure is same as xAF library.<\/p>\n<h4 class=\"text\">Compile or configure a project with xAF<\/h4>\n<p class=\"text\">Examples on to build and compile a project with the xAF are available on IVP and Summit. To build a project with the xAF audio objects only, you should link the <em>xaf, xafBao, xAFBasicOps<\/em> and <em>interface<\/em> libraries. For any additional objects in other repositories, the following needs to be done.<\/p>\n<p class=\"text\">An AudioIds.h file needs to created, for example:<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4540\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/022.jpg\" alt=\"\" width=\"737\" height=\"266\" \/><\/p>\n<p class=\"text\">The defined class IDs will be linked once the repository paths are described as follows in a cmake file, for example objectconfigC66.cmake:<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4541\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/023.jpg\" alt=\"\" width=\"737\" height=\"218\" \/><\/p>\n<p class=\"text\">And in a CMakeLists.txt file:<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4542\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/024.jpg\" alt=\"\" width=\"737\" height=\"375\" \/><\/p>\n<p class=\"text\">Examples are available in <em>xaf_reference_app\/ projects<\/em> in the <em>xaf_examples<\/em> branch on the Car Audio Repository for Spartan. An example for IVP is available in the xAF repo at the following location:<\/p>\n<p class=\"text\"><a href=\"https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/build\/externalObjConfig.cmake?at=refs%2Fheads%2Fmaster\">https:\/\/bitbucket.harman.com\/projects\/LSACCA\/repos\/extendable-audio-framework\/browse\/build\/externalObjConfig.cmake?at=refs%2Fheads%2Fmaster<\/a><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 15, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"additional-object-configuration-for-audio-objects_wrap\"><div class=\"documentor-section  section-574\" id=\"additional-object-configuration-for-audio-objects\" data-section-id=\"574\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.12.4.<\/span><span class=\"title-text\">Additional Object Configuration for Audio Objects<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#additional-object-configuration-for-audio-objects')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">Refer to the <a class=\"link-style\" href=\"https:\/\/audioworx.transfunnel.co\/old\/?page_id=4420\">Audio Object Developer Guide<\/a> for more information on this subject.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on September 4, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"object-api-modified-including-object-modes_wrap\"><div class=\"documentor-section  section-575\" id=\"object-api-modified-including-object-modes\" data-section-id=\"575\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.12.5.<\/span><span class=\"title-text\">Object API modified including object modes<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#object-api-modified-including-object-modes')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">Refer to the <a class=\"link-style\" href=\"https:\/\/audioworx.transfunnel.co\/old\/?page_id=4420\">Audio Object Developer Guide<\/a> for more information on this subject.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on September 4, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"xml-flag-deprecated_wrap\"><div class=\"documentor-section  section-576\" id=\"xml-flag-deprecated\" data-section-id=\"576\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.12.6.<\/span><span class=\"title-text\">XML flag deprecated<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#xml-flag-deprecated')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">The <span class=\"emph\">XML_FILE_CREATION<\/span> flag has been deprecated. The <span class=\"emph\">TOOLBOX_CREATION<\/span> flag should be used instead.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 19, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"overlays_wrap\"><div class=\"documentor-section  section-577\" id=\"overlays\" data-section-id=\"577\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.12.7.<\/span><span class=\"title-text\">Overlays<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#overlays')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">Refer to the <a class=\"link-style\" href=\"https:\/\/audioworx.transfunnel.co\/old\/?page_id=4420\">Audio Object Developer Guide<\/a> for more information on this subject.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on September 4, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"foo-fighters_wrap\"><div class=\"documentor-section  section-1287\" id=\"foo-fighters\" data-section-id=\"1287\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.13.<\/span><span class=\"title-text\">FOO FIGHTERS<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#foo-fighters')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"eagles_wrap\"><div class=\"documentor-section  section-1288\" id=\"eagles\" data-section-id=\"1288\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.14.<\/span><span class=\"title-text\">EAGLES<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#eagles')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"deep-purple_wrap\"><div class=\"documentor-section  section-1284\" id=\"deep-purple\" data-section-id=\"1284\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.15.<\/span><span class=\"title-text\">DEEP PURPLE<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#deep-purple')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"background-tasks_wrap\"><div class=\"documentor-section  section-568\" id=\"background-tasks\" data-section-id=\"568\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.15.1.<\/span><span class=\"title-text\">Background Tasks<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#background-tasks')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">For an audio object to use background methods, it should implement the <em>hasBackgroundMethod()<\/em>:<\/p>\n<ul>\n<li class=\"text\">bool hasBackgroundMethod() const { return TRUE; }<\/li>\n<\/ul>\n<p class=\"text\">This allows the framework to know that the object will use background methods. Once the framework knows that, it will trigger the audio object\u2019s <em>backgroundMethod()<\/em> where the object developer implements the required functionality.<\/p>\n<p class=\"text\">On the platform, the application should trigger the CAudioProcessing::executeBGLogic() to trigger the CAudioObject::backgroundMethod().<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 16, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"coldplay_wrap\"><div class=\"documentor-section  section-1285\" id=\"coldplay\" data-section-id=\"1285\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.16.<\/span><span class=\"title-text\">COLDPLAY<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#coldplay')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"method-to-set-control-out-from-one-object-to-another_wrap\"><div class=\"documentor-section  section-578\" id=\"method-to-set-control-out-from-one-object-to-another\" data-section-id=\"578\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.16.1.<\/span><span class=\"title-text\">Method to set control out from one object to another<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#method-to-set-control-out-from-one-object-to-another')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">A new method is added to the audio object class to facilitate writing control from one object to another. Here is an example of the <em>setControlOut<\/em> method in use:<\/p>\n<p class=\"text\"><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4555\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/027.jpg\" alt=\"\" width=\"740\" height=\"169\" \/><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 16, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"file-and-flash-io-abstraction_wrap\"><div class=\"documentor-section  section-572\" id=\"file-and-flash-io-abstraction\" data-section-id=\"572\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.16.2.<\/span><span class=\"title-text\">File and Flash IO Abstraction<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#file-and-flash-io-abstraction')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">The \u00a0xAF library contains base classes that can be used to implement file\/flash I\/O on any platform. These classes are:<\/p>\n<ul>\n<li class=\"text\"><strong>IOBase<\/strong> \u2013 This is the base class. Any other I\/O class inherits from this class.<\/li>\n<li class=\"text\"><strong>FlashInterface<\/strong> \u2013 This class inherits the <em>IOBase<\/em> It is the base class that other classes will inherit from to implement <u>flash<\/u> access from a given platform.<\/li>\n<li class=\"text\"><strong>FileInterface<\/strong> \u2013 This class inherits the <em>IOBase<\/em> It is the base class that other classes will inherit from to implement <u>file<\/u> access from a given platform.<\/li>\n<\/ul>\n<p class=\"text\">You can find the header files for these classes in the xAF repo at <em>public\/include\/<\/em> folder. Examples are provided for IVP and Summit.<\/p>\n<h4 class=\"text\">IVP<\/h4>\n<p class=\"text\">On IVP, the Win32 I\/O files are in:<\/p>\n<ul>\n<li class=\"text\">FlashInterfaceWin32<\/li>\n<li class=\"text\">FileInterfaceWin32<\/li>\n<\/ul>\n<p class=\"text\">You can find the source files in the xAF repo at: <em>private\/utils\/xAFVirtualAmp\/interface.<\/em><\/p>\n<h4 class=\"text\">Summit<\/h4>\n<p class=\"text\">On Summit, you can find a reference implementation of these files on the Summit repo, on the xaf_examples branch, under <em>customer\/reference\/xaf_reference_app\/interface<\/em>:<\/p>\n<ul>\n<li class=\"text\">FileInterfaceSummit<\/li>\n<li class=\"text\">FlashInterfaceSummit Note: This would be implemented to open a file right now instead of accessing<\/li>\n<\/ul>\n<p class=\"text\">flash memory.<\/p>\n<p class=\"text\">For example, this is how to use the FlashInterfaceSummit to read data:<\/p>\n<p class=\"text\">FlashInterfaceSummit* flashTest = (FlashInterfaceSummit*)summitFlashInterface.getInstanceOf(); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 flashTest-&gt;open(0, IOBase::access_read);<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on December 15, 2021<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"logging_wrap\"><div class=\"documentor-section  section-579\" id=\"logging\" data-section-id=\"579\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.16.3.<\/span><span class=\"title-text\">Logging<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#logging')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">The platform can now set a logging function that enables logging in the framework by: setLog. Below is an example of implementing this on Summit.<\/p>\n<p><strong><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4553\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/025.jpg\" alt=\"\" width=\"740\" height=\"25\" \/><\/strong><\/p>\n<p class=\"text\">where logfunc:<\/p>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4554\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/026.jpg\" alt=\"\" width=\"740\" height=\"61\" \/><\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 16, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"tuning-sets-seti-implemented_wrap\"><div class=\"documentor-section  section-570\" id=\"tuning-sets-seti-implemented\" data-section-id=\"570\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.16.4.<\/span><span class=\"title-text\">Tuning Sets (SETi) implemented<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#tuning-sets-seti-implemented')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><p class=\"text\">SETI encoding and decoding is supported in the xAF. However, the framework needs platform implementations for NV memory access. It also needs platform implementations for information on how to name and locate the files to save and load, based on the slot number selected. Each instance has its own bank of save\u2019s (the limit is up to the platform). Here is the general flow:<\/p>\n<ul>\n<li class=\"text\">xTP or platform condition arises to request a save or load (this is per instance and provides a slot number).<\/li>\n<li class=\"text\">The platform opens the relevant file interface for the instance, operation, and slot.<\/li>\n<li class=\"text\">The platform passes the <u>open<\/u> file interface into the framework using one of the following methods:\n<ul>\n<li class=\"text\">xAF_Error CAudioProcessing::loadSETIDataFromInterface(IOBase* IOInterface)<\/li>\n<li class=\"text\">xAF_Error CAudioProcessing::saveSETIDataToInterface(IOBase* IOInterface)<\/li>\n<\/ul>\n<\/li>\n<li class=\"text\">The framework will handle encoding and decoding to and from the file interface.<\/li>\n<\/ul>\n<p class=\"text\">The platform is responsible for choosing how to organize the stored data (e.g., picking file names that will not collide between cores and instances), and opening the file interfaces with the correct privileges (write <strong><u>clear<\/u><\/strong> for saving, read for loading).<\/p>\n<p class=\"text\">For information on the SETi protocol itself, see <a href=\"https:\/\/confluence.harman.com\/confluence\/display\/GLAHST\/System+architecture?preview=\/64157757\/70802242\/IdSetFile.doc\">Confluence &#8211; GLAHST<\/a>.<\/p>\n<\/div><div class=\"documentor-help\"><div class=\"doc-mdate doc-noprint\">Last updated on June 16, 2019<\/div><div class=\"negative-feedbackform doc-noprint\">\n\t\t\t\t\t<\/div><div class=\"feedback-msg doc-noprint\"><\/div><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"beatles_wrap\"><div class=\"documentor-section  section-1283\" id=\"beatles\" data-section-id=\"1283\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.17.<\/span><span class=\"title-text\">BEATLES<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#beatles')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><div class=\"doc-sectionwrap\" id=\"acdc_wrap\"><div class=\"documentor-section  section-1286\" id=\"acdc\" data-section-id=\"1286\"><h2 class=\"doc-sec-title\" style=\"clear:none;line-height:33px;font-family:Montserrat,sans-serif;font-size:25px;font-weight:700;font-style:normal;color:#3c3c3c;border-bottom: 1px dotted #e6e6e6;\"> <span class=\"doc-sec-count\" style=\"display:inline-block\">7.18.<\/span><span class=\"title-text\">ACDC<\/span> <span class=\"doc-sec-link doc-noprint\" onclick=\"prompt('Press Ctrl + C, then Enter to copy to clipboard','https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5430#acdc')\"><span class=\"icon-hyperlink doc-icons\"><\/span><\/span> <div class=\"documentor-social doc-noprint\"><\/div><\/h2><div class=\"doc-sec-content\" ><\/div><\/div><\/div><!--.\/doc-sectionwrap--><\/div><!--.doc-sec-container--><div id=\"sugestedit_popup46\" class=\"sugestedit_popup\">\n\t\t\t\t<a class=\"modal_close\"><\/a>\n\t\t\t\t<form name=\"documentor-suggestform\" method=\"post\" class=\"documentor-suggestform\">\n\t\t\t\t\t<div class=\"doc-frmdiv\" style=\"font-weight: bold;\">Suggest Edit\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"doc-frmdiv\">\n\t\t\t\t\t\t<input type=\"text\" name=\"sec_title\" class=\"sedit-sectitle txtinput\" value=\"\" \/>\n\t\t\t\t\t<\/div><div class=\"doc-frmdiv\">\n\t\t\t\t\t\t\t<input type=\"text\" name=\"name\" class=\"txtinput\" placeholder=\"Name\" required \/>\n\t\t\t\t\t\t<\/div><div class=\"doc-frmdiv\">\n\t\t\t\t\t\t\t<input type=\"email\" class=\"emailinput\" placeholder=\"Email\" name=\"email\" required \/> \n\t\t\t\t\t\t<\/div><div class=\"doc-frmdiv\">\n\t\t\t\t\t\t\t<textarea name=\"content\" class=\"textareainput\" placeholder=\"Post your suggestion...\" required><\/textarea>\n\t\t\t\t\t\t<\/div><div class=\"doc-frmdiv\"><label> Captcha :&nbsp; <\/label><span class=\"doc-sedit-captcha\"><\/span><\/div><input type=\"hidden\" class=\"sedit-secid\" name=\"secid\" value=\"\" \/>\n\t\t\t\t\t<input type=\"hidden\" class=\"sedit-postid\" name=\"sedit_postid\" value=\"\" \/>\n\t\t\t\t\t<input type=\"hidden\" class=\"sedit-docid\" name=\"docid\" value=\"46\" \/>\n\t\t\t\t\t<button class=\"docsubmit-suggestform\"> Submit <\/button>\n\t\t\t\t<\/form>\n\t\t\t<\/div><script type=\"text\/javascript\">\n\t\t\tjQuery(document).ready(function(){\n\t\t\t\tjQuery(\"#documentor-46\").documentor({\n\t\t\t\t\tdocumentid\t: 46,\n\t\t\t\t\tdocid\t\t: \"documentor-46\",\n\t\t\t\t\tanimation\t: \"\",\n\t\t\t\t\tindexformat\t: \"1\",\n\t\t\t\t\tpformat\t\t: \"decimal\",\n\t\t\t\t\tcformat\t\t: \"decimal\",\t\t\t\t\t\n\t\t\t\t\tsecstyle\t: \"clear:none;line-height:17px;font-family:Montserrat,sans-serif;font-size:12px;font-weight:normal;font-style:normal;color:#000000;\",\n\t\t\t\t\tsecelement  : \"2\",\n\t\t\t\t\tactnavbg_default: \"1\",\n\t\t\t\t\tactnavbg_color\t: \"#000000\",\n\t\t\t\t\tenable_ajax\t: \"0\",\n\t\t\t\t\tload\t\t: \"0\",\n\t\t\t\t\tscrolling\t: \"1\",\n\t\t\t\t\tfixmenu\t\t: \"1\",\n\t\t\t\t\tskin\t\t: \"mint\",\n\t\t\t\t\tscrollBarSize\t: \"6\",\n\t\t\t\t\tscrollBarColor\t: \"#000000\",\n\t\t\t\t\tscrollBarOpacity: \"1\",\n\t\t\t\t\twindowprint\t: \"0\",\n\t\t\t\t\tmenuTop: \"6\",\n\t\t\t\t\tsocialshare\t: 0,\n\t\t\t\t\tsharecount\t: 1,\n\t\t\t\t\tfbshare\t\t: 1,\n\t\t\t\t\ttwittershare\t: 1,\n\t\t\t\t\tgplusshare\t: 1,\n\t\t\t\t\tpinshare\t: 1,\n\t\t\t\t\ttogglechild\t: 1,\n\t\t\t\t\tnoResultsStr: \"No results found!\",\n\t\t\t\t});\t\n\t\t\t});<\/script><div class=\"cleardiv cleardiv-rtl\"><\/div><\/div><!--\/.document-wrapper--><div class=\"cleardiv cleardiv-rtl\"><\/div><\/div><div class=\"cleardiv\"> <\/div><div id=\"documentor-46-end\"><\/div>\r\n\r\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":107,"featured_media":0,"parent":4397,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","footnotes":""},"coauthors":[292],"_links":{"self":[{"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/pages\/5430"}],"collection":[{"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/users\/107"}],"replies":[{"embeddable":true,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5430"}],"version-history":[{"count":2,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/pages\/5430\/revisions"}],"predecessor-version":[{"id":29181,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/pages\/5430\/revisions\/29181"}],"up":[{"embeddable":true,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/pages\/4397"}],"wp:attachment":[{"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5430"}],"wp:term":[{"taxonomy":"author","embeddable":true,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fcoauthors&post=5430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}