├── .gitignore ├── docs ├── bc_s.png ├── bdwn.png ├── doc.png ├── open.png ├── closed.png ├── nav_f.png ├── nav_g.png ├── nav_h.png ├── tab_a.png ├── tab_b.png ├── tab_h.png ├── tab_s.png ├── arrowdown.png ├── doxygen.png ├── splitbar.png ├── sync_off.png ├── sync_on.png ├── arrowright.png ├── folderopen.png ├── folderclosed.png ├── search │ ├── close.png │ ├── mag_sel.png │ ├── search_l.png │ ├── search_m.png │ ├── search_r.png │ ├── namespaces_0.js │ ├── pages_0.js │ ├── classes_4.js │ ├── classes_7.js │ ├── classes_9.js │ ├── classes_6.js │ ├── classes_8.js │ ├── classes_2.js │ ├── classes_3.js │ ├── enums_0.js │ ├── enums_1.js │ ├── functions_6.js │ ├── functions_b.js │ ├── functions_8.js │ ├── functions_a.js │ ├── functions_4.js │ ├── all_1.js │ ├── all_0.js │ ├── all_8.js │ ├── functions_5.js │ ├── enumvalues_0.js │ ├── enumvalues_1.js │ ├── enumvalues_4.js │ ├── enumvalues_5.js │ ├── classes_1.js │ ├── all_11.js │ ├── all_b.js │ ├── all_10.js │ ├── all_d.js │ ├── functions_2.js │ ├── all_a.js │ ├── enums_2.js │ ├── enumvalues_3.js │ ├── enumvalues_6.js │ ├── all_2.js │ ├── all_4.js │ ├── functions_0.js │ ├── all_9.js │ ├── nomatches.html │ ├── all_7.js │ ├── searchdata.js │ ├── all_f.js │ ├── enumvalues_7.js │ ├── all_5.js │ ├── enumvalues_2.js │ ├── classes_5.js │ ├── all_0.html │ ├── all_1.html │ ├── all_10.html │ ├── all_11.html │ ├── all_12.html │ ├── all_2.html │ ├── all_3.html │ ├── all_4.html │ ├── all_5.html │ ├── all_6.html │ ├── all_7.html │ ├── all_8.html │ ├── all_9.html │ ├── all_a.html │ ├── all_b.html │ ├── all_c.html │ ├── all_d.html │ ├── all_e.html │ ├── all_f.html │ ├── enums_0.html │ ├── enums_1.html │ ├── enums_2.html │ ├── pages_0.html │ ├── classes_0.html │ ├── classes_1.html │ ├── classes_2.html │ ├── classes_3.html │ ├── classes_4.html │ ├── classes_5.html │ ├── classes_6.html │ ├── classes_7.html │ ├── classes_8.html │ ├── classes_9.html │ ├── functions_0.html │ ├── functions_1.html │ ├── functions_2.html │ ├── functions_3.html │ ├── functions_4.html │ ├── functions_5.html │ ├── functions_6.html │ ├── functions_7.html │ ├── functions_8.html │ ├── functions_9.html │ ├── functions_a.html │ ├── functions_b.html │ ├── functions_c.html │ ├── enumvalues_0.html │ ├── enumvalues_1.html │ ├── enumvalues_2.html │ ├── enumvalues_3.html │ ├── enumvalues_4.html │ ├── enumvalues_5.html │ ├── enumvalues_6.html │ ├── enumvalues_7.html │ ├── namespaces_0.html │ ├── classes_0.js │ ├── functions_1.js │ ├── all_3.js │ ├── all_12.js │ ├── functions_c.js │ ├── functions_9.js │ ├── all_e.js │ ├── functions_7.js │ ├── all_c.js │ └── search.css ├── classhoa_1_1_optim.png ├── classhoa_1_1_rotate.png ├── classhoa_1_1_scope.png ├── classhoa_1_1_vector.png ├── classhoa_1_1_wider.png ├── classhoa_1_1_decoder.png ├── classhoa_1_1_encoder.png ├── classhoa_1_1_exchanger.png ├── classhoa_1_1_processor.png ├── classhoa_1_1_multi_encoder.png ├── classhoa_1_1_decoder_binaural.png ├── classhoa_1_1_decoder_regular.png ├── classhoa_1_1_decoder_irregular.png ├── classhoa_1_1_processor_harmonics.png ├── classhoa_1_1_processor_planewaves.png ├── classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.png ├── classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.png ├── classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.png ├── classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.png ├── classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.png ├── tabs.css ├── dynsections.js ├── dir_937900b87e0c7a5fa01190c395fb83f7.html ├── namespacemembers_enum.html ├── namespacemembers_eval.html ├── namespacemembers.html ├── functions_enum.html ├── classhoa_1_1_processor-members.html ├── index.html └── functions_eval.html ├── .gitmodules ├── appveyor.yml ├── Tests ├── Test.cpp └── Test_MultiEncoder.cpp ├── Sources ├── Hoa.hpp ├── Hoa_Defs.hpp ├── Hoa_Math.hpp ├── Hoa_Hrir.hpp ├── Hoa_Wider.hpp ├── Hoa_Rotate.hpp ├── Hoa_Planewaves.hpp └── Hoa_Optim.hpp ├── .travis.yml ├── README.md └── CMakeLists.txt /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | Doc/ 3 | -------------------------------------------------------------------------------- /docs/bc_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/bc_s.png -------------------------------------------------------------------------------- /docs/bdwn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/bdwn.png -------------------------------------------------------------------------------- /docs/doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/doc.png -------------------------------------------------------------------------------- /docs/open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/open.png -------------------------------------------------------------------------------- /docs/closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/closed.png -------------------------------------------------------------------------------- /docs/nav_f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/nav_f.png -------------------------------------------------------------------------------- /docs/nav_g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/nav_g.png -------------------------------------------------------------------------------- /docs/nav_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/nav_h.png -------------------------------------------------------------------------------- /docs/tab_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/tab_a.png -------------------------------------------------------------------------------- /docs/tab_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/tab_b.png -------------------------------------------------------------------------------- /docs/tab_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/tab_h.png -------------------------------------------------------------------------------- /docs/tab_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/tab_s.png -------------------------------------------------------------------------------- /docs/arrowdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/arrowdown.png -------------------------------------------------------------------------------- /docs/doxygen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/doxygen.png -------------------------------------------------------------------------------- /docs/splitbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/splitbar.png -------------------------------------------------------------------------------- /docs/sync_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/sync_off.png -------------------------------------------------------------------------------- /docs/sync_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/sync_on.png -------------------------------------------------------------------------------- /docs/arrowright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/arrowright.png -------------------------------------------------------------------------------- /docs/folderopen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/folderopen.png -------------------------------------------------------------------------------- /docs/folderclosed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/folderclosed.png -------------------------------------------------------------------------------- /docs/search/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/search/close.png -------------------------------------------------------------------------------- /docs/search/mag_sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/search/mag_sel.png -------------------------------------------------------------------------------- /docs/search/search_l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/search/search_l.png -------------------------------------------------------------------------------- /docs/search/search_m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/search/search_m.png -------------------------------------------------------------------------------- /docs/search/search_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/search/search_r.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_optim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_optim.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_rotate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_rotate.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_scope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_scope.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_vector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_vector.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_wider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_wider.png -------------------------------------------------------------------------------- /docs/search/namespaces_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['hoa',['hoa',['../namespacehoa.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/classhoa_1_1_decoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_decoder.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_encoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_encoder.png -------------------------------------------------------------------------------- /docs/search/pages_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['hoa_20library',['HOA Library',['../index.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/classhoa_1_1_exchanger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_exchanger.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_processor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_processor.png -------------------------------------------------------------------------------- /docs/search/classes_4.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['optim',['Optim',['../classhoa_1_1_optim.html',1,'hoa']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/classes_7.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['scope',['Scope',['../classhoa_1_1_scope.html',1,'hoa']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/classes_9.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['wider',['Wider',['../classhoa_1_1_wider.html',1,'hoa']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/classhoa_1_1_multi_encoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_multi_encoder.png -------------------------------------------------------------------------------- /docs/search/classes_6.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['rotate',['Rotate',['../classhoa_1_1_rotate.html',1,'hoa']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/classes_8.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['vector',['Vector',['../classhoa_1_1_vector.html',1,'hoa']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/classhoa_1_1_decoder_binaural.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_decoder_binaural.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_decoder_regular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_decoder_regular.png -------------------------------------------------------------------------------- /docs/search/classes_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['harmonic',['Harmonic',['../classhoa_1_1_harmonic.html',1,'hoa']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "ThirdParty/Eigen"] 2 | path = ThirdParty/Eigen 3 | url = https://github.com/eigenteam/eigen-git-mirror.git 4 | -------------------------------------------------------------------------------- /docs/classhoa_1_1_decoder_irregular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_decoder_irregular.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_processor_harmonics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_processor_harmonics.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_processor_planewaves.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_processor_planewaves.png -------------------------------------------------------------------------------- /docs/search/classes_3.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['multiencoder',['MultiEncoder',['../classhoa_1_1_multi_encoder.html',1,'hoa']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/enums_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['dimension',['Dimension',['../namespacehoa.html#afeeb3ea8d8350f7e9c636d23679a4dca',1,'hoa']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.png -------------------------------------------------------------------------------- /docs/search/enums_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['mode',['Mode',['../classhoa_1_1_optim.html#a46c8a310cf4c094f8c80e1cb8dc1f911',1,'hoa::Optim']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/functions_6.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['optim',['Optim',['../classhoa_1_1_optim.html#a27afeabc43224bab22753c96dda537ad',1,'hoa::Optim']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/functions_b.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['wider',['Wider',['../classhoa_1_1_wider.html#a19ebcc955bd610d6fa1daea18ffa0ce5',1,'hoa::Wider']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/functions_8.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['rotate',['Rotate',['../classhoa_1_1_rotate.html#abaff700a4d9875379e137e95998a8229',1,'hoa::Rotate']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/functions_a.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['vector',['Vector',['../classhoa_1_1_vector.html#acbccada9e51e2b3d742b95425078f1a0',1,'hoa::Vector']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/functions_4.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['harmonic',['Harmonic',['../classhoa_1_1_harmonic.html#a4055701b66d8f5ad5d9b746944841fbc',1,'hoa::Harmonic']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.png -------------------------------------------------------------------------------- /docs/classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CICM/HoaLibrary-Light/HEAD/docs/classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.png -------------------------------------------------------------------------------- /docs/search/all_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['basic',['Basic',['../classhoa_1_1_optim.html#a46c8a310cf4c094f8c80e1cb8dc1f911ae7daa0df03dc17e169eb5190f575f3ef',1,'hoa::Optim']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/all_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['acn',['ACN',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071abb50bb426e10ba916b9fe15a5cffb6ab',1,'hoa::Exchanger']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/all_8.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['inphase',['InPhase',['../classhoa_1_1_optim.html#a46c8a310cf4c094f8c80e1cb8dc1f911a263f6660ba749f0dda731712db4b9c88',1,'hoa::Optim']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/functions_5.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['multiencoder',['MultiEncoder',['../classhoa_1_1_multi_encoder.html#aa5b556c92f881e490093bf485c1fcb62',1,'hoa::MultiEncoder']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/enumvalues_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['acn',['ACN',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071abb50bb426e10ba916b9fe15a5cffb6ab',1,'hoa::Exchanger']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/enumvalues_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['basic',['Basic',['../classhoa_1_1_optim.html#a46c8a310cf4c094f8c80e1cb8dc1f911ae7daa0df03dc17e169eb5190f575f3ef',1,'hoa::Optim']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/enumvalues_4.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['inphase',['InPhase',['../classhoa_1_1_optim.html#a46c8a310cf4c094f8c80e1cb8dc1f911a263f6660ba749f0dda731712db4b9c88',1,'hoa::Optim']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/enumvalues_5.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['maxre',['MaxRe',['../classhoa_1_1_optim.html#a46c8a310cf4c094f8c80e1cb8dc1f911aca0a9165ee620ede32ee6cc9a3566ba8',1,'hoa::Optim']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /docs/search/classes_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['encoder',['Encoder',['../classhoa_1_1_encoder.html',1,'hoa']]], 4 | ['exchanger',['Exchanger',['../classhoa_1_1_exchanger.html',1,'hoa']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/all_11.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['wider',['Wider',['../classhoa_1_1_wider.html',1,'hoa']]], 4 | ['wider',['Wider',['../classhoa_1_1_wider.html#a19ebcc955bd610d6fa1daea18ffa0ce5',1,'hoa::Wider']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/all_b.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['optim',['Optim',['../classhoa_1_1_optim.html',1,'hoa']]], 4 | ['optim',['Optim',['../classhoa_1_1_optim.html#a27afeabc43224bab22753c96dda537ad',1,'hoa::Optim']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/all_10.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['vector',['Vector',['../classhoa_1_1_vector.html',1,'hoa']]], 4 | ['vector',['Vector',['../classhoa_1_1_vector.html#acbccada9e51e2b3d742b95425078f1a0',1,'hoa::Vector']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/all_d.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['rotate',['Rotate',['../classhoa_1_1_rotate.html',1,'hoa']]], 4 | ['rotate',['Rotate',['../classhoa_1_1_rotate.html#abaff700a4d9875379e137e95998a8229',1,'hoa::Rotate']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/functions_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['encoder',['Encoder',['../classhoa_1_1_encoder.html#a748c7acd7074935277bdab472a000d0e',1,'hoa::Encoder']]], 4 | ['exchanger',['Exchanger',['../classhoa_1_1_exchanger.html#a099c9f280a55ccffb65140f81f2b8620',1,'hoa::Exchanger']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/all_a.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['normalization',['Normalization',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14e',1,'hoa::Exchanger']]], 4 | ['numbering',['Numbering',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071',1,'hoa::Exchanger']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/enums_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['normalization',['Normalization',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14e',1,'hoa::Exchanger']]], 4 | ['numbering',['Numbering',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071',1,'hoa::Exchanger']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/enumvalues_3.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['hoa2d',['Hoa2d',['../namespacehoa.html#afeeb3ea8d8350f7e9c636d23679a4dcaa779b07b50e82744f519d182e16ad8d02',1,'hoa']]], 4 | ['hoa3d',['Hoa3d',['../namespacehoa.html#afeeb3ea8d8350f7e9c636d23679a4dcaa8c4ed07441a35763f9e4975625283399',1,'hoa']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/enumvalues_6.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['sn2d',['SN2D',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14eaddb5a7f35808fb7da8dadafa740a9f31',1,'hoa::Exchanger']]], 4 | ['sn3d',['SN3D',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14eaa24e53b3ed90e84d7e1c272aab2e3b2c',1,'hoa::Exchanger']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/all_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['compare_5fazimuth',['compare_azimuth',['../classhoa_1_1_planewave.html#af7a6e99084a4d4134261e36c739f2d9c',1,'hoa::Planewave']]], 4 | ['computerendering',['computeRendering',['../classhoa_1_1_scope.html#a8547b81d8c88d92b46d3842bfa595765',1,'hoa::Scope::computeRendering()'],['../classhoa_1_1_vector.html#a8547b81d8c88d92b46d3842bfa595765',1,'hoa::Vector::computeRendering()']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/all_4.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['encoder',['Encoder',['../classhoa_1_1_encoder.html',1,'hoa']]], 4 | ['encoder',['Encoder',['../classhoa_1_1_encoder.html#a748c7acd7074935277bdab472a000d0e',1,'hoa::Encoder']]], 5 | ['exchanger',['Exchanger',['../classhoa_1_1_exchanger.html#a099c9f280a55ccffb65140f81f2b8620',1,'hoa::Exchanger']]], 6 | ['exchanger',['Exchanger',['../classhoa_1_1_exchanger.html',1,'hoa']]] 7 | ]; 8 | -------------------------------------------------------------------------------- /docs/search/functions_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['compare_5fazimuth',['compare_azimuth',['../classhoa_1_1_planewave.html#af7a6e99084a4d4134261e36c739f2d9c',1,'hoa::Planewave']]], 4 | ['computerendering',['computeRendering',['../classhoa_1_1_scope.html#a8547b81d8c88d92b46d3842bfa595765',1,'hoa::Scope::computeRendering()'],['../classhoa_1_1_vector.html#a8547b81d8c88d92b46d3842bfa595765',1,'hoa::Vector::computeRendering()']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /docs/search/all_9.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['maxre',['MaxRe',['../classhoa_1_1_optim.html#a46c8a310cf4c094f8c80e1cb8dc1f911aca0a9165ee620ede32ee6cc9a3566ba8',1,'hoa::Optim']]], 4 | ['mode',['Mode',['../classhoa_1_1_optim.html#a46c8a310cf4c094f8c80e1cb8dc1f911',1,'hoa::Optim']]], 5 | ['multiencoder',['MultiEncoder',['../classhoa_1_1_multi_encoder.html#aa5b556c92f881e490093bf485c1fcb62',1,'hoa::MultiEncoder']]], 6 | ['multiencoder',['MultiEncoder',['../classhoa_1_1_multi_encoder.html',1,'hoa']]] 7 | ]; 8 | -------------------------------------------------------------------------------- /docs/search/nomatches.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 |
No Matches
10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | os: Visual Studio 2015 2 | 3 | environment: 4 | matrix: 5 | - msvc: "Visual Studio 14 2015" 6 | - msvc: "Visual Studio 14 2015 Win64" 7 | 8 | install: 9 | - git submodule update --init --recursive 10 | - cmake --version 11 | 12 | build_script: 13 | - mkdir build 14 | - cd build 15 | - cmake .. -G"%msvc%" -DCMAKE_BUILD_TYPE=Debug 16 | - cmake --build . 17 | 18 | test_script: 19 | - cd %APPVEYOR_BUILD_FOLDER%\build\Debug 20 | - hoatest.exe 21 | 22 | notifications: 23 | - provider: Email 24 | on_build_status_changed: false 25 | -------------------------------------------------------------------------------- /docs/search/all_7.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['harmonic',['Harmonic',['../classhoa_1_1_harmonic.html',1,'hoa']]], 4 | ['harmonic',['Harmonic',['../classhoa_1_1_harmonic.html#a4055701b66d8f5ad5d9b746944841fbc',1,'hoa::Harmonic']]], 5 | ['hoa',['hoa',['../namespacehoa.html',1,'']]], 6 | ['hoa2d',['Hoa2d',['../namespacehoa.html#afeeb3ea8d8350f7e9c636d23679a4dcaa779b07b50e82744f519d182e16ad8d02',1,'hoa']]], 7 | ['hoa3d',['Hoa3d',['../namespacehoa.html#afeeb3ea8d8350f7e9c636d23679a4dcaa8c4ed07441a35763f9e4975625283399',1,'hoa']]], 8 | ['hoa_20library',['HOA Library',['../index.html',1,'']]] 9 | ]; 10 | -------------------------------------------------------------------------------- /docs/search/searchdata.js: -------------------------------------------------------------------------------- 1 | var indexSectionsWithContent = 2 | { 3 | 0: "abcdefghimnoprstvw~", 4 | 1: "dehmoprsvw", 5 | 2: "h", 6 | 3: "cdeghmoprsvw~", 7 | 4: "dmn", 8 | 5: "abfhimst", 9 | 6: "h" 10 | }; 11 | 12 | var indexSectionNames = 13 | { 14 | 0: "all", 15 | 1: "classes", 16 | 2: "namespaces", 17 | 3: "functions", 18 | 4: "enums", 19 | 5: "enumvalues", 20 | 6: "pages" 21 | }; 22 | 23 | var indexSectionLabels = 24 | { 25 | 0: "All", 26 | 1: "Classes", 27 | 2: "Namespaces", 28 | 3: "Functions", 29 | 4: "Enumerations", 30 | 5: "Enumerator", 31 | 6: "Pages" 32 | }; 33 | 34 | -------------------------------------------------------------------------------- /Tests/Test.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2015 Pierre Guillot. 3 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 4 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 5 | */ 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | #include 12 | using namespace hoa; 13 | 14 | #define CATCH_CONFIG_RUNNER 15 | #define CATCH_CONFIG_PREFIX_ALL 16 | #include "catch.hpp" 17 | 18 | int main(int argc, char* const argv[]) 19 | { 20 | std::cout << "HOA Library Testing...\n"; 21 | int result = Catch::Session().run(argc, argv); 22 | return result; 23 | } -------------------------------------------------------------------------------- /docs/search/all_f.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['tofursemalham',['toFurseMalham',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071a9f052ca92eb2253d7b5a5ad2da02f7c3',1,'hoa::Exchanger']]], 4 | ['tomaxn',['toMaxN',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14ea27c7764ce7ea7e6edb7e56c5bead3f13',1,'hoa::Exchanger']]], 5 | ['ton3d',['toN3D',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14ea4f9f8ffd1f60df7ab3aeb7f89dd7421c',1,'hoa::Exchanger']]], 6 | ['tosid',['toSID',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071ab3c8889c4023920b757223e4b46de049',1,'hoa::Exchanger']]] 7 | ]; 8 | -------------------------------------------------------------------------------- /docs/search/enumvalues_7.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['tofursemalham',['toFurseMalham',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071a9f052ca92eb2253d7b5a5ad2da02f7c3',1,'hoa::Exchanger']]], 4 | ['tomaxn',['toMaxN',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14ea27c7764ce7ea7e6edb7e56c5bead3f13',1,'hoa::Exchanger']]], 5 | ['ton3d',['toN3D',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14ea4f9f8ffd1f60df7ab3aeb7f89dd7421c',1,'hoa::Exchanger']]], 6 | ['tosid',['toSID',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071ab3c8889c4023920b757223e4b46de049',1,'hoa::Exchanger']]] 7 | ]; 8 | -------------------------------------------------------------------------------- /docs/search/all_5.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['fromfursemalham',['fromFurseMalham',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071af25c82086ab73943aafe85f4ab143a04',1,'hoa::Exchanger']]], 4 | ['frommaxn',['fromMaxN',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14ea4b17f4d4fdc313e968a27384a82b7d24',1,'hoa::Exchanger']]], 5 | ['fromn3d',['fromN3D',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14ea527315e2dc4a9426874672a4716cb7ac',1,'hoa::Exchanger']]], 6 | ['fromsid',['fromSID',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071a48c6438ad8d1f87346c9213bb2f3b905',1,'hoa::Exchanger']]] 7 | ]; 8 | -------------------------------------------------------------------------------- /docs/search/enumvalues_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['fromfursemalham',['fromFurseMalham',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071af25c82086ab73943aafe85f4ab143a04',1,'hoa::Exchanger']]], 4 | ['frommaxn',['fromMaxN',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14ea4b17f4d4fdc313e968a27384a82b7d24',1,'hoa::Exchanger']]], 5 | ['fromn3d',['fromN3D',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14ea527315e2dc4a9426874672a4716cb7ac',1,'hoa::Exchanger']]], 6 | ['fromsid',['fromSID',['../classhoa_1_1_exchanger.html#a97018f59ae98bb947c08356b85e91071a48c6438ad8d1f87346c9213bb2f3b905',1,'hoa::Exchanger']]] 7 | ]; 8 | -------------------------------------------------------------------------------- /Sources/Hoa.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2012-2017 CICM - Universite Paris 8 - Labex Arts H2H. 3 | // Authors : 4 | // 2012: Pierre Guillot, Eliott Paris & Julien Colafrancesco. 5 | // 2012-2015: Pierre Guillot & Eliott Paris. 6 | // 2015: Pierre Guillot & Eliott Paris & Thomas Le Meur (Light version) 7 | // 2016-2017: Pierre Guillot. 8 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 9 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 10 | */ 11 | 12 | #pragma once 13 | 14 | #include "Hoa_Harmonics.hpp" 15 | #include "Hoa_Planewaves.hpp" 16 | #include "Hoa_Encoder.hpp" 17 | #include "Hoa_MultiEncoder.hpp" 18 | #include "Hoa_Optim.hpp" 19 | #include "Hoa_Rotate.hpp" 20 | #include "Hoa_Decoder.hpp" 21 | #include "Hoa_Vector.hpp" 22 | #include "Hoa_Wider.hpp" 23 | #include "Hoa_Exchanger.hpp" 24 | -------------------------------------------------------------------------------- /docs/search/classes_5.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['planewave',['Planewave',['../classhoa_1_1_planewave.html',1,'hoa']]], 4 | ['processor',['Processor',['../classhoa_1_1_processor.html',1,'hoa']]], 5 | ['processorharmonics',['ProcessorHarmonics',['../classhoa_1_1_processor_harmonics.html',1,'hoa']]], 6 | ['processorharmonics_3c_20hoa2d_2c_20t_20_3e',['ProcessorHarmonics< Hoa2d, T >',['../classhoa_1_1_processor_harmonics.html',1,'hoa']]], 7 | ['processorharmonics_3c_20hoa3d_2c_20t_20_3e',['ProcessorHarmonics< Hoa3d, T >',['../classhoa_1_1_processor_harmonics.html',1,'hoa']]], 8 | ['processorplanewaves',['ProcessorPlanewaves',['../classhoa_1_1_processor_planewaves.html',1,'hoa']]], 9 | ['processorplanewaves_3c_20hoa2d_2c_20t_20_3e',['ProcessorPlanewaves< Hoa2d, T >',['../classhoa_1_1_processor_planewaves.html',1,'hoa']]], 10 | ['processorplanewaves_3c_20hoa3d_2c_20t_20_3e',['ProcessorPlanewaves< Hoa3d, T >',['../classhoa_1_1_processor_planewaves.html',1,'hoa']]] 11 | ]; 12 | -------------------------------------------------------------------------------- /docs/search/all_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_10.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_11.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_12.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_5.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_6.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_7.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_8.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_9.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_a.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_b.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_c.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_d.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_e.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/all_f.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/enums_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/enums_1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/enums_2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/pages_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/classes_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/classes_1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/classes_2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/classes_3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/classes_4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/classes_5.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/classes_6.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/classes_7.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/classes_8.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/classes_9.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_5.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_6.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_7.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_8.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_9.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_a.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_b.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/functions_c.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/enumvalues_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/enumvalues_1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/enumvalues_2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/enumvalues_3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/enumvalues_4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/enumvalues_5.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/enumvalues_6.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/enumvalues_7.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/namespaces_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
Loading...
12 |
13 | 16 |
Searching...
17 |
No Matches
18 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/search/classes_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['decoder',['Decoder',['../classhoa_1_1_decoder.html',1,'hoa']]], 4 | ['decoder_3c_20hoa2d_2c_20t_20_3e',['Decoder< Hoa2d, T >',['../classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.html',1,'hoa']]], 5 | ['decoder_3c_20hoa3d_2c_20t_20_3e',['Decoder< Hoa3d, T >',['../classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.html',1,'hoa']]], 6 | ['decoderbinaural',['DecoderBinaural',['../classhoa_1_1_decoder_binaural.html',1,'hoa']]], 7 | ['decoderbinaural_3c_20hoa2d_2c_20t_20_3e',['DecoderBinaural< Hoa2d, T >',['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html',1,'hoa']]], 8 | ['decoderbinaural_3c_20hoa3d_2c_20t_20_3e',['DecoderBinaural< Hoa3d, T >',['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html',1,'hoa']]], 9 | ['decoderirregular',['DecoderIrregular',['../classhoa_1_1_decoder_irregular.html',1,'hoa']]], 10 | ['decoderirregular_3c_20hoa2d_2c_20t_20_3e',['DecoderIrregular< Hoa2d, T >',['../classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.html',1,'hoa']]], 11 | ['decoderregular',['DecoderRegular',['../classhoa_1_1_decoder_regular.html',1,'hoa']]] 12 | ]; 13 | -------------------------------------------------------------------------------- /docs/search/functions_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['decoder',['Decoder',['../classhoa_1_1_decoder.html#a8f7dd99ee5e6b350975457cf3e6b2731',1,'hoa::Decoder::Decoder()'],['../classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.html#a8f7dd99ee5e6b350975457cf3e6b2731',1,'hoa::Decoder< Hoa2d, T >::Decoder()'],['../classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.html#a8f7dd99ee5e6b350975457cf3e6b2731',1,'hoa::Decoder< Hoa3d, T >::Decoder()']]], 4 | ['decoderbinaural',['DecoderBinaural',['../classhoa_1_1_decoder_binaural.html#a14592c26b99bb95f6450d8df2ba9925b',1,'hoa::DecoderBinaural::DecoderBinaural()'],['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#a3269ccc7e474636fdd08d11987647f4c',1,'hoa::DecoderBinaural< Hoa2d, T >::DecoderBinaural()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#a14592c26b99bb95f6450d8df2ba9925b',1,'hoa::DecoderBinaural< Hoa3d, T >::DecoderBinaural()']]], 5 | ['decoderirregular',['DecoderIrregular',['../classhoa_1_1_decoder_irregular.html#aaf78ecd44db12a5a65e354fc19b35110',1,'hoa::DecoderIrregular::DecoderIrregular()'],['../classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.html#aaf78ecd44db12a5a65e354fc19b35110',1,'hoa::DecoderIrregular< Hoa2d, T >::DecoderIrregular()']]], 6 | ['decoderregular',['DecoderRegular',['../classhoa_1_1_decoder_regular.html#a9dd7051671e3f1be529b7ce5716a16f5',1,'hoa::DecoderRegular']]] 7 | ]; 8 | -------------------------------------------------------------------------------- /docs/tabs.css: -------------------------------------------------------------------------------- 1 | .tabs, .tabs2, .tabs3 { 2 | background-image: url('tab_b.png'); 3 | width: 100%; 4 | z-index: 101; 5 | font-size: 13px; 6 | font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; 7 | } 8 | 9 | .tabs2 { 10 | font-size: 10px; 11 | } 12 | .tabs3 { 13 | font-size: 9px; 14 | } 15 | 16 | .tablist { 17 | margin: 0; 18 | padding: 0; 19 | display: table; 20 | } 21 | 22 | .tablist li { 23 | float: left; 24 | display: table-cell; 25 | background-image: url('tab_b.png'); 26 | line-height: 36px; 27 | list-style: none; 28 | } 29 | 30 | .tablist a { 31 | display: block; 32 | padding: 0 20px; 33 | font-weight: bold; 34 | background-image:url('tab_s.png'); 35 | background-repeat:no-repeat; 36 | background-position:right; 37 | color: #283A5D; 38 | text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); 39 | text-decoration: none; 40 | outline: none; 41 | } 42 | 43 | .tabs3 .tablist a { 44 | padding: 0 10px; 45 | } 46 | 47 | .tablist a:hover { 48 | background-image: url('tab_h.png'); 49 | background-repeat:repeat-x; 50 | color: #fff; 51 | text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); 52 | text-decoration: none; 53 | } 54 | 55 | .tablist li.current a { 56 | background-image: url('tab_a.png'); 57 | background-repeat:repeat-x; 58 | color: #fff; 59 | text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); 60 | } 61 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: cpp 2 | dist: xenial 3 | sudo: required 4 | 5 | git: 6 | submodules: true 7 | depth: 3 8 | 9 | matrix: 10 | include: 11 | - os: linux 12 | compiler: gcc 13 | addons: 14 | apt: 15 | packages: ['python-pip', 'python-yaml'] 16 | install: 17 | - pip install --user cpp-coveralls 18 | script: 19 | - mkdir build && cd build 20 | - cmake -DGCOV_SUPPORT=On .. 21 | - cmake --build . 22 | - cd ../ 23 | - ./build/hoatest 24 | after_success: 25 | - coveralls -e build/CMakeFiles/feature_tests.cxx -e build/CMakeFiles/feature_tests.c -e build/CMakeFiles/CompilerIdCXX/CMakeCXXCompilerId.cpp -e build/CMakeFiles/CompilerIdCXX/CMakeCXXCompilerId.c -e build/CMakeFiles/3.2.2/CompilerIdCXX/CMakeCXXCompilerId.cpp -e build/CMakeFiles/3.2.2/CompilerIdC/CMakeCCompilerId.c -e Tests --gcov-options '\-lp' 26 | env: 27 | - Coveralls 28 | 29 | - os: linux 30 | compiler: gcc 31 | env: 32 | - Libs and Tests 33 | 34 | - os: linux 35 | compiler: clang 36 | env: 37 | - Libs and Tests 38 | 39 | - os: osx 40 | compiler: gcc 41 | env: 42 | - Libs and Tests 43 | 44 | - os: osx 45 | compiler: clang 46 | env: 47 | - Libs and Tests 48 | 49 | script: 50 | - mkdir build && cd build 51 | - cmake .. 52 | - cmake --build . 53 | - cd ../ 54 | - ./build/hoatest 55 | 56 | notifications: 57 | email: true 58 | -------------------------------------------------------------------------------- /Sources/Hoa_Defs.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2012-2017 CICM - Universite Paris 8 - Labex Arts H2H. 3 | // Authors : 4 | // 2012: Pierre Guillot, Eliott Paris & Julien Colafrancesco. 5 | // 2012-2015: Pierre Guillot & Eliott Paris. 6 | // 2015: Pierre Guillot & Eliott Paris & Thomas Le Meur (Light version) 7 | // 2016-2017: Pierre Guillot. 8 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 9 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 10 | */ 11 | 12 | #pragma once 13 | 14 | #ifdef __APPLE__ 15 | #include 16 | #else 17 | #include 18 | #endif 19 | 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | // avoid min and max to be defined when compiling on VS 29 | #ifdef _MSC_VER 30 | #define NOMINMAX 31 | #endif 32 | 33 | #include 34 | #define hoa_unused(expr) (void)(expr) 35 | 36 | #define HOA_PI 3.14159265358979323846264338327950288 37 | #define HOA_2PI 6.283185307179586476925286766559005 38 | #define HOA_PI2 1.57079632679489661923132169163975144 39 | #define HOA_PI4 0.785398163397448309615660845819875721 40 | #define HOA_EPSILON 1e-6 41 | 42 | //! The namespace of the hoa library. 43 | /** All the classes of the hoa library are inside this namespace. 44 | */ 45 | namespace hoa 46 | { 47 | //! The dimension of class. 48 | //! Most of the classes are specialized for 2d or 3d. 49 | enum Dimension 50 | { 51 | Hoa2d = 0, /*!< The 2d dimension. */ 52 | Hoa3d = 1 /*!< The 3d dimension. */ 53 | }; 54 | } 55 | -------------------------------------------------------------------------------- /Sources/Hoa_Math.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2012-2017 CICM - Universite Paris 8 - Labex Arts H2H. 3 | // Authors : 4 | // 2012: Pierre Guillot, Eliott Paris & Julien Colafrancesco. 5 | // 2012-2015: Pierre Guillot & Eliott Paris. 6 | // 2015: Pierre Guillot & Eliott Paris & Thomas Le Meur (Light version) 7 | // 2016-2017: Pierre Guillot. 8 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 9 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 10 | */ 11 | 12 | #pragma once 13 | 14 | namespace hoa 15 | { 16 | //! Math utilities and funtions. 17 | template 18 | class math 19 | { 20 | public: 21 | 22 | math() = delete; 23 | ~math() = delete; 24 | 25 | //! @brief Returns π constant 26 | static constexpr T pi() { return 3.14159265358979323846264338327950288; } 27 | 28 | //! @brief Returns 2π 29 | static constexpr T two_pi() { return pi() * 2.; } 30 | 31 | //! @brief Returns π/2 32 | static constexpr T pi_over_two() { return pi() * 0.5; } 33 | 34 | //! @brief Returns π/4 35 | static constexpr T pi_over_four() { return pi() * 0.25; } 36 | 37 | //! @brief Wraps the value between 0 and π 38 | static T wrap_pi(T value) 39 | { 40 | while(value < -pi()) { value += two_pi(); } 41 | while(value >= pi()) { value -= two_pi(); } 42 | return value; 43 | } 44 | 45 | //! @brief Wraps the value between 0 and 2π 46 | static T wrap_two_pi(T value) 47 | { 48 | while(value < 0.) { value += two_pi(); } 49 | while(value >= two_pi()) { value -= two_pi(); } 50 | return value; 51 | } 52 | 53 | }; 54 | } 55 | -------------------------------------------------------------------------------- /docs/search/all_3.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['decoder',['Decoder',['../classhoa_1_1_decoder.html',1,'hoa']]], 4 | ['decoder',['Decoder',['../classhoa_1_1_decoder.html#a8f7dd99ee5e6b350975457cf3e6b2731',1,'hoa::Decoder::Decoder()'],['../classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.html#a8f7dd99ee5e6b350975457cf3e6b2731',1,'hoa::Decoder< Hoa2d, T >::Decoder()'],['../classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.html#a8f7dd99ee5e6b350975457cf3e6b2731',1,'hoa::Decoder< Hoa3d, T >::Decoder()']]], 5 | ['decoder_3c_20hoa2d_2c_20t_20_3e',['Decoder< Hoa2d, T >',['../classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.html',1,'hoa']]], 6 | ['decoder_3c_20hoa3d_2c_20t_20_3e',['Decoder< Hoa3d, T >',['../classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.html',1,'hoa']]], 7 | ['decoderbinaural',['DecoderBinaural',['../classhoa_1_1_decoder_binaural.html',1,'hoa']]], 8 | ['decoderbinaural',['DecoderBinaural',['../classhoa_1_1_decoder_binaural.html#a14592c26b99bb95f6450d8df2ba9925b',1,'hoa::DecoderBinaural::DecoderBinaural()'],['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#a3269ccc7e474636fdd08d11987647f4c',1,'hoa::DecoderBinaural< Hoa2d, T >::DecoderBinaural()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#a14592c26b99bb95f6450d8df2ba9925b',1,'hoa::DecoderBinaural< Hoa3d, T >::DecoderBinaural()']]], 9 | ['decoderbinaural_3c_20hoa2d_2c_20t_20_3e',['DecoderBinaural< Hoa2d, T >',['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html',1,'hoa']]], 10 | ['decoderbinaural_3c_20hoa3d_2c_20t_20_3e',['DecoderBinaural< Hoa3d, T >',['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html',1,'hoa']]], 11 | ['decoderirregular',['DecoderIrregular',['../classhoa_1_1_decoder_irregular.html',1,'hoa']]], 12 | ['decoderirregular',['DecoderIrregular',['../classhoa_1_1_decoder_irregular.html#aaf78ecd44db12a5a65e354fc19b35110',1,'hoa::DecoderIrregular::DecoderIrregular()'],['../classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.html#aaf78ecd44db12a5a65e354fc19b35110',1,'hoa::DecoderIrregular< Hoa2d, T >::DecoderIrregular()']]], 13 | ['decoderirregular_3c_20hoa2d_2c_20t_20_3e',['DecoderIrregular< Hoa2d, T >',['../classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.html',1,'hoa']]], 14 | ['decoderregular',['DecoderRegular',['../classhoa_1_1_decoder_regular.html',1,'hoa']]], 15 | ['decoderregular',['DecoderRegular',['../classhoa_1_1_decoder_regular.html#a9dd7051671e3f1be529b7ce5716a16f5',1,'hoa::DecoderRegular']]], 16 | ['dimension',['Dimension',['../namespacehoa.html#afeeb3ea8d8350f7e9c636d23679a4dca',1,'hoa']]] 17 | ]; 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HOA Library 2 | 3 | #### The high order ambisonics library. 4 | 5 | Sound space is one of the principal dimensions of the contemporary musical thought, especially in the electroacoustic music domain but also in intermedia arts. In this context, the [CICM](http://cicm.mshparisnord.org/ "CICM") has made spatialization its principal research axis. This project's aim is to give to musician spatialization models based on high order ambisonics and sound fields synthesis. This project is developed in a part of the Paris 8 University [LABEX arts H2H](http://www.labex-arts-h2h.fr/ "LABEX arts H2H"). You can visit the official website : [HoaLibrary](http://www.mshparisnord.fr/hoalibrary/ "HoaLibrary"). 6 | 7 | ![Image](http://hoalibrary.mshparisnord.fr/wp-content/themes/hoa/images/hoa-icon03.svg "Hoa-Icon") 8 | 9 | [![Travis](https://img.shields.io/travis/CICM/HoaLibrary-Light.svg?label=travis)](https://travis-ci.org/CICM/HoaLibrary-Light) 10 | [![Appveyor](https://img.shields.io/appveyor/ci/CICM/HoaLibrary-Light.svg?label=appveyor)](https://ci.appveyor.com/project/CICM/HoaLibrary-Light/history) 11 | [![Coverage Status](https://coveralls.io/repos/github/CICM/HoaLibrary-Light/badge.svg?branch=master)](https://coveralls.io/github/CICM/HoaLibrary-Light?branch=master) 12 | [![Documentation](https://img.shields.io/badge/docs-doxygen-blue.svg)](http://cicm.github.io/HoaLibrary-Light/) 13 | 14 | ## Compilation : 15 | 16 | Requires git and [CMake](https://cmake.org/). 17 | 18 | ```shell 19 | # clone repository 20 | $ git clone https://github.com/CICM/HoaLibrary-Light.git 21 | $ cd HoaLibrary-Light 22 | # init submodules 23 | $ git submodule update --init --recursive 24 | # generate project 25 | $ mkdir build && cd build 26 | $ cmake .. 27 | # build project 28 | $ cmake --build . --config Release 29 | ``` 30 | 31 | ## Authors : 32 | 33 | 2012-2019: Pierre Guillot, Eliott Paris and [others](https://github.com/CICM/HoaLibrary-Light/graphs/contributors). 34 | 35 | ## Implementations : 36 | 37 | - [HoaLibrary-Max](https://github.com/CICM/HoaLibrary-Max "Max") - HoaLibrary for Max. 38 | - [HoaLibrary-Pd](https://github.com/CICM/HoaLibrary-PD "PD") - HoaLibrary for Pure Data. 39 | - [HoaLibrary-Unity](https://github.com/CICM/HoaLibrary-Unity "Unity") - HoaLibrary for Unity. 40 | - [HoaLibrary-Faust](https://github.com/CICM/HoaLibrary-Faust "Faust") - HoaLibrary for Faust. 41 | - [OfxHoa](https://github.com/CICM/ofxHoa "Open Framework") - HoaLibrary for openFrameworks. 42 | - [Cinder-Hoa](https://github.com/saynono/Cinder-Hoa) - HoaLibrary for Cinder. 43 | 44 | > Warning: these implementations may not be up to date with this repo. 45 | 46 | ## ThirdParty 47 | 48 | This repo is using the following third parties: 49 | 50 | - [Eigen](http://eigen.tuxfamily.org) 51 | 52 | ## License : 53 | 54 | The HOA Library in under the [GNU](http://www.gnu.org/copyleft/gpl.html "GNU Public License"). If you'd like to avoid the restrictions of the GPL and use HOA Library for a closed-source product, you contact the [CICM](http://cicm.mshparisnord.org/ "CICM"). 55 | -------------------------------------------------------------------------------- /docs/search/all_12.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['_7edecoder',['~Decoder',['../classhoa_1_1_decoder.html#ad8bc1354ed1764a22e7b040d76726524',1,'hoa::Decoder::~Decoder()'],['../classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.html#a2ff7c15dd4f7e8a75ede5fdab35d289a',1,'hoa::Decoder< Hoa2d, T >::~Decoder()'],['../classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.html#a2ff7c15dd4f7e8a75ede5fdab35d289a',1,'hoa::Decoder< Hoa3d, T >::~Decoder()']]], 4 | ['_7edecoderbinaural',['~DecoderBinaural',['../classhoa_1_1_decoder_binaural.html#a9916903e8962abc230cd2ea9e6fdc7f1',1,'hoa::DecoderBinaural::~DecoderBinaural()'],['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#a9e5a029239c5f10d34bb08cbbcbad9f5',1,'hoa::DecoderBinaural< Hoa2d, T >::~DecoderBinaural()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#a7b1a71000c2b8d8f97551b3698e36dee',1,'hoa::DecoderBinaural< Hoa3d, T >::~DecoderBinaural()']]], 5 | ['_7edecoderirregular',['~DecoderIrregular',['../classhoa_1_1_decoder_irregular.html#a227414abbf9d7fc1eabc5cfe9a82a8f2',1,'hoa::DecoderIrregular::~DecoderIrregular()'],['../classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.html#a0772bd557526869283e35a4674ef720b',1,'hoa::DecoderIrregular< Hoa2d, T >::~DecoderIrregular()']]], 6 | ['_7edecoderregular',['~DecoderRegular',['../classhoa_1_1_decoder_regular.html#a24d70faf55f05479ff2cefc12fdc16a3',1,'hoa::DecoderRegular']]], 7 | ['_7eencoder',['~Encoder',['../classhoa_1_1_encoder.html#af48b7e20548110d871c46d2b7a74f7ad',1,'hoa::Encoder']]], 8 | ['_7eexchanger',['~Exchanger',['../classhoa_1_1_exchanger.html#a38bc2bebb51d43680a591863db3a3e81',1,'hoa::Exchanger']]], 9 | ['_7eharmonic',['~Harmonic',['../classhoa_1_1_harmonic.html#aae63dde3a79b7a1b20170ebacea54bad',1,'hoa::Harmonic']]], 10 | ['_7emultiencoder',['~MultiEncoder',['../classhoa_1_1_multi_encoder.html#a9c36ae02e5bbb98e4be573c744e78f99',1,'hoa::MultiEncoder']]], 11 | ['_7eoptim',['~Optim',['../classhoa_1_1_optim.html#a2ae3b1c74aa325687a178a36d9987abf',1,'hoa::Optim']]], 12 | ['_7eplanewave',['~Planewave',['../classhoa_1_1_planewave.html#ac177fe3b2c7bcbd227fca43ed56c9197',1,'hoa::Planewave']]], 13 | ['_7eprocessor',['~Processor',['../classhoa_1_1_processor.html#aea09971a681f2912e0716bace5754cdf',1,'hoa::Processor']]], 14 | ['_7eprocessorharmonics',['~ProcessorHarmonics',['../classhoa_1_1_processor_harmonics.html#ae356bc4bd84a253c316bce3b84d11a1e',1,'hoa::ProcessorHarmonics']]], 15 | ['_7eprocessorplanewaves',['~ProcessorPlanewaves',['../classhoa_1_1_processor_planewaves.html#abf40c616a46103a46c2071cbc05fe036',1,'hoa::ProcessorPlanewaves']]], 16 | ['_7erotate',['~Rotate',['../classhoa_1_1_rotate.html#ae747999000c9a2a34549ff16326bcc99',1,'hoa::Rotate']]], 17 | ['_7escope',['~Scope',['../classhoa_1_1_scope.html#a7eb4ff07b7e1a2d4f2b59e39e9d9b2ab',1,'hoa::Scope']]], 18 | ['_7evector',['~Vector',['../classhoa_1_1_vector.html#abb0b300da42770f4758dae9006301bb8',1,'hoa::Vector']]], 19 | ['_7ewider',['~Wider',['../classhoa_1_1_wider.html#a88230a46e6a19834db610033c99c40f2',1,'hoa::Wider']]] 20 | ]; 21 | -------------------------------------------------------------------------------- /docs/search/functions_c.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['_7edecoder',['~Decoder',['../classhoa_1_1_decoder.html#ad8bc1354ed1764a22e7b040d76726524',1,'hoa::Decoder::~Decoder()'],['../classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.html#a2ff7c15dd4f7e8a75ede5fdab35d289a',1,'hoa::Decoder< Hoa2d, T >::~Decoder()'],['../classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.html#a2ff7c15dd4f7e8a75ede5fdab35d289a',1,'hoa::Decoder< Hoa3d, T >::~Decoder()']]], 4 | ['_7edecoderbinaural',['~DecoderBinaural',['../classhoa_1_1_decoder_binaural.html#a9916903e8962abc230cd2ea9e6fdc7f1',1,'hoa::DecoderBinaural::~DecoderBinaural()'],['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#a9e5a029239c5f10d34bb08cbbcbad9f5',1,'hoa::DecoderBinaural< Hoa2d, T >::~DecoderBinaural()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#a7b1a71000c2b8d8f97551b3698e36dee',1,'hoa::DecoderBinaural< Hoa3d, T >::~DecoderBinaural()']]], 5 | ['_7edecoderirregular',['~DecoderIrregular',['../classhoa_1_1_decoder_irregular.html#a227414abbf9d7fc1eabc5cfe9a82a8f2',1,'hoa::DecoderIrregular::~DecoderIrregular()'],['../classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.html#a0772bd557526869283e35a4674ef720b',1,'hoa::DecoderIrregular< Hoa2d, T >::~DecoderIrregular()']]], 6 | ['_7edecoderregular',['~DecoderRegular',['../classhoa_1_1_decoder_regular.html#a24d70faf55f05479ff2cefc12fdc16a3',1,'hoa::DecoderRegular']]], 7 | ['_7eencoder',['~Encoder',['../classhoa_1_1_encoder.html#af48b7e20548110d871c46d2b7a74f7ad',1,'hoa::Encoder']]], 8 | ['_7eexchanger',['~Exchanger',['../classhoa_1_1_exchanger.html#a38bc2bebb51d43680a591863db3a3e81',1,'hoa::Exchanger']]], 9 | ['_7eharmonic',['~Harmonic',['../classhoa_1_1_harmonic.html#aae63dde3a79b7a1b20170ebacea54bad',1,'hoa::Harmonic']]], 10 | ['_7emultiencoder',['~MultiEncoder',['../classhoa_1_1_multi_encoder.html#a9c36ae02e5bbb98e4be573c744e78f99',1,'hoa::MultiEncoder']]], 11 | ['_7eoptim',['~Optim',['../classhoa_1_1_optim.html#a2ae3b1c74aa325687a178a36d9987abf',1,'hoa::Optim']]], 12 | ['_7eplanewave',['~Planewave',['../classhoa_1_1_planewave.html#ac177fe3b2c7bcbd227fca43ed56c9197',1,'hoa::Planewave']]], 13 | ['_7eprocessor',['~Processor',['../classhoa_1_1_processor.html#aea09971a681f2912e0716bace5754cdf',1,'hoa::Processor']]], 14 | ['_7eprocessorharmonics',['~ProcessorHarmonics',['../classhoa_1_1_processor_harmonics.html#ae356bc4bd84a253c316bce3b84d11a1e',1,'hoa::ProcessorHarmonics']]], 15 | ['_7eprocessorplanewaves',['~ProcessorPlanewaves',['../classhoa_1_1_processor_planewaves.html#abf40c616a46103a46c2071cbc05fe036',1,'hoa::ProcessorPlanewaves']]], 16 | ['_7erotate',['~Rotate',['../classhoa_1_1_rotate.html#ae747999000c9a2a34549ff16326bcc99',1,'hoa::Rotate']]], 17 | ['_7escope',['~Scope',['../classhoa_1_1_scope.html#a7eb4ff07b7e1a2d4f2b59e39e9d9b2ab',1,'hoa::Scope']]], 18 | ['_7evector',['~Vector',['../classhoa_1_1_vector.html#abb0b300da42770f4758dae9006301bb8',1,'hoa::Vector']]], 19 | ['_7ewider',['~Wider',['../classhoa_1_1_wider.html#a88230a46e6a19834db610033c99c40f2',1,'hoa::Wider']]] 20 | ]; 21 | -------------------------------------------------------------------------------- /docs/search/functions_9.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['scope',['Scope',['../classhoa_1_1_scope.html#a7dbb39d2cdd915012813a535b04d05bd',1,'hoa::Scope']]], 4 | ['setazimuth',['setAzimuth',['../classhoa_1_1_encoder.html#a6c1189fc1524eefbc1ec95b0e71f6611',1,'hoa::Encoder::setAzimuth()'],['../classhoa_1_1_multi_encoder.html#afcc520643806499a62715532d76e578b',1,'hoa::MultiEncoder::setAzimuth()'],['../classhoa_1_1_planewave.html#a6c1189fc1524eefbc1ec95b0e71f6611',1,'hoa::Planewave::setAzimuth()']]], 5 | ['setcoordinates',['setCoordinates',['../classhoa_1_1_encoder.html#ab8e8dfd8b6a639b1967fb542c1d8cd63',1,'hoa::Encoder']]], 6 | ['setcropsize',['setCropSize',['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#a07f0035425c715c2eafcaaba56aad187',1,'hoa::DecoderBinaural< Hoa2d, T >::setCropSize()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#a07f0035425c715c2eafcaaba56aad187',1,'hoa::DecoderBinaural< Hoa3d, T >::setCropSize()']]], 7 | ['setelevation',['setElevation',['../classhoa_1_1_encoder.html#ac8a9b9491274bd62edcda1302f1f4da2',1,'hoa::Encoder::setElevation()'],['../classhoa_1_1_multi_encoder.html#a6ddc4acaf9140c8a3bc72f102957fb31',1,'hoa::MultiEncoder::setElevation()'],['../classhoa_1_1_planewave.html#ac8a9b9491274bd62edcda1302f1f4da2',1,'hoa::Planewave::setElevation()']]], 8 | ['setfisheye',['setFisheye',['../classhoa_1_1_multi_encoder.html#a3c0e318a3434d61538bf81f4d70e4893',1,'hoa::MultiEncoder']]], 9 | ['setmode',['setMode',['../classhoa_1_1_optim.html#a243815c506ba18789f14d0f2a4fd963a',1,'hoa::Optim']]], 10 | ['setmute',['setMute',['../classhoa_1_1_multi_encoder.html#aee4179de1ddae2b83a74d92995ea4e10',1,'hoa::MultiEncoder']]], 11 | ['setnormalization',['setNormalization',['../classhoa_1_1_exchanger.html#a78de10e731491e642a2001b96015ef10',1,'hoa::Exchanger']]], 12 | ['setnumbering',['setNumbering',['../classhoa_1_1_exchanger.html#ac9a0e7f076c748194109cc4e5a75e871',1,'hoa::Exchanger']]], 13 | ['setplanewaveazimuth',['setPlanewaveAzimuth',['../classhoa_1_1_processor_planewaves.html#ac65cb57ebbe82f7f9e6df505a50933b4',1,'hoa::ProcessorPlanewaves']]], 14 | ['setplanewaveelevation',['setPlanewaveElevation',['../classhoa_1_1_processor_planewaves.html#acb1b69deec2243a34bbdeea0b8fef53a',1,'hoa::ProcessorPlanewaves']]], 15 | ['setplanewavesrotation',['setPlanewavesRotation',['../classhoa_1_1_processor_planewaves.html#ae8db000417d9499a04bc40527a30814f',1,'hoa::ProcessorPlanewaves']]], 16 | ['setradius',['setRadius',['../classhoa_1_1_encoder.html#adc0fa33a8b88a92bb586247468b17398',1,'hoa::Encoder::setRadius()'],['../classhoa_1_1_multi_encoder.html#a559770d35748b42e00f7e59ca1dd876c',1,'hoa::MultiEncoder::setRadius()']]], 17 | ['setviewrotation',['setViewRotation',['../classhoa_1_1_scope.html#a0d0b92ce56a808a6a3bc6592e098c3b6',1,'hoa::Scope']]], 18 | ['setwidening',['setWidening',['../classhoa_1_1_multi_encoder.html#a28467515784bbdbbefddc03a792a80fa',1,'hoa::MultiEncoder::setWidening()'],['../classhoa_1_1_wider.html#a9d1f93db99bdc8f7adecf88702a64870',1,'hoa::Wider::setWidening()']]], 19 | ['setyaw',['setYaw',['../classhoa_1_1_rotate.html#a02182755f1ddfdb0e5ae97b8f12d904e',1,'hoa::Rotate']]] 20 | ]; 21 | -------------------------------------------------------------------------------- /Tests/Test_MultiEncoder.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2015 Pierre Guillot. 3 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 4 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 5 | */ 6 | 7 | #include 8 | #include 9 | 10 | #include 11 | using namespace hoa; 12 | 13 | #define CATCH_CONFIG_PREFIX_ALL 14 | #include "catch.hpp" 15 | 16 | CATCH_TEST_CASE("MultiEncoder 2D", "[Encoder] [MultiEncoder] [2D]") 17 | { 18 | MultiEncoder encoder(7, 3); 19 | const float epsilon = FLT_EPSILON; 20 | std::vector inputs(5); 21 | std::vector ouputs(15); 22 | 23 | encoder.setRadius(0, 0.); 24 | encoder.setAzimuth(0, 0.); 25 | encoder.setElevation(0, 0.); 26 | encoder.setMute(0, false); 27 | 28 | encoder.setRadius(1, 1.); 29 | encoder.setAzimuth(1, 1.); 30 | encoder.setElevation(1, 1.); 31 | encoder.setMute(1, false); 32 | 33 | encoder.setRadius(2, 2.); 34 | encoder.setAzimuth(2, 2.); 35 | encoder.setElevation(2, 2.); 36 | encoder.setMute(2, false); 37 | 38 | CATCH_CHECK(encoder.getRadius(0) == 0.); 39 | CATCH_CHECK(encoder.getAzimuth(0) == 0.); 40 | CATCH_CHECK(encoder.getElevation(0) == 0.); 41 | CATCH_CHECK_FALSE(encoder.getMute(0)); 42 | 43 | CATCH_CHECK(encoder.getRadius(1) == 1.); 44 | CATCH_CHECK(encoder.getAzimuth(1) == 1.); 45 | CATCH_CHECK(encoder.getElevation(1) == 1.); 46 | CATCH_CHECK_FALSE(encoder.getMute(1)); 47 | 48 | CATCH_CHECK(encoder.getRadius(2) == 2.); 49 | CATCH_CHECK(encoder.getAzimuth(2) == 2.); 50 | CATCH_CHECK(encoder.getElevation(2) == 2.); 51 | CATCH_CHECK_FALSE(encoder.getMute(2)); 52 | 53 | encoder.process(inputs.data(), ouputs.data()); 54 | } 55 | 56 | 57 | CATCH_TEST_CASE("MultiEncoder 3D", "[Encoder] [MultiEncoder] [3D]") 58 | { 59 | MultiEncoder encoder(7, 3); 60 | const float epsilon = FLT_EPSILON; 61 | std::vector inputs(5); 62 | std::vector ouputs(64); 63 | 64 | encoder.setRadius(0, 0.); 65 | encoder.setAzimuth(0, 0.); 66 | encoder.setElevation(0, 0.); 67 | encoder.setMute(0, false); 68 | 69 | encoder.setRadius(1, 1.); 70 | encoder.setAzimuth(1, 1.); 71 | encoder.setElevation(1, 1.); 72 | encoder.setMute(1, false); 73 | 74 | encoder.setRadius(2, 2.); 75 | encoder.setAzimuth(2, 2.); 76 | encoder.setElevation(2, 2.); 77 | encoder.setMute(2, false); 78 | 79 | CATCH_CHECK(encoder.getRadius(0) == 0.); 80 | CATCH_CHECK(encoder.getAzimuth(0) == 0.); 81 | CATCH_CHECK(encoder.getElevation(0) == 0.); 82 | CATCH_CHECK_FALSE(encoder.getMute(0)); 83 | 84 | CATCH_CHECK(encoder.getRadius(1) == 1.); 85 | CATCH_CHECK(encoder.getAzimuth(1) == 1.); 86 | CATCH_CHECK(encoder.getElevation(1) == 1.); 87 | CATCH_CHECK_FALSE(encoder.getMute(1)); 88 | 89 | CATCH_CHECK(encoder.getRadius(2) == 2.); 90 | CATCH_CHECK(encoder.getAzimuth(2) == 2.); 91 | CATCH_CHECK(encoder.getElevation(2) == 2.); 92 | CATCH_CHECK_FALSE(encoder.getMute(2)); 93 | 94 | encoder.process(inputs.data(), ouputs.data()); 95 | 96 | } 97 | 98 | -------------------------------------------------------------------------------- /docs/search/all_e.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['scope',['Scope',['../classhoa_1_1_scope.html',1,'hoa']]], 4 | ['scope',['Scope',['../classhoa_1_1_scope.html#a7dbb39d2cdd915012813a535b04d05bd',1,'hoa::Scope']]], 5 | ['setazimuth',['setAzimuth',['../classhoa_1_1_encoder.html#a6c1189fc1524eefbc1ec95b0e71f6611',1,'hoa::Encoder::setAzimuth()'],['../classhoa_1_1_multi_encoder.html#afcc520643806499a62715532d76e578b',1,'hoa::MultiEncoder::setAzimuth()'],['../classhoa_1_1_planewave.html#a6c1189fc1524eefbc1ec95b0e71f6611',1,'hoa::Planewave::setAzimuth()']]], 6 | ['setcoordinates',['setCoordinates',['../classhoa_1_1_encoder.html#ab8e8dfd8b6a639b1967fb542c1d8cd63',1,'hoa::Encoder']]], 7 | ['setcropsize',['setCropSize',['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#a07f0035425c715c2eafcaaba56aad187',1,'hoa::DecoderBinaural< Hoa2d, T >::setCropSize()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#a07f0035425c715c2eafcaaba56aad187',1,'hoa::DecoderBinaural< Hoa3d, T >::setCropSize()']]], 8 | ['setelevation',['setElevation',['../classhoa_1_1_encoder.html#ac8a9b9491274bd62edcda1302f1f4da2',1,'hoa::Encoder::setElevation()'],['../classhoa_1_1_multi_encoder.html#a6ddc4acaf9140c8a3bc72f102957fb31',1,'hoa::MultiEncoder::setElevation()'],['../classhoa_1_1_planewave.html#ac8a9b9491274bd62edcda1302f1f4da2',1,'hoa::Planewave::setElevation()']]], 9 | ['setfisheye',['setFisheye',['../classhoa_1_1_multi_encoder.html#a3c0e318a3434d61538bf81f4d70e4893',1,'hoa::MultiEncoder']]], 10 | ['setmode',['setMode',['../classhoa_1_1_optim.html#a243815c506ba18789f14d0f2a4fd963a',1,'hoa::Optim']]], 11 | ['setmute',['setMute',['../classhoa_1_1_multi_encoder.html#aee4179de1ddae2b83a74d92995ea4e10',1,'hoa::MultiEncoder']]], 12 | ['setnormalization',['setNormalization',['../classhoa_1_1_exchanger.html#a78de10e731491e642a2001b96015ef10',1,'hoa::Exchanger']]], 13 | ['setnumbering',['setNumbering',['../classhoa_1_1_exchanger.html#ac9a0e7f076c748194109cc4e5a75e871',1,'hoa::Exchanger']]], 14 | ['setplanewaveazimuth',['setPlanewaveAzimuth',['../classhoa_1_1_processor_planewaves.html#ac65cb57ebbe82f7f9e6df505a50933b4',1,'hoa::ProcessorPlanewaves']]], 15 | ['setplanewaveelevation',['setPlanewaveElevation',['../classhoa_1_1_processor_planewaves.html#acb1b69deec2243a34bbdeea0b8fef53a',1,'hoa::ProcessorPlanewaves']]], 16 | ['setplanewavesrotation',['setPlanewavesRotation',['../classhoa_1_1_processor_planewaves.html#ae8db000417d9499a04bc40527a30814f',1,'hoa::ProcessorPlanewaves']]], 17 | ['setradius',['setRadius',['../classhoa_1_1_encoder.html#adc0fa33a8b88a92bb586247468b17398',1,'hoa::Encoder::setRadius()'],['../classhoa_1_1_multi_encoder.html#a559770d35748b42e00f7e59ca1dd876c',1,'hoa::MultiEncoder::setRadius()']]], 18 | ['setviewrotation',['setViewRotation',['../classhoa_1_1_scope.html#a0d0b92ce56a808a6a3bc6592e098c3b6',1,'hoa::Scope']]], 19 | ['setwidening',['setWidening',['../classhoa_1_1_multi_encoder.html#a28467515784bbdbbefddc03a792a80fa',1,'hoa::MultiEncoder::setWidening()'],['../classhoa_1_1_wider.html#a9d1f93db99bdc8f7adecf88702a64870',1,'hoa::Wider::setWidening()']]], 20 | ['setyaw',['setYaw',['../classhoa_1_1_rotate.html#a02182755f1ddfdb0e5ae97b8f12d904e',1,'hoa::Rotate']]], 21 | ['sn2d',['SN2D',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14eaddb5a7f35808fb7da8dadafa740a9f31',1,'hoa::Exchanger']]], 22 | ['sn3d',['SN3D',['../classhoa_1_1_exchanger.html#a268aac553a187f781fad176cf0ada14eaa24e53b3ed90e84d7e1c272aab2e3b2c',1,'hoa::Exchanger']]] 23 | ]; 24 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | #-------------------------------------- 2 | # Project settings 3 | #-------------------------------------- 4 | 5 | cmake_minimum_required(VERSION 3.1) 6 | 7 | project(HoaLibrary CXX) 8 | 9 | set_property(GLOBAL PROPERTY USE_FOLDERS ON) 10 | 11 | set(CMAKE_SUPPRESS_REGENERATION true) 12 | 13 | #-------------------------------------- 14 | # Options 15 | #-------------------------------------- 16 | 17 | option(HOA_BUILD_TESTS "Build HoaLibrary tests" ON) 18 | option(GCOV_SUPPORT "Build for gcov" OFF) 19 | 20 | #-------------------------------------- 21 | # Options 22 | #-------------------------------------- 23 | 24 | set(HOALIBRARY_TARGET_NAME ${PROJECT_NAME}) 25 | set(HOALIBRARY_INCLUDE_BUILD_DIR "${PROJECT_SOURCE_DIR}/Sources/") 26 | set(HOALIBRARY_THIRD_PARTY_DIR "${PROJECT_SOURCE_DIR}/ThirdParty") 27 | 28 | #-------------------------------------- 29 | # Compiler settings 30 | #-------------------------------------- 31 | 32 | set(CMAKE_CXX_STANDARD 14) 33 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 34 | set(CMAKE_CXX_EXTENSIONS OFF) 35 | 36 | set(CMAKE_MACOSX_RPATH ON) 37 | set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) 38 | set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14") 39 | set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") 40 | 41 | if(UNIX) 42 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC) 43 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic") 44 | else() 45 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wall") 46 | endif() 47 | elseif(MSVC) 48 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") 49 | endif() 50 | 51 | #-------------------------------------- 52 | # Create Library 53 | #-------------------------------------- 54 | 55 | add_library(${HOALIBRARY_TARGET_NAME} INTERFACE) 56 | add_library( 57 | ${PROJECT_NAME}::${HOALIBRARY_TARGET_NAME} 58 | ALIAS ${HOALIBRARY_TARGET_NAME} 59 | ) 60 | 61 | #-------------------------------------- 62 | 63 | # Eigen 64 | set(EIGEN3_DIR "${HOALIBRARY_THIRD_PARTY_DIR}/Eigen/" CACHE PATH "Path to Eigen3 library") 65 | set(EIGEN3_INCLUDE_DIR ${EIGEN3_DIR}) 66 | 67 | target_include_directories(${HOALIBRARY_TARGET_NAME} INTERFACE ${EIGEN3_INCLUDE_DIR}) 68 | 69 | #-------------------------------------- 70 | 71 | target_include_directories( 72 | ${HOALIBRARY_TARGET_NAME} 73 | INTERFACE 74 | $ 75 | $ 76 | ) 77 | 78 | file(GLOB HOALIBRARY_SOURCES ${HOALIBRARY_INCLUDE_BUILD_DIR}*.hpp) 79 | 80 | target_sources( 81 | ${HOALIBRARY_TARGET_NAME} 82 | INTERFACE 83 | $ 84 | ) 85 | 86 | #-------------------------------------- 87 | # Tests 88 | #-------------------------------------- 89 | 90 | if(${HOA_BUILD_TESTS}) 91 | enable_testing() 92 | file(GLOB TESTSOURCES ${PROJECT_SOURCE_DIR}/Tests/*.cpp) 93 | source_group(Tests FILES ${TESTSOURCES}) 94 | include_directories(${PROJECT_SOURCE_DIR}/Tests) 95 | 96 | add_executable(hoatest ${TESTSOURCES} ${HOALIBRARY_SOURCES}) 97 | target_link_libraries(hoatest ${HOALIBRARY_TARGET_NAME}) 98 | add_test(hoatestall hoatest) 99 | 100 | if(${GCOV_SUPPORT}) 101 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage") 102 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") 103 | set(CMAKE_EXE_LINKER_FLAGS="-fprofile-arcs -ftest-coverage") 104 | target_link_libraries(hoatest gcov) 105 | endif() 106 | endif() 107 | -------------------------------------------------------------------------------- /docs/dynsections.js: -------------------------------------------------------------------------------- 1 | function toggleVisibility(linkObj) 2 | { 3 | var base = $(linkObj).attr('id'); 4 | var summary = $('#'+base+'-summary'); 5 | var content = $('#'+base+'-content'); 6 | var trigger = $('#'+base+'-trigger'); 7 | var src=$(trigger).attr('src'); 8 | if (content.is(':visible')===true) { 9 | content.hide(); 10 | summary.show(); 11 | $(linkObj).addClass('closed').removeClass('opened'); 12 | $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); 13 | } else { 14 | content.show(); 15 | summary.hide(); 16 | $(linkObj).removeClass('closed').addClass('opened'); 17 | $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); 18 | } 19 | return false; 20 | } 21 | 22 | function updateStripes() 23 | { 24 | $('table.directory tr'). 25 | removeClass('even').filter(':visible:even').addClass('even'); 26 | } 27 | 28 | function toggleLevel(level) 29 | { 30 | $('table.directory tr').each(function() { 31 | var l = this.id.split('_').length-1; 32 | var i = $('#img'+this.id.substring(3)); 33 | var a = $('#arr'+this.id.substring(3)); 34 | if (l 27 | class Hrir 28 | { 29 | public: 30 | 31 | using hrir_t = HrirType; 32 | 33 | //! @brief Gets the order of decomposition used to compute the matrices. 34 | //! @return The order of decomposition. 35 | static constexpr size_t getOrderOfDecomposition() noexcept 36 | { 37 | return hrir_t::order; 38 | } 39 | 40 | //! @brief Gets the number rows of the matrices. 41 | //! @details Or the size of the responses used to compute the matrices. 42 | //! @return The number rows of the matrices. 43 | static constexpr size_t getNumberOfRows() noexcept 44 | { 45 | return hrir_t::responses_size; 46 | } 47 | 48 | //! @brief Gets the number columns of the matrices. 49 | //! @details Or the number of harmonics used to compute the matrices. 50 | //! @return The number columns of the matrices. 51 | static constexpr size_t getNumberOfColumns() noexcept 52 | { 53 | return hrir_t::number_of_harmonics; 54 | } 55 | 56 | //! @brief Gets the size of the matrices (rows * columns). 57 | //! @return The nsize of the matrices. 58 | static constexpr size_t getMatricesSize() noexcept 59 | { 60 | return getNumberOfRows() * getNumberOfColumns(); 61 | } 62 | 63 | //! @brief Get the HRIR matrix for the left ear. 64 | //! @return The HRIR matrix for the left ear. 65 | template 66 | static FloatType const* getLeftMatrix() 67 | { 68 | return GetMatrix::left(); 69 | } 70 | 71 | //! @brief Get the HRIR matrix for the right ear. 72 | //! @return The HRIR matrix for the right ear. 73 | template 74 | static FloatType const* getRightMatrix() 75 | { 76 | return GetMatrix::right(); 77 | } 78 | 79 | private: 80 | 81 | template 82 | struct GetMatrix { 83 | static FloatType const* left() {} 84 | static FloatType const* right() {} 85 | }; 86 | 87 | template 88 | struct GetMatrix { 89 | static float const* left() { return hrir_t::get_float_left(); } 90 | static float const* right() { return hrir_t::get_float_right(); } 91 | }; 92 | 93 | template 94 | struct GetMatrix { 95 | static double const* left() { return hrir_t::get_double_left(); } 96 | static double const* right() { return hrir_t::get_double_right(); } 97 | }; 98 | }; 99 | } 100 | -------------------------------------------------------------------------------- /Sources/Hoa_Wider.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2012-2017 CICM - Universite Paris 8 - Labex Arts H2H. 3 | // Authors : 4 | // 2012: Pierre Guillot, Eliott Paris & Julien Colafrancesco. 5 | // 2012-2015: Pierre Guillot & Eliott Paris. 6 | // 2015: Pierre Guillot & Eliott Paris & Thomas Le Meur (Light version) 7 | // 2016-2017: Pierre Guillot. 8 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 9 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 10 | */ 11 | 12 | #pragma once 13 | 14 | #include "Hoa_Processor.hpp" 15 | 16 | namespace hoa 17 | { 18 | // ================================================================================ // 19 | // WIDER // 20 | // ================================================================================ // 21 | 22 | //! @brief The class widens the propagation of the sounds in a sound field. 23 | //! @details The class simulates fractional orders of decomposition to reduce the 24 | //! precision of the sound field. When the factor of widening is \f$0\f$ sound field, only 25 | //! the first hamonic \f$Y_{0,0}\f$ remains and the sound field is omni directional. By 26 | //! increasing the factor of widening toward \f$1\f$, the other harmonics appears in a 27 | //! logarithmic way, increasing the precision of the sound field that becomes more and 28 | //! more directional until all the harmonics appeared. The weight of the harmonics are 29 | //! defined by: 30 | //! \f[W_{l,m}(x) = x^l((1-x)(N-l)+1)\f]
31 | //! with \f$N\f$ the order of decomposition, \f$l\f$ the degree, \f$m\f$ the 32 | //! azimuthal order and \f$x\f$ the factor of widening. 33 | template 34 | class Wider 35 | : public ProcessorHarmonics 36 | { 37 | public: 38 | 39 | //! @brief Constructor. 40 | //! @param order The order of decomposition. 41 | Wider(const size_t order) 42 | : ProcessorHarmonics(order) 43 | , m_coeffs(order + 1) 44 | { 45 | setWidening(1.); 46 | } 47 | 48 | //! @brief Destructor. 49 | ~Wider() = default; 50 | 51 | //! @brief This method set factor of widening. 52 | //! @param value The factor of widening. 53 | inline void setWidening(const T value) noexcept 54 | { 55 | m_widening = std::max(std::min(value, T(1.)), T(0.)); 56 | const size_t order = ProcessorHarmonics::getDecompositionOrder(); 57 | const T temp = T(1) - m_widening; 58 | T* coeff = m_coeffs.data(); 59 | 60 | (*coeff++) = (T(order) * temp + T(1.)); 61 | for(size_t i = 1; i <= order; ++i) 62 | { 63 | (*coeff++) = std::pow(m_widening, T(i)) * (temp * T(order - i) + T(1.)); 64 | } 65 | } 66 | 67 | //! @brief Returns the the widening value. 68 | inline T getWidening() const noexcept { return m_widening; } 69 | 70 | //! @brief The method performs the widening on the harmonics signal. 71 | //! @details The method can be used for in-place or not-in-place processing and sample 72 | //! by sample. The inputs array and outputs array contains the spherical harmonics 73 | //! samples thus the minimum size of the array must be the number of harmonics. 74 | //! @param inputs The inputs array. 75 | //! @param outputs The outputs array. 76 | void process(const T* inputs, T* outputs) noexcept final 77 | { 78 | const size_t order = ProcessorHarmonics::getDecompositionOrder(); 79 | T* coeff = m_coeffs.data(); 80 | (*outputs++) = (*inputs++) * (*coeff++); 81 | for(size_t i = 1; i <= order; ++i) 82 | { 83 | const size_t nharmo = Harmonic::getNumberOfHarmonicsInDegree(i); 84 | const T factor = (*coeff++); 85 | for(size_t j = 0; j < nharmo; ++j) 86 | { 87 | (*outputs++) = (*inputs++) * factor; 88 | } 89 | } 90 | } 91 | 92 | private: 93 | 94 | T m_widening = 0.; 95 | std::vector m_coeffs {}; 96 | }; 97 | } 98 | -------------------------------------------------------------------------------- /docs/dir_937900b87e0c7a5fa01190c395fb83f7.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | HOA Library: Sources Directory Reference 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 23 | 24 | 25 | 26 |
27 |
28 | 29 | 30 | 31 | 37 | 38 | 39 |
32 |
HOA Library 33 |  beta 3.0 34 |
35 |
High Order Ambisonics Library
36 |
40 |
41 | 42 | 43 | 46 | 68 | 69 |
73 |
74 | 75 | 76 |
77 | 80 |
81 | 82 | 86 |
87 |
88 |
89 |
Sources Directory Reference
90 |
91 |
92 | 93 | 95 |

94 | Files

96 |
97 | 98 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /docs/search/functions_7.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['planewave',['Planewave',['../classhoa_1_1_planewave.html#aada68932664370b35204dc7ac27f81f2',1,'hoa::Planewave::Planewave(size_t index, T azimuth, T elevation) hoa_noexcept'],['../classhoa_1_1_planewave.html#a40980d4ec04ea4f71d8f85a9c3cd16bd',1,'hoa::Planewave::Planewave(size_t index, T abscissa, T ordinate, T height) hoa_noexcept']]], 4 | ['prepare',['prepare',['../classhoa_1_1_decoder.html#a27038ac0bd3651b00e49fca4d97338d1',1,'hoa::Decoder::prepare()'],['../classhoa_1_1_decoder_regular.html#af945024eb559057f0a698f37bd31d853',1,'hoa::DecoderRegular::prepare()'],['../classhoa_1_1_decoder_irregular.html#a5a0c74b584573b2352d4e8f30ac9a16f',1,'hoa::DecoderIrregular::prepare()'],['../classhoa_1_1_decoder_binaural.html#a5a0c74b584573b2352d4e8f30ac9a16f',1,'hoa::DecoderBinaural::prepare()'],['../classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.html#ae31a01c91da69815ad3d9cb075434146',1,'hoa::Decoder< Hoa2d, T >::prepare()'],['../classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.html#af945024eb559057f0a698f37bd31d853',1,'hoa::DecoderIrregular< Hoa2d, T >::prepare()'],['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#af945024eb559057f0a698f37bd31d853',1,'hoa::DecoderBinaural< Hoa2d, T >::prepare()'],['../classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.html#ae31a01c91da69815ad3d9cb075434146',1,'hoa::Decoder< Hoa3d, T >::prepare()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#af945024eb559057f0a698f37bd31d853',1,'hoa::DecoderBinaural< Hoa3d, T >::prepare()']]], 5 | ['process',['process',['../classhoa_1_1_decoder.html#a1465e992478a626e2f1310b533902edd',1,'hoa::Decoder::process()'],['../classhoa_1_1_decoder_regular.html#acaf557f491fa1b8ad5ca64638fa9025b',1,'hoa::DecoderRegular::process()'],['../classhoa_1_1_decoder_irregular.html#a732df47846f95306a5b4b2abef7d80e6',1,'hoa::DecoderIrregular::process()'],['../classhoa_1_1_decoder_binaural.html#a732df47846f95306a5b4b2abef7d80e6',1,'hoa::DecoderBinaural::process()'],['../classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.html#a55c59b7d96e8b1eeea47020d8ffb2b17',1,'hoa::Decoder< Hoa2d, T >::process()'],['../classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.html#acaf557f491fa1b8ad5ca64638fa9025b',1,'hoa::DecoderIrregular< Hoa2d, T >::process()'],['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#acaf557f491fa1b8ad5ca64638fa9025b',1,'hoa::DecoderBinaural< Hoa2d, T >::process()'],['../classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.html#a55c59b7d96e8b1eeea47020d8ffb2b17',1,'hoa::Decoder< Hoa3d, T >::process()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#acaf557f491fa1b8ad5ca64638fa9025b',1,'hoa::DecoderBinaural< Hoa3d, T >::process()'],['../classhoa_1_1_encoder.html#ae409be24fb9a532eb60dd95d44b4e5c5',1,'hoa::Encoder::process()'],['../classhoa_1_1_exchanger.html#a2d10b9e7beb51cb2d4506eb271f7046f',1,'hoa::Exchanger::process()'],['../classhoa_1_1_multi_encoder.html#ae409be24fb9a532eb60dd95d44b4e5c5',1,'hoa::MultiEncoder::process()'],['../classhoa_1_1_optim.html#af1ff15d18384ffa349a745a2b49e0819',1,'hoa::Optim::process()'],['../classhoa_1_1_processor.html#a1465e992478a626e2f1310b533902edd',1,'hoa::Processor::process()'],['../classhoa_1_1_rotate.html#a1465e992478a626e2f1310b533902edd',1,'hoa::Rotate::process()'],['../classhoa_1_1_scope.html#a6ce06dea0ccd45bc2351f931c2f867b5',1,'hoa::Scope::process(const T *inputs, T *outputs) hoa_noexcept hoa_override=0'],['../classhoa_1_1_scope.html#a8aa0813ae92a80ab28e996f5001d80a1',1,'hoa::Scope::process(const T *inputs) hoa_noexcept=0'],['../classhoa_1_1_vector.html#a55c59b7d96e8b1eeea47020d8ffb2b17',1,'hoa::Vector::process()'],['../classhoa_1_1_wider.html#a8db6cd9de03f1b17e86080ff74a46025',1,'hoa::Wider::process()']]], 6 | ['processblock',['processBlock',['../classhoa_1_1_decoder_binaural.html#a5c7ea21a90581312b0c45ed5ce522365',1,'hoa::DecoderBinaural::processBlock()'],['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#a386abe34b0cc85240a8cc418946f0c19',1,'hoa::DecoderBinaural< Hoa2d, T >::processBlock()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#a386abe34b0cc85240a8cc418946f0c19',1,'hoa::DecoderBinaural< Hoa3d, T >::processBlock()']]], 7 | ['processenergy',['processEnergy',['../classhoa_1_1_vector.html#abd542594e74633b762e5e451a0a61303',1,'hoa::Vector']]], 8 | ['processorharmonics',['ProcessorHarmonics',['../classhoa_1_1_processor_harmonics.html#a6c046a8eea082c04363643b4d5a861c5',1,'hoa::ProcessorHarmonics']]], 9 | ['processorplanewaves',['ProcessorPlanewaves',['../classhoa_1_1_processor_planewaves.html#af4f5732e7fda623824272aadb13408c0',1,'hoa::ProcessorPlanewaves']]], 10 | ['processvelocity',['processVelocity',['../classhoa_1_1_vector.html#a4e5f1e52a3f96a82a96a1d981a536242',1,'hoa::Vector']]] 11 | ]; 12 | -------------------------------------------------------------------------------- /docs/namespacemembers_enum.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | HOA Library: Namespace Members 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 23 | 24 | 25 | 26 |
27 |
28 | 29 | 30 | 31 | 37 | 38 | 39 |
32 |
HOA Library 33 |  beta 3.0 34 |
35 |
High Order Ambisonics Library
36 |
40 |
41 | 42 | 43 | 46 | 68 | 73 | 80 |
81 | 82 |
86 |
87 | 88 | 89 |
90 | 93 |
94 | 95 |
96 |  
    97 |
  • Dimension 98 | : hoa 99 |
  • 100 |
101 |
102 | 103 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /docs/namespacemembers_eval.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | HOA Library: Namespace Members 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 23 | 24 | 25 | 26 |
27 |
28 | 29 | 30 | 31 | 37 | 38 | 39 |
32 |
HOA Library 33 |  beta 3.0 34 |
35 |
High Order Ambisonics Library
36 |
40 |
41 | 42 | 43 | 46 | 68 | 73 | 80 |
81 | 82 |
86 |
87 | 88 | 89 |
90 | 93 |
94 | 95 |
96 |  
    97 |
  • Hoa2d 98 | : hoa 99 |
  • 100 |
  • Hoa3d 101 | : hoa 102 |
  • 103 |
104 |
105 | 106 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /docs/namespacemembers.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | HOA Library: Namespace Members 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 23 | 24 | 25 | 26 |
27 |
28 | 29 | 30 | 31 | 37 | 38 | 39 |
32 |
HOA Library 33 |  beta 3.0 34 |
35 |
High Order Ambisonics Library
36 |
40 |
41 | 42 | 43 | 46 | 68 | 73 | 80 |
81 | 82 |
86 |
87 | 88 | 89 |
90 | 93 |
94 | 95 |
96 |
Here is a list of all documented namespace members with links to the namespaces they belong to:
    97 |
  • Dimension 98 | : hoa 99 |
  • 100 |
  • Hoa2d 101 | : hoa 102 |
  • 103 |
  • Hoa3d 104 | : hoa 105 |
  • 106 |
107 |
108 | 109 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /docs/functions_enum.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | HOA Library: Class Members - Enumerations 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 23 | 24 | 25 | 26 |
27 |
28 | 29 | 30 | 31 | 37 | 38 | 39 |
32 |
HOA Library 33 |  beta 3.0 34 |
35 |
High Order Ambisonics Library
36 |
40 |
41 | 42 | 43 | 46 | 68 | 75 | 83 |
84 | 85 |
89 |
90 | 91 | 92 |
93 | 96 |
97 | 98 |
99 |   110 |
111 | 112 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /docs/search/all_c.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['planewave',['Planewave',['../classhoa_1_1_planewave.html',1,'hoa']]], 4 | ['planewave',['Planewave',['../classhoa_1_1_planewave.html#aada68932664370b35204dc7ac27f81f2',1,'hoa::Planewave::Planewave(size_t index, T azimuth, T elevation) hoa_noexcept'],['../classhoa_1_1_planewave.html#a40980d4ec04ea4f71d8f85a9c3cd16bd',1,'hoa::Planewave::Planewave(size_t index, T abscissa, T ordinate, T height) hoa_noexcept']]], 5 | ['prepare',['prepare',['../classhoa_1_1_decoder.html#a27038ac0bd3651b00e49fca4d97338d1',1,'hoa::Decoder::prepare()'],['../classhoa_1_1_decoder_regular.html#af945024eb559057f0a698f37bd31d853',1,'hoa::DecoderRegular::prepare()'],['../classhoa_1_1_decoder_irregular.html#a5a0c74b584573b2352d4e8f30ac9a16f',1,'hoa::DecoderIrregular::prepare()'],['../classhoa_1_1_decoder_binaural.html#a5a0c74b584573b2352d4e8f30ac9a16f',1,'hoa::DecoderBinaural::prepare()'],['../classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.html#ae31a01c91da69815ad3d9cb075434146',1,'hoa::Decoder< Hoa2d, T >::prepare()'],['../classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.html#af945024eb559057f0a698f37bd31d853',1,'hoa::DecoderIrregular< Hoa2d, T >::prepare()'],['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#af945024eb559057f0a698f37bd31d853',1,'hoa::DecoderBinaural< Hoa2d, T >::prepare()'],['../classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.html#ae31a01c91da69815ad3d9cb075434146',1,'hoa::Decoder< Hoa3d, T >::prepare()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#af945024eb559057f0a698f37bd31d853',1,'hoa::DecoderBinaural< Hoa3d, T >::prepare()']]], 6 | ['process',['process',['../classhoa_1_1_decoder.html#a1465e992478a626e2f1310b533902edd',1,'hoa::Decoder::process()'],['../classhoa_1_1_decoder_regular.html#acaf557f491fa1b8ad5ca64638fa9025b',1,'hoa::DecoderRegular::process()'],['../classhoa_1_1_decoder_irregular.html#a732df47846f95306a5b4b2abef7d80e6',1,'hoa::DecoderIrregular::process()'],['../classhoa_1_1_decoder_binaural.html#a732df47846f95306a5b4b2abef7d80e6',1,'hoa::DecoderBinaural::process()'],['../classhoa_1_1_decoder_3_01_hoa2d_00_01_t_01_4.html#a55c59b7d96e8b1eeea47020d8ffb2b17',1,'hoa::Decoder< Hoa2d, T >::process()'],['../classhoa_1_1_decoder_irregular_3_01_hoa2d_00_01_t_01_4.html#acaf557f491fa1b8ad5ca64638fa9025b',1,'hoa::DecoderIrregular< Hoa2d, T >::process()'],['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#acaf557f491fa1b8ad5ca64638fa9025b',1,'hoa::DecoderBinaural< Hoa2d, T >::process()'],['../classhoa_1_1_decoder_3_01_hoa3d_00_01_t_01_4.html#a55c59b7d96e8b1eeea47020d8ffb2b17',1,'hoa::Decoder< Hoa3d, T >::process()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#acaf557f491fa1b8ad5ca64638fa9025b',1,'hoa::DecoderBinaural< Hoa3d, T >::process()'],['../classhoa_1_1_encoder.html#ae409be24fb9a532eb60dd95d44b4e5c5',1,'hoa::Encoder::process()'],['../classhoa_1_1_exchanger.html#a2d10b9e7beb51cb2d4506eb271f7046f',1,'hoa::Exchanger::process()'],['../classhoa_1_1_multi_encoder.html#ae409be24fb9a532eb60dd95d44b4e5c5',1,'hoa::MultiEncoder::process()'],['../classhoa_1_1_optim.html#af1ff15d18384ffa349a745a2b49e0819',1,'hoa::Optim::process()'],['../classhoa_1_1_processor.html#a1465e992478a626e2f1310b533902edd',1,'hoa::Processor::process()'],['../classhoa_1_1_rotate.html#a1465e992478a626e2f1310b533902edd',1,'hoa::Rotate::process()'],['../classhoa_1_1_scope.html#a6ce06dea0ccd45bc2351f931c2f867b5',1,'hoa::Scope::process(const T *inputs, T *outputs) hoa_noexcept hoa_override=0'],['../classhoa_1_1_scope.html#a8aa0813ae92a80ab28e996f5001d80a1',1,'hoa::Scope::process(const T *inputs) hoa_noexcept=0'],['../classhoa_1_1_vector.html#a55c59b7d96e8b1eeea47020d8ffb2b17',1,'hoa::Vector::process()'],['../classhoa_1_1_wider.html#a8db6cd9de03f1b17e86080ff74a46025',1,'hoa::Wider::process()']]], 7 | ['processblock',['processBlock',['../classhoa_1_1_decoder_binaural.html#a5c7ea21a90581312b0c45ed5ce522365',1,'hoa::DecoderBinaural::processBlock()'],['../classhoa_1_1_decoder_binaural_3_01_hoa2d_00_01_t_01_4.html#a386abe34b0cc85240a8cc418946f0c19',1,'hoa::DecoderBinaural< Hoa2d, T >::processBlock()'],['../classhoa_1_1_decoder_binaural_3_01_hoa3d_00_01_t_01_4.html#a386abe34b0cc85240a8cc418946f0c19',1,'hoa::DecoderBinaural< Hoa3d, T >::processBlock()']]], 8 | ['processenergy',['processEnergy',['../classhoa_1_1_vector.html#abd542594e74633b762e5e451a0a61303',1,'hoa::Vector']]], 9 | ['processor',['Processor',['../classhoa_1_1_processor.html',1,'hoa']]], 10 | ['processorharmonics',['ProcessorHarmonics',['../classhoa_1_1_processor_harmonics.html',1,'hoa']]], 11 | ['processorharmonics',['ProcessorHarmonics',['../classhoa_1_1_processor_harmonics.html#a6c046a8eea082c04363643b4d5a861c5',1,'hoa::ProcessorHarmonics']]], 12 | ['processorharmonics_3c_20hoa2d_2c_20t_20_3e',['ProcessorHarmonics< Hoa2d, T >',['../classhoa_1_1_processor_harmonics.html',1,'hoa']]], 13 | ['processorharmonics_3c_20hoa3d_2c_20t_20_3e',['ProcessorHarmonics< Hoa3d, T >',['../classhoa_1_1_processor_harmonics.html',1,'hoa']]], 14 | ['processorplanewaves',['ProcessorPlanewaves',['../classhoa_1_1_processor_planewaves.html#af4f5732e7fda623824272aadb13408c0',1,'hoa::ProcessorPlanewaves']]], 15 | ['processorplanewaves',['ProcessorPlanewaves',['../classhoa_1_1_processor_planewaves.html',1,'hoa']]], 16 | ['processorplanewaves_3c_20hoa2d_2c_20t_20_3e',['ProcessorPlanewaves< Hoa2d, T >',['../classhoa_1_1_processor_planewaves.html',1,'hoa']]], 17 | ['processorplanewaves_3c_20hoa3d_2c_20t_20_3e',['ProcessorPlanewaves< Hoa3d, T >',['../classhoa_1_1_processor_planewaves.html',1,'hoa']]], 18 | ['processvelocity',['processVelocity',['../classhoa_1_1_vector.html#a4e5f1e52a3f96a82a96a1d981a536242',1,'hoa::Vector']]] 19 | ]; 20 | -------------------------------------------------------------------------------- /docs/classhoa_1_1_processor-members.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | HOA Library: Member List 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 23 | 24 | 25 | 26 |
27 |
28 | 29 | 30 | 31 | 37 | 38 | 39 |
32 |
HOA Library 33 |  beta 3.0 34 |
35 |
High Order Ambisonics Library
36 |
40 |
41 | 42 | 43 | 46 | 68 | 75 | 76 |
80 |
81 | 82 | 83 |
84 | 87 |
88 | 89 | 93 |
94 |
95 |
96 |
Processor< D, T > Member List
97 |
98 |
99 | 100 |

This is the complete list of members for Processor< D, T >, including all inherited members.

101 | 102 | 103 | 104 |
process(const T *inputs, T *outputs) hoa_noexceptProcessor< D, T >inlinevirtual
~Processor() hoa_noexceptProcessor< D, T >inlinevirtual
105 | 106 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /docs/search/search.css: -------------------------------------------------------------------------------- 1 | /*---------------- Search Box */ 2 | 3 | #FSearchBox { 4 | float: left; 5 | } 6 | 7 | #MSearchBox { 8 | white-space : nowrap; 9 | position: absolute; 10 | float: none; 11 | display: inline; 12 | margin-top: 8px; 13 | right: 0px; 14 | width: 170px; 15 | z-index: 102; 16 | background-color: white; 17 | } 18 | 19 | #MSearchBox .left 20 | { 21 | display:block; 22 | position:absolute; 23 | left:10px; 24 | width:20px; 25 | height:19px; 26 | background:url('search_l.png') no-repeat; 27 | background-position:right; 28 | } 29 | 30 | #MSearchSelect { 31 | display:block; 32 | position:absolute; 33 | width:20px; 34 | height:19px; 35 | } 36 | 37 | .left #MSearchSelect { 38 | left:4px; 39 | } 40 | 41 | .right #MSearchSelect { 42 | right:5px; 43 | } 44 | 45 | #MSearchField { 46 | display:block; 47 | position:absolute; 48 | height:19px; 49 | background:url('search_m.png') repeat-x; 50 | border:none; 51 | width:111px; 52 | margin-left:20px; 53 | padding-left:4px; 54 | color: #909090; 55 | outline: none; 56 | font: 9pt Arial, Verdana, sans-serif; 57 | } 58 | 59 | #FSearchBox #MSearchField { 60 | margin-left:15px; 61 | } 62 | 63 | #MSearchBox .right { 64 | display:block; 65 | position:absolute; 66 | right:10px; 67 | top:0px; 68 | width:20px; 69 | height:19px; 70 | background:url('search_r.png') no-repeat; 71 | background-position:left; 72 | } 73 | 74 | #MSearchClose { 75 | display: none; 76 | position: absolute; 77 | top: 4px; 78 | background : none; 79 | border: none; 80 | margin: 0px 4px 0px 0px; 81 | padding: 0px 0px; 82 | outline: none; 83 | } 84 | 85 | .left #MSearchClose { 86 | left: 6px; 87 | } 88 | 89 | .right #MSearchClose { 90 | right: 2px; 91 | } 92 | 93 | .MSearchBoxActive #MSearchField { 94 | color: #000000; 95 | } 96 | 97 | /*---------------- Search filter selection */ 98 | 99 | #MSearchSelectWindow { 100 | display: none; 101 | position: absolute; 102 | left: 0; top: 0; 103 | border: 1px solid #90A5CE; 104 | background-color: #F9FAFC; 105 | z-index: 1; 106 | padding-top: 4px; 107 | padding-bottom: 4px; 108 | -moz-border-radius: 4px; 109 | -webkit-border-top-left-radius: 4px; 110 | -webkit-border-top-right-radius: 4px; 111 | -webkit-border-bottom-left-radius: 4px; 112 | -webkit-border-bottom-right-radius: 4px; 113 | -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); 114 | } 115 | 116 | .SelectItem { 117 | font: 8pt Arial, Verdana, sans-serif; 118 | padding-left: 2px; 119 | padding-right: 12px; 120 | border: 0px; 121 | } 122 | 123 | span.SelectionMark { 124 | margin-right: 4px; 125 | font-family: monospace; 126 | outline-style: none; 127 | text-decoration: none; 128 | } 129 | 130 | a.SelectItem { 131 | display: block; 132 | outline-style: none; 133 | color: #000000; 134 | text-decoration: none; 135 | padding-left: 6px; 136 | padding-right: 12px; 137 | } 138 | 139 | a.SelectItem:focus, 140 | a.SelectItem:active { 141 | color: #000000; 142 | outline-style: none; 143 | text-decoration: none; 144 | } 145 | 146 | a.SelectItem:hover { 147 | color: #FFFFFF; 148 | background-color: #3D578C; 149 | outline-style: none; 150 | text-decoration: none; 151 | cursor: pointer; 152 | display: block; 153 | } 154 | 155 | /*---------------- Search results window */ 156 | 157 | iframe#MSearchResults { 158 | width: 60ex; 159 | height: 15em; 160 | } 161 | 162 | #MSearchResultsWindow { 163 | display: none; 164 | position: absolute; 165 | left: 0; top: 0; 166 | border: 1px solid #000; 167 | background-color: #EEF1F7; 168 | } 169 | 170 | /* ----------------------------------- */ 171 | 172 | 173 | #SRIndex { 174 | clear:both; 175 | padding-bottom: 15px; 176 | } 177 | 178 | .SREntry { 179 | font-size: 10pt; 180 | padding-left: 1ex; 181 | } 182 | 183 | .SRPage .SREntry { 184 | font-size: 8pt; 185 | padding: 1px 5px; 186 | } 187 | 188 | body.SRPage { 189 | margin: 5px 2px; 190 | } 191 | 192 | .SRChildren { 193 | padding-left: 3ex; padding-bottom: .5em 194 | } 195 | 196 | .SRPage .SRChildren { 197 | display: none; 198 | } 199 | 200 | .SRSymbol { 201 | font-weight: bold; 202 | color: #425E97; 203 | font-family: Arial, Verdana, sans-serif; 204 | text-decoration: none; 205 | outline: none; 206 | } 207 | 208 | a.SRScope { 209 | display: block; 210 | color: #425E97; 211 | font-family: Arial, Verdana, sans-serif; 212 | text-decoration: none; 213 | outline: none; 214 | } 215 | 216 | a.SRSymbol:focus, a.SRSymbol:active, 217 | a.SRScope:focus, a.SRScope:active { 218 | text-decoration: underline; 219 | } 220 | 221 | span.SRScope { 222 | padding-left: 4px; 223 | } 224 | 225 | .SRPage .SRStatus { 226 | padding: 2px 5px; 227 | font-size: 8pt; 228 | font-style: italic; 229 | } 230 | 231 | .SRResult { 232 | display: none; 233 | } 234 | 235 | DIV.searchresults { 236 | margin-left: 10px; 237 | margin-right: 10px; 238 | } 239 | 240 | /*---------------- External search page results */ 241 | 242 | .searchresult { 243 | background-color: #F0F3F8; 244 | } 245 | 246 | .pages b { 247 | color: white; 248 | padding: 5px 5px 3px 5px; 249 | background-image: url("../tab_a.png"); 250 | background-repeat: repeat-x; 251 | text-shadow: 0 1px 1px #000000; 252 | } 253 | 254 | .pages { 255 | line-height: 17px; 256 | margin-left: 4px; 257 | text-decoration: none; 258 | } 259 | 260 | .hl { 261 | font-weight: bold; 262 | } 263 | 264 | #searchresults { 265 | margin-bottom: 20px; 266 | } 267 | 268 | .searchpages { 269 | margin-top: 10px; 270 | } 271 | 272 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | HOA Library: HOA Library 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 23 | 24 | 25 | 26 |
27 |
28 | 29 | 30 | 31 | 37 | 38 | 39 |
32 |
HOA Library 33 |  beta 3.0 34 |
35 |
High Order Ambisonics Library
36 |
40 |
41 | 42 | 43 | 46 | 68 |
69 | 70 |
74 |
75 | 76 | 77 |
78 | 81 |
82 | 83 |
84 |
85 |
HOA Library
86 |
87 |
88 |

The high order ambisonics library.

89 |

Sound space is one of the principal dimensions of the contemporary musical thought, specialy in the electroacoustic music domain but also in intermedia arts. In this context, the CICM has made spatialization its principal research axis. This project's aim is to give to musician spatialization models based on high order ambisonics and sound fields synthesis. This project is developed in a part of the Paris 8 University LABEX arts H2H. You can visit the official website : HoaLibrary.

90 |
91 | Image 92 |
93 |

Authors :

94 |
    95 |
  • 2012: Pierre Guillot, Eliott Paris & Julien Colafrancesco
  • 96 |
  • 2012-2015: Pierre Guillot & Eliott Paris
  • 97 |
  • 2015: Pierre Guillot & Eliott Paris & Thomas Le Meur (Light version)
  • 98 |
  • 2016-2017: Pierre Guillot (Light version)
  • 99 |
100 |

Implementations :

101 |

Pure Data
102 | Max
103 | Ofx
104 | Faust

105 |

106 |

107 |

License :

108 |

The HOA Library in under the GNU. If you'd like to avoid the restrictions of the GPL and use HOA Library for a closed-source product, you contact the CICM.

109 |
110 | 111 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /Sources/Hoa_Rotate.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2012-2017 CICM - Universite Paris 8 - Labex Arts H2H. 3 | // Authors : 4 | // 2012: Pierre Guillot, Eliott Paris & Julien Colafrancesco. 5 | // 2012-2015: Pierre Guillot & Eliott Paris. 6 | // 2015: Pierre Guillot & Eliott Paris & Thomas Le Meur (Light version) 7 | // 2016-2017: Pierre Guillot. 8 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 9 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 10 | */ 11 | 12 | #pragma once 13 | 14 | #include "Hoa_Processor.hpp" 15 | 16 | namespace hoa 17 | { 18 | // ================================================================================ // 19 | // ROTATE // 20 | // ================================================================================ // 21 | 22 | //! @brief The rotate class rotates a sound field in the harmonics domain (2d available only). 23 | //! @details Rotate a sound field by weighting the harmonics depending on the rotation. 24 | template 25 | class Rotate 26 | : public ProcessorHarmonics 27 | { 28 | public: 29 | 30 | //! @brief Constructor. 31 | //! @param order The order (minimum 1). 32 | Rotate(const size_t order) noexcept; 33 | 34 | //! @brief Destructor. 35 | virtual ~Rotate() noexcept = 0; 36 | 37 | //! @brief This method sets the angle of the rotation around the z axis, the yaw value. 38 | //! @details The yaw is equivalent to a rotation around the z axis, 39 | //! the yaw value \f$\theta\f$ is in radian and should be between \f$0\f$ and \f$2\pi\f$. 40 | //! @param yaw The yaw value. 41 | virtual void setYaw(const T yaw) noexcept; 42 | 43 | //! @brief Get the angle of the rotation around the z axis, the yaw value. 44 | //! @details The method returns the angle of the rotation around the z axis, the yaw value \f$\theta\f$, in radian between \f$0\f$ and \f$2\pi\f$. 45 | //! @return The yaw value. 46 | virtual T getYaw() const noexcept; 47 | 48 | //! @brief This method performs the rotation. 49 | //! @details You should use this method for in-place or not-in-place processing and sample by sample. 50 | //! The inputs array and outputs array contains the spherical harmonics samples 51 | //! and the minimum size must be the number of harmonics. 52 | //! If \f$l = 0\f$ 53 | //! \f[Y^{rotated}_{0,0}(\theta) = Y_{0,0}\f] 54 | //! else 55 | //! \f[Y^{rotated}_{l,-l}(\theta) = \sin{(\theta l)} \times Y_{l,l} + \cos{(\theta l)} \times Y_{l,-l}\f] 56 | //! and 57 | //! \f[Y^{rotated}_{l,l}(\theta) = \cos{(\theta l)} \times Y_{l,l} - \sin{(\theta l)} \times Y_{l,-l}\f] 58 | //! with \f$\theta\f$ the rotation in radian, \f$l\f$ the degree and \f$m\f$ the order. 59 | //! @param inputs The input array. 60 | //! @param outputs The output array. 61 | virtual void process(const T* inputs, T* outputs) noexcept; 62 | }; 63 | 64 | #ifndef DOXYGEN_SHOULD_SKIP_THIS 65 | 66 | // ================================================================================ // 67 | // ROTATE 2D // 68 | // ================================================================================ // 69 | 70 | //! @brief 2d specialisation. 71 | template 72 | class Rotate 73 | : public ProcessorHarmonics 74 | { 75 | public: 76 | 77 | //! @brief Constructor. 78 | //! @param order The order (minimum 1). 79 | Rotate(const size_t order) 80 | : ProcessorHarmonics(order) 81 | {} 82 | 83 | //! @brief Destructor. 84 | ~Rotate() = default; 85 | 86 | //! @brief This method sets the angle of the rotation around the z axis. 87 | //! @details The yaw is equivalent to a rotation around the z axis, 88 | //! the value is in radian and should be between 0 and 2π. 89 | //! @param yaw The yaw value. 90 | inline void setYaw(const T yaw) 91 | { 92 | m_yaw = yaw; 93 | m_cosx = std::cos(m_yaw); 94 | m_sinx = std::sin(m_yaw); 95 | } 96 | 97 | //! @brief Get the angle of the rotation around the z axis, the yaw value. 98 | //! @details Returns the angle of the rotation around the z axis. 99 | //! The yaw value is in radian between 0 and 2π. 100 | //! @return The yaw value. 101 | inline T getYaw() const noexcept 102 | { 103 | return math::wrap_two_pi(m_yaw); 104 | } 105 | 106 | //! @brief This method performs the rotation. 107 | //! @details You should use this method for in-place or not-in-place processing and sample by sample. 108 | //! The inputs array and outputs array contains the spherical harmonics samples. 109 | //! The minimum size must be the number of harmonics. 110 | //! @param inputs The input array. 111 | //! @param outputs The output array. 112 | inline void process(const T* inputs, T* outputs) noexcept override 113 | { 114 | T cos_x = m_cosx; 115 | T sin_x = m_sinx; 116 | T tcos_x = cos_x; 117 | 118 | (*outputs++) = (*inputs++); 119 | T sig = (*inputs++); 120 | (*outputs++) = sin_x * (*inputs) + cos_x * sig; 121 | (*outputs++) = cos_x * (*inputs++) - sin_x * sig; 122 | for(size_t i = 2; i <= ProcessorHarmonics::getDecompositionOrder(); i++) 123 | { 124 | cos_x = tcos_x * m_cosx - sin_x * m_sinx; 125 | sin_x = tcos_x * m_sinx + sin_x * m_cosx; 126 | tcos_x = cos_x; 127 | sig = (*inputs++); 128 | (*outputs++) = sin_x * (*inputs) + cos_x * sig; 129 | (*outputs++) = cos_x * (*inputs++) - sin_x * sig; 130 | } 131 | } 132 | 133 | private: 134 | 135 | T m_yaw = 0.; 136 | T m_cosx = 0.; 137 | T m_sinx = 0.; 138 | }; 139 | 140 | #endif // DOXYGEN_SHOULD_SKIP_THIS 141 | 142 | // ================================================================================ // 143 | // ROTATE 3D // 144 | // ================================================================================ // 145 | 146 | //! @todo to be implemented.. 147 | } 148 | -------------------------------------------------------------------------------- /Sources/Hoa_Planewaves.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2012-2017 CICM - Universite Paris 8 - Labex Arts H2H. 3 | // Authors : 4 | // 2012: Pierre Guillot, Eliott Paris & Julien Colafrancesco. 5 | // 2012-2015: Pierre Guillot & Eliott Paris. 6 | // 2015: Pierre Guillot & Eliott Paris & Thomas Le Meur (Light version) 7 | // 2016-2017: Pierre Guillot. 8 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 9 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 10 | */ 11 | 12 | #pragma once 13 | 14 | #include "Hoa_Signal.hpp" 15 | #include "Hoa_Math.hpp" 16 | 17 | namespace hoa 18 | { 19 | // ================================================================================ // 20 | // PLANEWAVE // 21 | // ================================================================================ // 22 | 23 | template 24 | class ProcessorPlanewaves; 25 | 26 | //! @brief The class owns basic plane waves informations. 27 | //! @details The class allows to retrieves several informations about the plane waves: the 28 | //! the polar coordinates, azimuth and the elevation and cartesian coodinates, abscissa, 29 | //! the ordinate and the height. 30 | template 31 | class Planewave 32 | { 33 | public: 34 | 35 | //! @brief The plane wave polar constructor. 36 | //! @param index The index must be at least 1. 37 | //! @param azimuth The azimuth \f$\theta\f$. 38 | //! @param elevation The elevation \f$\varphi\f$. 39 | Planewave(size_t index, T azimuth, T elevation) noexcept 40 | : m_index(index) 41 | , m_azimuth(math::wrap_two_pi(azimuth)) 42 | , m_elevation(math::wrap_pi(elevation)) 43 | {} 44 | 45 | //! @brief The plane wave cartesian constructor. 46 | //! @param index The index must be at least 1. 47 | //! @param abscissa The abscissa \f$x\f$. 48 | //! @param ordinate The ordinate \f$y\f$. 49 | //! @param height The height \f$z\f$. 50 | Planewave(size_t index, T abscissa, T ordinate, T height) noexcept 51 | : Planewave(index, 52 | xyz2azimuth(abscissa, ordinate, height), 53 | xyz2elevation(abscissa, ordinate, height)) 54 | {} 55 | 56 | //! @brief Destructor. 57 | virtual ~Planewave() noexcept {} 58 | 59 | //! @brief Returns the index of the plane wave. 60 | inline size_t getIndex() const noexcept { return m_index; } 61 | 62 | //! @brief Returns the azimuth of the planewave. 63 | inline T getAzimuth() const noexcept { return m_azimuth; } 64 | 65 | //! @brief Returns the elevation of the planewave. 66 | inline T getElevation() const noexcept { return m_elevation; } 67 | 68 | //! @brief Returns the abscissa of the plane wave. 69 | inline T getAbscissa() const noexcept { return ae2abscissa(m_azimuth, m_elevation); } 70 | 71 | //! @brief Returns the ordinate of the plane wave. 72 | inline T getOrdinate() const noexcept { return ae2ordinate(m_azimuth, m_elevation); } 73 | 74 | //! @brief Returns the height of the plane wave. 75 | inline T getHeight() const noexcept { return ae2height(m_azimuth, m_elevation); } 76 | 77 | //! @brief Sets the azimuth of the plane wave. 78 | //! @param azimuth The azimuth \f$\theta\f$. 79 | inline void setAzimuth(const T azimuth) noexcept { m_azimuth = math::wrap_two_pi(azimuth); } 80 | 81 | //! @brief Set the elevation of the plane wave. 82 | //! @param elevation The elevation \f$\varphi\f$. 83 | inline void setElevation(const T elevation) noexcept { m_elevation = math::wrap_pi(elevation); } 84 | 85 | //! @brief Returns the name of the plane wave. 86 | virtual std::string getName() const noexcept 87 | { 88 | std::ostringstream ostr; 89 | ostr << "Planewave " << getIndex() << " " << (m_azimuth / HOA_2PI * 360.) << "°"; 90 | if(D == Hoa3d) 91 | { 92 | ostr << " " << (m_elevation / HOA_2PI * 360.) << "°"; 93 | } 94 | 95 | return ostr.str(); 96 | } 97 | 98 | //! @brief Compares the azimuth of two plane waves. 99 | static bool compare_azimuth(Planewave const& i, Planewave const& j) noexcept 100 | { 101 | return i.m_azimuth < j.m_azimuth; 102 | } 103 | 104 | private: 105 | 106 | friend class ProcessorPlanewaves; 107 | 108 | static inline T xyz2azimuth(const T x, const T y, const T z = 0.) 109 | { 110 | hoa_unused(z); 111 | return (x == T(0) && y == T(0)) ? T(0) : math::wrap_two_pi(atan2(y, x) - HOA_PI2); 112 | } 113 | 114 | static inline T xyz2elevation(const T x, const T y, const T z = 0.) 115 | { 116 | return (z == T(0)) ? T(0) : math::wrap_pi(asin(z / sqrt(x*x + y*y + z*z))); 117 | } 118 | 119 | static inline T ae2abscissa(const T a, const T e) 120 | { 121 | return std::cos(a + T(HOA_PI2)) * std::cos(e); 122 | } 123 | 124 | static inline T ae2ordinate(const T a, const T e) 125 | { 126 | return std::sin(a + T(HOA_PI2)) * std::cos(e); 127 | } 128 | 129 | static inline T ae2height(const T a, const T e) 130 | { 131 | hoa_unused(a); 132 | return std::sin(e); 133 | } 134 | 135 | static inline void rotate(Planewave const& p, const T xr, const T yr, const T zr, T& xo, T& yo, T& zo) noexcept 136 | { 137 | const T xi = p.getAbscissa(); 138 | const T yi = p.getOrdinate(); 139 | const T zi = p.getHeight(); 140 | // Around x axis 141 | const T cosxr = std::cos(xr); 142 | const T sinxr = std::sin(xr); 143 | // xx 144 | const T yx = cosxr * yi + -sinxr * zi; 145 | const T zx = sinxr * yi + cosxr * zi; 146 | 147 | // Around y axis 148 | const T cosyr = std::cos(yr); 149 | // yy 150 | const T sinyr = std::sin(yr); 151 | const T xy = cosyr * xi + sinxr * zx; 152 | zo = -sinyr * xi + cosyr * zx; 153 | 154 | // Around z axis 155 | const T coszr = std::cos(zr); 156 | const T sinzr = std::sin(zr); 157 | xo = coszr * xy + -sinzr * yx; 158 | yo = sinzr * xy + coszr * yx; 159 | // zz 160 | } 161 | 162 | private: 163 | 164 | size_t m_index = 0ul; 165 | T m_azimuth = 0.; 166 | T m_elevation = 0.; 167 | }; 168 | } 169 | -------------------------------------------------------------------------------- /Sources/Hoa_Optim.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2012-2017 CICM - Universite Paris 8 - Labex Arts H2H. 3 | // Authors : 4 | // 2012: Pierre Guillot, Eliott Paris & Julien Colafrancesco. 5 | // 2012-2015: Pierre Guillot & Eliott Paris. 6 | // 2015: Pierre Guillot & Eliott Paris & Thomas Le Meur (Light version) 7 | // 2016-2017: Pierre Guillot. 8 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 9 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 10 | */ 11 | 12 | #pragma once 13 | 14 | #include "Hoa_Processor.hpp" 15 | 16 | namespace hoa 17 | { 18 | // ================================================================================ // 19 | // OPTIM // 20 | // ================================================================================ // 21 | 22 | //! @brief The class optimizes the ambisonic sound field for several restitution systems. 23 | //! @details The class should be used to optimize the ambisonic sound field. There are 3 24 | //! optimizations, basic (no optimization), max-re (energy vector optimization) and 25 | //! in-phase (energy and velocity vector optimization).
26 | //! The basic optimization has no effect, it should be used (or not) with a perfect 27 | //! ambisonic channels arrangement where all the channels are to equal distance on a 28 | //! circle or a sphere, and for a listener placed at the perfect center of the circle of 29 | //! the sphere. The basic optimization generates a set of weights defined by:
30 | //! \f[W^{basic}_{l,m} = 1\f]
31 | //! The max-re should be used should be used for an auditory confined to the center of the 32 | //! circle or the sphere. The max-re optimization generates a set of weights defined by:
33 | //! \f[W^{max-re}_{l,m} = \cos{(l \times \frac{\pi}{2N + 2})}\f]
34 | //! The in-phase optimization should be used when the auditory covers the entire channels 35 | //! area and/or when the channels arrangement is not a perfect circle or a perfect sphere 36 | //! (when the channels are not to equal distance for example).The in-phase optimization 37 | //! generates a set of weights defined by:
38 | //! \f[W^{in-phase}_{l,m} = \frac{N!^2}{(N + l)!(N -l)!}\f]
39 | //! with \f$N\f$ the order of decomposition, \f$l\f$ the degree and \f$m\f$ the 40 | //! azimuthal order. 41 | //! Note that the optimizations decrease the precision of the sound field restitution thus 42 | //! it can be compared to particular cases of the fractional orders. 43 | template 44 | class Optim 45 | : public ProcessorHarmonics 46 | { 47 | public: 48 | 49 | //! @brief The different optimization mode. 50 | //! @see getMode(), setMode() 51 | enum Mode 52 | { 53 | Basic = 0, //!< The basic optimization 54 | MaxRe = 1, //!< The max-re optimization 55 | InPhase = 2 //!< The in-phase optimization 56 | }; 57 | 58 | //! @brief The constructor. 59 | //! @param order The order of decomposition. 60 | Optim(size_t order) noexcept 61 | : ProcessorHarmonics(order) 62 | , m_weights(Signal::alloc(ProcessorHarmonics::getNumberOfHarmonics())) 63 | { 64 | setMode(InPhase); 65 | } 66 | 67 | //! @brief Destructor. 68 | ~Optim() noexcept { Signal::free(m_weights); } 69 | 70 | //! @brief Returns the current optimization mode. 71 | inline Mode getMode() const noexcept { return m_mode; } 72 | 73 | //! @brief Set the optimization mode. 74 | //! @param mode The mode of optimization. 75 | void setMode(Mode mode) noexcept 76 | { 77 | const size_t size = ProcessorHarmonics::getNumberOfHarmonics(); 78 | const size_t order = ProcessorHarmonics::getDecompositionOrder(); 79 | if(mode == Basic) 80 | { 81 | for(size_t i = 0; i < size; ++i) { 82 | m_weights[i] = T(1.); 83 | } 84 | } 85 | else if(mode == MaxRe) 86 | { 87 | m_weights[0] = T(1.); 88 | for(size_t i = 1; i < size; i++) { 89 | const size_t degree = ProcessorHarmonics::getHarmonicDegree(i); 90 | m_weights[i] = std::cos(T(degree) * T(HOA_PI) / T(2. * order + 2.)); 91 | } 92 | } 93 | else 94 | { 95 | m_weights[0] = T(1.); 96 | const long double facn = ofactorial(long(order)); 97 | for(size_t i = 1; i < size; i++) { 98 | const size_t degree = ProcessorHarmonics::getHarmonicDegree(i); 99 | m_weights[i] = T(facn / ofactorial(long(order - degree))) * T(facn / ofactorial(long(order + degree))); 100 | } 101 | 102 | } 103 | m_mode = mode; 104 | } 105 | 106 | //! @brief The method performs the optimization on the harmonics signal. 107 | //! @details The method can be used for in-place or not-in-place processing and sample 108 | //! by sample. The inputs array and outputs array contains the spherical harmonics 109 | //! samples thus the minimum size of the array must be the number of harmonics. 110 | //! @param inputs The inputs array. 111 | //! @param outputs The outputs array. 112 | void process(T const* inputs, T* outputs) noexcept final 113 | { 114 | const size_t size = ProcessorHarmonics::getNumberOfHarmonics(); 115 | const T* weights = m_weights; 116 | for(size_t i = size>>3; i; --i, inputs += 8, weights += 8, outputs += 8) 117 | { 118 | T const f0 = inputs[0], f1 = inputs[1], f2 = inputs[2], f3 = inputs[3]; 119 | T const f4 = inputs[4], f5 = inputs[5], f6 = inputs[6], f7 = inputs[7]; 120 | 121 | T const g0 = weights[0], g1 = weights[1], g2 = weights[2], g3 = weights[3]; 122 | T const g4 = weights[4], g5 = weights[5], g6 = weights[6], g7 = weights[7]; 123 | 124 | outputs[0] = f0 * g0; outputs[1] = f1 * g1; outputs[2] = f2 * g2; outputs[3] = f3 * g3; 125 | outputs[4] = f4 * g4; outputs[5] = f5 * g5; outputs[6] = f6 * g6; outputs[7] = f7 * g7; 126 | } 127 | for(size_t i = size&7; i; --i, inputs++, weights++, outputs++) 128 | { 129 | outputs[0] = inputs[0] * weights[0]; 130 | } 131 | } 132 | 133 | protected: 134 | 135 | static inline long double ofactorial(long n) 136 | { 137 | long double result = n; 138 | if(n == 0) 139 | return 1; 140 | while(--n > 0) 141 | result *= n; 142 | 143 | return result; 144 | } 145 | 146 | Mode m_mode; 147 | T* m_weights; 148 | }; 149 | } 150 | -------------------------------------------------------------------------------- /docs/functions_eval.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | HOA Library: Class Members - Enumerator 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 23 | 24 | 25 | 26 |
27 |
28 | 29 | 30 | 31 | 37 | 38 | 39 |
32 |
HOA Library 33 |  beta 3.0 34 |
35 |
High Order Ambisonics Library
36 |
40 |
41 | 42 | 43 | 46 | 68 | 75 | 83 |
84 | 85 |
89 |
90 | 91 | 92 |
93 | 96 |
97 | 98 |
99 |   143 |
144 | 145 | 150 | 151 | 152 | --------------------------------------------------------------------------------