Audio Output with the VM


Even if it is not a domain in which the Erlang VM really shines, what would be the best cross-platform, free software options regarding audio output (SFX/music playback, for example from Ogg Vorbis) that would be done by an Erlang multimedia / game-like application?

The ideal features would be: decoding of various formats/mixing/channel support/resampling/possibly some special effects.

As I see it:

  • wx is much appreciated, but does not seem to include the wxWidgets audio support
  • esdl provides a binding to SDL, but does not include SDL_mixer apparently, and would require to select/revivify one of its many forks, most of which did not change for a while
  • esdl2 relies on newer/better SDL2, and already includes other SDL companion libraries (SDL_image, SDL_ttf) - but not (yet) SDL_mixer; again, many forks to choose from, and no very recent commit
  • there is also at least one binding to OpenAL, eopenal, about which little feedback exists

Any thought/piece of advice?

It would be nice if we could, from a basic, vanilla Erlang install (hence with no specific dependency), perform at least basic audio output - like we can readily perform 2D/3D rendering (with wx, gl, etc.).

Thanks in advance!


I’m not sure, but I would be interested to see something in this space. I haven’t watched the complete talk yet, but you might be interested in this recent Code BEAM talk. It was posted to the forum as well.

I have some interest along these lines, and I’m also considering experimenting with a cross-platform 2D windowing and graphics solution.


There is the Membrane Framework but it’s written in Elixir


Thanks for the link, I had looked at it but, as I understood it, it was more of a LISP-based music generator? Still interesting, though.

So the best option I currently see for audio playback for multimedia-like applications would be to start from ESDL2 (or possibly one of its forks) and to increase its coverage by including SDL_Audio. Possibly another NIF-based, optional binding to SDL_mixer would be of interest then.

Yet that’s quite a lot of work! So, at least for the moment, I will stick to a silent application, that’s not a feature high enough in my wish-list (but it would be nice-to-have).

As for:

did you consider using wx (+possibly OpenGL)? I toyed around with them and have been quite happy with the result. And Wings3D is a very good (albeit quite complex) example of their use.


Thanks for the information, I wasn’t even aware that Membrane (and its 106 repositories!) existed.
This (Elixir) multimedia (server-side) streaming framework looks extremely rich indeed (even with a SDL-based video player), however I think it would be overkill for my hobbyist needs (mostly client-side playbacks of various audio contents).
For more demanding requirements, certainly a neat option!


Yea, I posted that talk as just something likely relevant to your interests.

I have considered that, but I have basically ruled out any existing framework such as wxWidgets, Qt, GTK, etc. They’re all massively and overly complex and are highly object-oriented. My goal is to use nothing but GLFW and Skia to build something from scratch.

1 Like