24 февраля, после более года разработки, состоялся выпуск 0.11.22 кроссплатформенной библиотеки захвата и воспроизведения звука miniaudio, написанной на языке C и распространяемой, как общественное достояние. miniaudio работает на всех основных настольных и мобильных платформах без сторонних зависимостей.
Поддерживаемые платформы и бэкенды:
- Android: AAudio, OpenSL или ES.
- FreeBSD / OpenBSD / NetBSD: OSS, sndio, audio(4).
- Linux: ALSA, PulseAudio, JACK.
- macOS / iOS: Core Audio.
- Web: Emscripten / WebAudio.
- Windows: WASAPI, DirectSound, WinMM.
Библиотека имеет простой, гибкий и модульный API со встроенными декодерами (WAV, MP3 и FLAC), расширенным микшированием и обработкой эффектов (включая 3D), управлением ресурсами, фильтрами, преобразованием данных и многое другое.
Основные изменения:
- Начиная с версии 0.12, miniaudio будет переходить на раздельную пару файлов .c/h, отказавшись от единственного заголовочного файла. Для подготовки к этому в репозиторий был добавлен файл
miniaudio.c
. На данный момент это просто обёртка вокругminiaudio.h
иMINIAUDIO_IMPLEMENTATION
. Вminiaudio.h
ничего не изменилось, однако, когда выйдет версия 0.12, нужно будет использоватьminiaudio.c
для компиляции. Рекомендуется начать переход от использованияMINIAUDIO_IMPLEMENTATION
к использованиюminiaudio.c
. Если вы хотите продолжать собирать свой проект как единую единицу компиляции, вы можете сделать#include "miniaudio.c"
. Этот способ будет поддерживаться в версии 0.12 и далее. - Файлы
miniaudio_libvorbis.h
иminiaudio_libopus.h
в директорииextras
объявлены устаревшими. Теперь они разделены на отдельные файлы .c и .h в директорииextras/decoders
. Старые файлы всё ещё существуют для совместимости, но вам нужно будет перейти на новые версии. Переход должен быть тривиальным. - Добавлены опции
MA_SOUND_FLAG_LOOPING
иMA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING
. Их можно использовать для инициализации звуков и управляемых ресурсами источников данных для зацикливания по умолчанию. Это рекомендуемый способ включения зацикливания для потоков. Опции конфигурацииisLooping
вma_sound_config
иma_resource_manager_data_source_config
объявлены устаревшими. Если вы используете их, то вам следует перейти на новые опции, иначе при обновлении до будущей версии вы получите ошибки компилятора. ma_rb_commit_read()
,ma_rb_commit_write()
,ma_pcm_rb_commit_read()
иma_pcm_rb_commit_write()
больше не возвращаютMA_AT_END
. Причина этого изменения в том, что в кольцевом буфере не существует понятия «конец», что делало код результата неясным. Кроме того, эти функции могут возвращать неMA_SUCCESS
, а что-то другое, даже если операция завершилась успешно, что вносило дополнительную путаницу. Правильный способ проверить, есть ли еще место в кольцевом буфере – посмотреть на счётчик кадров, возвращаемый функциямиrb_acquire_read/write()
.- Реализация источника данных
ma_pcm_rb
изменена таким образом, что выходные данные заполняются тишиной, если в кольцевом буфере недостаточно данных для выполнения запроса. Это означает, чтоma_data_source_read_pcm_frames()
дляma_pcm_rb
больше не должна возвращать количество кадров меньше, чем вы запросили, и поэтому никогда не будет возвращатьMA_AT_END
, что не имеет смысла для кольцевого буфера, поскольку у него нет понятия конца. Это изменение должно значительно упростить использование кольцевого буфера в качестве источника данных дляma_sound
. - В функцию
ma_calculate_buffer_size_in_milliseconds_from_frames()
внесено небольшое изменение, в результате которого она возвращает значение, округленное до ближайшего целого числа. - При неудачной инициализации декодера теперь возвращается первый встретившийся код ошибки, а не
MA_NO_BACKEND
независимо от ошибки, как было ранее. - Добавлена функция
ma_device_id_equal()
для сравнения идентификаторов устройств. - Добавлена поддержка
MA_NO_RUNTIME_LINKING
в бэкэнд AAudio. - Обновлена документация.
- Исправлены обнаруженные ошибки.