LINUX.ORG.RU

miniaudio 0.11.22

 , , miniaudio,

miniaudio 0.11.22

5

3

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.
  • Обновлена документация.
  • Исправлены обнаруженные ошибки.

>>> Список изменений на GitHub

★★★★★

Проверено: Zhbert ()
Последнее исправление: dataman (всего исправлений: 1)

Тёмно-зелёный логотип на прозрачном фоне в дефолтной теме ЛОРа не видно совершенно

Alden ★★★★
()
Последнее исправление: Alden (всего исправлений: 1)
Ответ на: комментарий от Alden

А, так вот это что. А я было подумал, что бага, и хотел уже Максима звать :) Показалось, что там нет картинки в теме, а место под неё пустое зачем-то показывается.

Zhbert ★★★★★
()
Ответ на: комментарий от usermod

$ gh search repos miniaudio wrapper

Showing 15 of 15 repositories

NAME                                       DESCRIPTION                                                                            
larpon/miniaudio                           VVrap of the excellent miniaudio C audio library
zig-gamedev/zaudio                         Zig build package and wrapper for miniaudio
xioxin/lab_sound_flutter                   a wrapper for LabSound(graph-based audio engine)
alchemy-haxe/genkit_miniaudio              haxe/hxcpp wrapper for miniaudio
orlando-labs/rb-miniaudio                  Miniaudio Ruby wrapper
shakfu/minima                              A basic cython wrapper of miniaudio
MichealReed/miniaudio_dart                 A miniaudio dart ffi wrapper that supports audio playback, recording, and generation.
reworks-org/miniaudio-cpp                  miniaudio cpp wrapper
Eric-Bwr/Audio                             A simple MiniAudio Wrapper
MidimasterSoft/BlitzMax-Miniaudio-Wrapper  a binding/wrapper for the audio library Miniaudio to the language BlitzMax
Flip120/miniaudio_csharp                   A miniaudio wrapper for c#
dorev/audio                                C++ wrappers and helpers for miniaudio
awieland/miniaudio-pharo                   Pharo Smalltalk FFI wrapper for the miniaudio library
Skelebyte/Audeal                           Ease of use wrapper for Miniaudio
ondesly/audio_engine                       C++ wrapper for the miniaudio - audio playback and capture library
shakfu/minima         A basic cython wrapper of miniaudio
dataman ★★★★★
() автор топика

А всякие опусы-ворбисы умеет? Чот я сходу не нашел.

А так, весьма годно, походу.

gns ★★★★★
()
Ответ на: комментарий от gns

А всякие опусы-ворбисы умеет? Чот я сходу не нашел.

Умеет, есть примеры custom_decoder* в examples.
Я, например, пользуюсь таким плеером:

  1. копируем examples/simple_mixing.c в examples/simple_mixing_my.c, например.
  2. добавляем в начало simple_mixing_my.c:
#define STB_VORBIS_HEADER_ONLY
#include "../extras/stb_vorbis.c"    /* Enables Vorbis decoding. */
  1. и в конец:
#undef STB_VORBIS_HEADER_ONLY
#include "../extras/stb_vorbis.c"
#undef STB_VORBIS_HEADER_ONLY
  1. $ gcc -O3 -march=native simple_mixing_my.c -o maplay -lm

Получаем быстрый плеер, который поддерживает wav, ogg, flac и mp3.
И который может проигрывать несколько файлов одновременно, смешивая звук:

$ maplay 1.wav 2.ogg 3.mp3 4.flac
dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Прикольно. Надо попробовать. У меня была как-то идея закодировать звук преобразованиями Уолша. По слухам, американцам удалось переговоры с лунными Аполлонами в телеграфные 600 бод загнать, но пруфа я нигде не могу найти.

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 1)

Начинаю узнавать автора новостей по заголовкам.
Спасибо, что накидываешь годноты!

IIIypuk ★★★★
()

Совать библиотеку на несколько тысяч строк в один заголовочный файл – это какой-то пик безумия .0o

А можно нормально сделать? Можно же, да?

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

А можно нормально сделать? Можно же, да?

Можно, делай. Но это ведь нужно своё время тратить, да?

dataman ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

Погоди, дай людЯм отладиться и выплеснуть весь свой поток сознания в виде рабочего кода. Дождись релиза 1.0. :)

Организация кода — тоже процесс, он сильно с мысли сбивает в процессе придумывания чего-то рабочего.

gns ★★★★★
()
Ответ на: комментарий от gns

выплеснуть весь свой поток сознания в виде рабочего кода

Я, когда начал изучать сабж (для использования в whisper.cpp), сделал пару PR:
https://github.com/mackron/miniaudio/pull/925 – «Small fixes in tools/audioconverter»
https://github.com/mackron/miniaudio/pull/926 – «Add support Vorbis to simple_playback example»

Автор miniaudio быстро реагирует, дерзайте! ;)


