diff --git a/CMakeLists.txt b/CMakeLists.txt index c665f8a..70cdafe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -153,8 +153,8 @@ target_sources(spatialaudio ) target_include_directories(spatialaudio - PRIVATE - ${CMAKE_CURRENT_BINARY_DIR}/include + PUBLIC + $ ) target_compile_definitions(spatialaudio PRIVATE diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 27a09aa..c13a80c 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -5,6 +5,12 @@ function(spaudio_add_test name) target_link_libraries(${name} PRIVATE spatialaudio) add_test(NAME ${name} COMMAND $) + set_property(TEST ${name} + PROPERTY + ENVIRONMENT_MODIFICATION + "PATH=path_list_append:$") endfunction() spaudio_add_test(TestInsideAngleRange) +spaudio_add_test(TestAmbisonicShelfFilters) +spaudio_add_test(TestAmbisonicDecoderPresets) diff --git a/tests/TestAmbisonicDecoderPresets.cpp b/tests/TestAmbisonicDecoderPresets.cpp new file mode 100644 index 0000000..ae244f2 --- /dev/null +++ b/tests/TestAmbisonicDecoderPresets.cpp @@ -0,0 +1,60 @@ +#undef NDEBUG +#include +#include +#include +#include + +#include "AmbisonicEncoder.h" +#include "AmbisonicDecoder.h" + +int main() { + constexpr unsigned nSamples = 1; + unsigned order = 1; + bool b3D = true; + unsigned sampleRate = 48000; + auto layout = spaudio::Amblib_SpeakerSetUps::kAmblib_71; + + spaudio::AmbisonicEncoder ambiEnc; + bool success = ambiEnc.Configure(order, b3D, sampleRate, 0.f); + assert(success); + + spaudio::AmbisonicDecoder ambiDec; + success = ambiDec.Configure(order, b3D, nSamples, sampleRate, layout); + assert(success); + assert(ambiDec.GetPresetLoaded()); + + unsigned nLdspk = ambiDec.GetSpeakerCount(); + + spaudio::BFormat inputSignal; + inputSignal.Configure(order, b3D, nSamples); + inputSignal.Reset(); + std::array impulse; + impulse[0] = 1.f; + + float** ldspkOut = new float* [nLdspk]; + for (unsigned iLdspk = 0; iLdspk < nLdspk; ++iLdspk) + ldspkOut[iLdspk] = new float[nSamples]; + + for (float az = 0.f; az < 360.f; az += 1.f) + { + ambiEnc.SetPosition({ spaudio::DegreesToRadians(az), 0.f, 1.f }); + ambiEnc.Refresh(); + ambiEnc.Process(impulse.data(), nSamples, &inputSignal); + + ambiDec.Process(&inputSignal, nSamples, ldspkOut); + + for (unsigned iSamp = 0; iSamp < nSamples; ++iSamp) { + std::cout << std::setw(4) << iSamp << ": "; + for (unsigned iLdspk = 0; iLdspk < nLdspk; ++iLdspk) + { + std::cout << std::setw(12) << std::fixed << + ldspkOut[iLdspk][iSamp] << std::setw(0) << ", "; + } + std::cout << std::endl; + } + } + + for (unsigned iLdspk = 0; iLdspk < nLdspk; ++iLdspk) + delete[] ldspkOut[iLdspk]; + delete[] ldspkOut; +} diff --git a/tests/TestAmbisonicShelfFilters.cpp b/tests/TestAmbisonicShelfFilters.cpp new file mode 100644 index 0000000..980f22f --- /dev/null +++ b/tests/TestAmbisonicShelfFilters.cpp @@ -0,0 +1,46 @@ +#undef NDEBUG +#include +#include +#include +#include + +#include "AmbisonicShelfFilters.h" + +int main() { + spaudio::AmbisonicShelfFilters shelfFilters; + + spaudio::BFormat outputSignal; + constexpr size_t nSamples = 128; + constexpr unsigned order = 3; + constexpr bool b3D = true; + + outputSignal.Configure(order, b3D, nSamples); + outputSignal.Reset(); + + bool ret = shelfFilters.Configure(order, b3D, nSamples, 0); + assert(ret); + + std::array impulse; + std::vector> output(outputSignal.GetChannelCount(), std::vector(nSamples, 0.f)); + + impulse.fill(0.f); + impulse[0] = 1.f; + + for (unsigned i = 0; i < outputSignal.GetChannelCount(); ++i) + outputSignal.InsertStream(impulse.data(), i, nSamples); + + shelfFilters.Process(&outputSignal, nSamples); + + for (unsigned i = 0; i < outputSignal.GetChannelCount(); ++i) + outputSignal.ExtractStream(output[i].data(), i, nSamples); + + for (unsigned iSamp = 0; iSamp < nSamples; ++iSamp) { + std::cout << std::setw(4) << iSamp << ": "; + for (unsigned iCh = 0; iCh < outputSignal.GetChannelCount(); ++iCh) + { + std::cout << std::setw(12) << std::fixed << + output[iCh][iSamp] << std::setw(0) << ", "; + } + std::cout << std::endl; + } +} diff --git a/tests/meson.build b/tests/meson.build index b808767..d7d03b4 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -2,3 +2,9 @@ e = executable('TestInsideAngleRange', 'TestInsideAngleRange.cpp', dependencies: [libspatialaudio_dep]) test('TestInsideAngleRange', e) + +e = executable('TestAmbisonicShelfFilters', 'TestAmbisonicShelfFilters.cpp', dependencies: [libspatialaudio_dep]) +test('TestAmbisonicShelfFilters', e) + +e = executable('TestAmbisonicDecoderPresets', 'TestAmbisonicDecoderPresets.cpp', dependencies: [libspatialaudio_dep]) +test('TestAmbisonicDecoderPresets', e)