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...
|