Jeglicher Soundoutput ist gepuffert. Du füllst also einen Speicherbereich fester Größer mit deinen Sounddaten (RAW PCM) z.B. mit einer Sinuswelle und übergibst diesen dann an den Treiber, bzw. meist ist es andersherum, DirectX/fmod, etc. rufen eine Callback-funktion von dir auf, übergeben dieser einen Pointer auf einen Buffer und dessen Länge, Du kannst darin beliebiges Zeug reinschreiben, und wenn die Funktion beendet wurde, kümmert sich der Treiber darum, diesen Buffer nahtlos an den vorher abgespielten an die Soundkarte zu übertragen.
Dazu findest Du hier einige Beispiele, die zwar fmod nutzen, aber das Buffer-befüllen ist wohl überall dasselbe. http://fmod.2mal2mal.de , dort insbesondere SineMouse als das einfachste. Aber auch Danilos oben erwähntes Beispiel nutzt einen solchen Buffer. Wenn man da übrigens einfach Zufallswerte reinschreibt, gibt es ein lautes Rauschen.
@traumatic
weitere Fragen:
a) dann greifen also die WinMM-Funktion intern nicht auf DirectX zu, weswegen WinMM dann auch auf Windows-Rechnern ohne DirectX läuft ?
b) Was ist mit MCI-commands? Sind das einfach nur 'Wrapperfunktionen' für kompliziertere WinMM-Befehle ? Oder haben die wiederum einen eigenen Treiber ? Oder greifen die auf DirectSound zu ?
c) Mit MCI kann man ja ohne weiteres sämtliche Formate abspielen, für die Treiber auf dem Anwenderrechner installiert sind (selbst MIDI und Videos). Gilt selbiges für WinMM (Vermutung: wohl nicht. Demnach wäre MCI ggf. (wenn b zutrifft) ein WinMM vorgeschaltetes Interface, welches sich zusätzlich um die Konvertierung von Fremdformaten kümmert).
d) Bietet DirectX direktes MP3/Ogg-Abspielen, bzw. sämtliche anderen installierten Formate ?
e) ASIO-Treiber ermöglichen ja enorm geringe Latenz- und Reaktionszeiten. (Sowohl beim IN->OUT, als auch generell beim Abspielen durch kleine Buffer), und setzen sogar Hardwareanforderungen an die Soundkarte, weswegen nicht jede Karte ASIO kann. Aber ist ASIO - sofern vorhanden - für den Programmierer auch 'nur' eine API, der man Buffer zusenden kann ?
f) Verfolgt WDM denselben Ansatz wie ASIO ? Oder ist WDM eine Erweiterung davon? Oder ganz woanders für gedacht ?
g) Danke!
@DarkDragon
Auch jau, OpenAL gibt es ja auch noch!