Soundbuffer unter Windows



  • Hi,

    hat jemand einen kleinen Beispielcode wie ich unter Windows mit Winapi einen Soundbuffer abspielen kann? Ich will keine Effekte oder Surround oder sonstigen automatischen Schnickschnack drinn haben sonder meine Wellenformen/Samples und Effekte selbst erzeugen. Also alles so lowlevel wie möglich. Kann auch DirectX dabei sein wenn es denn sein muss.



  • Die Lowlevel-Variante waere einen loopenden Sample als Ringpuffer zu erzeugen der gerade so lang ist wie die tolerierbare Latenzzeit und regelmaessig den Bereich bis zur gerade aktuellen Abspielposition mit neuen Daten zu fuellen.

    Format erzeugen:

    HWAVEOUT handle;
       WAVEFORMATEX wf={
          WAVE_FORMAT_PCM,
          channels,
          samplerate,
          samplerate * channels * bits >> 3,
          channels * bits >> 3,
          bits,
          0 };
       waveOutOpen(&handle, WAVE_MAPPER, &wf, 0, 0, 0);
    

    Sample erzeugen:

    char *buffer= new char[size];
       WAVEHDR wave= {
          buffer,
          size,
          0,
          0,
          WHDR_BEGINLOOP | WHDR_ENDLOOP,
          -1,
          0,
          0 };
       hr = waveOutPrepareHeader(handle, &wave, sizeof(WAVEHDR));
    

    Sample abspielen:

    waveOutWrite(handle, &wave, sizeof(WAVEHDR));
    

    Sampleposition auslesen:

    mmt.wType = TIME_BYTES;
       waveOutGetPosition(handle, &mmt, sizeof(MMTIME));
    


  • Super dankeschön genau das was ich gesucht habe.


Log in to reply