Az audio API-k általában két alapvető megoldás valamelyikét használják:
"blocking" - ilyenkor az alkalmazás szempontjából a hang kimenet egyszerű file íráshoz hasonlóan működik, és ha megtelt a puffer, akkor várakozik, amíg újra van szabad hely. Ilyen vagy hasonló elven működik az OSS (/dev/dsp), az ALSA, és Windowson az MME (régi waveOut* interface, ami már a 16 bites verziókban is megtalálható volt).
"callback" - az alkalmazás definiál egy függvényt, ami bizonyos időközönként meghívásra kerül a főprogramhoz képest külön szálon, és fel kell töltenie egy puffert. Ezt a megoldást használja például az SDL és a JACK.
Az ep128emu által használt PortAudio mindkettőt ismeri, de a "blocking" mód (amit egyébként az emulátor preferál) csak bizonyos API-k esetén elérhető.
Ha az API a programnak nem megfelelő elven működik, akkor cirkuláris pufferrel konvertálható a másik megoldásra. Erre (callback -> blocking konverzió) található példa az ep128emu-ban is a soundio.cpp-ben.
Emulátorban a legegyszerűbb, de nem optimális megoldás a blocking módot használni (vagy emulálni, ha nem elérhető), és csak azzal lassítani az emulációt valós idejű sebességre. Ennek az a hátránya, hogy sok audio API nem tud elég pontosan és nagy felbontással időzíteni, hogy az emulátor futása egyenletes legyen, azaz például ne akadozzon jól láthatóan az 50 Hz-es scrollozás.
Ezért az ep128emu (soundio.cpp) tartalmaz egy olyan trükköt blocking módban (ALSA, OSS, MME, és WASAPI), hogy gettimeofday/usleep (illetve Windowson QueryPerformanceCounter/Sleep) megoldással időzít, de a sebességet dinamikusan változtatja az audio puffer töltöttségétől függően. Ha ez 50% körüli, akkor normál 100% sebességgel próbál futni, ha valamivel több/kevesebb van a pufferben, akkor kissé (először csak +/-5, aztán 10% mértékben) lassul/gyorsul, extrém esetben - ha tele vagy majdnem üres a puffer - pedig teljesen az audio kimenet szabályozza a sebességet. Ez a soundio.cpp-ben a 250. sor után található. Így a sebesség átlagban követi a hang kimenetet, de a nagy felbontású időzítés előnyével.
Probléma még, hogy a DAVE sokkal magasabb frekvencián fut, mint amit a hangkártyák támogatnak, ezért a kimenetet konvertálni kell. Erre az ep128emu-ban az snd_conv.cpp tartalmaz egy viszonylag rossz (de gyors) és egy jó minőségű megoldást, amelyek értelemszerűen a "high quality" hang beállítás két értékének felelnek meg. A konverzió alapértelmezés szerint 500 kHz-ről (250 és 166 2/3 kHz legkisebb közös többszöröse) történik a választott mintavételezési frekvenciára, például 48 kHz-re. Található a konverterben még felüláteresztő szűrő is, ugyanis a DAVE kimenete mindig pozitív (pl. maximális hangerejű négyszögjel 0 és 63 között váltakozik), ezért a DC offszetet el kell távolítani.