Programming libraries for audio, graphics and media development

.

Here are listed some libraries and APIs, that may be helpful when developing audio, video and media applications.

Note: This Page should include only libraries (APIs) that are cross-platform and have an OSI or FSF (FSFE) accepted open-source license.

.

.

libraries for audio and midi output

Jack audio API - http://jackaudio.org/ - cross platform audio/midi IO

Portmedia - http://portmedia.sourceforge.net/ with its sub-projects - port audio and port midi

Pulseaudio - http://pulseaudio.org/ .

OpenML - http://www.khronos.org/openml/

RtMidi - http://www.music.mcgill.ca/~gary/rtmidi/ - Cpp library for midi IO

WebAudio - http://www.w3.org/TR/webaudio/ - W3C WebAudio API 2012


libraries for audio processing and signal processing (DSP)

* Jamoma DSP - interface for C++, with an emphasis on real-time signal processing

* gtkIOStream jackd client - trivialises using jackd for audio input and output DSP processing.



Articles

Libraries for Atomic Operations


'Atomic Operations' are not allowed to be interrupted (e.g. by other threads).



Lockfree (non-blocking) Data Structures - Libraries



Parallel Programming


  • Par4all compiler - Generates OpenCL, CUDA or OpenMP parallel code from (sequenciel) C code.




  • MPI-RT 1.1 spec. - real-time message-passing-interface v1.1 (an implementation doesn't exist !?)




  • Unified Parallel C - UPC is an extension of the C programming language designed for high-performance computing.
  • GCC-UPC - GNU implementation of the UPC language spec.


  • CSP For Posix Threads - ”«Communicating Sequential Processes» is an algebra for analysing the behaviour of concurrent systems … a library … that makes programming with threads much easier.”





see also:


Session handling


Restore application-state and audio/midi connections.

There are at least three different APIs for session handling in linux. They allow to save and restore the state of different applications, including midi and audio connections !

  • JackSession - is kind of basic, requires applications to be restarted
  • Ladish - is advanced, has a concept of storing session-“rooms”
  • NSM - has most of the really useful functions (based on OSC) - does not require apps to be restarted


For more information, visit the projects websites:



Thread management and CPU-affinity in linux

  • there is a tool called schedtool, which allows to “set all CPU scheduling parameters Linux is capable of or display information for given processes.”
  • also to mention: nice and renice tools (part of the “bsdutils” package)
  • and linux API functions: sched_setscheduler(), sched_setaffinity()


Related MAN-Pages:


Related Articles:



Part of an Answer at stackoverflow.com :

sched_setaffinity() simply tells the scheduler which 
CPUs is that process/thread allowed to run on, then calls 
for a re-schedule.

The scheduler actually runs on each one of the CPUs, so it 
gets a chance to decide what task to execute next on 
that particular CPU.

If you're interested in how you can actually call some code 
on other CPUs, I suggest you take a look at 
smp_call_function_single(). In case we want to call something 
on another CPU, this calls generic_exec_single(). 
The latter simply adds the function to the target CPU's 
call queue and forces a reschedule through some 
IPI stuff (if the queue was empty).

Bottom line is: there no actual SMP variant of 
the _jmp_ instruction. Instead, code running on other CPUs 
cooperates in order to accomplish the task.




GUI libraries - create graphical user interfaces

Comment: additional info would be nice, for example: does it support skins/themes, download size, is it for graphics only or a whole framework…

2-dimensional

Juce (framework) - Juce and Juced

Sfml - http://www.sfml-dev.org/features.php .

Lgi - http://www.memecode.com/lgi.php

OpenFrameworks (framework) - http://www.openframeworks.cc/about .

Fox toolkit - http://www.fox-toolkit.org/ .

Qt (framework) - http://qt.nokia.com/products .

Gtk - http://www.gtk.org/ .

Fltk - http://www.fltk.org/ .

WxWidgets - http://www.wxwidgets.org/ .

Ultimate++ - http://ultimatepp.org/www$uppweb$overview$en-us.html - Cpp cross-platform Framework .

gtkIOStream - http://sourceforge.net/projects/gtkiostream/ - Inline headers for C++ iostream style GTK GUI building .

with 3-dimensional capabilities

Targeted at embedded devices

Disko - http://www.diskohq.com/ (embedded library with OpenGL support)

MeeGo - http://meego.com/about (for embedded)

Moblin - http://moblin.org/about-moblin Moblin joined MeeGo

MoSync - http://www.mosync.com/ - Cpp, for Smartphones etc.

Kivy - http://kivy.org/ - Python library for rapid development, innovative ui, multi-touch apps

Tizen - https://www.tizen.org/ - “Environment for application developers, based on HTML5. ”

.

SVG (vector graphics)

AGG Anti Grain Geometry - http://www.antigrain.com/

GGI - http://www.ggi-project.org/ - graphic-system abstraction layer

Cairo Graphics - http://cairographics.org/

Batik - http://xmlgraphics.apache.org/batik/

LibSugar - http://libsugar.sourceforge.net/

librsvg - http://librsvg.sourceforge.net/

.

misc libraries

OpenGL Mathematics library (GLM) - http://glm.g-truc.net/about.html

CML (Configurable Math Library) - http://cmldev.net/?page_id=7

TLSF - http://rtportal.upv.es/rtmalloc/ - for real-time memory allocation

.

.

wiki/programming_libraries.txt · Last modified: 2017/01/30 03:59 by flatmax