CHANGES.md
__EMSCRIPTEN_major/minor/tiny__ macros.ma_sound when doing resampling.ma_sound_is_playing() will now correctly return false when called from inside the end callback of a sound.ma_channel_map_to_string() where the output string is not null terminated correctly.MA_NO_RUNTIME_LINKING.ma_sound initialization where the initial loop points are not set correctly.MA_FALLTHROUGHMA_NO_SSE2.ma_sound.MA_NO_PTHREAD_REALTIME_PRIORITY_FALLBACK if you need an explicit failure.MA_NO_THREADING is defined.MINIAUDIO_IMPLEMENTATION. Nothing has changed in miniaudio.h, however when version 0.12 is released you will need to use miniaudio.c for the implementation. It's recommended you start the transition away from MINIAUDIO_IMPLEMENTATION and towards miniaudio.c. If you want to keep building your project as a single translation unit, you can do #include "miniaudio.c" which will continue to be supported with version 0.12 and beyond.miniaudio_libvorbis.h and miniaudio_libopus.h files have been deprecated. They have been replaced with versions in the extras/decoders folder. They are now split into a separate .c and .h files. The old files still exist for compatibility, but you need to transition over to the new versions. The transition should be trivial. Compile the .c files like a normal source file, and include the .h file like a normal header.MA_SOUND_FLAG_LOOPING and MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING flags. These can be used to initialize sounds and resource managed data sources to loop by default. This is the recommended way to enable looping for streams. The isLooping config option in ma_sound_config and ma_resource_manager_data_source_config has been deprecated. If you are using those, you should switch to the new flag or else you'll get compiler errors when upgrading to a future version.ma_rb_commit_read(), ma_rb_commit_write(), ma_pcm_rb_commit_read() and ma_pcm_rb_commit_write() no longer return MA_AT_END. The reason for this change is that there's no real notion of an "end" in a ring buffer which makes this result code confusing. In addition, it's possible for these functions to return something other than MA_SUCCESS even when the operation completed successfully which adds to the confusion. The correct way to check if there is any more room in the ring buffer is to look at the frame count returned by *rb_acquire_read/write().ma_pcm_rb data source implementation has been modified to pad output data with silence if there is not enough data in the ring buffer to fill the request. What this means is for an ma_pcm_rb, ma_data_source_read_pcm_frames() should no longer return a frame count of less than what you requested, and will therefore never return MA_AT_END which does not make sense for a ring buffer since it does not have the notion of an end. This change should make it much easier to use a ring buffer as the data source for a ma_sound.ma_calculate_buffer_size_in_milliseconds_from_frames() to have it return a value rounded up to the nearest integer.MA_NO_BACKEND regardless of the error.ma_device_id_equal() for comparing device IDs.MA_NO_RUNTIME_LINKING to the AAudio backend.ma_sound processing.ma_device_set_master_volume() does not work.MA_SOUND_FLAG_DECODE do not loop.read().--closure=1. Note that the Audio Worklets path is not currently working due to the callback specified in emscripten_create_wasm_audio_worklet_processor_async never getting fired.-pthread command line flag is used.aaudio.allowSetBufferCapacity to true in the device config. Note, however, if you do this you may end up with errors when rerouting between devices.#define MA_AAUDIO_MIN_ANDROID_SDK_VERSION 26.ma_decoder_init_file() can incorrectly return successfully.ma_standard_sample_rate_11025 uses the incorrect rate.ma_noise where only white noise would be generated even when specifying pink or Brownian.ma_engine object that get's fired after it processes a chunk of audio. This allows applications to do things such as apply a post-processing effect or output the audio to a file.ma_engine_get_volume().ma_sound_get_time_in_milliseconds().MA_API and MA_PRIVATE. This relaxes applications from needing to define both of them if they're only wanting to redefine one.ma_linear_resampler_set_rate_ratio().CoUninialize() is being called when the corresponding CoInitializeEx() fails.MA_ENABLE_AUDIO_WORKLETS. You must compile with -sAUDIO_WORKLET=1 -sWASM_WORKERS=1 -sASYNCIFY for this to work. Requires at least Emscripten v3.1.32.ma_sound_init_copy().ma_sound_init_*() when using the ASYNC | DECODE flag combination.ma_sound_set_volume(). To use this, you must configure it via the volumeSmoothTimeInPCMFrames member of ma_sound_config and use ma_sound_init_ex() to initialize your sound. Smoothing is disabled by default.ma_pcm_rb as a data source.pBytesRead parameter of the VFS onRead callback is now pre-initialized to zero.MA_SOUND_NO_PITCH is used.MA_USE_RUNTIME_LINKING_FOR_PTHREAD option is no longer used.deviceConfig.wasapi.usage configuration option.MA_SUCCESS from ma_device_start() and ma_device_stopped() if the device is already started or stopped respectively.ma_device_stop(). This allows ma_device_start() to work as expected when called from interruption_ended.v0.11.4 - 2022-01-12
v0.11.3 - 2022-01-07
noFixedSizedCallback config
variable and set it to true. This will make the callback equivalent to the way it was before
this change and will avoid the intermediary buffer, but the data callback could get fired with
an inconsistent frame count which might cause problems where certain operations need to operate
on fixed sized chunks.v0.11.2 - 2021-12-31
v0.11.1 - 2021-12-27
v0.11.0 - 2021-12-18
loop parameter from ma_data_source_read_pcm_frames(). Use
ma_data_source_set_looping() to enable or disable looping.shareMode parameter from ma_context_get_device_info().v0.10.43 - 2021-12-10
v0.10.42 - 2021-08-22
v0.10.41 - 2021-08-15
v0.10.40 - 2021-07-23
v0.10.39 - 2021-07-20
v0.10.38 - 2021-07-14
0.10.37 - 2021-07-06
0.10.36 - 2021-07-03
ma_log API for details. The logCallback variable used by
ma_context has been deprecated and will be replaced with the new system in version 0.11.
ma_log object with ma_log_init().ma_log_register_callback().pLog to your ma_log object and stop using logCallback.ma_data_source_callbacks to ma_data_source_base.ma_data_source_init() for your base object in your custom data source's initialization
routine. This takes a config object which includes a pointer to a vtable which is now where
your custom callbacks are defined.ma_data_source_uninit() in your custom data source's uninitialization routine. This
doesn't currently do anything, but it placeholder in case some future uninitialization code
is required to be added at a later date.v0.10.35 - 2021-04-27
v0.10.34 - 2021-04-26
v0.10.33 - 2021-04-04
v0.10.32 - 2021-02-23
pa_threaded_mainloop.v0.10.31 - 2021-01-17
MA_ENABLE_ONLY_SPECIFIC_BACKENDS, which is then followed with MA_ENABLE_*. The
old system where you disable backends with MA_NO_* still exists and is still the default.v0.10.30 - 2021-01-10
v0.10.29 - 2020-12-26
v0.10.28 - 2020-12-16
v0.10.27 - 2020-12-04
ma_noise objects post-initialization.v0.10.26 - 2020-11-24
v0.10.25 - 2020-11-15
v0.10.24 - 2020-11-10
v0.10.23 - 2020-11-09
v0.10.22 - 2020-11-08
ma_context_get_device_info().ma_context_get_device_info() where the PCM handle is left open in the event of an error.ma_decoder_init_file*() where the file handle is not closed after a decoding error.MA_NO_RUNTIME_LINKING.v0.10.21 - 2020-10-30
v0.10.20 - 2020-10-06
v0.10.19 - 2020-09-22
ma_lpf and ma_hpf structures.v0.10.18 - 2020-08-30
v0.10.17 - 2020-08-28
v0.10.16 - 2020-08-14
v0.10.15 - 2020-07-15
v0.10.14 - 2020-07-14
v0.10.13 - 2020-07-11
v0.10.12 - 2020-07-04
v0.10.11 - 2020-06-28
v0.10.10 - 2020-06-26
v0.10.9 - 2020-06-24
v0.10.8 - 2020-06-22
v0.10.7 - 2020-05-25
v0.10.6 - 2020-05-24
v0.10.5 - 2020-05-05
ma_waveform and ma_noise APIs from the build.v0.10.4 - 2020-04-12
v0.10.3 - 2020-04-07
v0.10.2 - 2020-03-22
v0.10.1 - 2020-03-17
v0.10.0 - 2020-03-07
v0.9.10 - 2020-01-15
v0.9.9 - 2020-01-09
v0.9.8 - 2019-10-07
__inline__ is undefined or defined as nothing.v0.9.7 - 2019-08-28
v0.9.6 - 2019-08-04
v0.9.5 - 2019-05-21
v0.9.4 - 2019-05-06
v0.9.3 - 2019-04-19
v0.9.2 - 2019-04-08
v0.9.1 - 2019-03-17
v0.9 - 2019-03-06
v0.8.14 - 2018-12-16
v0.8.13 - 2018-12-04
v0.8.12 - 2018-11-27
v0.8.11 - 2018-11-21
v0.8.10 - 2018-10-21
v0.8.9 - 2018-09-28
v0.8.8 - 2018-09-14
v0.8.7 - 2018-09-12
v0.8.6 - 2018-08-26
v0.8.5 - 2018-08-12
v0.8.4 - 2018-08-06
v0.8.3 - 2018-07-15
v0.8.2 - 2018-07-07
v0.8.1 - 2018-07-06
v0.8 - 2018-07-05
v0.7 - 2018-02-25
v0.6c - 2018-02-12
v0.6b - 2018-02-03
v0.6a - 2018-01-26
v0.6 - 2017-12-08
v0.5 - 2017-11-11
v0.4 - 2017-11-05
v0.3 - 2017-06-19
v0.2 - 2016-10-28
v0.1 - 2016-10-21