The Broadway Audio System

The Broadway Audio System

Ray Tice (ray@x.org)
Mark Welch (mw@x.org)
X Consortium Inc.

February 13, 1996


Introduction: Problem Statement


Goals


Non-goal


Targeted applications


Agenda


Achieve goals by


Leverage existing and future technologies...

...without requiring them


Technologies included


Technologies excluded in first release


Design philosophy


Architecture


Library responsibilities


Server responsibilities


Internet considerations

(Figure)


Object model


Object model


Analysis of object model


Client side overview


Example: Playing from file


Example: Playing from file

(Figure)


Server side: Devices


Ports


Formats


Example: Playing from file

(Figure)


Example: Record/playback

(Figure)


Buckets & waveforms

(Figure)


Other housekeeping


Time model


Time model - Transport delay

(Figure)


Time model - Transport delay

(Figure)


Time model - Transport delay

(Figure)


Synchronization with other media


API


API: Connections

              connection = XaOpenAudio(networkID, 
                     argcInOut, argvInOut, 
                     errStringLength, errString);
              XaCloseAudio(connection);


API: Object manipulation

              tag = XaCreate(connection, 
                     objectClass, attribute, value, 
                     ... );
              XaDestroy(connection, tag);


API: Object manipulation

              XaSet(connection, tag, 
                     asyncCallbackFunc, 
                     asyncCallbackData, attribute, 
                     value, ...);
              XaGet(connection, tag, 
                     asyncCallbackFunc, 
                     asyncCallbackData, attribute, 
                     &value, ...);


API: Audio data transfer

              XaRead(connection, port, atTime, 
                     refTime, minBits, maxBits, 
                     &bitsRead, &leftPad, buff);
              XaWrite(connection, port, atTime, 
                     refTime, numBits, leftPad, buff);


API:
Synchronous vs. asynchronous

              XaGet(connection, object, NULL, 
                     NULL, ...);
              XaGet(connection, object, 
                     callbackFunc, callbackData, ...);


API: Other calls


API: Other calls


Example: Play samples from buffer

              conn = XaOpenAudio("", NULL, NULL, 
                     256, errString);
              format = XaFindObject(conn, 
                     XaCformat, XaAname, XaNformatCD);
              port = XaCreate(conn, XaCport, 
                     XaNinputBuffer, XaTnone, XaNformat, 
                     format, NULL);
              XaWrite(conn, port, 0, XaNnowTime, 
                     numBits, leftPad, audioBuff);
              XaClose(conn);


Example: Play samples from file

              conn = XaOpenAudio("", NULL, NULL, 
                     256, errString);
              file = XaCreate(conn, XaCfile, 
                     XaApathName, 3/users/mw/
                     myFile.au2);
              player = XaCreate(conn, 
                     XaCfilePlayer, XaNfile, file, 
                     NULL);
              XaMainLoop();


Security


Audio Manager


Events


Creating an event handler (API)

              handler = XaCreate(connection, 
                     XaCeventHandler, 
                     XaNhandlerProc, (XaArgVal) myFunc, 
                     XaNhandlerData, (XaArgVal) myData, 
                     XaNtargetObject, 
                     myFavoriteClassObject, 
                     XaNeventType, XaAcreate, 
                     NULL);


Extensions


Implementing new encodings

(Figure)


Implementing new encodings

(Figure)


Futures


Status


The Broadway Audio System

Ray Tice (ray@x.org)

Mark Welch (mw@x.org)

Postscript version of slides:

ftp://ftp.x.org/contrib/conferences/XTech96/audio_slides.ps