LINUX.ORG.RU

Альтернатива SDL_Mixer: Прошу любить и жаловать

 ,


1

2

Привет ЛОР! Хочу представить вам мою библиотеку musac https://github.com/devbrain/musac . Цель этой библиотеки быть альтернативой SDL_Mixer и использоваться в gamedev . На мой взгляд, основная проблема в SDL_Mixer - это отсуствие возможности добавлять свои форматы и моя библиотека это решает. Сама библиотека модулярная, и не зависит напрямую от SDL . Буду рад услышать конструктивную критику и злобное критиканство.

https://github.com/devbrain/musac/blob/aa9b7c207dd934afaac7f0f35faf88c6369dbd...

2) Constructs an array of the given dynamic size. The array elements are value-initialized. This overload participates in overload resolution only if T is an array of unknown bound. The function is equivalent to:

unique_ptr<T>(new std::remove_extent_t<T>[size]())

(https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)

п.с. вообще не вник, почему тут не std::vector?

апд.
[expr.new#7]

If the type-id or new-type-id denotes an array type of unknown bound ([dcl.array]), the new-initializer shall not be omitted; the allocated object is an array with n elements, where n is determined from the number of initial elements supplied in the new-initializer ([dcl.init.aggr], [dcl.init.string]).

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

https://github.com/devbrain/musac/blob/aa9b7c207dd934afaac7f0f35faf88c6369dbd...

https://godbolt.org/z/h7dGd4sMj

тут в листинге асма явно не будет никакой разницы, поскольку там я бы сказал уже ооооочень давно уже делается сея проверка для возможности использования memcpy (если даже std::copy вообще не производительнее будет...)

safocl ★★
()

https://github.com/devbrain/musac/blob/aa9b7c207dd934afaac7f0f35faf88c6369dbd...
тут выдаётся предупреждение:

[20/228] Building CXX object src/musac/sdk/CMakeFiles/musac_sdk.dir/audio_converter.cc.o
/musac/src/musac/sdk/audio_converter.cc: In static member function ‘static musac::buffer<unsigned char> musac::audio_converter::convert(const musac::audio_spec&, const uint8_t*, size_t, const musac::audio_spec&)’:
/musac/src/musac/sdk/audio_converter.cc:73:16: warning: ‘void* memcpy(void*, const void*, size_t)’ writing between 4294967296 and 18446744069414584320 bytes into a region of size between 0 and 4294967295 [-Wstringop-overflow=]
   73 |     std::memcpy(working_buffer.data(), src_data, src_len);
      |     ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


оно и понятно — тут зачем то выше выделение памяти делается по значению не выше чем `unsigned int` (при чём явным static_cast), хотя копирование происходит исходя из значения по типу `size_t`:
buffer<uint8_t> working_buffer(static_cast<unsigned int>(src_len));

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

это в данном конкретном месте. но там везде по коду не fixed-size и где-то это может оказаться критичным (в микшере, например). проверять я это, конечно же, не буду

iSage ★★★★
()

почему-то висит на

-- Examples will use SDL3 backend

после повторной попытке конфигурации (с предварительной очисткой папки build)

апд. отвисло — но чот долгая конфигурация — как я понял собираются во время неё примеры?

safocl ★★
()
Последнее исправление: safocl (всего исправлений: 2)
[ 86%] Linking CXX executable ../../bin/imgui_player
/usr/bin/ld: ../../lib/libimgui_lib.a(imgui_impl_sdl3.cpp.o): undefined reference to symbol 'SDL_ShowCursor@@SDL3_0.0.0'
/usr/bin/ld: /usr/lib/libSDL3.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status



получается что не выставлены все нужные зависимости (проверки) в конфигурации

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

Нет. Как раз не пытается. DSO missing from command line означает, что библиотеки нет в списке для линковки.

А нету её там, потому что вот тут https://github.com/devbrain/musac/blob/master/example/imgui_player/CMakeLists.txt#L40 нет find_package(SDL3) (как в ветке для SDL2)

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

основная проблема в SDL_Mixer - это отсуствие возможности добавлять свои форматы

какие еще свои форматы? звук это PCM, а вы что предлагаете в рантайм постоянно юзать проц? ну спасибо айболит!

А альтернатива SDL_mixer это OpenAL.

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

Фишка в том, что бы использовать SDL для звука (например весь проект на SDL - зачем еще что-то тащить) просто сам SDL не поддерживает вывод аудио из разных форматов (например VOC или MIDI)

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

например весь проект на SDL - зачем еще что-то тащить

А если это консольная утилита, плеер, например?
Не слежу, часто ли автор обновляет свои dr_*, но в whisper.cpp я в начале года добавил чтение аудиофайлов с использованием miniaudio, недовольных, вроде бы, нет. :)

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

Фишка в том, что бы использовать SDL для звука (например весь проект на SDL - зачем еще что-то тащить) просто сам SDL не поддерживает вывод аудио из разных форматов (например VOC или MIDI)

Лучше разработать интефейс, позволит разработать API для использования разных форматов audio.

anonymous
()