Skip to content

libsoundio vs JUCE

Joshua Olson edited this page Nov 30, 2018 · 4 revisions

Benefits of libsoundio over JUCE:

  • Supports PulseAudio backend.
  • Supports Dummy backend, guaranteed to work even if computer has no sound card.
  • Supports channel layouts (also known as channel maps), important for surround sound applications.
  • Exposes both device id and friendly name. id you could save in a config file because it persists between devices becoming plugged and unplugged, while friendly name is suitable for exposing to users.
  • Callback function provides frame_count_min and frame_count_max to optimally leverage fixed-buffer backends such as JACK and CoreAudio, as well as flexible buffer backends such as ALSA and PulseAudio.
  • Errors are communicated via meaningful return codes, not strings.
  • Exposes extra API that is only available on some backends. For example you can provide application name and stream names which is used by JACK and PulseAudio.
  • Ability to get an event when the backend is disconnected, for example when the JACK server or PulseAudio server shuts down.
  • Ability to connect to multiple backends at once. For example you could have an ALSA device open and a JACK device open at the same time.
  • C library, does not have complicated class hierarchies or depend on libstdc++.
  • No bloat. Does one thing and does it well.

Benefits of JUCE over libsoundio:

  • Supports ASIO backend. See #23.
  • Supports iOS and Android.
  • Does more than just audio I/O, for example it has UI and codec APIs.
  • Supports older versions of Windows than Windows 7.