P. S. Если изменить miniaudio/tools/audioconverter/audioconverter.c, как simple_mixing.c выше, то получим быстрый конвертер разных форматов в .wav.

dataman ★★★★★
() автор топика

гибкий и модульный API со встроенными декодерами (WAV, MP3 и FLAC)

А почему в этом списке нет православного OGG?

Xintrea ★★★★★
()
Ответ на: комментарий от dataman

А! Так, получается, vorbis у него и свой, и в виде враппера к libvorbis, а для опуса есть только враппер вокруг libopus/libopusfile.

gns ★★★★★
()
Ответ на: комментарий от IIIypuk

Я, честно говоря, подумал сначала, что кто-то из мультимедийщиков вроде AP и прочих. А датамана узнаю по другим заголовкам :)

Gonzo ★★★★★
()
Ответ на: комментарий от gns

Так, получается, vorbis у него и свой, и в виде враппера к libvorbis, а для опуса есть только враппер вокруг libopus/libopusfile.

Всё верно.


Кстати, недавно увидел https://github.com/phoboslab/pl_mpeg от авторов QOI. Буду пытаться прикрутить её к сабжу. :)

dataman ★★★★★
() автор топика
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от dataman

Да погоди, нельзя впихнуть невпихуемое. Тут коллега hateyoufeel прав. Штука же совсем не модульная. Что бы плагины прикручивать, надо же всю эту библиотеку сначала на модули побить.

gns ★★★★★
()
Ответ на: комментарий от gns

надо же всю эту библиотеку сначала на модули побить.

Ну вот зачем?
Кто достаточно компетентен, разберётся и так. А для тех, кто просто компилирует, единственный файл как раз проще в использовании.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Блин, чукча не писатель… Моя вина. Читаю только заголовки обычно :)

Gonzo ★★★★★
()
Ответ на: комментарий от dataman

А есть гарантия, что в бинарь неиспользуемые функции не попадут? Я вот не уверен, что из единицы трансляции неиспользуемые функции выкидывают. Из библиотек так точно нет. А вот так чтоб из объектника только нужное вытащить, так это гни один линкер не умеет/

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 2)
Ответ на: комментарий от Alphaer

Мне эту сказку рассказали, когда я маленьким был. Вот и хочу проверить.

gns ★★★★★
()

miniaudio работает на всех основных настольных и мобильных платформах, включая <…> Linux

Ни о чём не говорит. Какие бекенды на линуксе поддерживаются для воспроизведения?

eternal_sorrow ★★★★★
()
Ответ на: комментарий от Dispetcher14

не понял зачем

Очевидно, что для написания кроссплатформенных аудио-программ, без зависимости от ffmpeg, например.

dataman ★★★★★
() автор топика

без сторонних зависимостей.

Одобряю.

firkax ★★★★★
()
Ответ на: комментарий от hateyoufeel

Какие несколько тысяч строк? Зачем такое 4.2, я уже начал думать как они смогли в такой маленький объём засунуть поддержку всех ОС + кодеков + остальноые заявленные фичи. Там не несколько тысяч, а целых 93.

Согласен, это перебор, я в таких случаях нарезаю файл на пачку инклюдов и инклюжу их из главного.

firkax ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Добавил в ОП:

Поддерживаемые платформы и бэкенды:

dataman ★★★★★
() автор топика

А есть какой-то список проектов, где эта штука используется? Интересно почитать и попробовать.

В репе такого не нашёл. Или нет, или плохо искал.

Radjah ★★★★★
()
Ответ на: комментарий от Radjah

А есть какой-то список проектов, где эта штука используется?

Да, выдаётся по первому требованию в расширенном поиске GitHub. :)

Из тех, о которых точно знаю:

  • в Celestia можно включить использование miniaudio.
  • ну и теперь используется в whisper.cpp – мой PR наконец-то приняли, ура-ура-ура! Лучи добра мне, я – молодец. :)

Теперь в whisper.cpp нужно будет сделать запись звука сабжем, а не SDL, и будет вообще хорошо.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Да, выдаётся по первому требованию в расширенном поиске GitHub. :)

А я по репе искал что-то типа «Такие-то проекты используют наш код». o_0

Radjah ★★★★★
()
Ответ на: комментарий от Radjah

Все проекты используют наш код!

Взять те же пробелы: заимствование полное!.. ;P ;)) :)))))

Somebody ★★
()
Последнее исправление: Somebody (всего исправлений: 1)
Ответ на: комментарий от Radjah

А я по репе искал что-то типа «Такие-то проекты используют наш код». o_0

И приходится проверять, а существует ли ещё такой-то проект?

Вот пример: https://github.com/ArthurSonzogni/FTXUI/pull/957.

Remove non-existent Just-Fast from README.md

dataman ★★★★★
() автор топика
Ответ на: комментарий от Zhbert

Показалось, что там нет картинки в теме, а место под неё пустое зачем-то показывается.

Не показалось. Там нет картинка.

BydymTydym ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.