Audio output moeglichst portierbar programmieren

dettus

Bicycle User
Ich habe mal wieder eine Idee fuer ein neues GTK-Projekt, fuer das brauche ich audio output.
(Ja, GTK, nichts anderes. ;) )
Auch wenn ich primaer auf OpenBSD programmiere, wuerde ich mein Projekt hinterher auf andere Betriebssysteme wie z.B. Linux portieren.

Hat einer von euch einen Tipp, wie ich am Besten eine Audioschnittstelle programmiere, ohne mir hinterher in den Fuss zu schiessen?
Oder kennt einer von Euch ein EINFACHES programm, was das schon leistet, bei dem ich spicken kann?


MIr schwebt vor, dass ich eine API habe, welche in regelmaessigen Abstaenden PCM-Samples bekommt, und diese in ihrem eigenen Thread Fifo-maessig an sndio/pulseaudio weiterschubst.
(Vielleicht noch ein "flush", oder "reset", bei dem sofort ruhig ist)
 

dettus

Bicycle User
Typisch...
Kaum verzweifelt man, kaum fragt man, kommt man drauf. ;)
libout123 scheint das zu sein, was ich brauche!
Code:
// this is a short example to play a sine wave with libout123
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <out123.h>
#include <math.h>

signed short pcm[96000];
int main()
{
        int i;
        out123_handle *handle;
        int err;
        for (i=0;i<48;i++)
        {
                double d;
                d=16384.0*sin(2*M_PI/48*(double)i);

                pcm[2*i+0]=(signed short)d;
                pcm[2*i+1]=(signed short)d;
        }
        for (i=96;i<96000;i++)
        {
                pcm[i]=pcm[i%96];
        }
        handle=out123_new();
        out123_open(handle,NULL,NULL);
        out123_start(handle,48000,2,208);       // TODO: 48000 hz, 2 channels(stereo), 208= signed 16 bit . but why 208?
        out123_play(handle,pcm,96000*sizeof(short));
}

Compilieren kann man das mit
Code:
gcc -c -o outtest.o outtest.c `pkg-config -cflags libout123`
gcc -o outtest.app outtest.o `pkg-config -libs libout123` -lm
 
Oben