| 
126
 | 
     1 ---- How to write your own audio driver for ft2play ----
 | 
| 
 | 
     2 
 | 
| 
 | 
     3 1) Include the header "../../pmp_mix.h"
 | 
| 
 | 
     4 
 | 
| 
 | 
     5 2) Implement the following functions using your audio API of choice:
 | 
| 
 | 
     6 
 | 
| 
 | 
     7   void lockMixer(void); // waits for the current mixing block to finish and disables further mixing
 | 
| 
 | 
     8   void unlockMixer(void); // enables mixing again
 | 
| 
 | 
     9   bool openMixer(int32_t mixingFrequency, int32_t mixingBufferSize); // 8000..96000, 256..8192 (true if ok, false if fail)
 | 
| 
 | 
    10   void closeMixer(void);
 | 
| 
 | 
    11 
 | 
| 
 | 
    12 3) When the audio API is requesting samples, make a call to mix_UpdateBuffer(), f.ex.:
 | 
| 
 | 
    13 
 | 
| 
 | 
    14   mix_UpdateBuffer((int16_t *)stream, len / 4);
 | 
| 
 | 
    15   
 | 
| 
 | 
    16 4) Make your own preprocessor define (f.ex. AUDIODRIVER_ALSA) and pass it to the compiler during compilation
 | 
| 
 | 
    17    (also remember to add the correct driver .c file to the compilation script)
 | 
| 
 | 
    18 
 | 
| 
 | 
    19 5) In "pmplay.h", insert your preprocessor define and include in the "AUDIO DRIVERS" #ifdef chain and
 | 
| 
 | 
    20    include your audio driver header in there.
 | 
| 
 | 
    21    
 | 
| 
 | 
    22 NOTE:
 | 
| 
 | 
    23   lockMixer() should be implemented in a way where you wait until the mix_UpdateBuffer() call has finished (important),
 | 
| 
 | 
    24   then you block further calls to mix_UpdateBuffer() until the mixer is unlocked again.
 | 
| 
 | 
    25   You should not send zeroes to the audio device while it's locked, as the lock/unlock pairs are usually called within
 | 
| 
 | 
    26   a very short time frame anyway.
 | 
| 
 | 
    27   
 | 
| 
 | 
    28 -------------------------------------------------------
 | 
| 
 | 
    29 
 | 
| 
 | 
    30 You can look at audiodrivers/sdl/sdldriver.c if you need some references...
 |