Planned for 0.2.9: ================== * some data is required for each protocol handler or Bad Things Happen. In the immortal words of John Parker, "So what, big deal." * factor out monitor_write internals, and recorder_write, and filter_write into a write_player, and conditionally swap data on those writes. * function pointers in mix.c for mix_in (add) and translate (copy): mix_funcs[MAX] = { mix_to_format, mix_from_format, clip_format, ... }; set function when creating player. update if a filter is added or removed * volume control (setting of left/right volume) on samples and streams modify clients volume or mute so that client can kill it.. etc.. so in effect an audio manager could be written play_sample_pan( int sample_id, int left_volume, int right_volume ); * get rid of hard coded 44100's in esdlib.c * make all protocols return an int indicating success/failure at a minimum NOTE: this will break protocol! * change audio device with esdctl??? on the fly??? * esd_rename_stream( int stream_id, char *name ); ??? * reorganize source files into esdlib, esd, utils subdirectories. ??? * support 8 bit u-law format output data ??? Planned for later: ================== make the reading/mixing process a separate thread from the client protocol parsing thread. command line parameter for the server's fragment value kill_sample( int sample_id ); One other nice feature of the BeOS streaming model is that you can choose where your application should be positioned in the stream (beginning | end | don't care). Could be done with some extra parameters to esd_play_stream()..? add a queue of requests to the sample clients, and watch for kills? mmap the data into the sound card? -- Linux only [raster!raster@trode.redhat.com] actuyally dump like 1k or whatever - tell soundcard to start at the first 1kb - while readihg this (the soundcard) write the 2nd kb - then the 3rd etc... just have to keep in step with the card and a little ahead of it... but only just enough to minimize lag. it's also rather fiddly wiht cpu usage spikes.. play sample, loop sample, end sample: int play_tri_sample( start, loop, end ) { play(start); loop(loop); return end; } later: int finish_tri_sample( end ) { play(end); return ?;} allow a "volume envelope" sample to be paired witht the sample optionally - perhaps at a lower sampling rate and maybe 8 or 4 bits.. this sould in addition to "set lr volume for smapl/stream now" functions... :) so that would be something like (format determined by sample uploaded): modulate_sample( int play_sample, int modulation_sample ); allow server to run mono. pitch adjust on samples? playback samples at different rates?