Use osaudio for simple blocking audio playback
masterosaudio provides a simple, blocking read/write API for audio, contrasting with the callback-based model used in miniaudio. It is implemented as a header-only library with a reference implementation that uses miniaudio under the hood.
To use it, initialize an osaudio_config_t object, configure your desired format, channels, and rate, and then call osaudio_open. Data is sent to the device using osaudio_write, which blocks until all data has been sent.
#include "osaudio.h"
osaudio_t audio;
osaudio_config_t config;
// Initialize configuration for output
saudio_config_init(&config, OSAUDIO_OUTPUT);
config.format = OSAUDIO_FORMAT_F32;
config.channels = 2;
config.rate = 48000;
// Open the audio device
osaudio_open(&audio, &config);
// Write data (this call blocks until data is sent to the device)
osaudio_write(audio, myAudioData, frameCount);
// Close the device
osaudio_close(audio);