* Initial work on infrastructure for spatialization, panning and
pitch shifting.
* Add ma_engine_sound_set_pitch()
Spatialization and panning is not yet implemented, but pitch shifting
should now be working.
* The engine will now auto-start by default. This can be changed in
the config by setting `noAutoStart` to true.
* Initial implementation of ma_engine_play_sound() which can be used
for fire-and-forget playback of sounds.
* Add ma_engine_sound_at_end() for querying whether or not a sound
has reached the end. The at-end flag is set atomically and
locklessly in the mixing thread.
This change makes it so MA_AT_END is returned when a non-looping data
source reaches the end. This is how the caller can know to do clean up
or whatnot.
This commit also explicitly defines ma_data_source_read_pcm_frames() as
supporting an output buffer of NULL in which case a forward seek should
be performed.
* Add support for volume control to ma_mixer_mix_*().
* Add support for specifying an effect to apply before mixing.
* Add optimized pipeline for memory mappable data sources.
* Remove some unnecessary functions:
- ma_mixer_mix_pcm_frames_ex()
- ma_mixer_mix_callbacks()
- ma_mixer_mix_decoder()
- ma_mixer_mix_audio_buffer()
- ma_mixer_mix_waveform()
- ma_mixer_mix_noise()
- ma_mixer_mix_rb_ex()
The ma_audio_buffer object is used for storing raw audio data in memory
and reading from it like any other data source. It supports flexible
memory management, reading, seeking, memory mapping and looping.
See documentation under "Audio Buffers" for a detailed description.