OpenBSD Audio Subsystem Graph

Posted on January 29, 2017

I was curious to know the OpenBSD Audio Subsystem, specifically all the components between user applications and hardware), after some “study” I created an ASCII graph to describe it.

We could split the subsystem into 2 layers:

  • sndio implements and provides a library for the user space layer
  • OpenBSD audio/midi drivers implement the kernel space layer.

The links are below.

   +------+     +------+             +------+
   | app1 |     | app2 |    ....     | appN |
   +------+     +------+             +------+
      |            |                     |
      v            v                     v
+-----------------------------------------------+
|                    sndio.h                    |
|           sio_open(3)/mio_open(3)             |
| interface to audio devices and MIDI streams   |
+-----------------------------------------------+
       |                |              |
       |                v              |
       |    +-----------------------+  |
       |    |        sndiod(8)      |  |
       |    |   audio/midi server   |  |
       |    +-----------------------+  |
       |        |                |     |  User
       |        |                |     |  space
-------------------------------------------------
       |        |                |     |  Kernel
       |        |                |     |  space
       v        v                v     v
   +--------------------+   +-------------+
   |     audio(4)       |   |   midi(4)   |
   | device-independent |   | raw device  |
   |   driver layer     |   | independent |
   +--------------------+   |  interface  |
              |             +-------------+
              |                   |
              v                   v
       +---------------------------------+
       |    device dependent driver      |
       |   (azalia(4), ac97(4), ...)     |
       +---------------------------------+
                        |
                        v
    +--------------------------------------+
    |             audio or MIDI            |
    |                                      |
    |               Hardware               |
    +--------------------------------------+

Links:

  • sndio official page
  • sndio(7) interface to audio and MIDI
  • sio_open(3) sndio interface to audio devices
  • mio_open(3) sndio interface to MIDI streams
  • sndiod(8) audio/MIDI server
  • audio(4) device-independent audio driver layer
  • midi(4) raw device independent interface to MIDI ports
  • Some hardware-specific driver:
    • azalia(4) generic High Definition Audio device
    • ac97(4) generic AC’97 codec driver