annotate win95kggui/dep/ft2play/audiodrivers/how_to_write_drivers.txt @ 133:0d8eabdd12ab default tip

create: write H:MM:SS timestamps, add option to fill with gaussian-blur instead of black many albums are longer than one hour so writing H:MM:SS is a necessity. if anything there will just be verbose info that isn't important for my use-case. however the gaussian-blur is simply broken. It works, and it plays locally just fine, but YouTube in particular elongates the video to fit the full width. I'm not entirely sure why it does this, but it makes it useless and ugly.
author Paper <paper@tflc.us>
date Sat, 03 Jan 2026 20:25:38 -0500
parents 8e4ee43d3b81
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
126
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1 ---- How to write your own audio driver for ft2play ----
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3 1) Include the header "../../pmp_mix.h"
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5 2) Implement the following functions using your audio API of choice:
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
7 void lockMixer(void); // waits for the current mixing block to finish and disables further mixing
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
8 void unlockMixer(void); // enables mixing again
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9 bool openMixer(int32_t mixingFrequency, int32_t mixingBufferSize); // 8000..96000, 256..8192 (true if ok, false if fail)
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10 void closeMixer(void);
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12 3) When the audio API is requesting samples, make a call to mix_UpdateBuffer(), f.ex.:
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14 mix_UpdateBuffer((int16_t *)stream, len / 4);
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
15
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16 4) Make your own preprocessor define (f.ex. AUDIODRIVER_ALSA) and pass it to the compiler during compilation
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
17 (also remember to add the correct driver .c file to the compilation script)
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
18
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19 5) In "pmplay.h", insert your preprocessor define and include in the "AUDIO DRIVERS" #ifdef chain and
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20 include your audio driver header in there.
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22 NOTE:
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23 lockMixer() should be implemented in a way where you wait until the mix_UpdateBuffer() call has finished (important),
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
24 then you block further calls to mix_UpdateBuffer() until the mixer is unlocked again.
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
25 You should not send zeroes to the audio device while it's locked, as the lock/unlock pairs are usually called within
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
26 a very short time frame anyway.
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
27
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
28 -------------------------------------------------------
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
29
8e4ee43d3b81 remove submodules
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
30 You can look at audiodrivers/sdl/sdldriver.c if you need some references...