Documentation HomeProgramming ManualExamplesCustom BackendCustom DecoderCustom Decoder EngineData Source ChainingDuplex EffectEngine AdvancedEngine EffectsEngine Hello WorldEngine SdlEngine SteamaudioHilo InteropNode GraphResource ManagerResource Manager AdvancedSimple CaptureSimple DuplexSimple EnumerationSimple LoopbackSimple LoopingSimple MixingSimple PlaybackSimple Playback SineSimple Playback SineSimple SpatializationAPI Reference |
Simple SpatializationDemonstrates how to do basic spatialization via the high level API. You can position and orientate sounds to create a simple spatialization effect. This example shows how to do this. In addition to positioning sounds, there is the concept of a listener. This can also be positioned and orientated to help with spatialization. This example only covers the basics to get your started. See the documentation for more detailed information on the available features. To use this example, pass in the path of a sound as the first argument. The sound will be positioned in front of the listener, while the listener rotates on the the spot to create an orbiting effect. Terminate the program with Ctrl+C. #include "../miniaudio.c" #include <stdio.h> #include <math.h> /* For sinf() and cosf() */ /* Silence warning about unreachable code for MSVC. */ #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4702) #endif int main(int argc, char** argv) { ma_result result; ma_engine engine; ma_sound sound; float listenerAngle = 0; if (argc < 2) { printf("No input file.\n"); return -1; } result = ma_engine_init(NULL, &engine); if (result != MA_SUCCESS) { printf("Failed to initialize engine.\n"); return -1; } result = ma_sound_init_from_file(&engine, argv[1], 0, NULL, NULL, &sound); if (result != MA_SUCCESS) { printf("Failed to load sound: %s\n", argv[1]); ma_engine_uninit(&engine); return -1; } /* This sets the position of the sound. miniaudio follows the same coordinate system as OpenGL, where -Z is forward. */ ma_sound_set_position(&sound, 0, 0, -1); /* This sets the position of the listener. The second parameter is the listener index. If you have only a single listener, which is most likely, just use 0. The position defaults to (0,0,0). */ ma_engine_listener_set_position(&engine, 0, 0, 0, 0); /* Sounds are stopped by default. We'll start it once initial parameters have been setup. */ ma_sound_start(&sound); /* Rotate the listener on the spot to create an orbiting effect. */ for (;;) { listenerAngle += 0.01f; ma_engine_listener_set_direction(&engine, 0, sinf(listenerAngle), 0, cosf(listenerAngle)); ma_sleep(1); } /* Won't actually get here, but do this to tear down. */ ma_sound_uninit(&sound); ma_engine_uninit(&engine); return 0; } #ifdef _MSC_VER #pragma warning(pop) #endif |
![]() |