From 7b0104e9a122a8b935dd53e6a92988db34f158c3 Mon Sep 17 00:00:00 2001 From: terminx Date: Fri, 12 Jan 2007 22:42:19 +0000 Subject: [PATCH] JFAud git-svn-id: https://svn.eduke32.com/eduke32@452 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/source/game.c | 46 +- polymer/eduke32/source/jfaud_sounds.cpp | 2 +- polymer/jfaud/Makefile | 220 +++ polymer/jfaud/Makefile.deps | 35 + polymer/jfaud/Makefile.msvc | 166 +++ polymer/jfaud/Makefile.watcom | 173 +++ polymer/jfaud/README | 9 + polymer/jfaud/inc/buffer.hpp | 17 + polymer/jfaud/inc/cda.hpp | 24 + polymer/jfaud/inc/file.hpp | 25 + polymer/jfaud/inc/jfaud.hpp | 159 ++ polymer/jfaud/inc/memfile.hpp | 101 ++ polymer/jfaud/inc/mixer.hpp | 89 ++ polymer/jfaud/inc/pcmbuffer.hpp | 37 + polymer/jfaud/inc/soundfile.hpp | 26 + polymer/jfaud/inc/sysdefs.h | 146 ++ polymer/jfaud/inc/waveformfile.hpp | 46 + polymer/jfaud/makemsc.bat | 2 + polymer/jfaud/mpadec/COPYING | 504 +++++++ polymer/jfaud/mpadec/Makefile | 34 + polymer/jfaud/mpadec/Makefile.msvc | 15 + polymer/jfaud/mpadec/Makefile.watcom | 18 + polymer/jfaud/mpadec/README | 13 + polymer/jfaud/mpadec/config.h | 109 ++ polymer/jfaud/mpadec/layer1.c | 140 ++ polymer/jfaud/mpadec/layer2.c | 221 +++ polymer/jfaud/mpadec/layer3.c | 994 +++++++++++++ polymer/jfaud/mpadec/libmpadec.dsp | 120 ++ polymer/jfaud/mpadec/mp3dec.c | 295 ++++ polymer/jfaud/mpadec/mp3dec.h | 59 + polymer/jfaud/mpadec/mp3dec_internal.h | 49 + polymer/jfaud/mpadec/mpadec.c | 793 ++++++++++ polymer/jfaud/mpadec/mpadec.def | 26 + polymer/jfaud/mpadec/mpadec.h | 134 ++ polymer/jfaud/mpadec/mpadec.wlib | 23 + polymer/jfaud/mpadec/mpadec_internal.h | 211 +++ polymer/jfaud/mpadec/synth.c | 1364 ++++++++++++++++++ polymer/jfaud/mpadec/tables.c | 821 +++++++++++ polymer/jfaud/processdeps.pl | 25 + polymer/jfaud/src/almixer.cpp | 793 ++++++++++ polymer/jfaud/src/almixer.hpp | 113 ++ polymer/jfaud/src/cda_null.cpp | 42 + polymer/jfaud/src/cda_null.hpp | 25 + polymer/jfaud/src/cda_sdl.cpp | 118 ++ polymer/jfaud/src/cda_sdl.hpp | 27 + polymer/jfaud/src/cda_win32.cpp | 304 ++++ polymer/jfaud/src/cda_win32.hpp | 36 + polymer/jfaud/src/crc32.cpp | 103 ++ polymer/jfaud/src/crc32.hpp | 18 + polymer/jfaud/src/dynlib.cpp | 96 ++ polymer/jfaud/src/dynlib.hpp | 16 + polymer/jfaud/src/file.cpp | 39 + polymer/jfaud/src/jfaud.cpp | 878 +++++++++++ polymer/jfaud/src/jfaudtest.cpp | 511 +++++++ polymer/jfaud/src/log.h | 6 + polymer/jfaud/src/midibuffer.cpp | 96 ++ polymer/jfaud/src/midibuffer.hpp | 29 + polymer/jfaud/src/midifile.cpp | 80 + polymer/jfaud/src/midifile.hpp | 35 + polymer/jfaud/src/midifile_smf.cpp | 112 ++ polymer/jfaud/src/midifile_smf.hpp | 35 + polymer/jfaud/src/midiseq.cpp | 472 ++++++ polymer/jfaud/src/midiseq.hpp | 97 ++ polymer/jfaud/src/midisynth.cpp | 10 + polymer/jfaud/src/midisynth.hpp | 32 + polymer/jfaud/src/midisynth_win32.cpp | 485 +++++++ polymer/jfaud/src/midisynth_win32.hpp | 75 + polymer/jfaud/src/mixer.cpp | 39 + polymer/jfaud/src/nullmixer.cpp | 66 + polymer/jfaud/src/nullmixer.hpp | 66 + polymer/jfaud/src/pcmbuffer.cpp | 89 ++ polymer/jfaud/src/softwaremixer.cpp | 832 +++++++++++ polymer/jfaud/src/softwaremixer.hpp | 142 ++ polymer/jfaud/src/soundcache.cpp | 436 ++++++ polymer/jfaud/src/soundcache.hpp | 127 ++ polymer/jfaud/src/soundfile.cpp | 30 + polymer/jfaud/src/stdfile.cpp | 98 ++ polymer/jfaud/src/stdfile.hpp | 27 + polymer/jfaud/src/watcomhax/cerrno | 1 + polymer/jfaud/src/watcomhax/cmath | 1 + polymer/jfaud/src/watcomhax/cstdarg | 1 + polymer/jfaud/src/watcomhax/cstdio | 1 + polymer/jfaud/src/watcomhax/cstdlib | 1 + polymer/jfaud/src/watcomhax/cstring | 1 + polymer/jfaud/src/watcomhax/ctime | 1 + polymer/jfaud/src/waveformfile.cpp | 146 ++ polymer/jfaud/src/waveformfile_aiff.cpp | 187 +++ polymer/jfaud/src/waveformfile_aiff.hpp | 44 + polymer/jfaud/src/waveformfile_au.cpp | 142 ++ polymer/jfaud/src/waveformfile_au.hpp | 50 + polymer/jfaud/src/waveformfile_flac.cpp | 385 +++++ polymer/jfaud/src/waveformfile_flac.hpp | 74 + polymer/jfaud/src/waveformfile_mpeg.cpp | 389 +++++ polymer/jfaud/src/waveformfile_mpeg.hpp | 57 + polymer/jfaud/src/waveformfile_oggvorbis.cpp | 263 ++++ polymer/jfaud/src/waveformfile_oggvorbis.hpp | 53 + polymer/jfaud/src/waveformfile_raw.cpp | 123 ++ polymer/jfaud/src/waveformfile_raw.hpp | 42 + polymer/jfaud/src/waveformfile_riffwave.cpp | 167 +++ polymer/jfaud/src/waveformfile_riffwave.hpp | 43 + polymer/jfaud/src/waveformfile_voc.cpp | 303 ++++ polymer/jfaud/src/waveformfile_voc.hpp | 108 ++ polymer/jfaud/src/waveout.cpp | 10 + polymer/jfaud/src/waveout.hpp | 29 + polymer/jfaud/src/waveout_dsound.cpp | 385 +++++ polymer/jfaud/src/waveout_dsound.hpp | 40 + polymer/jfaud/src/waveout_sdl.cpp | 121 ++ polymer/jfaud/src/waveout_sdl.hpp | 31 + polymer/jfaud/testsnd/fishpolk.mid | Bin 0 -> 4043 bytes polymer/jfaud/testsnd/jt_strng.xm | Bin 0 -> 14622 bytes polymer/jfaud/testsnd/pop.wav | Bin 0 -> 9886 bytes polymer/jfaud/testsnd/relaxation.aiff | Bin 0 -> 498382 bytes polymer/jfaud/testsnd/relaxation.au | Bin 0 -> 498206 bytes polymer/jfaud/testsnd/relaxation.flac | Bin 0 -> 280278 bytes polymer/jfaud/testsnd/relaxation.mp3 | Bin 0 -> 92288 bytes polymer/jfaud/testsnd/relaxation.ogg | Bin 0 -> 56166 bytes polymer/jfaud/testsnd/relaxation.voc | Bin 0 -> 498195 bytes polymer/jfaud/testsnd/relaxation.wav | Bin 0 -> 498446 bytes polymer/jfaud/testsnd/saviour.ogg | Bin 0 -> 59956 bytes polymer/jfaud/testsnd/sin440-96s2.wav | Bin 0 -> 384118 bytes 120 files changed, 17103 insertions(+), 22 deletions(-) create mode 100755 polymer/jfaud/Makefile create mode 100755 polymer/jfaud/Makefile.deps create mode 100755 polymer/jfaud/Makefile.msvc create mode 100755 polymer/jfaud/Makefile.watcom create mode 100755 polymer/jfaud/README create mode 100755 polymer/jfaud/inc/buffer.hpp create mode 100755 polymer/jfaud/inc/cda.hpp create mode 100755 polymer/jfaud/inc/file.hpp create mode 100755 polymer/jfaud/inc/jfaud.hpp create mode 100755 polymer/jfaud/inc/memfile.hpp create mode 100755 polymer/jfaud/inc/mixer.hpp create mode 100755 polymer/jfaud/inc/pcmbuffer.hpp create mode 100755 polymer/jfaud/inc/soundfile.hpp create mode 100755 polymer/jfaud/inc/sysdefs.h create mode 100755 polymer/jfaud/inc/waveformfile.hpp create mode 100755 polymer/jfaud/makemsc.bat create mode 100755 polymer/jfaud/mpadec/COPYING create mode 100755 polymer/jfaud/mpadec/Makefile create mode 100755 polymer/jfaud/mpadec/Makefile.msvc create mode 100755 polymer/jfaud/mpadec/Makefile.watcom create mode 100755 polymer/jfaud/mpadec/README create mode 100755 polymer/jfaud/mpadec/config.h create mode 100755 polymer/jfaud/mpadec/layer1.c create mode 100755 polymer/jfaud/mpadec/layer2.c create mode 100755 polymer/jfaud/mpadec/layer3.c create mode 100755 polymer/jfaud/mpadec/libmpadec.dsp create mode 100755 polymer/jfaud/mpadec/mp3dec.c create mode 100755 polymer/jfaud/mpadec/mp3dec.h create mode 100755 polymer/jfaud/mpadec/mp3dec_internal.h create mode 100755 polymer/jfaud/mpadec/mpadec.c create mode 100755 polymer/jfaud/mpadec/mpadec.def create mode 100755 polymer/jfaud/mpadec/mpadec.h create mode 100755 polymer/jfaud/mpadec/mpadec.wlib create mode 100755 polymer/jfaud/mpadec/mpadec_internal.h create mode 100755 polymer/jfaud/mpadec/synth.c create mode 100755 polymer/jfaud/mpadec/tables.c create mode 100755 polymer/jfaud/processdeps.pl create mode 100755 polymer/jfaud/src/almixer.cpp create mode 100755 polymer/jfaud/src/almixer.hpp create mode 100755 polymer/jfaud/src/cda_null.cpp create mode 100755 polymer/jfaud/src/cda_null.hpp create mode 100755 polymer/jfaud/src/cda_sdl.cpp create mode 100755 polymer/jfaud/src/cda_sdl.hpp create mode 100755 polymer/jfaud/src/cda_win32.cpp create mode 100755 polymer/jfaud/src/cda_win32.hpp create mode 100755 polymer/jfaud/src/crc32.cpp create mode 100755 polymer/jfaud/src/crc32.hpp create mode 100755 polymer/jfaud/src/dynlib.cpp create mode 100755 polymer/jfaud/src/dynlib.hpp create mode 100755 polymer/jfaud/src/file.cpp create mode 100755 polymer/jfaud/src/jfaud.cpp create mode 100755 polymer/jfaud/src/jfaudtest.cpp create mode 100755 polymer/jfaud/src/log.h create mode 100755 polymer/jfaud/src/midibuffer.cpp create mode 100755 polymer/jfaud/src/midibuffer.hpp create mode 100755 polymer/jfaud/src/midifile.cpp create mode 100755 polymer/jfaud/src/midifile.hpp create mode 100755 polymer/jfaud/src/midifile_smf.cpp create mode 100755 polymer/jfaud/src/midifile_smf.hpp create mode 100755 polymer/jfaud/src/midiseq.cpp create mode 100755 polymer/jfaud/src/midiseq.hpp create mode 100755 polymer/jfaud/src/midisynth.cpp create mode 100755 polymer/jfaud/src/midisynth.hpp create mode 100755 polymer/jfaud/src/midisynth_win32.cpp create mode 100755 polymer/jfaud/src/midisynth_win32.hpp create mode 100755 polymer/jfaud/src/mixer.cpp create mode 100755 polymer/jfaud/src/nullmixer.cpp create mode 100755 polymer/jfaud/src/nullmixer.hpp create mode 100755 polymer/jfaud/src/pcmbuffer.cpp create mode 100755 polymer/jfaud/src/softwaremixer.cpp create mode 100755 polymer/jfaud/src/softwaremixer.hpp create mode 100755 polymer/jfaud/src/soundcache.cpp create mode 100755 polymer/jfaud/src/soundcache.hpp create mode 100755 polymer/jfaud/src/soundfile.cpp create mode 100755 polymer/jfaud/src/stdfile.cpp create mode 100755 polymer/jfaud/src/stdfile.hpp create mode 100755 polymer/jfaud/src/watcomhax/cerrno create mode 100755 polymer/jfaud/src/watcomhax/cmath create mode 100755 polymer/jfaud/src/watcomhax/cstdarg create mode 100755 polymer/jfaud/src/watcomhax/cstdio create mode 100755 polymer/jfaud/src/watcomhax/cstdlib create mode 100755 polymer/jfaud/src/watcomhax/cstring create mode 100755 polymer/jfaud/src/watcomhax/ctime create mode 100755 polymer/jfaud/src/waveformfile.cpp create mode 100755 polymer/jfaud/src/waveformfile_aiff.cpp create mode 100755 polymer/jfaud/src/waveformfile_aiff.hpp create mode 100755 polymer/jfaud/src/waveformfile_au.cpp create mode 100755 polymer/jfaud/src/waveformfile_au.hpp create mode 100755 polymer/jfaud/src/waveformfile_flac.cpp create mode 100755 polymer/jfaud/src/waveformfile_flac.hpp create mode 100755 polymer/jfaud/src/waveformfile_mpeg.cpp create mode 100755 polymer/jfaud/src/waveformfile_mpeg.hpp create mode 100755 polymer/jfaud/src/waveformfile_oggvorbis.cpp create mode 100755 polymer/jfaud/src/waveformfile_oggvorbis.hpp create mode 100755 polymer/jfaud/src/waveformfile_raw.cpp create mode 100755 polymer/jfaud/src/waveformfile_raw.hpp create mode 100755 polymer/jfaud/src/waveformfile_riffwave.cpp create mode 100755 polymer/jfaud/src/waveformfile_riffwave.hpp create mode 100755 polymer/jfaud/src/waveformfile_voc.cpp create mode 100755 polymer/jfaud/src/waveformfile_voc.hpp create mode 100755 polymer/jfaud/src/waveout.cpp create mode 100755 polymer/jfaud/src/waveout.hpp create mode 100755 polymer/jfaud/src/waveout_dsound.cpp create mode 100755 polymer/jfaud/src/waveout_dsound.hpp create mode 100755 polymer/jfaud/src/waveout_sdl.cpp create mode 100755 polymer/jfaud/src/waveout_sdl.hpp create mode 100755 polymer/jfaud/testsnd/fishpolk.mid create mode 100755 polymer/jfaud/testsnd/jt_strng.xm create mode 100755 polymer/jfaud/testsnd/pop.wav create mode 100755 polymer/jfaud/testsnd/relaxation.aiff create mode 100755 polymer/jfaud/testsnd/relaxation.au create mode 100755 polymer/jfaud/testsnd/relaxation.flac create mode 100755 polymer/jfaud/testsnd/relaxation.mp3 create mode 100755 polymer/jfaud/testsnd/relaxation.ogg create mode 100755 polymer/jfaud/testsnd/relaxation.voc create mode 100755 polymer/jfaud/testsnd/relaxation.wav create mode 100755 polymer/jfaud/testsnd/saviour.ogg create mode 100755 polymer/jfaud/testsnd/sin440-96s2.wav diff --git a/polymer/eduke32/source/game.c b/polymer/eduke32/source/game.c index 94892391f..a8fa2de7a 100644 --- a/polymer/eduke32/source/game.c +++ b/polymer/eduke32/source/game.c @@ -8211,7 +8211,7 @@ static int stringsort(const char *p1, const char *p2) return Bstrcmp(&p1[0],&p2[0]); } -void setup_rancid_net(char *fn) +static void setup_rancid_net(char *fn) { int i; @@ -8311,7 +8311,7 @@ void setup_rancid_net(char *fn) } } -int loadgroupfiles(char *fn) +static int loadgroupfiles(char *fn) { int tokn; char *cmdtokptr; @@ -9352,7 +9352,7 @@ void sendscore(const char *s) genericmultifunction(-1,(char *)s,strlen(s)+1,5); } -void sendwchoice(void) +static void sendwchoice(void) { int i,l; @@ -9373,7 +9373,7 @@ void sendwchoice(void) } } -void sendplayerupdate(void) +static void sendplayerupdate(void) { int i,l; @@ -10172,9 +10172,9 @@ MAIN_LOOP_RESTART: gameexit(" "); } -char demo_version; +static int demo_version; -static int opendemoread(char which_demo) // 0 = mine +static int opendemoread(int which_demo) // 0 = mine { char d[13]; char ver; @@ -10366,9 +10366,10 @@ void closedemowrite(void) } } -char which_demo = 1; -char in_menu = 0; +static int which_demo = 1; +static int in_menu = 0; +#if 0 typedef struct { signed char avel, horz; @@ -10377,7 +10378,8 @@ typedef struct } oldinput; -oldinput oldrecsync[RECSYNCBUFSIZ]; +static oldinput oldrecsync[RECSYNCBUFSIZ]; +#endif // extern long syncs[]; static long playback(void) @@ -10442,7 +10444,8 @@ RECHECK: { if (foundemo) while (totalclock >= (lockclock+TICSPERFRAME)) { - if (demo_version != BYTEVERSION) +#if 0 + if (demo_version == 116 || demo_version == 117) { if ((i == 0) || (i >= RECSYNCBUFSIZ)) { @@ -10471,6 +10474,7 @@ RECHECK: } } else +#endif { if ((i == 0) || (i >= RECSYNCBUFSIZ)) { @@ -10599,7 +10603,7 @@ RECHECK: static int moveloop() { - long i; + int i; if (numplayers > 1) while (fakemovefifoplc < movefifoend[myconnectindex]) fakedomovethings(); @@ -11389,14 +11393,14 @@ static void doorders(void) void dobonus(char bonusonly) { - short t, tinc,gfx_offset; - long i, y,xfragtotal,yfragtotal; - short bonuscnt; + int t, tinc,gfx_offset; + int i, y,xfragtotal,yfragtotal; + int bonuscnt; int clockpad = 2; char *lastmapname; int32 playerbest = -1; - long breathe[] = + int breathe[] = { 0, 30,VICTORY1+1,176,59, 30, 60,VICTORY1+2,176,59, @@ -11404,7 +11408,7 @@ void dobonus(char bonusonly) 90, 120,0 ,176,59 }; - long bossmove[] = + int bossmove[] = { 0, 120,VICTORY1+3,86,59, 220, 260,VICTORY1+4,86,59, @@ -11742,14 +11746,14 @@ FRAGBONUS: minitext(23,80," NAME KILLS",8,2+8+16+128); for (i=0;i Makefile.deps.new + rm -f $^ +$(obj)/%.dep: $(src)/%.cpp + $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $($(subst .,_,$(notdir $<))_CFLAGS) -MM -c -o $@ $< + +# housekeeping +clean: + -rm -f $(libraryobjs) jfaudtest$(exe) $(obj)/jfaudtest.$o + -cd mpadec && $(MAKE) clean +veryclean: clean + -rm -f $(libfile) + +# for building libmpadec +.PHONY: libmpadec +libmpadec: + cd mpadec && $(MAKE) libmpadec.a $(MPADECBUILD) NBIT=$(NBIT) diff --git a/polymer/jfaud/Makefile.deps b/polymer/jfaud/Makefile.deps new file mode 100755 index 000000000..5e6cfb699 --- /dev/null +++ b/polymer/jfaud/Makefile.deps @@ -0,0 +1,35 @@ +# Automatically generated by processdeps.pl + +$(obj)/jfaud.$o: $(src)/jfaud.cpp $(src)/log.h $(src)/stdfile.hpp $(src)/waveformfile_raw.hpp $(src)/midifile.hpp $(src)/midibuffer.hpp $(src)/cda_null.hpp $(src)/soundcache.hpp $(src)/midisynth.hpp $(src)/midiseq.hpp $(src)/nullmixer.hpp $(src)/almixer.hpp $(src)/softwaremixer.hpp $(src)/midisynth_win32.hpp $(src)/cda_win32.hpp $(src)/waveout_dsound.hpp $(src)/cda_sdl.hpp $(src)/waveout_sdl.hpp $(src)/waveout.hpp $(inc)/sysdefs.h $(inc)/file.hpp $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp $(inc)/cda.hpp $(inc)/mixer.hpp $(inc)/jfaud.hpp +$(obj)/soundcache.$o: $(src)/soundcache.cpp $(src)/log.h $(src)/soundcache.hpp $(src)/crc32.hpp $(inc)/sysdefs.h $(inc)/file.hpp +$(obj)/mixer.$o: $(src)/mixer.cpp $(inc)/mixer.hpp $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/nullmixer.$o: $(src)/nullmixer.cpp $(src)/nullmixer.hpp $(src)/log.h $(inc)/mixer.hpp $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/almixer.$o: $(src)/almixer.cpp $(src)/almixer.hpp $(src)/log.h $(src)/dynlib.hpp $(inc)/mixer.hpp $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/softwaremixer.$o: $(src)/softwaremixer.cpp $(src)/softwaremixer.hpp $(src)/waveout.hpp $(inc)/sysdefs.h $(inc)/mixer.hpp $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/file.$o: $(src)/file.cpp $(inc)/file.hpp $(inc)/sysdefs.h +$(obj)/stdfile.$o: $(src)/stdfile.cpp $(src)/stdfile.hpp $(src)/log.h $(inc)/file.hpp $(inc)/sysdefs.h +$(obj)/pcmbuffer.$o: $(src)/pcmbuffer.cpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/midibuffer.$o: $(src)/midibuffer.cpp $(src)/midibuffer.hpp $(inc)/buffer.hpp +$(obj)/soundfile.$o: $(src)/soundfile.cpp $(src)/midifile.hpp $(src)/midibuffer.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/waveformfile.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/waveformfile.$o: $(src)/waveformfile.cpp $(src)/log.h $(src)/waveformfile_riffwave.hpp $(src)/waveformfile_aiff.hpp $(src)/waveformfile_voc.hpp $(src)/waveformfile_au.hpp $(src)/waveformfile_oggvorbis.hpp $(src)/waveformfile_flac.hpp $(src)/waveformfile_mpeg.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/waveformfile.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/midifile.$o: $(src)/midifile.cpp $(src)/log.h $(src)/midifile.hpp $(src)/midibuffer.hpp $(src)/midifile_smf.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/buffer.hpp +$(obj)/waveformfile_raw.$o: $(src)/waveformfile_raw.cpp $(src)/log.h $(src)/waveformfile_raw.hpp $(inc)/sysdefs.h $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/waveformfile_riffwave.$o: $(src)/waveformfile_riffwave.cpp $(src)/log.h $(src)/waveformfile_riffwave.hpp $(inc)/sysdefs.h $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/waveformfile_aiff.$o: $(src)/waveformfile_aiff.cpp $(src)/log.h $(src)/waveformfile_aiff.hpp $(inc)/sysdefs.h $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/waveformfile_voc.$o: $(src)/waveformfile_voc.cpp $(src)/log.h $(src)/waveformfile_voc.hpp $(inc)/sysdefs.h $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/waveformfile_au.$o: $(src)/waveformfile_au.cpp $(src)/log.h $(src)/waveformfile_au.hpp $(inc)/sysdefs.h $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/waveformfile_oggvorbis.$o: $(src)/waveformfile_oggvorbis.cpp $(src)/log.h $(src)/waveformfile_oggvorbis.hpp $(src)/dynlib.hpp $(inc)/sysdefs.h $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp +$(obj)/waveformfile_flac.$o: $(src)/waveformfile_flac.cpp $(src)/log.h $(src)/waveformfile_flac.hpp $(src)/dynlib.hpp $(inc)/sysdefs.h $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/waveformfile_mpeg.$o: $(src)/waveformfile_mpeg.cpp $(src)/log.h $(src)/waveformfile_mpeg.hpp $(src)/dynlib.hpp $(inc)/sysdefs.h $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp +$(obj)/midifile_smf.$o: $(src)/midifile_smf.cpp $(src)/log.h $(src)/midifile_smf.hpp $(src)/midifile.hpp $(src)/midibuffer.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/buffer.hpp +$(obj)/midiseq.$o: $(src)/midiseq.cpp $(src)/midiseq.hpp $(src)/midibuffer.hpp $(src)/midifile.hpp $(src)/log.h $(inc)/buffer.hpp $(inc)/soundfile.hpp $(inc)/file.hpp +$(obj)/midisynth.$o: $(src)/midisynth.cpp $(src)/midisynth.hpp $(src)/midiseq.hpp $(src)/midibuffer.hpp $(src)/midifile.hpp $(inc)/buffer.hpp $(inc)/soundfile.hpp $(inc)/file.hpp +$(obj)/cda_null.$o: $(src)/cda_null.cpp $(src)/cda_null.hpp $(inc)/cda.hpp +$(obj)/waveout.$o: $(src)/waveout.cpp $(src)/waveout.hpp +$(obj)/dynlib.$o: $(src)/dynlib.cpp $(src)/dynlib.hpp +$(obj)/crc32.$o: $(src)/crc32.cpp $(src)/crc32.hpp $(inc)/sysdefs.h +$(obj)/cda_win32.$o: $(src)/cda_win32.cpp $(src)/log.h $(src)/cda_win32.hpp $(inc)/cda.hpp +$(obj)/midisynth_win32.$o: $(src)/midisynth_win32.cpp $(src)/midisynth_win32.hpp $(src)/midisynth.hpp $(src)/midiseq.hpp $(src)/midibuffer.hpp $(src)/midifile.hpp $(src)/log.h $(inc)/buffer.hpp $(inc)/soundfile.hpp $(inc)/file.hpp +$(obj)/waveout_dsound.$o: $(src)/waveout_dsound.cpp $(src)/log.h $(src)/waveout_dsound.hpp $(src)/waveout.hpp $(src)/softwaremixer.hpp $(src)/dynlib.hpp $(inc)/sysdefs.h $(inc)/mixer.hpp $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp +$(obj)/cda_sdl.$o: $(src)/cda_sdl.cpp $(src)/log.h $(src)/cda_sdl.hpp $(inc)/sysdefs.h $(inc)/cda.hpp +$(obj)/waveout_sdl.$o: $(src)/waveout_sdl.cpp $(src)/log.h $(src)/waveout_sdl.hpp $(src)/waveout.hpp $(src)/softwaremixer.hpp $(inc)/sysdefs.h $(inc)/mixer.hpp $(inc)/waveformfile.hpp $(inc)/soundfile.hpp $(inc)/file.hpp $(inc)/pcmbuffer.hpp $(inc)/buffer.hpp diff --git a/polymer/jfaud/Makefile.msvc b/polymer/jfaud/Makefile.msvc new file mode 100755 index 000000000..c69211fc2 --- /dev/null +++ b/polymer/jfaud/Makefile.msvc @@ -0,0 +1,166 @@ +# OpenAL +# http://www.openal.org/ +USEAL=1 +LINKAL=0 +ALCFLAGS= +ALLIBS=openal32.lib +ALDL=openal32.dll + +# DirectX SDK Location (Win32) +# http://www.microsoft.com/downloads/details.aspx?FamilyID=edb98ffa-a59c-4c23-9b92-ba304f188314&DisplayLang=en +DIRECTXCFLAGS= +DIRECTXLIBS=dxguid.lib + +# OggVorbis +# http://www.vorbis.com/ +USEVORBIS=1 +LINKVORBIS=0 +VORBISCFLAGS= +VORBISLIBS=vorbisfile.lib vorbis.lib ogg.lib +VORBISDL=vorbisfile.dll + +# FLAC +# http://flac.sf.net/ +USEFLAC=1 +LINKFLAC=0 +FLACCFLAGS= +FLACLIBS=libflac.lib +FLACDL=libflac.dll + +# MPEG Audio via mpadec +# http://mpadec.sf.net/ +USEMPADEC=1 +LINKMPADEC=0 +MPADECCFLAGS=/Impadec +MPADECLIBS=mpadec\mpadec.lib +MPADECDL=mpadec.dll + +# libSDL 1.2 or better (used just for the test app on Win32) +# http://www.libsdl.org/ +SDLCFLAGS=/IC:\sdks\SDL-msvc\include +SDLLIBS=/LIBPATH:C:\sdks\SDL-msvc\lib SDL.lib + +# Directories for library SDKs on Windows +# I keep my third-party libraries each in a directory on their own. +SDKDIRECTX=c:\sdks\directx\dx7 +SDKOPENAL=c:\sdks\OpenAL +SDKVORBIS=c:\sdks\oggvorbis-win32sdk-1.0.1 +SDKFLAC=c:\sdks\flac + +obj=obj +src=src +inc=inc +o=obj +libfile=jfaud.lib + +exe=.exe +platformcflags=/I$(SDKDIRECTX)\include $(DIRECTXCFLAGS) +platformobjs=$(obj)\cda_win32.$o $(obj)\midisynth_win32.$o $(obj)\waveout_dsound.$o +platformlibs=winmm.lib /LIBPATH:$(SDKDIRECTX)\lib $(DIRECTXLIBS) $(SDLLIBS) + +ALCFLAGS=/I$(SDKOPENAL)\Include $(ALCFLAGS) /DALDL=\"$(ALDL)\" +ALLIBS=/LIBPATH:$(SDKOPENAL)\libs $(ALLIBS) + +VORBISCFLAGS=/I$(SDKVORBIS)\include $(VORBISCFLAGS) /DVORBISDL=\"$(VORBISDL)\" +VORBISLIBS=/LIBPATH:$(SDKVORBIS)\lib $(VORBISLIBS) + +FLACCFLAGS=/I$(SDKFLAC)\include $(FLACCFLAGS) /DFLACDL=\"$(FLACDL)\" +FLACLIBS=/LIBPATH:$(SDKFLAC)\bin $(FLACLIBS) + +MPADECCFLAGS=$(MPADECCFLAGS) /DMPADECDL=\"$(MPADECDL)\" + +CFLAGS=/G6Fy /Ox /MD /DDEBUG /nologo /I$(inc) $(platformcflags) +LIBS=$(platformlibs) +dependencies= + +CFLAGS=$(CFLAGS) /DUSEAL=$(USEAL) +!if $(USEAL) +CFLAGS=$(CFLAGS) /DLINKAL=$(LINKAL) +!if $(LINKAL) +LIBS=$(LIBS) $(ALLIBS) +!endif +!endif + +CFLAGS=$(CFLAGS) /DUSEVORBIS=$(USEVORBIS) +!if $(USEVORBIS) +CFLAGS=$(CFLAGS) /DLINKVORBIS=$(LINKVORBIS) +!if $(LINKVORBIS) +LIBS=$(LIBS) $(VORBISLIBS) +!endif +!endif + +CFLAGS=$(CFLAGS) /DUSEFLAC=$(USEFLAC) +!if $(USEFLAC) +CFLAGS=$(CFLAGS) /DLINKFLAC=$(LINKFLAC) +!if $(LINKFLAC) +LIBS=$(LIBS) $(FLACLIBS) +!else +LIBS=$(LIBS) /NODEFAULTLIB:libFLAC.lib +!endif +!endif + +CFLAGS=$(CFLAGS) /DUSEMPADEC=$(USEMPADEC) +!if $(USEMPADEC) +CFLAGS=$(CFLAGS) /DLINKMPADEC=$(LINKMPADEC) +!if $(LINKMPADEC) +LIBS=$(LIBS) $(MPADECLIBS) +dependencies=$(dependencies) $(MPADECLIBS) +!endif +!endif + +CXXFLAGS=$(CFLAGS) + +libraryobjs=$(obj)\jfaud.$o $(obj)\soundcache.$o \ + $(obj)\mixer.$o $(obj)\nullmixer.$o $(obj)\almixer.$o $(obj)\softwaremixer.$o \ + $(obj)\file.$o $(obj)\stdfile.$o \ + $(obj)\pcmbuffer.$o $(obj)\midibuffer.$o \ + $(obj)\soundfile.$o $(obj)\waveformfile.$o $(obj)\midifile.$o \ + $(obj)\waveformfile_raw.$o $(obj)\waveformfile_riffwave.$o $(obj)\waveformfile_aiff.$o \ + $(obj)\waveformfile_voc.$o $(obj)\waveformfile_au.$o $(obj)\waveformfile_oggvorbis.$o \ + $(obj)\waveformfile_flac.$o $(obj)\waveformfile_mpeg.$o \ + $(obj)\midifile_smf.$o $(obj)\midiseq.$o $(obj)\midisynth.$o\ + $(obj)\cda_null.$o $(obj)\waveout.$o $(obj)\dynlib.$o $(obj)\crc32.$o $(platformobjs) +testprogobjs=$(obj)\jfaudtest.$o $(libfile) + +# module-specific CFLAGS declaration variables +almixer_cpp_CFLAGS=$(ALCFLAGS) +jfaud_cpp_CFLAGS=$(ALCFLAGS) +waveformfile_oggvorbis_cpp_CFLAGS=$(VORBISCFLAGS) +waveformfile_flac_cpp_CFLAGS=$(FLACCFLAGS) +waveformfile_mpeg_cpp_CFLAGS=$(MPADECCFLAGS) +waveformfile_cpp_CFLAGS=$(VORBISCFLAGS) $(FLACCFLAGS) $(MPADECCFLAGS) + + +all: $(libfile) +test: jfaudtest$(exe) + +jfaudtest$(exe): $(testprogobjs) $(dependencies) + link /opt:nowin98 /opt:ref /nologo /OUT:$@ /SUBSYSTEM:WINDOWS $(testprogobjs) $(SDLLIBS) $(LIBS) msvcrt.lib user32.lib sdlmain.lib + +$(libfile): $(libraryobjs) + lib /nologo /out:$@ $** + +!include Makefile.deps + +$(obj)\jfaudtest.$o: $(src)\jfaudtest.cpp $(inc)\jfaud.hpp $(inc)\file.hpp $(inc)\mixer.hpp $(inc)\waveformfile.hpp $(inc)\soundfile.hpp $(inc)\pcmbuffer.hpp $(inc)\buffer.hpp $(inc)\cda.hpp $(inc)\sysdefs.h + cl /c $(CXXFLAGS) $(SDLCFLAGS) /Fo$@ $(src)\jfaudtest.cpp + +{$(src)}.cpp{$(obj)}.$o: ; cl /c $(CXXFLAGS) /Fo$@ $< +$(obj)\almixer.$o: ; cl /c $(CXXFLAGS) $(almixer_cpp_CFLAGS) /Fo$@ $(src)\almixer.cpp +$(obj)\jfaud.$o: ; cl /c $(CXXFLAGS) $(jfaud_cpp_CFLAGS) /Fo$@ $(src)\jfaud.cpp +$(obj)\waveformfile_oggvorbis.$o: ; cl /c $(CXXFLAGS) $(waveformfile_oggvorbis_cpp_CFLAGS) /Fo$@ $(src)\waveformfile_oggvorbis.cpp +$(obj)\waveformfile_flac.$o: ; cl /c $(CXXFLAGS) $(waveformfile_flac_cpp_CFLAGS) /Fo$@ $(src)\waveformfile_flac.cpp +$(obj)\waveformfile_mpeg.$o: ; cl /c $(CXXFLAGS) $(waveformfile_mpeg_cpp_CFLAGS) /Fo$@ $(src)\waveformfile_mpeg.cpp +$(obj)\waveformfile.$o: ; cl /c $(CXXFLAGS) $(waveformfile_cpp_CFLAGS) /Fo$@ $(src)\waveformfile.cpp + +# housekeeping +clean: + -del $(libraryobjs) jfaudtest$(exe) $(obj)\jfaudtest.$o + -cd mpadec && $(MAKE) /nologo /f Makefile.msvc clean +veryclean: clean + -del $(libfile) + +# for building libmpadec +$(MPADECLIBS): libmpadec +libmpadec: + cd mpadec && $(MAKE) /nologo /f Makefile.msvc mpadec.lib mpadec.dll diff --git a/polymer/jfaud/Makefile.watcom b/polymer/jfaud/Makefile.watcom new file mode 100755 index 000000000..2769b2349 --- /dev/null +++ b/polymer/jfaud/Makefile.watcom @@ -0,0 +1,173 @@ +# OpenAL +# http://www.openal.org/ +USEAL=1 +LINKAL=0 +ALCFLAGS= +ALLIBS=LIBRARY openal32.lib +ALDL=openal32.dll + +# DirectX SDK Location (Win32) +# http://www.microsoft.com/downloads/details.aspx?FamilyID=edb98ffa-a59c-4c23-9b92-ba304f188314&DisplayLang=en +DIRECTXCFLAGS= +DIRECTXLIBS=LIBRARY dxguid.lib + +# OggVorbis +# http://www.vorbis.com/ +USEVORBIS=1 +LINKVORBIS=0 +VORBISCFLAGS= +VORBISLIBS=LIBRARY { vorbisfile.lib vorbis.lib ogg.lib } +VORBISDL=vorbisfile.dll + +# FLAC +# http://flac.sf.net/ +USEFLAC=1 +LINKFLAC=0 +FLACCFLAGS= +FLACLIBS=LIBRARY libflac.lib +FLACDL=libflac.dll + +# MPEG Audio via mpadec +# http://mpadec.sf.net/ +USEMPADEC=1 +LINKMPADEC=0 +MPADECCFLAGS=-i=mpadec +MPADECLIBS=LIBRARY mpadec\mpadec.lib +MPADECDL=mpadec.dll + +# libSDL 1.2 or better (used just for the test app on Win32) +# http://www.libsdl.org/ +SDLCFLAGS=-i=C:\sdks\SDL-msvc\include +SDLLIBS=LIBPATH C:\sdks\SDL-msvc\lib LIBRARY SDL.lib + +# Directories for library SDKs on Windows +# I keep my third-party libraries each in a directory on their own. +SDKDIRECTX=c:\sdks\directx\dx7 +SDKOPENAL=c:\sdks\OpenAL +SDKVORBIS=c:\sdks\oggvorbis-win32sdk-1.0.1 +SDKFLAC=c:\sdks\flac + +obj=obj +src=src +inc=inc +o=obj +libfile=jfaud.lib + +exe=.exe +platformcflags=-i=$(SDKDIRECTX)\include $(DIRECTXCFLAGS) +platformobjs=$(obj)\cda_win32.$o $(obj)\midisynth_win32.$o $(obj)\waveout_dsound.$o +platformlibs=LIBRARY winmm.lib LIBPATH $(SDKDIRECTX)\lib $(DIRECTXLIBS) $(SDLLIBS) + +ALCFLAGS=-i=$(SDKOPENAL)\Include $+$(ALCFLAGS)$- -dALDL="$(ALDL)" +ALLIBS=LIBPATH $(SDKOPENAL)\libs $+$(ALLIBS)$- + +VORBISCFLAGS=-i=$(SDKVORBIS)\include $+$(VORBISCFLAGS)$- -dVORBISDL="$(VORBISDL)" +VORBISLIBS=LIBPATH $(SDKVORBIS)\lib $+$(VORBISLIBS)$- + +FLACCFLAGS=-i=$(SDKFLAC)\include $+$(FLACCFLAGS)$- -dFLACDL="$(FLACDL)" +FLACLIBS=LIBPATH $(SDKFLAC)\bin $+$(FLACLIBS)$- + +MPADECCFLAGS=$+$(MPADECCFLAGS)$- -dMPADECDL="$(MPADECDL)" + +CFLAGS=-zq -5r -orb -dDEBUG -i=$(inc) -i=$(src) $(platformcflags) +LIBS=$(platformlibs) +dependencies= + +CFLAGS+= -dUSEAL=$(USEAL) +!if $(USEAL) +CFLAGS+= -dLINKAL=$(LINKAL) +!if $(LINKAL) +LIBS+= $(ALLIBS) +!endif +!endif + +CFLAGS+= -dUSEVORBIS=$(USEVORBIS) +!if $(USEVORBIS) +CFLAGS+= -dLINKVORBIS=$(LINKVORBIS) +!if $(LINKVORBIS) +LIBS+= $(VORBISLIBS) +!endif +!endif + +CFLAGS+= -dUSEFLAC=$(USEFLAC) +!if $(USEFLAC) +CFLAGS+= -dLINKFLAC=$(LINKFLAC) +!if $(LINKFLAC) +LIBS+= $(FLACLIBS) +!else +LIBS+= +!endif +!endif + +CFLAGS+= -dUSEMPADEC=$(USEMPADEC) +!if $(USEMPADEC) +CFLAGS+= -dLINKMPADEC=$(LINKMPADEC) +!if $(LINKMPADEC) +LIBS+= $(MPADECLIBS) +dependencies+= $(MPADECLIBS) +!endif +!endif + +CXXFLAGS=$(CFLAGS) + +libraryobjs=$(obj)\jfaud.$o $(obj)\soundcache.$o & + $(obj)\mixer.$o $(obj)\nullmixer.$o $(obj)\almixer.$o $(obj)\softwaremixer.$o & + $(obj)\file.$o $(obj)\stdfile.$o & + $(obj)\pcmbuffer.$o $(obj)\midibuffer.$o & + $(obj)\soundfile.$o $(obj)\waveformfile.$o $(obj)\midifile.$o & + $(obj)\waveformfile_raw.$o $(obj)\waveformfile_riffwave.$o $(obj)\waveformfile_aiff.$o & + $(obj)\waveformfile_voc.$o $(obj)\waveformfile_au.$o $(obj)\waveformfile_oggvorbis.$o & + $(obj)\waveformfile_flac.$o $(obj)\waveformfile_mpeg.$o & + $(obj)\midifile_smf.$o $(obj)\midiseq.$o $(obj)\midisynth.$o & + $(obj)\cda_null.$o $(obj)\waveout.$o $(obj)\dynlib.$o $(obj)\crc32.$o $(platformobjs) +testprogobjs=$(obj)\jfaudtest.$o $(libfile) + +# module-specific CFLAGS declaration variables +almixer_cpp_CFLAGS=$(ALCFLAGS) +jfaud_cpp_CFLAGS=$(ALCFLAGS) +waveformfile_oggvorbis_cpp_CFLAGS=$(VORBISCFLAGS) +waveformfile_flac_cpp_CFLAGS=$(FLACCFLAGS) +waveformfile_mpeg_cpp_CFLAGS=$(MPADECCFLAGS) +waveformfile_cpp_CFLAGS=$(VORBISCFLAGS) $(FLACCFLAGS) $(MPADECCFLAGS) + + +all: $(libfile) .SYMBOLIC +test: jfaudtest$(exe) .SYMBOLIC + +jfaudtest$(exe): $(testprogobjs) $(dependencies) + wlink OPTION QUIET NAME $@ SYSTEM WIN95 FILE { obj\jfaudtest.obj } LIBRARY jfaud.lib $(LIBS) + +$(libfile): $(libraryobjs) + %create $^..tmp + for %i in ($<) do %append $^..tmp +%i + wlib -q -b -n $^* @$^..tmp + erase $^..tmp + +!include Makefile.deps + +$(obj)\jfaudtest.$o: $(src)\jfaudtest.cpp $(inc)\jfaud.hpp $(inc)\file.hpp $(inc)\mixer.hpp $(inc)\waveformfile.hpp $(inc)\soundfile.hpp $(inc)\pcmbuffer.hpp $(inc)\buffer.hpp $(inc)\cda.hpp $(inc)\sysdefs.h + wpp386 $(CXXFLAGS) $(SDLCFLAGS) -fo=$(obj)\.$o $[@ + +.cpp: $(src) +.cpp.$o: ; wpp386 $(CXXFLAGS) -fo=$(obj)\.$o $[@ + +$(obj)\almixer.$o: ; wpp386 $(CXXFLAGS) $(almixer_cpp_CFLAGS) -fo=$(obj)\.$o $(src)\almixer.cpp +$(obj)\jfaud.$o: ; wpp386 $(CXXFLAGS) $(jfaud_cpp_CFLAGS) -fo=$(obj)\.$o $(src)\jfaud.cpp +$(obj)\waveformfile_oggvorbis.$o: ; wpp386 $(CXXFLAGS) $(waveformfile_oggvorbis_cpp_CFLAGS) -fo=$(obj)\.$o $(src)\waveformfile_oggvorbis.cpp +$(obj)\waveformfile_flac.$o: ; wpp386 $(CXXFLAGS) $(waveformfile_flac_cpp_CFLAGS) -fo=$(obj)\.$o $(src)\waveformfile_flac.cpp +$(obj)\waveformfile_mpeg.$o: ; wpp386 $(CXXFLAGS) $(waveformfile_mpeg_cpp_CFLAGS) -fo=$(obj)\.$o $(src)\waveformfile_mpeg.cpp +$(obj)\waveformfile.$o: ; wpp386 $(CXXFLAGS) $(waveformfile_cpp_CFLAGS) -fo=$(obj)\.$o $(src)\waveformfile.cpp + +# housekeeping +clean: .SYMBOLIC + -del /q $(libraryobjs) jfaudtest$(exe) $(obj)\jfaudtest.$o + -cd mpadec + -wmake -f Makefile.watcom clean +veryclean: clean .SYMBOLIC + -del /q $(libfile) + +# for building libmpadec +$(MPADECLIBS): libmpadec +libmpadec: .SYMBOLIC + cd mpadec + wmake -f Makefile.watcom mpadec.lib mpadec.dll diff --git a/polymer/jfaud/README b/polymer/jfaud/README new file mode 100755 index 000000000..f4609f674 --- /dev/null +++ b/polymer/jfaud/README @@ -0,0 +1,9 @@ +Note: JFAud makes the following assumptions about the datatypes your compiler defines. + sizeof(char) = 1 + sizeof(short) = 2 + sizeof(int) = 4 + sizeof(long) = 4 (on 32bit), 8 (on 64bit) + sizeof(long long) = 8 + sizeof(long) = sizeof(void *) + +As long as this is true, JFAud is compatible with 32 and 64bit use. diff --git a/polymer/jfaud/inc/buffer.hpp b/polymer/jfaud/inc/buffer.hpp new file mode 100755 index 000000000..8dd083e26 --- /dev/null +++ b/polymer/jfaud/inc/buffer.hpp @@ -0,0 +1,17 @@ +#ifndef __buffer_hpp__ +#define __buffer_hpp__ + +class Buffer { +public: + typedef enum { TYPE_PCM, TYPE_MIDI } Type; + +private: +protected: +public: + Buffer() { } + virtual ~Buffer() { } + + virtual Type GetType() const = 0; +}; + +#endif diff --git a/polymer/jfaud/inc/cda.hpp b/polymer/jfaud/inc/cda.hpp new file mode 100755 index 000000000..98eb28c09 --- /dev/null +++ b/polymer/jfaud/inc/cda.hpp @@ -0,0 +1,24 @@ +#ifndef __cda_hpp__ +#define __cda_hpp__ + +class JFAudCDA { +private: +protected: +public: + typedef enum { NOT_READY, READY, PLAYING, PAUSED } State; + + JFAudCDA() { } + virtual ~JFAudCDA() { } + virtual bool IsValid() const = 0; + + virtual int GetNumTracks() const = 0; + virtual bool IsTrackPlayable(int n) const = 0; + virtual bool PlayTrack(int n) = 0; + virtual bool Pause() = 0; + virtual bool Resume() = 0; + + virtual State CheckDisc() = 0; + virtual State GetPlayMode() = 0; +}; + +#endif diff --git a/polymer/jfaud/inc/file.hpp b/polymer/jfaud/inc/file.hpp new file mode 100755 index 000000000..893d25432 --- /dev/null +++ b/polymer/jfaud/inc/file.hpp @@ -0,0 +1,25 @@ +#ifndef __file_hpp__ +#define __file_hpp__ + +class JFAudFile { +public: + typedef enum { Cur, Set, End } SeekFrom; + + JFAudFile(); + JFAudFile(const char *filename, const char *subfilename = (const char*)0); + virtual ~JFAudFile(); + virtual bool IsOpen(void) const = 0; + + virtual long Read(long nbytes, void *buf) = 0; + virtual bool ReadByte(char *); + virtual bool ReadShort(short *, bool big=false); + virtual bool ReadLong(int *, bool big=false); + + virtual long Seek(long pos, SeekFrom where) = 0; + virtual long Tell(void) const = 0; + virtual long Length(void) const = 0; + + virtual int Rewind(void) { return Seek(0,Set); } +}; + +#endif diff --git a/polymer/jfaud/inc/jfaud.hpp b/polymer/jfaud/inc/jfaud.hpp new file mode 100755 index 000000000..eb05ad2ec --- /dev/null +++ b/polymer/jfaud/inc/jfaud.hpp @@ -0,0 +1,159 @@ +#ifndef __jfaud_hpp__ +#define __jfaud_hpp__ + +#include "file.hpp" +#include "mixer.hpp" +#include "cda.hpp" + +#ifdef JFAUD_INTERNAL +struct _wavechan { + JFAudMixerChannel *h; + int priority; + unsigned age; +}; +#endif + +class JFAud { +private: + JFAudFile* (*useropenfunc)(const char *, const char *); + + JFAudMixer *wavemixer; + + int numwavechans; + JFAudCDA *cddev; + +#ifdef JFAUD_INTERNAL + struct _wavechan *wavechans, *musicchan; + WaveOut *waveout; + SoundCache *cache; + JFAudMidiSynth *midisynth; +#else + void *wavechans, *musicchan; + void *waveout, *cache, *midisynth; +#endif + + struct _wavechan * FindFreeWaveChan(int priority); + + void *winhnd; + +protected: +public: + JFAud(); + ~JFAud(); + + // Initialisation and general control + void SetUserOpenFunc(JFAudFile* (*func)(const char *, const char *)) { useropenfunc = func; } + // Pass NULL to use conventional stdio file services, otherwise pass + // a suitable pointer to a function that will handle opening files. + // The function must return a JFAudFile object or NULL, which means + // it must return an object of a class derived from JFAudFile. + + bool InitWave(const char *name, int numvoices = 32, int frequency = 44100); + // 'name' may be a string of the format + // driver[:device id] + // The only valid driver is currently "openal". + // If no device id is specified the default for the driver will be used. + // If 'name' is NULL, the default driver will be used. + // The numvoices and frequency parameters are only used for drivers that accept them. + + bool SetWindowHandle(void *hwnd); + // WIN32: 'hwnd' is the window handle cast to a void* + // Other: function does nothing + + bool SetCacheSize(unsigned cache, unsigned object); + // Sets the total cache and per-object size limits + + bool SetCacheItemAge(unsigned age); + // Sets the maximum age of an unused cache item + + bool InitMIDI(const char *name); + // 'name' may be a string naming the device to use. + // If 'name' is NULL, the default device will be used. + // WIN32: give the MIDI device name + // etc: no MIDI supported + + bool InitCDA(const char *name); + // 'name' may be a string naming the device to use. + // If 'name' is NULL, the default device will be used. + // WIN32: give the drive letter to use for playback + // LINUX,BSD: give the drive number that SDL would use for playback + + bool Uninit(void); + // Perform system uninitialisation + + bool Update(bool agecache = false); + // Update streams, etc. + + bool AgeCache(void); + // Ages the cache + + // Device enumeration + static char **EnumerateWaveDevices(const char *name, char **def); + // 'name' may be NULL to return a list of valid drivers, or the name of a driver + // to return a list of valid device ids. + // The return value is a dynamically allocated array of strings, terminated by a NULL pointer, + // that you must free. + + static char **EnumerateMIDIDevices(char **def); + // Returns a list of legal device names for InitMIDI(). + // The return value is a dynamically allocated array of strings, terminated by a NULL pointer, + // that you must free. + + static char **EnumerateCDADevices(char **def); + // Returns a list of legal device names for InitCDA(). + // The return value is a dynamically allocated array of strings, terminated by a NULL pointer, + // that you must free. + + // Sound effect playback + // Hint: if you want to play from a file in memory, use the MemoryFile class in memfile.hpp to wrap + // the pointer you have in a JFAudFile class which you can then pass to PlaySoundFile. + JFAudMixerChannel *PlaySound(const char *filename, const char *subfilename = (const char*)0, int priority = 1); + JFAudMixerChannel *PlaySoundFile(JFAudFile **file, int priority = 1); + // Prepares a channel for playing the named sound. The channel is paused ready + // for set up and play. You can call any of the methods of JFAudMixerChannel, but don't + // delete the handle yourself--pass it to FreeSound() instead. + // + // When passing a JFAudFile object, you have to pass a pointer to a file object. If the + // function returns a valid handle, *file will be set to NULL. If the function returns + // a NULL handle, *file might also be set to NULL if the file was properly identified and + // an error occurred while attempting to set up the mixer channel, otherwise it will be + // untouched and you are responsible for disposing of it. In the event everything succeeds, + // don't touch the file object ever again. The mixer will dispose of it when it's no longer + // needed. + + JFAudMixerChannel *PlayRawSound(const char *filename, const char *subfilename = (const char*)0, int priority = 1, int samplerate = 11025, int channels = 1, int bytespersample = 2, bool bigendian = false); + JFAudMixerChannel *PlayRawSoundFile(JFAudFile **file, int priority = 1, int samplerate = 11025, int channels = 2, int bytespersample = 2, bool bigendian = false); + // Like PlaySound(), only these play headerless PCM of the format you specify. + + bool FreeSound(JFAudMixerChannel *chan); + // Releases a channel. Pass a channel object to this function to dispose of it rather + // than deleting it yourself. + + bool IsValidSound(JFAudMixerChannel *chan) const; + // Checks to see if a the passed channel is still valid. Because of the priority system, a call + // to PlaySound or PlayMusic might kick out a channel, which leaves you with a pointer that's no + // longer valid, so verify that it's still safe before working with the channel. + + JFAudMixer * GetWave(void) const { return wavemixer; } + // Don't try deleting the object you get from this function or bad thing will happen. Just + // ignore it when you're done with it. + + // Music playback + bool PlayMusic(const char *filename, const char *subfilename = (const char*)0); + bool PlayMusicFile(JFAudFile **file); + bool PauseMusic(bool onf); + bool StopMusic(void); + + // CD audio playback + JFAudCDA * GetCDA(void) const { return cddev; } + // Don't try deleting the object you get from this function or bad things will happen. Just + // ignore it when you're done with it. + + bool SetWaveVolume(float vol); + bool SetMIDIVolume(float vol); + bool SetCDAVolume(float vol); +}; + +void JFAud_SetLogFunc(void (*func)(const char *)); + +#endif diff --git a/polymer/jfaud/inc/memfile.hpp b/polymer/jfaud/inc/memfile.hpp new file mode 100755 index 000000000..66d55c95b --- /dev/null +++ b/polymer/jfaud/inc/memfile.hpp @@ -0,0 +1,101 @@ +#ifndef __memfile_hpp__ +#define __memfile_hpp__ + +#include +#include +#include "file.hpp" +#include "sysdefs.h" + +class MemFile : public JFAudFile { +private: + unsigned char *dataptr, *posn; + long datalen; + void (*disposalfunc)(void*); + +public: + MemFile(void *ptr, long len, void (*dispose)(void*)) + { + dataptr = posn = (unsigned char *)ptr; + datalen = len; + disposalfunc = dispose; + } + virtual ~MemFile() + { + if (disposalfunc) disposalfunc((void*)dataptr); + else free((void*)dataptr); + } + virtual bool IsOpen(void) const { return dataptr != NULL && datalen >= 0; } + + virtual long Read(long nbytes, void *buf) + { + long toread = datalen - ((intptr_t)posn - (intptr_t)dataptr); + if (toread > nbytes) toread = nbytes; + memcpy(buf, posn, toread); + posn = (unsigned char *)((intptr_t)posn + toread); + + return toread; + } + virtual bool ReadByte(char *c) + { + if ((intptr_t)posn - (intptr_t)dataptr >= datalen) return false; + *c = *(posn++); + return true; + } + virtual bool ReadShort(short *s, bool big=false) + { + short ss = 0; + if ((intptr_t)posn - (intptr_t)dataptr >= datalen-1) return false; + if (B_LITTLE_ENDIAN == 1) { + ss = ((short)*(posn++)); + ss |= ((short)*(posn++)) << 8; + } else { + ss = ((short)*(posn++)) << 8; + ss |= ((short)*(posn++)); + } + *s = ss; + return true; + } + virtual bool ReadLong(int *l, bool big=false) + { + short ll = 0; + if ((intptr_t)posn - (intptr_t)dataptr >= datalen-3) return false; + if (B_LITTLE_ENDIAN == 1) { + ll = ((int)*(posn++)); + ll |= ((int)*(posn++)) << 8; + ll |= ((int)*(posn++)) << 16; + ll |= ((int)*(posn++)) << 24; + } else { + ll = ((int)*(posn++)) << 24; + ll |= ((int)*(posn++)) << 16; + ll |= ((int)*(posn++)) << 8; + ll |= ((int)*(posn++)); + } + *l = ll; + return true; + } + + virtual long Seek(long pos, SeekFrom where) + { + if (where == JFAudFile::Set) { + posn = (unsigned char *)((intptr_t)dataptr + pos); + } else if (where == JFAudFile::Cur) { + posn = (unsigned char *)((intptr_t)posn + pos); + } else if (where == JFAudFile::End) { + posn = (unsigned char *)((intptr_t)dataptr + datalen + pos); + } else return -1; + + if ((intptr_t)posn < (intptr_t)dataptr) + posn = dataptr; + else if ((intptr_t)posn > ((intptr_t)dataptr + datalen)) + posn = (unsigned char *)((intptr_t)dataptr + datalen); + + return (intptr_t)posn - (intptr_t)dataptr; + } + + virtual long Tell(void) const { return (intptr_t)posn - (intptr_t)dataptr; } + virtual long Length(void) const { return datalen; } + + virtual int Rewind(void) { posn = dataptr; return 0; } +}; + +#endif diff --git a/polymer/jfaud/inc/mixer.hpp b/polymer/jfaud/inc/mixer.hpp new file mode 100755 index 000000000..57ccc7761 --- /dev/null +++ b/polymer/jfaud/inc/mixer.hpp @@ -0,0 +1,89 @@ +#ifndef __mixer_hpp__ +#define __mixer_hpp__ + +#include "waveformfile.hpp" + +class JFAudMixerChannel { +private: +protected: + void (*stopcallback)(int); + int stopcallbackid; +public: + typedef enum { + FilterNearest = 0, + FilterLinear = 1, + Filter4Point = 2, + } Filter; + + typedef enum { + DistanceModelInverse = 0, + DistanceModelLinear = 1, + } DistanceModel; + + JFAudMixerChannel(); + virtual ~JFAudMixerChannel(); + + virtual bool SetMedia(WaveformFile *) = 0; + // The waveform file becomes the property of the channel + // if it was successfully attached, and should be deleted + // in the destructor or if another file is attached. + virtual bool SetStopCallback( void (*cb)(int), int id); + // If this function is passed a non-NULL cb, the function will be + // called passing 'id' when the sound stops playing. + virtual bool SetFilter(Filter which); + virtual bool SetDistanceModel(DistanceModel which); + + virtual bool Play(void) = 0; + virtual bool Pause(void) = 0; + virtual bool Update(void) = 0; + virtual bool IsPlaying(void) const = 0; + virtual bool IsPaused(void) const = 0; + virtual bool IsStopped(void) const = 0; + + virtual bool SetGain(float gain) = 0; + virtual bool SetPitch(float pitch) = 0; + virtual bool SetPosition(float x, float y, float z) = 0; + virtual bool SetVelocity(float x, float y, float z) = 0; + virtual bool SetDirection(float x, float y, float z) = 0; + virtual bool SetRefDist(float refdist) = 0; + virtual bool SetMaxDist(float maxdist) = 0; + virtual bool SetRolloff(float rolloff) = 0; + virtual bool SetLoop(bool onf) = 0; + virtual bool SetFollowListener(bool onf) = 0; + + virtual float GetGain(void) const = 0; + virtual float GetPitch(void) const = 0; + virtual void GetPosition(float *x, float *y, float *z) const = 0; + virtual void GetVelocity(float *x, float *y, float *z) const = 0; + virtual void GetDirection(float *x, float *y, float *z) const = 0; + virtual float GetRefDist(void) const = 0; + virtual float GetMaxDist(void) const = 0; + virtual float GetRolloff(void) const = 0; + virtual bool GetLoop(void) const = 0; + virtual bool GetFollowListener(void) const = 0; +}; + +class JFAudMixer { +private: +protected: +public: + JFAudMixer() { } + virtual ~JFAudMixer() { } + + virtual JFAudMixerChannel *AcquireChannel(void) = 0; + virtual bool ReleaseChannel(JFAudMixerChannel *) = 0; + + virtual bool Update() = 0; + + virtual bool SetListenerPosition(float x, float y, float z) = 0; + virtual bool SetListenerOrientation(float atx, float aty, float atz, float upx, float upy, float upz) = 0; + virtual bool SetListenerVelocity(float x, float y, float z) = 0; + virtual bool SetListenerGain(float gain) = 0; + + virtual void GetListenerPosition(float *x, float *y, float *z) const = 0; + virtual void GetListenerOrientation(float *atx, float *aty, float *atz, float *upx, float *upy, float *upz) const = 0; + virtual void GetListenerVelocity(float *x, float *y, float *z) const = 0; + virtual float GetListenerGain(void) const = 0; +}; + +#endif diff --git a/polymer/jfaud/inc/pcmbuffer.hpp b/polymer/jfaud/inc/pcmbuffer.hpp new file mode 100755 index 000000000..7f5f476de --- /dev/null +++ b/polymer/jfaud/inc/pcmbuffer.hpp @@ -0,0 +1,37 @@ +#ifndef __pcmbuffer_hpp__ +#define __pcmbuffer_hpp__ + +#include "buffer.hpp" + +class PcmBuffer : public Buffer { +private: + unsigned int numsamples, maxsamples; + void *data; + unsigned int samplerate; + unsigned int channels; + unsigned int bytespersample; +protected: +public: + PcmBuffer() : data((void*)0) { } + virtual ~PcmBuffer(); + + virtual Type GetType() const { return TYPE_PCM; } + + unsigned int GetBlockSize() const { return channels*bytespersample; } + unsigned int GetMaxSamples() const { return maxsamples; } + void * GetData() const { return data; } + void * GetDataAt(int sample) const { return (void*)((char*)data + (GetBlockSize()*(sample%numsamples))); } + + unsigned int GetNumSamples() const { return numsamples; } + unsigned int GetSampleRate() const { return samplerate; } + unsigned int GetNumChannels() const { return channels; } + unsigned int GetBytesPerSample() const { return bytespersample; } + unsigned int GetBitsPerSample() const { return bytespersample * 8; } + + void SetNumSamples(unsigned int s) { if (s > maxsamples) s = maxsamples; numsamples = s; } + + bool Allocate(unsigned int nsamp, unsigned int srate, unsigned int chans, unsigned int bps); + bool ConvertToNByte(int n); +}; + +#endif diff --git a/polymer/jfaud/inc/soundfile.hpp b/polymer/jfaud/inc/soundfile.hpp new file mode 100755 index 000000000..cf3dc9422 --- /dev/null +++ b/polymer/jfaud/inc/soundfile.hpp @@ -0,0 +1,26 @@ +#ifndef __soundfile_hpp__ +#define __soundfile_hpp__ + +#include "file.hpp" + +class SoundFile { +public: + typedef enum { TYPE_WAVEFORM, TYPE_MIDI } Type; + typedef enum { InitOK, InitDisabled, InitFailed } InitState; + + SoundFile() { } + virtual ~SoundFile() { } + virtual bool IsValid() const = 0; + virtual bool IsUsable() const { return IsValid(); } + + // Sub-classes should implement these + //static InitState Init() { return InitDisabled; } + //static bool Uninit() { return false; } + + virtual Type GetType() const = 0; + virtual const char *GetTypeName() const = 0; +}; + +SoundFile *IdentifySoundFile(JFAudFile *); + +#endif diff --git a/polymer/jfaud/inc/sysdefs.h b/polymer/jfaud/inc/sysdefs.h new file mode 100755 index 000000000..38025b547 --- /dev/null +++ b/polymer/jfaud/inc/sysdefs.h @@ -0,0 +1,146 @@ +#ifndef __sysdefs_h__ +#define __sysdefs_h__ + +#if defined(__WATCOMC__) && ((__WATCOMC__ -0) < 1230) +# define SCREWED_UP_CPP +#endif + +#if defined(__WATCOMC__) || defined(_MSC_VER) || (defined(_WIN32) && defined(__GNUC__)) +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +#ifndef __GNUC__ +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; +#else // __GNUC__ +typedef signed long long int int64_t; +typedef unsigned long long int uint64_t; +#endif // __GNUC__ +typedef signed int intptr_t; +typedef unsigned int uintptr_t; +#define INT8_C(c) c +#define UINT8_C(c) c ## u +#define INT16_C(c) c +#define UINT16_C(c) c ## u +#define INT32_C(c) c +#define UINT32_C(c) c ## u +#ifndef __GNUC__ +#define INT64_C(c) c ## i64 +#define UINT64_C(c) c ## ui64 +#else // __GNUC__ +#define INT64_C(c) c ## ll +#define UINT64_C(c) c ## ull +#endif // __GNUC__ +#define inline __inline + +#else // not watcomc, msc, mingw32 +# define __STDC_CONSTANT_MACROS +# include +#endif + +#if defined(linux) +# define PLATFORMLINUX 1 +#elif defined(__FreeBSD__) +# define PLATFORMBSD 1 +#elif defined(__APPLE__) && defined(__MACH__) +# define PLATFORMDARWIN 1 +#elif defined(_WIN32) +# define PLATFORMWINDOWS 1 +#endif + +#if defined(PLATFORMLINUX) +# include +# if __BYTE_ORDER == __LITTLE_ENDIAN +# define B_LITTLE_ENDIAN 1 +# define B_BIG_ENDIAN 0 +# elif __BYTE_ORDER == __BIG_ENDIAN +# define B_LITTLE_ENDIAN 0 +# define B_BIG_ENDIAN 1 +# endif +# define B_ENDIAN_C_INLINE 1 +#elif defined(PLATFORMBSD) +# include +# if _BYTE_ORDER == _LITTLE_ENDIAN +# define B_LITTLE_ENDIAN 1 +# define B_BIG_ENDIAN 0 +# elif _BYTE_ORDER == _BIG_ENDIAN +# define B_LITTLE_ENDIAN 0 +# define B_BIG_ENDIAN 1 +# endif +# define B_SWAP64(x) __bswap64(x) +# define B_SWAP32(x) __bswap32(x) +# define B_SWAP16(x) __bswap16(x) +#elif defined(PLATFORMDARWIN) +# if defined(__LITTLE_ENDIAN__) +# define B_LITTLE_ENDIAN 1 +# define B_BIG_ENDIAN 0 +# elif defined(__BIG_ENDIAN__) +# define B_LITTLE_ENDIAN 0 +# define B_BIG_ENDIAN 1 +# endif +# include +# define B_SWAP64(x) OSSwapConstInt64(x) +# define B_SWAP32(x) OSSwapConstInt32(x) +# define B_SWAP16(x) OSSwapConstInt16(x) +#elif defined(PLATFORMWINDOWS) +# define B_LITTLE_ENDIAN 1 +# define B_BIG_ENDIAN 0 +# define B_ENDIAN_C_INLINE 1 +#endif +#if !defined(B_LITTLE_ENDIAN) || !defined(B_BIG_ENDIAN) +# error Unknown endianness +#endif + +#if defined B_ENDIAN_X86_INLINE +# if defined(_MSC_VER) + // inline asm using bswap/xchg +# elif defined(__GNUC__) + // inline asm using bswap/xchg +# elif defined(__WATCOMC__) + // inline asm using bswap/xchg +# endif +#elif defined B_ENDIAN_C_INLINE +static inline uint16_t B_SWAP16(uint16_t s) { return (s>>8)|(s<<8); } +static inline uint32_t B_SWAP32(uint32_t l) { return ((l>>8)&0xff00)|((l&0xff00)<<8)|(l<<24)|(l>>24); } +static inline uint64_t B_SWAP64(uint64_t l) { return (l>>56)|((l>>40)&0xff00)|((l>>24)&0xff0000)|((l>>8)&0xff000000)|((l&255)<<56)|((l&0xff00)<<40)|((l&0xff0000)<<24)|((l&0xff000000)<<8); } +#endif + +#if B_LITTLE_ENDIAN == 1 +# define B_LITTLE64(x) (x) +# define B_BIG64(x) B_SWAP64(x) +# define B_LITTLE32(x) (x) +# define B_BIG32(x) B_SWAP32(x) +# define B_LITTLE16(x) (x) +# define B_BIG16(x) B_SWAP16(x) +#elif B_BIG_ENDIAN == 1 +# define B_LITTLE64(x) B_SWAP64(x) +# define B_BIG64(x) (x) +# define B_LITTLE32(x) B_SWAP32(x) +# define B_BIG32(x) (x) +# define B_LITTLE16(x) B_SWAP16(x) +# define B_BIG16(x) (x) +#endif + +#if defined(__WATCOMC__) || defined(_MSC_VER) +# define strncasecmp strnicmp +# define strcasecmp stricmp +#endif + +#ifndef O_BINARY +# define O_BINARY 0 +#endif + +#ifndef min +# define min(x,y) ((x)<(y)?(x):(y)) +#endif + +#ifndef max +# define max(x,y) ((x)>(y)?(x):(y)) +#endif + +#define arsiz(x) (sizeof(x)/sizeof(x[0])) + +#endif diff --git a/polymer/jfaud/inc/waveformfile.hpp b/polymer/jfaud/inc/waveformfile.hpp new file mode 100755 index 000000000..1d597a821 --- /dev/null +++ b/polymer/jfaud/inc/waveformfile.hpp @@ -0,0 +1,46 @@ +#ifndef __waveformfile_hpp__ +#define __waveformfile_hpp__ + +#include "soundfile.hpp" +#include "pcmbuffer.hpp" + +class WaveformFile : public SoundFile { +public: + typedef enum { + FORMAT_UNKNOWN = -1, + FORMAT_FIRST = 0, + FORMAT_RAW = 0, + FORMAT_RIFFWAV, + FORMAT_AIFF, + FORMAT_VOC, + FORMAT_AU, + FORMAT_OGGVORBIS, + FORMAT_FLAC, + FORMAT_MPEG, + FORMAT_MOD, + FORMAT_LAST = FORMAT_MOD + } Format; + + WaveformFile() { } + virtual ~WaveformFile() { } + + virtual Type GetType() const { return TYPE_WAVEFORM; } + virtual const char *GetTypeName() const { return "waveform"; } + virtual Format GetFormat() const = 0; + virtual const char *GetFormatName() const = 0; + + // Sub-classes should implement these + //static InitState Init() { return InitDisabled; } + //static bool Uninit() { return false; } + + virtual PcmBuffer *ReadSamples(unsigned int nsamps = 0, bool loop = false) = 0; + virtual float GetPlayTime(void) const = 0; + virtual unsigned int GetPCMLength(void) const = 0; + // return 0x7fffffff if length is unknown, which will force streaming +}; + +bool InitialiseWaveformReaders(void); +void UninitialiseWaveformReaders(void); +WaveformFile *IdentifyWaveformFile(JFAudFile *); + +#endif diff --git a/polymer/jfaud/makemsc.bat b/polymer/jfaud/makemsc.bat new file mode 100755 index 000000000..9abfc976d --- /dev/null +++ b/polymer/jfaud/makemsc.bat @@ -0,0 +1,2 @@ +@echo off +nmake /nologo /f Makefile.msvc %1 %2 %3 %4 diff --git a/polymer/jfaud/mpadec/COPYING b/polymer/jfaud/mpadec/COPYING new file mode 100755 index 000000000..b1e3f5a26 --- /dev/null +++ b/polymer/jfaud/mpadec/COPYING @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/polymer/jfaud/mpadec/Makefile b/polymer/jfaud/mpadec/Makefile new file mode 100755 index 000000000..c944609e2 --- /dev/null +++ b/polymer/jfaud/mpadec/Makefile @@ -0,0 +1,34 @@ + +CC=gcc +CFLAGS=-O3 -g + +NBIT=32 +ifeq ($(NBIT),32) +ifeq ($(findstring x86_64,$(shell uname -m)),x86_64) + LIBS=-m32 -L/emul/linux/x86/usr/lib + override CFLAGS+= -m32 +endif +endif + +OBJS=layer1.o layer2.o layer3.o synth.o tables.o mpadec.o mp3dec.o +SOOBJS=$(OBJS:.o=.lo) + +libmpadec.a: $(OBJS) + ar cr libmpadec.a $(OBJS) + ranlib libmpadec.a + +libmpadec.so: $(SOOBJS) + $(CC) -shared -fPIC -o $@ $^ $(LIBS) + +mpadec.dll: $(OBJS) + dllwrap -mwindows --dllname $@ --def $(@:dll=def) $^ + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ +%.lo: %.c + $(CC) -fPIC $(CFLAGS) -c $< -o $@ + +clean: + -rm -f $(OBJS) libmpadec.a + -rm -f libmpadec.so $(SOOBJS) + -rm -f mpadec.dll diff --git a/polymer/jfaud/mpadec/Makefile.msvc b/polymer/jfaud/mpadec/Makefile.msvc new file mode 100755 index 000000000..c56235110 --- /dev/null +++ b/polymer/jfaud/mpadec/Makefile.msvc @@ -0,0 +1,15 @@ +CFLAGS=/I.. /I..\include /MD /Ox + +OBJS=layer1.obj layer2.obj layer3.obj synth.obj tables.obj mpadec.obj mp3dec.obj + +mpadec.lib: $(OBJS) + lib /nologo /out:$@ $** + +mpadec.dll: $(OBJS) + link /nologo /dll /def:mpadec.def /OUT:$@ /IMPLIB:mpadecimp.lib /SUBSYSTEM:WINDOWS /RELEASE $** msvcrt.lib + +.c.obj: ; cl /c /nologo $(CFLAGS) /Fo$@ $< + +clean: + -del $(OBJS) mpadec.lib mpadec.dll mpadecimp.lib mpadecimp.exp + diff --git a/polymer/jfaud/mpadec/Makefile.watcom b/polymer/jfaud/mpadec/Makefile.watcom new file mode 100755 index 000000000..c5fdcb12f --- /dev/null +++ b/polymer/jfaud/mpadec/Makefile.watcom @@ -0,0 +1,18 @@ +CFLAGS=-i=.. -i=..\include -5r -s -orb + +OBJS=layer1.obj layer2.obj layer3.obj synth.obj tables.obj mpadec.obj mp3dec.obj + +mpadec.lib: $(OBJS) + %create $^..tmp + for %i in ($<) do %append $^..tmp +%i + wlib -b -n $^* @$^..tmp + erase $^..tmp + +mpadec.dll: $(OBJS) + wlink NAME $@ SYSTEM WIN95 DLL OPTION IMPLIB=mpadecimp.lib FILE { $< } LIBRARY clib3r.lib EXPORT=mpadec.wlib + +.c.obj: ; wcc386 $(CFLAGS) -fo=.obj $[@ + +clean: .SYMBOLIC + -del $(OBJS) mpadec.lib mpadec.dll mpadecimp.lib mpadecimp.exp *.err + diff --git a/polymer/jfaud/mpadec/README b/polymer/jfaud/mpadec/README new file mode 100755 index 000000000..00e46a469 --- /dev/null +++ b/polymer/jfaud/mpadec/README @@ -0,0 +1,13 @@ + + mpadec - MPEG audio decoder + Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + Based on mpglib from mpg123 package by Michael Hipp (http://www.mpg123.de) + + Mpadec is a high-quality portable MPEG audio decoder library. + It supports MPEG-1, MPEG-2 Layer I, Layer II and Layer III audio streams, + including free-format streams. + + It is still under development:) + + To compile it you will have to manually edit config.h and makefile. + diff --git a/polymer/jfaud/mpadec/config.h b/polymer/jfaud/mpadec/config.h new file mode 100755 index 000000000..3c0361aa3 --- /dev/null +++ b/polymer/jfaud/mpadec/config.h @@ -0,0 +1,109 @@ +#ifdef __POWERPC__ +# define ARCH_PPC +#else +# if defined __x86_64__ || defined __amd64__ +# define ARCH_AMD64 +# else +# define ARCH_X86 +# endif +#endif + +/* Hardware architecture */ +//#define ARCH_ALPHA +//#define ARCH_PPC +//#define ARCH_SPARC +//#define ARCH_X86 +//#define ARCH_AMD64 +//#define ARCH_IA64 + +#if defined _WIN32 && !defined __MINGW32__ +#define HAVE_IO_H +#define HAVE_CONIO_H +#define _INTPTR_T_DEFINED +#else +#define HAVE_INTTYPES_H +#define HAVE_UNISTD_H +#endif +#undef OSS + +#define FLOAT double + +#ifdef HAVE_INTTYPES_H +#include +#else +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +#if defined(__BORLANDC__) || defined(_MSC_VER) || defined(__WATCOMC__) +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; +#elif defined(__GNUC__) +typedef signed long long int64_t; +typedef unsigned long long uint64_t; +#endif +#if defined(ARCH_AMD64) || defined(ARCH_IA64) || defined(ARCH_ALPHA) +typedef int64_t intptr_t; +typedef uint64_t uintptr_t; +#else +//typedef signed long int32_t; +//typedef unsigned long uint32_t; +typedef int32_t intptr_t; +typedef uint32_t uintptr_t; +#endif +#endif + +#undef PACKED +#ifdef __GNUC__ +#define PACKED __attribute__((packed)) +#else +#define PACKED +#endif + +#ifdef _WIN32 +# if defined __GNUC__ +# define MPADECAPI __attribute__((stdcall)) +# elif defined _MSC_VER +# define MPADECAPI _stdcall +# elif defined __WATCOMC__ +# define MPADECAPI __stdcall +# endif +#else +# define MPADECAPI +#endif + +#include +#include +#include +#include +#include +#include +#ifdef HAVE_IO_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif + +#undef FALSE +#undef TRUE +#define FALSE 0 +#define TRUE 1 + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +#ifdef _WIN32 +#define strcasecmp stricmp +#endif + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif +#ifndef M_SQRT2 +#define M_SQRT2 1.41421356237309504880 +#endif + diff --git a/polymer/jfaud/mpadec/layer1.c b/polymer/jfaud/mpadec/layer1.c new file mode 100755 index 000000000..947c3e31e --- /dev/null +++ b/polymer/jfaud/mpadec/layer1.c @@ -0,0 +1,140 @@ +/* + * mpadec - MPEG audio decoder + * Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: layer1.c,v 1.1.1.1 2004/07/27 02:57:18 metal_man Exp $ */ + +#include "mpadec_internal.h" + +extern const uint32_t bitmask[17]; +extern alloc_table_t *alloc_tables[5]; + +extern unsigned getbits(mpadec_t mpadec, int n); +extern uint16_t update_crc(uint16_t init, uint8_t *buf, int length); + +static void I_decode_bitalloc(mpadec_t mpadec, uint8_t *bit_alloc, uint8_t *scalefac) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + uint8_t *ba = bit_alloc, *scf = scalefac; + uint32_t crclen = mpa->bytes_left; + + if (mpa->frame.channels > 1) { + unsigned i, jsbound = mpa->frame.jsbound; + for (i = jsbound; i; i--) { + *ba++ = (uint8_t)GETBITS(4); + *ba++ = (uint8_t)GETBITS(4); + } + for (i = (SBLIMIT - jsbound); i; i--) *ba++ = (uint8_t)GETBITS(4); + if (mpa->config.crc && mpa->frame.CRC) { + crclen -= mpa->bytes_left; + mpa->crc = update_crc(mpa->crc, mpa->next_byte - crclen, ((crclen << 3) - mpa->bits_left)); + if (mpa->crc != mpa->frame.crc) mpa->error = TRUE; + } + ba = bit_alloc; + for (i = jsbound; i; i--) { + if (*ba++) *scf++ = (uint8_t)GETBITS(6); + if (*ba++) *scf++ = (uint8_t)GETBITS(6); + } + for (i = (SBLIMIT - jsbound); i; i--) { + if (*ba++) { + *scf++ = (uint8_t)GETBITS(6); + *scf++ = (uint8_t)GETBITS(6); + } + } + } else { + register unsigned i; + for (i = SBLIMIT; i; i--) *ba++ = (uint8_t)GETBITS(4); + if (mpa->config.crc && mpa->frame.CRC) { + crclen -= mpa->bytes_left; + mpa->crc = update_crc(mpa->crc, mpa->next_byte - crclen, ((crclen << 3) - mpa->bits_left)); + if (mpa->crc != mpa->frame.crc) mpa->error = TRUE; + } + ba = bit_alloc; + for (i = SBLIMIT; i; i--) if (*ba++) *scf++ = (uint8_t)GETBITS(6); + } +} + +static void I_decode_samples(mpadec_t mpadec, uint8_t *bit_alloc, uint8_t *scalefac, FLOAT fraction[2][SBLIMIT]) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + uint8_t *ba = bit_alloc, *scf = scalefac; + unsigned i, n; + + if (mpa->frame.channels > 1) { + unsigned jsbound = mpa->frame.jsbound; + FLOAT *f0 = fraction[0], *f1 = fraction[1]; + for (i = jsbound; i; i--) { + if ((n = *ba++) != 0) *f0++ = (((-1) << n) + GETBITS(n + 1) + 1)*mpa->tables.muls[n + 1][*scf++]; else *f0++ = 0.0; + if ((n = *ba++) != 0) *f1++ = (((-1) << n) + GETBITS(n + 1) + 1)*mpa->tables.muls[n + 1][*scf++]; else *f1++ = 0.0; + } + for (i = (SBLIMIT - jsbound); i; i--) { + if ((n = *ba++) != 0) { + register FLOAT tmp = (((-1) << n) + GETBITS(n + 1) + 1); + *f0++ = tmp*mpa->tables.muls[n + 1][*scf++]; + *f1++ = tmp*mpa->tables.muls[n + 1][*scf++]; + } else *f0++ = *f1++ = 0.0; + } + for (i = (SBLIMIT - mpa->frame.downsample_sblimit); i; i--) *--f0 = *--f1 = 0.0; + } else { + FLOAT *f0 = fraction[0]; + for (i = SBLIMIT; i; i--) { + if ((n = *ba++) != 0) *f0++ = (((-1) << n) + GETBITS(n + 1) + 1)*mpa->tables.muls[n + 1][*scf++]; else *f0++ = 0.0; + } + for (i = (SBLIMIT - mpa->frame.downsample_sblimit); i; i--) *--f0 = 0.0; + } +} + +void decode_layer1(mpadec_t mpadec, uint8_t *buffer) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + int i, j, single; + FLOAT fraction[2][SBLIMIT]; + uint8_t bit_alloc[2*SBLIMIT]; + uint8_t scalefac[2*SBLIMIT]; + + mpa->error = FALSE; + mpa->bits_left = 0; + mpa->frame.jsbound = (uint8_t)((mpa->frame.mode == MPG_MD_JOINT_STEREO) ? ((mpa->frame.mode_ext + 1) << 2) : SBLIMIT); + if (mpa->frame.channels > 1) switch (mpa->config.mode) { + case MPADEC_CONFIG_MONO: single = 0; break; + case MPADEC_CONFIG_CHANNEL1: single = 1; break; + case MPADEC_CONFIG_CHANNEL2: single = 2; break; + default: single = -1; break; + } else single = 1; + I_decode_bitalloc(mpa, bit_alloc, scalefac); + for (i = 0; i < SCALE_BLOCK; i++) { + I_decode_samples(mpa, bit_alloc, scalefac, fraction); + if (!single) for (j = 0; j < SBLIMIT; j++) fraction[0][j] = 0.5*(fraction[0][j] + fraction[1][j]); + if (single < 0) { + mpa->synth_func(mpa, fraction[0], 0, buffer); + mpa->synth_func(mpa, fraction[1], 1, buffer); + } else if (!single) { + mpa->synth_func(mpa, fraction[0], 0, buffer); + } else { + mpa->synth_func(mpa, fraction[single - 1], 0, buffer); + } + buffer += mpa->synth_size; + } + { + register unsigned n = mpa->bits_left >> 3; + mpa->next_byte -= n; + mpa->bytes_left += n; + mpa->reservoir_size = 0; + } +} + diff --git a/polymer/jfaud/mpadec/layer2.c b/polymer/jfaud/mpadec/layer2.c new file mode 100755 index 000000000..2ce723c4d --- /dev/null +++ b/polymer/jfaud/mpadec/layer2.c @@ -0,0 +1,221 @@ +/* + * mpadec - MPEG audio decoder + * Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: layer2.c,v 1.1.1.1 2004/07/27 02:57:18 metal_man Exp $ */ + +#include "mpadec_internal.h" + +extern const uint32_t bitmask[17]; +extern alloc_table_t *alloc_tables[5]; + +extern unsigned getbits(mpadec_t mpadec, int n); +extern uint16_t update_crc(uint16_t init, uint8_t *buf, int length); + +static void II_decode_bitalloc(mpadec_t mpadec, uint8_t *bit_alloc, uint8_t *scalefac) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + alloc_table_t *alloc = mpa->frame.alloc_table; + uint8_t *scfsi, *ba = bit_alloc, *scf = scalefac; + unsigned i, step, sblimit2, sblimit = mpa->frame.sblimit; + uint32_t crclen = mpa->bytes_left; + uint8_t scfsi_buf[2*SBLIMIT]; + + if (mpa->frame.channels > 1) { + unsigned jsbound = mpa->frame.jsbound; + sblimit2 = sblimit << 1; + for (i = jsbound; i; i--, alloc += (1 << step)) { + step = alloc->bits; + *ba++ = (uint8_t)GETBITS(step); + *ba++ = (uint8_t)GETBITS(step); + } + for (i = sblimit - jsbound; i; i--, alloc += (1 << step)) { + step = alloc->bits; + ba[0] = (uint8_t)GETBITS(step); + ba[1] = ba[0]; + ba += 2; + } + ba = bit_alloc; + scfsi = scfsi_buf; + for (i = sblimit2; i; i--) if (*ba++) *scfsi++ = (uint8_t)GETBITS(2); + } else { + sblimit2 = sblimit; + for (i = sblimit; i; i--, alloc += (1 << step)) { + step = alloc->bits; + *ba++ = (uint8_t)GETBITS(step); + } + ba = bit_alloc; + scfsi = scfsi_buf; + for (i = sblimit; i; i--) if (*ba++) *scfsi++ = (uint8_t)GETBITS(2); + } + if (mpa->config.crc && mpa->frame.CRC) { + crclen -= mpa->bytes_left; + mpa->crc = update_crc(mpa->crc, mpa->next_byte - crclen, ((crclen << 3) - mpa->bits_left)); + if (mpa->crc != mpa->frame.crc) mpa->error = TRUE; + } + ba = bit_alloc; + scfsi = scfsi_buf; + for (i = sblimit2; i; i--) { + if (*ba++) { + switch (*scfsi++) { + case 0: scf[0] = (uint8_t)GETBITS(6); + scf[1] = (uint8_t)GETBITS(6); + scf[2] = (uint8_t)GETBITS(6); + break; + case 1: scf[0] = (uint8_t)GETBITS(6); + scf[1] = scf[0]; + scf[2] = (uint8_t)GETBITS(6); + break; + case 2: scf[0] = (uint8_t)GETBITS(6); + scf[1] = scf[2] = scf[0]; + break; + default: scf[0] = (uint8_t)GETBITS(6); + scf[1] = (uint8_t)GETBITS(6); + scf[2] = scf[1]; + break; + } + scf += 3; + } + } +} + +static void II_decode_samples(mpadec_t mpadec, uint8_t *bit_alloc, uint8_t *scalefac, FLOAT fraction[2][4][SBLIMIT], int x1) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + alloc_table_t *alloc = mpa->frame.alloc_table, *alloc2; + uint8_t *ba = bit_alloc, *scf = scalefac; + unsigned i, j, k, step, sblimit = mpa->frame.sblimit, jsbound = mpa->frame.jsbound; + + for (i = 0; i < jsbound; i++, alloc += (1 << step)) { + step = alloc->bits; + for (j = 0; j < (unsigned)mpa->frame.channels; j++) { + unsigned b = *ba++; int d; + if (b) { + alloc2 = alloc + b; + k = alloc2->bits; + d = alloc2->d; + if (d < 0) { + register FLOAT cm = mpa->tables.muls[k][scf[x1]]; + fraction[j][0][i] = ((FLOAT)((int)GETBITS(k) + d))*cm; + fraction[j][1][i] = ((FLOAT)((int)GETBITS(k) + d))*cm; + fraction[j][2][i] = ((FLOAT)((int)GETBITS(k) + d))*cm; + } else { + unsigned idx = GETBITS(k), m = scf[x1]; + uint8_t *tab = (mpa->tables.mp2tables[d] + 3*idx); + fraction[j][0][i] = mpa->tables.muls[*tab++][m]; + fraction[j][1][i] = mpa->tables.muls[*tab++][m]; + fraction[j][2][i] = mpa->tables.muls[*tab][m]; + } + scf += 3; + } else fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0; + } + } + for (i = jsbound; i < sblimit; i++, alloc += (1 << step)) { + unsigned b = ba[1]; int d; + step = alloc->bits; + ba += 2; + if (b) { + alloc2 = alloc + b; + k = alloc2->bits; + d = alloc2->d; + if (d < 0) { + register FLOAT cm = mpa->tables.muls[k][scf[x1 + 3]]; + fraction[1][0][i] = fraction[0][0][i] = ((FLOAT)((int)GETBITS(k) + d))*cm; + fraction[1][1][i] = fraction[0][1][i] = ((FLOAT)((int)GETBITS(k) + d))*cm; + fraction[1][2][i] = fraction[0][2][i] = ((FLOAT)((int)GETBITS(k) + d))*cm; + cm = mpa->tables.muls[k][scf[x1]]; + fraction[0][0][i] *= cm; + fraction[0][1][i] *= cm; + fraction[0][2][i] *= cm; + } else { + unsigned idx = GETBITS(k), m1 = scf[x1], m2 = scf[x1 + 3]; + uint8_t *tab = (mpa->tables.mp2tables[d] + 3*idx); + fraction[0][0][i] = mpa->tables.muls[*tab][m1]; + fraction[1][0][i] = mpa->tables.muls[*tab++][m2]; + fraction[0][1][i] = mpa->tables.muls[*tab][m1]; + fraction[1][1][i] = mpa->tables.muls[*tab++][m2]; + fraction[0][2][i] = mpa->tables.muls[*tab][m1]; + fraction[1][2][i] = mpa->tables.muls[*tab][m2]; + } + scf += 6; + } else fraction[0][0][i] = fraction[0][1][i] = fraction[0][2][i] = + fraction[1][0][i] = fraction[1][1][i] = fraction[1][2][i] = 0.0; + } + if (sblimit > (unsigned)mpa->frame.downsample_sblimit) sblimit = mpa->frame.downsample_sblimit; + for (i = sblimit; i < SBLIMIT; i++) + for (j = 0; j < (unsigned)mpa->frame.channels; j++) fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0; +} + +void decode_layer2(mpadec_t mpadec, uint8_t *buffer) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + int i, j, table, single; + FLOAT fraction[2][4][SBLIMIT]; + uint8_t bit_alloc[2*SBLIMIT]; + uint8_t scalefac[3*2*SBLIMIT]; + static uint8_t sblimits[5] = { 27 , 30 , 8, 12 , 30 }; + static uint8_t translate[3][2][16] = { { { 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 0 }, + { 0, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } }, + { { 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 1, 1, 1, 1, 1, 0 }, + { 0, 3, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } } }; + + mpa->error = FALSE; + mpa->bits_left = 0; + if (mpa->frame.LSF) table = 4; + else table = translate[mpa->frame.frequency_index][2 - mpa->frame.channels][mpa->frame.bitrate_index]; + mpa->frame.alloc_table = alloc_tables[table]; + mpa->frame.sblimit = sblimits[table]; + mpa->frame.jsbound = (uint8_t)((mpa->frame.mode == MPG_MD_JOINT_STEREO) ? ((mpa->frame.mode_ext + 1) << 2) : mpa->frame.sblimit); + if (mpa->frame.channels > 1) switch (mpa->config.mode) { + case MPADEC_CONFIG_MONO: single = 0; break; + case MPADEC_CONFIG_CHANNEL1: single = 1; break; + case MPADEC_CONFIG_CHANNEL2: single = 2; break; + default: single = -1; break; + } else single = 1; + II_decode_bitalloc(mpa, bit_alloc, scalefac); + for (i = 0; i < SCALE_BLOCK; i++) { + II_decode_samples(mpa, bit_alloc, scalefac, fraction, i >> 2); + if (!single) for (j = 0; j < 3; j++) { + register int k; + for (k = 0; k < SBLIMIT; k++) fraction[0][j][k] = 0.5*(fraction[0][j][k] + fraction[1][j][k]); + } + if (single < 0) { + for (j = 0; j < 3; j++, (uint8_t *)buffer += mpa->synth_size) { + mpa->synth_func(mpa, fraction[0][j], 0, buffer); + mpa->synth_func(mpa, fraction[1][j], 1, buffer); + } + } else if (!single) { + for (j = 0; j < 3; j++, (uint8_t *)buffer += mpa->synth_size) { + mpa->synth_func(mpa, fraction[0][j], 0, buffer); + } + } else { + for (j = 0; j < 3; j++, (uint8_t *)buffer += mpa->synth_size) { + mpa->synth_func(mpa, fraction[single - 1][j], 0, buffer); + } + } + } + { + register unsigned n = mpa->bits_left >> 3; + mpa->next_byte -= n; + mpa->bytes_left += n; + mpa->reservoir_size = 0; + } +} + diff --git a/polymer/jfaud/mpadec/layer3.c b/polymer/jfaud/mpadec/layer3.c new file mode 100755 index 000000000..d606d1971 --- /dev/null +++ b/polymer/jfaud/mpadec/layer3.c @@ -0,0 +1,994 @@ +/* + * mpadec - MPEG audio decoder + * Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: layer3.c,v 1.2 2004/12/13 06:47:35 metal_man Exp $ */ + +#include "mpadec_internal.h" + +extern const uint32_t bitmask[17]; +extern bandinfo_t band_info[]; +extern newhuff_t hufft[], hufftc[]; +extern const FLOAT newcos[8]; +extern const FLOAT tfcos36[9]; +extern const FLOAT tfcos12[3]; +extern const FLOAT cs[8]; +extern const FLOAT ca[8]; + +extern uint32_t getbits(mpadec_t mpadec, unsigned n); +extern uint16_t update_crc(uint16_t init, uint8_t *buf, int length); + +static int decode_layer3_sideinfo(mpadec_t mpadec) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + int ch, gr, ms_stereo, powdiff, databits = 0; + static const uint8_t tabs[2][5] = { { 2, 9, 5, 3, 4 }, { 1, 8, 1, 2, 9 } }; + const uint8_t *tab = tabs[mpa->frame.LSF]; + + ms_stereo = ((mpa->frame.mode == MPG_MD_JOINT_STEREO) && (mpa->frame.mode_ext & 2)); + powdiff = ((mpa->frame.channels > 1) && (mpa->config.mode == MPADEC_CONFIG_MONO)) ? 4 : 0; + mpa->sideinfo.main_data_begin = GETBITS(tab[1]); + if (mpa->frame.channels == 1) mpa->sideinfo.private_bits = GETBITS(tab[2]); + else mpa->sideinfo.private_bits = GETBITS(tab[3]); + if (!mpa->frame.LSF) { + for (ch = 0; ch < mpa->frame.channels; ch++) { + mpa->sideinfo.ch[ch].gr[0].scfsi = -1; + mpa->sideinfo.ch[ch].gr[1].scfsi = GETBITS(4); + } + } + for (gr = 0; gr < tab[0]; gr++) { + for (ch = 0; ch < mpa->frame.channels; ch++) { + register grinfo_t *grinfo = &mpa->sideinfo.ch[ch].gr[gr]; + grinfo->part2_3_length = GETBITS(12); + grinfo->big_values = GETBITS(9); + databits += grinfo->part2_3_length; + if (grinfo->big_values > 288) grinfo->big_values = 288; + grinfo->pow2gain = mpa->tables.gainpow2 + 256 - GETBITS(8) + powdiff; + if (ms_stereo) grinfo->pow2gain += 2; + grinfo->scalefac_compress = GETBITS(tab[4]); + if (GETBITS(1)) { + grinfo->block_type = (uint8_t)GETBITS(2); + grinfo->mixed_block_flag = (uint8_t)GETBITS(1); + grinfo->table_select[0] = GETBITS(5); + grinfo->table_select[1] = GETBITS(5); + grinfo->table_select[2] = 0; + grinfo->full_gain[0] = grinfo->pow2gain + (GETBITS(3) << 3); + grinfo->full_gain[1] = grinfo->pow2gain + (GETBITS(3) << 3); + grinfo->full_gain[2] = grinfo->pow2gain + (GETBITS(3) << 3); + if (!grinfo->block_type) { + mpa->error = TRUE; + return 0; + } else mpa->error = FALSE; + if (mpa->frame.LSF) { + if (grinfo->block_type == 2) { + if (grinfo->mixed_block_flag) { + if (mpa->frame.frequency_index == 8) grinfo->region1start = 48; + else grinfo->region1start = 48 >> 1; + } else { + if (mpa->frame.frequency_index == 8) grinfo->region1start = 36; + else grinfo->region1start = 36 >> 1; + } + } else { + if (mpa->frame.frequency_index == 8) grinfo->region1start = 54; + else grinfo->region1start = 54 >> 1; + } + } else grinfo->region1start = 36 >> 1; + grinfo->region2start = 576 >> 1; + } else { + grinfo->block_type = 0; + grinfo->mixed_block_flag = 0; + grinfo->table_select[0] = GETBITS(5); + grinfo->table_select[1] = GETBITS(5); + grinfo->table_select[2] = GETBITS(5); + { + register int tmp = GETBITS(4); + grinfo->region1start = band_info[mpa->frame.frequency_index].long_idx[tmp + 1] >> 1; + tmp += GETBITS(3); + grinfo->region2start = band_info[mpa->frame.frequency_index].long_idx[tmp + 2] >> 1; + } + } + if (!mpa->frame.LSF) grinfo->preflag = (uint8_t)GETBITS(1); + grinfo->scalefac_scale = (uint8_t)GETBITS(1); + grinfo->count1table_select = (uint8_t)GETBITS(1); + } + } + databits -= 8*mpa->sideinfo.main_data_begin; + return databits; +} + +static int III_get_scale_factors(mpadec_t mpadec, grinfo_t *gr_info, int32_t *scf) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + register grinfo_t *grinfo = gr_info; + int numbits = 0; + static uint8_t slen[2][16] = { {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4}, + {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3} }; + static uint8_t stab[3][6][4] = { { { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0} , + { 7, 7, 7,0 } , { 6, 6, 6,3 } , { 8, 8,5,0} } , + { { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0} , + {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0} } , + { { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0} , + { 6,15,12,0 } , { 6,12, 9,6 } , { 6,18,9,0} } }; + + if (!mpa->frame.LSF) { + int i, num0 = slen[0][grinfo->scalefac_compress], num1 = slen[1][grinfo->scalefac_compress]; + if (grinfo->block_type == 2) { + i = 18; numbits = 18*(num0 + num1); + if (grinfo->mixed_block_flag) { + i--; + numbits -= num0; + } + for (; i; i--) *scf++ = GETBITS(num0); + for (i = 18; i; i--) *scf++ = GETBITS(num1); + scf[0] = scf[1] = scf[2] = 0; + } else { + if (grinfo->scfsi < 0) { + for (i = 11; i; i--) *scf++ = GETBITS(num0); + for (i = 10; i; i--) *scf++ = GETBITS(num1); + numbits = 10*(num0 + num1) + num0; + *scf = 0; + } else { + numbits = 0; + if (!(grinfo->scfsi & 8)) { + for (i = 6; i; i--) *scf++ = GETBITS(num0); + numbits += 6*num0; + } else scf += 6; + if (!(grinfo->scfsi & 4)) { + for (i = 5; i; i--) *scf++ = GETBITS(num0); + numbits += 5*num0; + } else scf += 5; + if (!(grinfo->scfsi & 2)) { + for (i = 5; i; i--) *scf++ = GETBITS(num1); + numbits += 5*num1; + } else scf += 5; + if (!(grinfo->scfsi & 1)) { + for (i = 5; i; i--) *scf++ = GETBITS(num1); + numbits += 5*num1; + } else scf += 5; + *scf = 0; + } + } + } else { + int i, j, n = 0; + unsigned s_len; uint8_t *pnt; + if ((mpa->frame.mode == MPG_MD_JOINT_STEREO) && (mpa->frame.mode_ext & 1)) { + s_len = mpa->tables.i_slen2[grinfo->scalefac_compress >> 1]; + } else s_len = mpa->tables.n_slen2[grinfo->scalefac_compress]; + grinfo->preflag = (uint8_t)((s_len >> 15) & 1); + if (grinfo->block_type == 2) n = grinfo->mixed_block_flag ? 2 : 1; + pnt = stab[n][(s_len >> 12) & 7]; + for (i = 0; i < 4; i++) { + int num = s_len & 7; + s_len >>= 3; + if (num) { + for (j = 0; j < (int)pnt[i]; j++) *scf++ = GETBITS(num); + numbits += pnt[i]*num; + } else for (j = 0; j < (int)pnt[i]; j++) *scf++ = 0; + } + for (i = (n << 1) + 1; i; i--) *scf++ = 0; + } + return numbits; +} + +static int III_decode_samples(mpadec_t mpadec, grinfo_t *gr_info, FLOAT xr[SBLIMIT][SSLIMIT], int32_t *scf, int part2bits) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + register grinfo_t *grinfo = gr_info; + int shift = 1 + grinfo->scalefac_scale, l[3], l3; + int part2remain = grinfo->part2_3_length - part2bits; + FLOAT *xrptr = (FLOAT *)xr; int32_t *me; + static uint8_t pretab1[22] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 }; + static uint8_t pretab2[22] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + + l3 = ((576 >> 1) - grinfo->big_values) >> 1; + if (grinfo->big_values <= grinfo->region1start) { + l[0] = grinfo->big_values; + l[1] = l[2] = 0; + } else { + l[0] = grinfo->region1start; + if (grinfo->big_values <= grinfo->region2start) { + l[1] = grinfo->big_values - l[0]; l[2] = 0; + } else { + l[1] = grinfo->region2start - l[0]; + l[2] = grinfo->big_values - grinfo->region2start; + } + } + if (grinfo->block_type == 2) { + int32_t i, max[4], step = 0, lwin = 0, cb = 0; + register FLOAT v = 0.0; + register int32_t *m, mc; + + if (grinfo->mixed_block_flag) { + max[3] = -1; + max[0] = max[1] = max[2] = 2; + m = mpa->tables.map[mpa->frame.frequency_index][0]; + me = mpa->tables.mapend[mpa->frame.frequency_index][0]; + } else { + max[0] = max[1] = max[2] = max[3] = -1; + m = mpa->tables.map[mpa->frame.frequency_index][1]; + me = mpa->tables.mapend[mpa->frame.frequency_index][1]; + } + mc = 0; + for (i = 0; i < 2; i++) { + int lp = l[i]; + newhuff_t *h = hufft + grinfo->table_select[i]; + for (; lp; lp--, mc--) { + register int x, y; + if (!mc) { + mc = *m++; + xrptr = ((FLOAT *)xr) + (*m++); + lwin = *m++; + cb = *m++; + if (lwin == 3) { + v = grinfo->pow2gain[(*scf++) << shift]; + step = 1; + } else { + v = grinfo->full_gain[lwin][(*scf++) << shift]; + step = 3; + } + } + { + register int16_t *val = h->table; + while ((y = *val++) < 0) { + if (GETBITS(1)) val -= y; + part2remain--; + } + x = y >> 4; + y &= 0x0F; + } + if ((x == 15) && h->linbits) { + max[lwin] = cb; + part2remain -= h->linbits + 1; + x += GETBITS(h->linbits); + if (GETBITS(1)) *xrptr = -mpa->tables.ispow[x]*v; + else *xrptr = mpa->tables.ispow[x]*v; + } else if (x) { + max[lwin] = cb; + if (GETBITS(1)) *xrptr = -mpa->tables.ispow[x]*v; + else *xrptr = mpa->tables.ispow[x]*v; + part2remain--; + } else *xrptr = 0.0; + xrptr += step; + if ((y == 15) && h->linbits) { + max[lwin] = cb; + part2remain -= h->linbits + 1; + y += GETBITS(h->linbits); + if (GETBITS(1)) *xrptr = -mpa->tables.ispow[y]*v; + else *xrptr = mpa->tables.ispow[y]*v; + } else if (y) { + max[lwin] = cb; + if (GETBITS(1)) *xrptr = -mpa->tables.ispow[y]*v; + else *xrptr = mpa->tables.ispow[y]*v; + part2remain--; + } else *xrptr = 0.0; + xrptr += step; + } + } + for (; l3 && (part2remain > 0); l3--) { + newhuff_t *h = hufftc + grinfo->count1table_select; + register int16_t *val = h->table, a; + while ((a = *val++) < 0) { + part2remain--; + if (part2remain < 0) { + part2remain++; + a = 0; + break; + } + if (GETBITS(1)) val -= a; + } + for (i = 0; i < 4; i++) { + if (!(i & 1)) { + if (!mc) { + mc = *m++; + xrptr = ((FLOAT *)xr) + (*m++); + lwin = *m++; + cb = *m++; + if (lwin == 3) { + v = grinfo->pow2gain[(*scf++) << shift]; + step = 1; + } else { + v = grinfo->full_gain[lwin][(*scf++) << shift]; + step = 3; + } + } + mc--; + } + if (a & (8 >> i)) { + max[lwin] = cb; + part2remain--; + if (part2remain < 0) { + part2remain++; + break; + } + if (GETBITS(1)) *xrptr = -v; + else *xrptr = v; + } else *xrptr = 0.0; + xrptr += step; + } + } + if (lwin < 3) { + while (1) { + for (; mc > 0; mc--) { + xrptr[0] = xrptr[3] = 0.0; + xrptr += 6; + } + if (m >= me) break; + mc = *m++; + xrptr = ((FLOAT *)xr) + (*m++); + if ((*m++) == 0) break; + m++; + } + } + grinfo->maxband[0] = max[0] + 1; + grinfo->maxband[1] = max[1] + 1; + grinfo->maxband[2] = max[2] + 1; + grinfo->maxbandl = max[3] + 1; + { + int rmax = max[0] > max[1] ? max[0] : max[1]; + rmax = (rmax > max[2] ? rmax : max[2]) + 1; + grinfo->maxb = rmax ? mpa->tables.short_limit[mpa->frame.frequency_index][rmax] : mpa->tables.long_limit[mpa->frame.frequency_index][max[3] + 1]; + } + } else { + uint8_t *pretab = grinfo->preflag ? pretab1 : pretab2; + int32_t i, max = -1, cb = 0, mc = 0; + int32_t *m = mpa->tables.map[mpa->frame.frequency_index][2]; + register FLOAT v = 0.0; + + for (i = 0; i < 3; i++) { + int lp = l[i]; + newhuff_t *h = hufft + grinfo->table_select[i]; + for (; lp; lp--, mc--) { + register int x, y; + if (!mc) { + mc = *m++; + cb = *m++; + if (cb == 21) v = 0.0; + else v = grinfo->pow2gain[((*scf++) + (*pretab++)) << shift]; + } + { + register int16_t *val = h->table; + while ((y = *val++) < 0) { + if (GETBITS(1)) val -= y; + part2remain--; + } + x = y >> 4; + y &= 0x0F; + } + if ((x == 15) && h->linbits) { + max = cb; + part2remain -= h->linbits + 1; + x += GETBITS(h->linbits); + if (GETBITS(1)) *xrptr++ = -mpa->tables.ispow[x]*v; + else *xrptr++ = mpa->tables.ispow[x]*v; + } else if (x) { + max = cb; + if (GETBITS(1)) *xrptr++ = -mpa->tables.ispow[x]*v; + else *xrptr++ = mpa->tables.ispow[x]*v; + part2remain--; + } else *xrptr++ = 0.0; + if ((y == 15) && h->linbits) { + max = cb; + part2remain -= h->linbits + 1; + y += GETBITS(h->linbits); + if (GETBITS(1)) *xrptr++ = -mpa->tables.ispow[y]*v; + else *xrptr++ = mpa->tables.ispow[y]*v; + } else if (y) { + max = cb; + if (GETBITS(1)) *xrptr++ = -mpa->tables.ispow[y]*v; + else *xrptr++ = mpa->tables.ispow[y]*v; + part2remain--; + } else *xrptr++ = 0.0; + } + } + for (; l3 && (part2remain > 0); l3--) { + newhuff_t *h = hufftc + grinfo->count1table_select; + register int16_t *val = h->table, a; + while ((a = *val++) < 0) { + part2remain--; + if (part2remain < 0) { + part2remain++; + a = 0; + break; + } + if (GETBITS(1)) val -= a; + } + for (i = 0; i < 4; i++) { + if (!(i & 1)) { + if (!mc) { + mc = *m++; + cb = *m++; + v = grinfo->pow2gain[((*scf++) + (*pretab++)) << shift]; + } + mc--; + } + if (a & (8 >> i)) { + max = cb; + part2remain--; + if (part2remain < 0) { + part2remain++; + break; + } + if (GETBITS(1)) *xrptr++ = -v; + else *xrptr++ = v; + } else *xrptr++ = 0.0; + } + } + grinfo->maxbandl = max + 1; + grinfo->maxb = mpa->tables.long_limit[mpa->frame.frequency_index][max + 1]; + } + while (xrptr < &xr[SBLIMIT][0]) *xrptr++ = 0.0; + while (part2remain > 0) { + register unsigned tmp, i = (part2remain > 16) ? 16 : part2remain; + tmp = GETBITS(i); + part2remain -= i; + i = tmp; + } + mpa->error = (uint8_t)((part2remain < 0) ? TRUE : FALSE); + return mpa->error; +} + +static void III_i_stereo(mpadec_t mpadec, grinfo_t *gr_info, FLOAT xrbuf[2][SBLIMIT][SSLIMIT], int32_t *scalefac) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + register grinfo_t *grinfo = gr_info; + FLOAT (*xr)[SBLIMIT*SSLIMIT] = (FLOAT (*)[SBLIMIT*SSLIMIT])xrbuf; + bandinfo_t *bi = &band_info[mpa->frame.frequency_index]; + int tab = mpa->frame.LSF + (grinfo->scalefac_compress & mpa->frame.LSF); + int ms_stereo = ((mpa->frame.mode == MPG_MD_JOINT_STEREO) && (mpa->frame.mode_ext & 2)) ? TRUE : FALSE; + const FLOAT *tab1, *tab2; + + tab1 = mpa->tables.istabs[tab][ms_stereo][0]; + tab2 = mpa->tables.istabs[tab][ms_stereo][1]; + if (grinfo->block_type == 2) { + int lwin, do_l = grinfo->mixed_block_flag; + for (lwin = 0; lwin < 3; lwin++) { + int32_t is_p, sb, idx, sfb = grinfo->maxband[lwin]; + if (sfb > 3) do_l = FALSE; + for (; sfb < 12; sfb++) { + is_p = scalefac[3*sfb + lwin - grinfo->mixed_block_flag]; + if (is_p != 7) { + FLOAT t1 = tab1[is_p], t2 = tab2[is_p]; + sb = bi->short_diff[sfb]; + idx = bi->short_idx[sfb] + lwin; + for (; sb; sb--, idx += 3) { + register FLOAT v = xr[0][idx]; + xr[0][idx] = v*t1; + xr[1][idx] = v*t2; + } + } + } + is_p = scalefac[3*11 + lwin - grinfo->mixed_block_flag]; + sb = bi->short_diff[12]; + idx = bi->short_idx[12] + lwin; + if (is_p != 7) { + FLOAT t1 = tab1[is_p], t2 = tab2[is_p]; + for (; sb; sb--, idx += 3) { + register FLOAT v = xr[0][idx]; + xr[0][idx] = v*t1; + xr[1][idx] = v*t2; + } + } + } + if (do_l) { + int sfb = grinfo->maxbandl; + int idx = bi->long_idx[sfb]; + for (; sfb < 8; sfb++) { + int sb = bi->long_diff[sfb]; + int is_p = scalefac[sfb]; + if (is_p != 7) { + FLOAT t1 = tab1[is_p], t2 = tab2[is_p]; + for (; sb; sb--, idx++) { + register FLOAT v = xr[0][idx]; + xr[0][idx] = v*t1; + xr[1][idx] = v*t2; + } + } else idx += sb; + } + } + } else { + int sfb = grinfo->maxbandl; + int is_p, idx = bi->long_idx[sfb]; + for (; sfb < 21; sfb++) { + int sb = bi->long_diff[sfb]; + is_p = scalefac[sfb]; + if (is_p != 7) { + FLOAT t1 = tab1[is_p], t2 = tab2[is_p]; + for (; sb; sb--, idx++) { + register FLOAT v = xr[0][idx]; + xr[0][idx] = v*t1; + xr[1][idx] = v*t2; + } + } else idx += sb; + } + is_p = scalefac[20]; + if (is_p != 7) { + int sb = bi->long_diff[21]; + FLOAT t1 = tab1[is_p], t2 = tab2[is_p]; + for (; sb; sb--, idx++) { + register FLOAT v = xr[0][idx]; + xr[0][idx] = v*t1; + xr[1][idx] = v*t2; + } + } + } +} + +static void III_antialias(grinfo_t *gr_info, FLOAT xr[SBLIMIT][SSLIMIT]) +{ + register grinfo_t *grinfo = gr_info; + int sblim; + + if (grinfo->block_type == 2) { + if (!grinfo->mixed_block_flag) return; + sblim = 1; + } else sblim = grinfo->maxb - 1; + { + int sb; + FLOAT *xr1 = (FLOAT *)xr[1]; + for (sb = sblim; sb; sb--, xr1 += 10) { + int ss; + FLOAT *xr2 = xr1; + for (ss = 0; ss < 8; ss++) { + register FLOAT bu = *--xr2, bd = *xr1; + *xr2 = bu*cs[ss] - bd*ca[ss]; + *xr1++ = bd*cs[ss] + bu*ca[ss]; + } + } + } +} + +static void dct36(register FLOAT *in, register FLOAT *out1, register FLOAT *out2, register FLOAT *w, register FLOAT *ts) +{ + FLOAT tmp[18]; + + { + in[17] += in[16]; in[16] += in[15]; in[15] += in[14]; + in[14] += in[13]; in[13] += in[12]; in[12] += in[11]; + in[11] += in[10]; in[10] += in[9]; in[9] += in[8]; + in[8] += in[7]; in[7] += in[6]; in[6] += in[5]; + in[5] += in[4]; in[4] += in[3]; in[3] += in[2]; + in[2] += in[1]; in[1] += in[0]; + + in[17] += in[15]; in[15] += in[13]; in[13] += in[11]; in[11] += in[9]; + in[9] += in[7]; in[7] += in[5]; in[5] += in[3]; in[3] += in[1]; + + { + FLOAT t3; + { + FLOAT t0, t1, t2; + + t0 = newcos[7]*(in[8] + in[16] - in[4]); + t1 = newcos[7]*in[12]; + t3 = in[0]; + t2 = t3 - t1 - t1; + tmp[1] = tmp[7] = t2 - t0; + tmp[4] = t2 + t0 + t0; + t3 += t1; + t2 = newcos[6]*(in[10] + in[14] - in[2]); + tmp[1] -= t2; + tmp[7] += t2; + } + { + FLOAT t0, t1, t2; + + t0 = newcos[0]*(in[4] + in[8]); + t1 = newcos[1]*(in[8] - in[16]); + t2 = newcos[2]*(in[4] + in[16]); + tmp[2] = tmp[6] = t3 - t0 - t2; + tmp[0] = tmp[8] = t3 + t0 + t1; + tmp[3] = tmp[5] = t3 - t1 + t2; + } + } + { + FLOAT t1, t2, t3; + + t1 = newcos[3]*(in[2] + in[10]); + t2 = newcos[4]*(in[10] - in[14]); + t3 = newcos[6]*in[6]; + { + FLOAT t0 = t1 + t2 + t3; + tmp[0] += t0; + tmp[8] -= t0; + } + t2 -= t3; + t1 -= t3; + t3 = newcos[5]*(in[2] + in[14]); + t1 += t3; + tmp[3] += t1; + tmp[5] -= t1; + t2 -= t3; + tmp[2] += t2; + tmp[6] -= t2; + } + { + FLOAT t0, t1, t2, t3, t4, t5, t6, t7; + + t1 = newcos[7]*in[13]; + t2 = newcos[7]*(in[9] + in[17] - in[5]); + t3 = in[1] + t1; + t4 = in[1] - t1 - t1; + t5 = t4 - t2; + t0 = newcos[0]*(in[5] + in[9]); + t1 = newcos[1]*(in[9] - in[17]); + tmp[13] = (t4 + t2 + t2)*tfcos36[17 - 13]; + t2 = newcos[2]*(in[5] + in[17]); + t6 = t3 - t0 - t2; + t0 += t3 + t1; + t3 += t2 - t1; + t2 = newcos[3]*(in[3] + in[11]); + t4 = newcos[4]*(in[11] - in[15]); + t7 = newcos[6]*in[7]; + t1 = t2 + t4 + t7; + tmp[17] = (t0 + t1)*tfcos36[17 - 17]; + tmp[9] = (t0 - t1)*tfcos36[17 - 9]; + t1 = newcos[5]*(in[3] + in[15]); + t2 += t1 - t7; + tmp[14] = (t3 + t2)*tfcos36[17 - 14]; + t0 = newcos[6]*(in[11] + in[15] - in[3]); + tmp[12] = (t3 - t2)*tfcos36[17 - 12]; + t4 -= t1 + t7; + tmp[16] = (t5 - t0)*tfcos36[17 - 16]; + tmp[10] = (t5 + t0)*tfcos36[17 - 10]; + tmp[15] = (t6 + t4)*tfcos36[17 - 15]; + tmp[11] = (t6 - t4)*tfcos36[17 - 11]; + } + } +#define DCT36_MACRO(v) { \ + register FLOAT tmpval = tmp[(v)] + tmp[17 - (v)]; \ + out2[9 + (v)] = tmpval*w[27 + (v)]; \ + out2[8 - (v)] = tmpval*w[26 - (v)]; \ + tmpval = tmp[(v)] - tmp[17 - (v)]; \ + ts[SBLIMIT*(8 - (v))] = out1[8 - (v)] + tmpval*w[8 - (v)]; \ + ts[SBLIMIT*(9 + (v))] = out1[9 + (v)] + tmpval*w[9 + (v)]; \ + } + { + DCT36_MACRO(0); + DCT36_MACRO(1); + DCT36_MACRO(2); + DCT36_MACRO(3); + DCT36_MACRO(4); + DCT36_MACRO(5); + DCT36_MACRO(6); + DCT36_MACRO(7); + DCT36_MACRO(8); + } +#undef DCT36_MACRO +} + +static void dct12(register FLOAT *in, register FLOAT *out1, register FLOAT *out2, register FLOAT *w, register FLOAT *ts) +{ +#define DCT12_PART1 in5 = in[5*3]; \ + in5 += (in4 = in[4*3]); \ + in4 += (in3 = in[3*3]); \ + in3 += (in2 = in[2*3]); \ + in2 += (in1 = in[1*3]); \ + in1 += (in0 = in[0*3]); \ + in5 += in3; in3 += in1; \ + in2 *= newcos[6]; \ + in3 *= newcos[6]; + +#define DCT12_PART2 in0 += in4*newcos[7]; \ + in4 = in0 + in2; \ + in0 -= in2; \ + in1 += in5*newcos[7]; \ + in5 = (in1 + in3)*tfcos12[0]; \ + in1 = (in1 - in3)*tfcos12[2]; \ + in3 = in4 + in5; \ + in4 -= in5; \ + in2 = in0 + in1; \ + in0 -= in1; + + { + FLOAT in0, in1, in2, in3, in4, in5; + + ts[0*SBLIMIT] = out1[0]; ts[1*SBLIMIT] = out1[1]; ts[2*SBLIMIT] = out1[2]; + ts[3*SBLIMIT] = out1[3]; ts[4*SBLIMIT] = out1[4]; ts[5*SBLIMIT] = out1[5]; + + DCT12_PART1 + + { + register FLOAT tmp0, tmp1 = in0 - in4; + { + register FLOAT tmp2 = (in1 - in5)*tfcos12[1]; + tmp0 = tmp1 + tmp2; + tmp1 -= tmp2; + } + ts[(17 - 1)*SBLIMIT] = out1[17 - 1] + tmp0*w[11 - 1]; + ts[(12 + 1)*SBLIMIT] = out1[12 + 1] + tmp0*w[6 + 1]; + ts[(6 + 1)*SBLIMIT] = out1[6 + 1] + tmp1*w[1]; + ts[(11 - 1)*SBLIMIT] = out1[11 - 1] + tmp1*w[5 - 1]; + } + + DCT12_PART2 + + ts[(17 - 0)*SBLIMIT] = out1[17 - 0] + in2*w[11 - 0]; + ts[(12 + 0)*SBLIMIT] = out1[12 + 0] + in2*w[6 + 0]; + ts[(12 + 2)*SBLIMIT] = out1[12 + 2] + in3*w[6 + 2]; + ts[(17 - 2)*SBLIMIT] = out1[17 - 2] + in3*w[11 - 2]; + ts[(6 + 0)*SBLIMIT] = out1[6 + 0] + in0*w[0]; + ts[(11 - 0)*SBLIMIT] = out1[11 - 0] + in0*w[5 - 0]; + ts[(6 + 2)*SBLIMIT] = out1[6 + 2] + in4*w[2]; + ts[(11 - 2)*SBLIMIT] = out1[11 - 2] + in4*w[5 - 2]; + } + in++; + { + FLOAT in0, in1, in2, in3, in4, in5; + + DCT12_PART1 + + { + register FLOAT tmp0, tmp1 = in0 - in4; + { + register FLOAT tmp2 = (in1 - in5)*tfcos12[1]; + tmp0 = tmp1 + tmp2; + tmp1 -= tmp2; + } + out2[5 - 1] = tmp0*w[11 - 1]; + out2[0 + 1] = tmp0*w[6 + 1]; + ts[(12 + 1)*SBLIMIT] += tmp1*w[0 + 1]; + ts[(17 - 1)*SBLIMIT] += tmp1*w[5 - 1]; + } + + DCT12_PART2 + + out2[5 - 0] = in2*w[11 - 0]; + out2[0 + 0] = in2*w[6 + 0]; + out2[0 + 2] = in3*w[6 + 2]; + out2[5 - 2] = in3*w[11 - 2]; + ts[(12 + 0)*SBLIMIT] += in0*w[0]; + ts[(17 - 0)*SBLIMIT] += in0*w[5 - 0]; + ts[(12 + 2)*SBLIMIT] += in4*w[2]; + ts[(17 - 2)*SBLIMIT] += in4*w[5 - 2]; + } + in++; + { + FLOAT in0, in1, in2, in3, in4, in5; + + out2[12] = out2[13] = out2[14] = out2[15] = out2[16] = out2[17] = 0.0; + + DCT12_PART1 + + { + register FLOAT tmp0, tmp1 = in0 - in4; + { + register FLOAT tmp2 = (in1 - in5)*tfcos12[1]; + tmp0 = tmp1 + tmp2; + tmp1 -= tmp2; + } + out2[11 - 1] = tmp0*w[11 - 1]; + out2[6 + 1] = tmp0*w[6 + 1]; + out2[0 + 1] += tmp1*w[1]; + out2[5 - 1] += tmp1*w[5 - 1]; + } + + DCT12_PART2 + + out2[11 - 0] = in2*w[11 - 0]; + out2[6 + 0] = in2*w[6 + 0]; + out2[6 + 2] = in3*w[6 + 2]; + out2[11 - 2] = in3*w[11 - 2]; + out2[0 + 0] += in0*w[0]; + out2[5 - 0] += in0*w[5 - 0]; + out2[0 + 2] += in4*w[2]; + out2[5 - 2] += in4*w[5 - 2]; + } +#undef DCT12_PART1 +#undef DCT12_PART2 +} + +static void III_hybrid(mpadec_t mpadec, grinfo_t *gr_info, FLOAT fs_in[SBLIMIT][SSLIMIT], FLOAT ts_out[SSLIMIT][SBLIMIT], int channel) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + register grinfo_t *grinfo = gr_info; + FLOAT *tsptr = (FLOAT *)ts_out; + FLOAT *out1, *out2; + unsigned bt = grinfo->block_type, sb = 0; + + { + register unsigned b = mpa->hybrid_block[channel]; + out1 = mpa->hybrid_buffers[b][channel]; + b ^= 1; + out2 = mpa->hybrid_buffers[b][channel]; + mpa->hybrid_block[channel] = (uint8_t)b; + } + if (grinfo->mixed_block_flag) { + sb = 2; + dct36(fs_in[0], out1, out2, mpa->tables.win[0][0], tsptr); + dct36(fs_in[1], out1 + SSLIMIT, out2 + SSLIMIT, mpa->tables.win[1][0], tsptr + 1); + out1 += 36; out2 += 36; tsptr += 2; + } + if (bt == 2) { + for (; sb < grinfo->maxb; sb += 2, out1 += 36, out2 += 36, tsptr += 2) { + dct12(fs_in[sb], out1, out2, mpa->tables.win[0][2], tsptr); + dct12(fs_in[sb + 1], out1 + SSLIMIT, out2 + SSLIMIT, mpa->tables.win[1][2], tsptr + 1); + } + } else { + for (; sb < grinfo->maxb; sb += 2, out1 += 36, out2 += 36, tsptr += 2) { + dct36(fs_in[sb], out1, out2, mpa->tables.win[0][bt], tsptr); + dct36(fs_in[sb + 1], out1 + SSLIMIT, out2 + SSLIMIT, mpa->tables.win[1][bt], tsptr + 1); + } + } + for (; sb < SBLIMIT; sb++, tsptr++) { + register int i; + for (i = 0; i < SSLIMIT; i++) { + tsptr[i*SBLIMIT] = *out1++; + *out2++ = 0.0; + } + } +} + +void decode_layer3(mpadec_t mpadec, uint8_t *buffer) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + uint8_t *saved_next_byte = mpa->next_byte; + uint32_t saved_bytes_left = mpa->bytes_left; + int32_t dbits, scalefacs[2][39]; + int ch, gr, ss, i_stereo, ms_stereo, single, channels, granules = mpa->frame.LSF ? 1 : 2; + + mpa->error = FALSE; + mpa->bits_left = 0; + if (mpa->config.crc && mpa->frame.CRC) { + mpa->crc = update_crc(mpa->crc, mpa->next_byte, mpa->ssize << 3); + if (mpa->crc != mpa->frame.crc) mpa->error = TRUE; + } + dbits = decode_layer3_sideinfo(mpa); + mpa->dsize = (((dbits < 0) ? 0 : dbits) + 7) >> 3; + mpa->next_byte = saved_next_byte + mpa->ssize; + mpa->bytes_left = saved_bytes_left - mpa->ssize; + mpa->bits_left = 0; + saved_next_byte = NULL; + saved_bytes_left = mpa->bytes_left; + if (mpa->error) mpa->sideinfo.main_data_begin = mpa->reservoir_size + 1; + if (mpa->sideinfo.main_data_begin) { + if (mpa->sideinfo.main_data_begin <= mpa->reservoir_size) { + uint8_t *ptr = mpa->reservoir + mpa->reservoir_size; + uint32_t tmp = mpa->frame.frame_size - mpa->hsize - mpa->ssize; + if (tmp > (sizeof(mpa->reservoir) - mpa->reservoir_size)) tmp = sizeof(mpa->reservoir) - mpa->reservoir_size; + saved_next_byte = mpa->next_byte; + memcpy(ptr, mpa->next_byte, tmp); + mpa->next_byte = ptr - mpa->sideinfo.main_data_begin; + mpa->bytes_left = mpa->sideinfo.main_data_begin + tmp; + } else { + uint32_t tmp = mpa->frame.frame_size - mpa->hsize - mpa->ssize; + if (tmp > 512) { + mpa->next_byte += tmp - 512; + mpa->bytes_left -= tmp - 512; + tmp = 512; + } + if ((mpa->reservoir_size) && (mpa->reservoir_size > 512)) { + memmove(mpa->reservoir, mpa->reservoir + mpa->reservoir_size - 512, 512); + mpa->reservoir_size = 512; + } + memcpy(mpa->reservoir + mpa->reservoir_size, mpa->next_byte, tmp); + mpa->reservoir_size += tmp; + mpa->next_byte += tmp; + mpa->bytes_left -= tmp; + memset(buffer, 0, mpa->frame.decoded_size); + mpa->error = TRUE; + return; + } + } + if (mpa->frame.mode == MPG_MD_JOINT_STEREO) { + i_stereo = mpa->frame.mode_ext & 1; + ms_stereo = (mpa->frame.mode_ext & 2) >> 1; + } else i_stereo = ms_stereo = 0; + if (mpa->frame.channels > 1) switch (mpa->config.mode) { + case MPADEC_CONFIG_MONO: single = 0; break; + case MPADEC_CONFIG_CHANNEL1: single = 1; break; + case MPADEC_CONFIG_CHANNEL2: single = 2; break; + default: single = -1; break; + } else single = 1; + channels = (single < 0) ? 2 : 1; + for (gr = 0; gr < granules; gr++) { + grinfo_t *grinfo = &mpa->sideinfo.ch[0].gr[gr]; + int32_t part2bits = III_get_scale_factors(mpa, grinfo, scalefacs[0]); + if (III_decode_samples(mpa, grinfo, mpa->hybrid_in[0], scalefacs[0], part2bits)) { + unsigned size = mpa->frame.decoded_size; + if (!mpa->frame.LSF && gr) size >>= 1; + memset(buffer, 0, size); + mpa->error = TRUE; + goto done; + } + if (mpa->frame.channels > 1) { + grinfo = &mpa->sideinfo.ch[1].gr[gr]; + part2bits = III_get_scale_factors(mpa, grinfo, scalefacs[1]); + if (III_decode_samples(mpa, grinfo, mpa->hybrid_in[1], scalefacs[1], part2bits)) { + unsigned size = mpa->frame.decoded_size; + if (!mpa->frame.LSF && gr) size >>= 1; + memset(buffer, 0, size); + mpa->error = TRUE; + goto done; + } + if (ms_stereo) { + FLOAT *in0 = (FLOAT *)(mpa->hybrid_in[0]), *in1 = (FLOAT *)(mpa->hybrid_in[1]); + unsigned i, maxb = mpa->sideinfo.ch[0].gr[gr].maxb; + if (mpa->sideinfo.ch[1].gr[gr].maxb > maxb) maxb = mpa->sideinfo.ch[1].gr[gr].maxb; + for (i = 0; i < SSLIMIT*maxb; i++) { + register FLOAT tmp0 = in0[i]; + register FLOAT tmp1 = in1[i]; + in0[i] = tmp0 + tmp1; + in1[i] = tmp0 - tmp1; + } + } + if (i_stereo) III_i_stereo(mpa, grinfo, mpa->hybrid_in, scalefacs[1]); + if (i_stereo || ms_stereo || !single) { + if (grinfo->maxb > mpa->sideinfo.ch[0].gr[gr].maxb) mpa->sideinfo.ch[0].gr[gr].maxb = grinfo->maxb; + else grinfo->maxb = mpa->sideinfo.ch[0].gr[gr].maxb; + } + if (!single) { + register unsigned i; + FLOAT *in0 = (FLOAT *)(mpa->hybrid_in[0]), *in1 = (FLOAT *)(mpa->hybrid_in[1]); + for (i = 0; i < SSLIMIT*grinfo->maxb; i++, in0++) *in0 = (*in0 + *in1++); + } else if (single == 2) { + register unsigned i; + FLOAT *in0 = (FLOAT *)(mpa->hybrid_in[0]), *in1 = (FLOAT *)(mpa->hybrid_in[1]); + for (i = 0; i < SSLIMIT*grinfo->maxb; i++, in0++) *in0 = *in1++; + } + } + for (ch = 0; ch < channels; ch++) { + grinfo = &mpa->sideinfo.ch[ch].gr[gr]; + III_antialias(grinfo, mpa->hybrid_in[ch]); + III_hybrid(mpa, grinfo, mpa->hybrid_in[ch], mpa->hybrid_out[ch], ch); + } + if (single < 0) { + for (ss = 0; ss < SSLIMIT; ss++, (uint8_t *)buffer += mpa->synth_size) { + mpa->synth_func(mpa, mpa->hybrid_out[0][ss], 0, buffer); + mpa->synth_func(mpa, mpa->hybrid_out[1][ss], 1, buffer); + } + } else { + for (ss = 0; ss < SSLIMIT; ss++, (uint8_t *)buffer += mpa->synth_size) { + mpa->synth_func(mpa, mpa->hybrid_out[0][ss], 0, buffer); + } + } + } +done: + { + register unsigned n = mpa->bits_left >> 3; + mpa->next_byte -= n; + mpa->bytes_left += n; + if (saved_next_byte) { + uint32_t tmp = mpa->frame.frame_size - mpa->hsize - mpa->ssize; + if (mpa->bytes_left) { + if (mpa->bytes_left > 512) { + mpa->next_byte += mpa->bytes_left - 512; + mpa->bytes_left = 512; + } + memmove(mpa->reservoir, mpa->next_byte, mpa->bytes_left); + mpa->reservoir_size = mpa->bytes_left; + } else mpa->reservoir_size = 0; + mpa->next_byte = saved_next_byte + tmp; + mpa->bytes_left = saved_bytes_left - tmp; + } else { + uint32_t tmp = mpa->frame.frame_size - mpa->hsize - mpa->ssize; + mpa->reservoir_size = 0; + if (tmp > (saved_bytes_left - mpa->bytes_left)) { + tmp -= saved_bytes_left - mpa->bytes_left; + if (tmp > 512) { + mpa->next_byte += tmp - 512; + mpa->bytes_left -= tmp - 512; + tmp = 512; + } + memcpy(mpa->reservoir, mpa->next_byte, tmp); + mpa->reservoir_size = tmp; + mpa->next_byte += tmp; + mpa->bytes_left -= tmp; + } + } + } +} + diff --git a/polymer/jfaud/mpadec/libmpadec.dsp b/polymer/jfaud/mpadec/libmpadec.dsp new file mode 100755 index 000000000..9656945c9 --- /dev/null +++ b/polymer/jfaud/mpadec/libmpadec.dsp @@ -0,0 +1,120 @@ +# Microsoft Developer Studio Project File - Name="libmpadec" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=libmpadec - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "libmpadec.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "libmpadec.mak" CFG="libmpadec - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "libmpadec - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "libmpadec - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=xicl6.exe +RSC=rc.exe + +!IF "$(CFG)" == "libmpadec - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /W3 /GX /O2 /I "..\include" /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x419 /d "NDEBUG" +# ADD RSC /l 0x419 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=xilink6.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "libmpadec - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /GZ /c +# ADD CPP /nologo /Zp1 /W3 /Gm /GX /ZI /Od /I "..\include" /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x419 /d "_DEBUG" +# ADD RSC /l 0x419 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=xilink6.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "libmpadec - Win32 Release" +# Name "libmpadec - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\layer1.c +# End Source File +# Begin Source File + +SOURCE=.\layer2.c +# End Source File +# Begin Source File + +SOURCE=.\layer3.c +# End Source File +# Begin Source File + +SOURCE=.\mp3dec.c +# End Source File +# Begin Source File + +SOURCE=.\mpadec.c +# End Source File +# Begin Source File + +SOURCE=.\synth.c +# End Source File +# Begin Source File + +SOURCE=.\tables.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/polymer/jfaud/mpadec/mp3dec.c b/polymer/jfaud/mpadec/mp3dec.c new file mode 100755 index 000000000..676c638dc --- /dev/null +++ b/polymer/jfaud/mpadec/mp3dec.c @@ -0,0 +1,295 @@ +/* + * mpadec - MPEG audio decoder + * Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: mp3dec.c,v 1.5 2004/08/03 05:22:22 metal_man Exp $ */ + +#include "mp3dec_internal.h" + +mp3dec_t MPADECAPI mp3dec_init(void) +{ + register struct mp3dec_t *mp3 = (struct mp3dec_t *)malloc(sizeof(struct mp3dec_t)); + + if (!mp3) return NULL; + memset(mp3, 0, sizeof(struct mp3dec_t)); + mp3->size = sizeof(struct mp3dec_t); + mp3->fd = -1; + mp3->mpadec = mpadec_init(); + if (!mp3->mpadec) { + free(mp3); + return NULL; + } + return mp3; +} + +int MPADECAPI mp3dec_init_file(mp3dec_t mp3dec, int fd, int64_t length, int nogap) +{ + register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec; + int64_t tmp; int r; + + if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec) return MP3DEC_RETCODE_INVALID_HANDLE; + if (fd < 0) { + mp3dec_reset(mp3); + return MP3DEC_RETCODE_INVALID_PARAMETERS; + } + if (mp3->flags & MP3DEC_FLAG_INITIALIZED) close(mp3->fd); + mp3->fd = fd; + mp3->flags = MP3DEC_FLAG_SEEKABLE; + mp3->stream_offset = mp3->stream_size = mp3->stream_position = 0; + mp3->in_buffer_offset = mp3->in_buffer_used = 0; + mp3->out_buffer_offset = mp3->out_buffer_used = 0; + tmp = lseek(fd, 0, SEEK_CUR); + if (tmp >= 0) mp3->stream_offset = tmp; else mp3->flags &= ~MP3DEC_FLAG_SEEKABLE; + if (mp3->flags & MP3DEC_FLAG_SEEKABLE) { + tmp = lseek(fd, 0, SEEK_END); + if (tmp >= 0) { + mp3->stream_size = tmp; + lseek(fd, mp3->stream_offset, SEEK_SET); + } else mp3->flags &= ~MP3DEC_FLAG_SEEKABLE; + } + if (mp3->stream_size > mp3->stream_offset) { + mp3->stream_size -= mp3->stream_offset; + if (length && (length < mp3->stream_size)) mp3->stream_size = length; + } else mp3->stream_size = length; + r = read(fd, mp3->in_buffer, 4); + if (r < 4) { + mp3dec_reset(mp3); + return ((r < 0) ? MP3DEC_RETCODE_INVALID_PARAMETERS : MP3DEC_RETCODE_NOT_MPEG_STREAM); + } else mp3->in_buffer_used = r; + if (mp3->flags & MP3DEC_FLAG_SEEKABLE) tmp = lseek(fd, mp3->stream_offset, SEEK_SET); else tmp = -1; + if (tmp < 0) { + int32_t n = sizeof(mp3->in_buffer) - mp3->in_buffer_used; + mp3->flags &= ~MP3DEC_FLAG_SEEKABLE; + if (mp3->stream_size && (n > (mp3->stream_size - mp3->in_buffer_used))) n = (int32_t)(mp3->stream_size - mp3->in_buffer_used); + n = read(fd, mp3->in_buffer + mp3->in_buffer_used, n); + if (n < 0) n = 0; + mp3->in_buffer_used += n; + mp3->stream_position = mp3->in_buffer_used; + } else { + int32_t n = sizeof(mp3->in_buffer); + if (mp3->stream_size && (n > mp3->stream_size)) n = (int32_t)mp3->stream_size; + n = read(fd, mp3->in_buffer, n); + if (n < 0) n = 0; + mp3->stream_position = mp3->in_buffer_used = n; + } + if (mp3->in_buffer_used < 4) { + mp3dec_reset(mp3); + return MP3DEC_RETCODE_NOT_MPEG_STREAM; + } + if (nogap) { + mpadec_decode(mp3->mpadec, mp3->in_buffer, mp3->in_buffer_used, mp3->out_buffer, sizeof(mp3->out_buffer), &mp3->in_buffer_offset, &mp3->out_buffer_used); + mp3->in_buffer_used -= mp3->in_buffer_offset; + if (!mp3->out_buffer_used) { + mpadec_reset(mp3->mpadec); + mp3->in_buffer_used += mp3->in_buffer_offset; + mp3->in_buffer_offset = 0; + } + } else mpadec_reset(mp3->mpadec); + if (!mp3->out_buffer_used) { + r = mpadec_decode(mp3->mpadec, mp3->in_buffer, mp3->in_buffer_used, NULL, 0, &mp3->in_buffer_offset, NULL); + mp3->in_buffer_used -= mp3->in_buffer_offset; + if (r != MPADEC_RETCODE_OK) { + mp3dec_reset(mp3); + return MP3DEC_RETCODE_NOT_MPEG_STREAM; + } + } + if ((mpadec_get_info(mp3->mpadec, &mp3->mpainfo, MPADEC_INFO_STREAM) != MPADEC_RETCODE_OK) || + (mpadec_get_info(mp3->mpadec, &mp3->taginfo, MPADEC_INFO_TAG) != MPADEC_RETCODE_OK)) { + mp3dec_reset(mp3); + return MP3DEC_RETCODE_NOT_MPEG_STREAM; + } + if (mp3->taginfo.flags & 2) if (!mp3->stream_size || (mp3->stream_size > mp3->taginfo.bytes)) mp3->stream_size = mp3->taginfo.bytes; + if (mp3->taginfo.flags & 1) { + mp3->mpainfo.frames = mp3->taginfo.frames; + if (mp3->mpainfo.frames && mp3->mpainfo.frame_samples) { + mp3->mpainfo.bitrate = (int32_t)((FLOAT)(((FLOAT)mp3->stream_size*(FLOAT)mp3->mpainfo.frequency + 0.5)/((FLOAT)125.0*mp3->mpainfo.frame_samples*mp3->mpainfo.frames))); + } + } else if (mp3->mpainfo.bitrate && mp3->mpainfo.frame_samples) { + mp3->mpainfo.frames = (int32_t)((FLOAT)(((FLOAT)mp3->stream_size*(FLOAT)mp3->mpainfo.frequency + 0.5)/((FLOAT)125.0*mp3->mpainfo.frame_samples*mp3->mpainfo.bitrate))); + } + mp3->mpainfo.duration = (mp3->mpainfo.frames*mp3->mpainfo.frame_samples + (mp3->mpainfo.frequency >> 1))/mp3->mpainfo.frequency; + mp3->flags |= MP3DEC_FLAG_INITIALIZED; + return MP3DEC_RETCODE_OK; +} + +int MPADECAPI mp3dec_uninit(mp3dec_t mp3dec) +{ + register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec; + + if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec) return MP3DEC_RETCODE_INVALID_HANDLE; + if (mp3->flags & MP3DEC_FLAG_INITIALIZED) close(mp3->fd); + mp3->fd = -1; + mp3->flags = 0; + mpadec_uninit(mp3->mpadec); + mp3->size = 0; + return MP3DEC_RETCODE_OK; +} + +int MPADECAPI mp3dec_reset(mp3dec_t mp3dec) +{ + register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec; + + if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec) return MP3DEC_RETCODE_INVALID_HANDLE; + if (mp3->flags & MP3DEC_FLAG_INITIALIZED) close(mp3->fd); + mp3->fd = -1; + mp3->flags = 0; + mpadec_reset(mp3->mpadec); + mp3->stream_offset = mp3->stream_size = mp3->stream_position = 0; + mp3->in_buffer_offset = mp3->in_buffer_used = 0; + mp3->out_buffer_offset = mp3->out_buffer_used = 0; + memset(&mp3->mpainfo, 0, sizeof(mp3->mpainfo)); + memset(&mp3->taginfo, 0, sizeof(mp3->taginfo)); + return MP3DEC_RETCODE_OK; +} + +int MPADECAPI mp3dec_configure(mp3dec_t mp3dec, mpadec_config_t *cfg) +{ + register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec; + + if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec) return MP3DEC_RETCODE_INVALID_HANDLE; + mp3->out_buffer_offset = mp3->out_buffer_used = 0; + if (mpadec_configure(mp3->mpadec, cfg) != MPADEC_RETCODE_OK) return MP3DEC_RETCODE_INVALID_PARAMETERS; + return MP3DEC_RETCODE_OK; +} + +int MPADECAPI mp3dec_get_info(mp3dec_t mp3dec, void *info, int info_type) +{ + register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec; + + if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec) return MP3DEC_RETCODE_INVALID_HANDLE; + if (!info) return MP3DEC_RETCODE_INVALID_PARAMETERS; + if (mp3->flags & MP3DEC_FLAG_INITIALIZED) { + switch (info_type) { + case MPADEC_INFO_STREAM: memcpy(info, &mp3->mpainfo, sizeof(mp3->mpainfo)); break; + case MPADEC_INFO_TAG: memcpy(info, &mp3->taginfo, sizeof(mp3->taginfo)); break; + case MPADEC_INFO_CONFIG: + default: if (mpadec_get_info(mp3->mpadec, info, info_type) != MPADEC_RETCODE_OK) return MP3DEC_RETCODE_INVALID_PARAMETERS; + } + } else return MP3DEC_RETCODE_BAD_STATE; + return MP3DEC_RETCODE_OK; +} + +int MPADECAPI mp3dec_decode(mp3dec_t mp3dec, uint8_t *buf, uint32_t bufsize, uint32_t *used) +{ + register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec; + uint32_t n, src_used, dst_used; int r; + + if (used) *used = 0; + if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec) return MP3DEC_RETCODE_INVALID_HANDLE; + if (!(mp3->flags & MP3DEC_FLAG_INITIALIZED)) return MP3DEC_RETCODE_BAD_STATE; + if (!buf) return MP3DEC_RETCODE_INVALID_PARAMETERS; + while (bufsize) { + if (mp3->out_buffer_used) { + n = (bufsize < mp3->out_buffer_used) ? bufsize : mp3->out_buffer_used; + memcpy(buf, mp3->out_buffer + mp3->out_buffer_offset, n); + mp3->out_buffer_offset += n; + mp3->out_buffer_used -= n; + buf += n; + bufsize -= n; + if (used) *used += n; + } + if (!bufsize) break; + if (mp3->in_buffer_used > 4) { + r = mpadec_decode(mp3->mpadec, mp3->in_buffer + mp3->in_buffer_offset, mp3->in_buffer_used, buf, bufsize, &src_used, &dst_used); + mp3->in_buffer_offset += src_used; + mp3->in_buffer_used -= src_used; + buf += dst_used; + bufsize -= dst_used; + if (used) *used += dst_used; + if (!bufsize) break; + if (r == MPADEC_RETCODE_BUFFER_TOO_SMALL) { + mp3->out_buffer_offset = mp3->out_buffer_used = 0; + mpadec_decode(mp3->mpadec, mp3->in_buffer + mp3->in_buffer_offset, mp3->in_buffer_used, mp3->out_buffer, sizeof(mp3->out_buffer), &src_used, &mp3->out_buffer_used); + mp3->in_buffer_offset += src_used; + mp3->in_buffer_used -= src_used; + continue; + } + } + if (mp3->in_buffer_used && mp3->in_buffer_offset) memmove(mp3->in_buffer, mp3->in_buffer + mp3->in_buffer_offset, mp3->in_buffer_used); + mp3->in_buffer_offset = 0; + n = sizeof(mp3->in_buffer) - mp3->in_buffer_used; + if (mp3->stream_size && (n > (mp3->stream_size - mp3->stream_position))) n = (int32_t)(mp3->stream_size - mp3->stream_position); + if (n) r = read(mp3->fd, mp3->in_buffer + mp3->in_buffer_used, n); else r = 0; + if (r < 0) r = 0; + mp3->in_buffer_used += r; + mp3->stream_position += r; + if (mp3->stream_position > mp3->stream_size) mp3->stream_position = mp3->stream_size; + if (!r) break; + } + return MP3DEC_RETCODE_OK; +} + +int MPADECAPI mp3dec_seek(mp3dec_t mp3dec, int64_t pos, int units) +{ + register struct mp3dec_t *mp3 = (struct mp3dec_t *)mp3dec; + int64_t newpos; + + if (!mp3 || (mp3->size != sizeof(struct mp3dec_t)) || !mp3->mpadec) return MP3DEC_RETCODE_INVALID_HANDLE; + if (!(mp3->flags & MP3DEC_FLAG_INITIALIZED)) return MP3DEC_RETCODE_BAD_STATE; + if (!(mp3->flags & MP3DEC_FLAG_SEEKABLE)) return MP3DEC_RETCODE_SEEK_FAILED; + if (units == MP3DEC_SEEK_BYTES) { + newpos = (pos < mp3->stream_size) ? pos : mp3->stream_size; + newpos = lseek(mp3->fd, mp3->stream_offset + newpos, SEEK_SET); + if (newpos < 0) return MP3DEC_RETCODE_SEEK_FAILED; + mp3->stream_position = newpos - mp3->stream_offset; + mp3->in_buffer_offset = mp3->in_buffer_used = 0; + mp3->out_buffer_offset = mp3->out_buffer_used = 0; + } else if (units == MP3DEC_SEEK_SAMPLES) { + FLOAT fsize = (FLOAT)(125.0*mp3->mpainfo.bitrate*mp3->mpainfo.decoded_frame_samples)/(FLOAT)mp3->mpainfo.decoded_frequency; + newpos = (int64_t)((FLOAT)pos*fsize/(FLOAT)mp3->mpainfo.decoded_frame_samples); + if (newpos > mp3->stream_size) newpos = mp3->stream_size; + pos = (pos%mp3->mpainfo.decoded_frame_samples)*mp3->mpainfo.decoded_sample_size; + newpos = lseek(mp3->fd, mp3->stream_offset + newpos, SEEK_SET); + if (newpos < 0) return MP3DEC_RETCODE_SEEK_FAILED; + mp3->stream_position = newpos - mp3->stream_offset; + mp3->in_buffer_offset = mp3->in_buffer_used = 0; + mp3->out_buffer_offset = mp3->out_buffer_used = 0; + { + uint8_t temp[8*1152]; + mp3dec_decode(mp3, temp, (uint32_t)pos, NULL); + } + } else if (units == MP3DEC_SEEK_SECONDS) { + if (pos > mp3->mpainfo.duration) pos = mp3->mpainfo.duration; + if (mp3->taginfo.flags & 4) { + int32_t n = (int32_t)((100*pos + (mp3->mpainfo.duration >> 1))/mp3->mpainfo.duration); + if (n > 99) newpos = mp3->stream_size; + else newpos = (mp3->taginfo.toc[n]*mp3->stream_size)/255; + } else newpos = (pos*mp3->stream_size + (mp3->mpainfo.duration >> 1))/mp3->mpainfo.duration; + if (newpos > mp3->stream_size) newpos = mp3->stream_size; + newpos = lseek(mp3->fd, mp3->stream_offset + newpos, SEEK_SET); + if (newpos < 0) return MP3DEC_RETCODE_SEEK_FAILED; + mp3->stream_position = newpos - mp3->stream_offset; + mp3->in_buffer_offset = mp3->in_buffer_used = 0; + mp3->out_buffer_offset = mp3->out_buffer_used = 0; + } else return MP3DEC_RETCODE_INVALID_PARAMETERS; + return MP3DEC_RETCODE_OK; +} + +char * MPADECAPI mp3dec_error(int code) +{ + static char *mp3_errors[] = { "No error", + "Invalid handle", + "Bad decoder state", + "Invalid parameters", + "Not an MPEG audio stream", + "Seek failed", + "Unknown error" }; + if (code > MP3DEC_RETCODE_UNKNOWN) code = MP3DEC_RETCODE_UNKNOWN; + return mp3_errors[code]; +} + diff --git a/polymer/jfaud/mpadec/mp3dec.h b/polymer/jfaud/mpadec/mp3dec.h new file mode 100755 index 000000000..0104e245f --- /dev/null +++ b/polymer/jfaud/mpadec/mp3dec.h @@ -0,0 +1,59 @@ +/* + * mpadec - MPEG audio decoder + * Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: mp3dec.h,v 1.2 2004/08/02 09:38:09 metal_man Exp $ */ + +#ifndef __MP3DEC_H +#define __MP3DEC_H + +#include "mpadec.h" + +#define MP3DEC_RETCODE_OK 0 +#define MP3DEC_RETCODE_INVALID_HANDLE 1 +#define MP3DEC_RETCODE_BAD_STATE 2 +#define MP3DEC_RETCODE_INVALID_PARAMETERS 3 +#define MP3DEC_RETCODE_NOT_MPEG_STREAM 4 +#define MP3DEC_RETCODE_SEEK_FAILED 5 +#define MP3DEC_RETCODE_UNKNOWN 6 + +#define MP3DEC_SEEK_BYTES 0 +#define MP3DEC_SEEK_SAMPLES 1 +#define MP3DEC_SEEK_SECONDS 2 + +typedef void *mp3dec_t; + +#ifdef __cplusplus +extern "C" { +#endif + +mp3dec_t MPADECAPI mp3dec_init(void); +int MPADECAPI mp3dec_init_file(mp3dec_t mp3dec, int fd, int64_t length, int nogap); +int MPADECAPI mp3dec_uninit(mp3dec_t mp3dec); +int MPADECAPI mp3dec_reset(mp3dec_t mp3dec); +int MPADECAPI mp3dec_configure(mp3dec_t mp3dec, mpadec_config_t *cfg); +int MPADECAPI mp3dec_get_info(mp3dec_t mp3dec, void *info, int info_type); +int MPADECAPI mp3dec_decode(mp3dec_t mp3dec, uint8_t *buf, uint32_t bufsize, uint32_t *used); +int MPADECAPI mp3dec_seek(mp3dec_t mp3dec, int64_t pos, int units); +char * MPADECAPI mp3dec_error(int code); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/polymer/jfaud/mpadec/mp3dec_internal.h b/polymer/jfaud/mpadec/mp3dec_internal.h new file mode 100755 index 000000000..c1644a3d0 --- /dev/null +++ b/polymer/jfaud/mpadec/mp3dec_internal.h @@ -0,0 +1,49 @@ +/* + * mpadec - MPEG audio decoder + * Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: mp3dec_internal.h,v 1.2 2004/08/02 09:38:09 metal_man Exp $ */ + +#ifndef __MP3DEC_INTERNAL_H +#define __MP3DEC_INTERNAL_H + +#include "mp3dec.h" + +#define MP3DEC_FLAG_INITIALIZED 1 +#define MP3DEC_FLAG_SEEKABLE 2 + +struct mp3dec_t { + uint32_t size; + mpadec_t mpadec; + int32_t fd; + uint32_t flags; + int64_t stream_offset; + int64_t stream_size; + int64_t stream_position; + mpadec_info_t mpainfo; + mp3tag_info_t taginfo; + uint32_t in_buffer_offset; + uint32_t in_buffer_used; + uint32_t out_buffer_offset; + uint32_t out_buffer_used; + uint8_t in_buffer[0x10000]; + uint8_t out_buffer[8*1152]; +}; + +#endif + diff --git a/polymer/jfaud/mpadec/mpadec.c b/polymer/jfaud/mpadec/mpadec.c new file mode 100755 index 000000000..0150ce342 --- /dev/null +++ b/polymer/jfaud/mpadec/mpadec.c @@ -0,0 +1,793 @@ +/* + * mpadec - MPEG audio decoder + * Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: mpadec.c,v 1.2 2004/07/28 06:46:49 metal_man Exp $ */ + +#include "mpadec_internal.h" + +extern const uint16_t crc_table[256]; +extern void *synth_table[2][2][4][4]; + +const uint32_t bitmask[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, + 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; + +const int32_t frequency_table[9] = { 44100, 48000, 32000, 22050, 24000, 16000, 11025, 12000, 8000 }; + +const int16_t bitrate_table[2][3][16] = { + { { 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 560 }, + { 0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448 }, + { 0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384 } }, + { { 0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 320 }, + { 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 192 }, + { 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 192 } } +}; + +extern void init_tables(mpadec_t mpadec, FLOAT scale, int32_t sblimit); +extern void decode_layer1(mpadec_t mpadec, uint8_t *buffer); +extern void decode_layer2(mpadec_t mpadec, uint8_t *buffer); +extern void decode_layer3(mpadec_t mpadec, uint8_t *buffer); + +uint32_t getbits(mpadec_t mpadec, unsigned n) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + + while ((mpa->bits_left <= 24) && mpa->bytes_left) { + mpa->bit_buffer = (mpa->bit_buffer << 8) | *mpa->next_byte++; + mpa->bits_left += (uint8_t)8; + mpa->bytes_left--; + } + while (mpa->bits_left <= 24) { + mpa->bit_buffer = (mpa->bit_buffer << 8); + mpa->bits_left += (uint8_t)8; + } + mpa->bits_left -= (uint8_t)n; + return (mpa->bit_buffer >> mpa->bits_left) & bitmask[n]; +} + +uint16_t update_crc(uint16_t init, uint8_t *buf, int length) +{ + register uint32_t crc = (uint32_t)init, tmp; + register int l = length; + register uint8_t *b = buf; + + for (; l >= 8; l -= 8) crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (*b++)) & 0xFF]; + tmp = (uint32_t)(*b) << 8; + while (l--) { + tmp <<= 1; + crc <<= 1; + if ((crc ^ tmp) & 0x10000) crc ^= 0x8005; + } + return (uint16_t)crc; +} + +static uint32_t detect_frame_size(mpadec_t mpadec) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + register uint8_t *buf = mpa->next_byte; + uint32_t i = mpa->bytes_left, hdr = 0; + + if (i < (mpa->frame.frame_size + 4)) return 0; + buf += mpa->frame.frame_size; + i -= mpa->frame.frame_size; + while (i >= 4) { + register uint32_t tmp = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + if (((tmp & 0xFFE00000) == 0xFFE00000) && (tmp & (3 << 17)) && ((tmp & (3 << 10)) != (3 << 10))) { + if ((mpa->frame.layer == (uint8_t)(4 - ((tmp >> 17) & 3))) && + (mpa->frame.frequency_index == (((tmp >> 10) & 3) + 3*(mpa->frame.LSF + mpa->frame.MPEG25))) && + (mpa->frame.channels == ((((tmp >> 6) & 3) == MPG_MD_MONO) ? 1 : 2))) { + if (mpa->config.dblsync) { + uint32_t fs = mpa->bytes_left - i - mpa->frame.padding + ((tmp >> 9) & 1); + if (i >= (fs + 4)) { + buf += fs; + tmp = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + buf -= fs; + if (((tmp & 0xFFE00000) == 0xFFE00000) && (tmp & (3 << 17)) && ((tmp & (3 << 10)) != (3 << 10))) { + if ((mpa->frame.layer == (uint8_t)(4 - ((tmp >> 17) & 3))) && + (mpa->frame.frequency_index == (((tmp >> 10) & 3) + 3*(mpa->frame.LSF + mpa->frame.MPEG25))) && + (mpa->frame.channels == ((((tmp >> 6) & 3) == MPG_MD_MONO) ? 1 : 2))) { + hdr = tmp; + break; + } + } + } else return 0; + } else { + hdr = tmp; + break; + } + } + } + buf++; i--; + } + return (hdr ? (mpa->bytes_left - i) : 0); +} + +static int decode_header(mpadec_t mpadec, uint32_t header) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + unsigned int layer, bridx, fridx; + + layer = 4 - ((header >> 17) & 3); + bridx = ((header >> 12) & 0x0F); + fridx = ((header >> 10) & 3); + if ((fridx == 3) || (layer == 4) || ((layer != 3) && !bridx)) return FALSE; + if (header & (1 << 20)) { + mpa->frame.LSF = (uint8_t)((header & (1 << 19)) ? FALSE : TRUE); + mpa->frame.MPEG25 = FALSE; + } else mpa->frame.LSF = mpa->frame.MPEG25 = TRUE; + mpa->frame.layer = (uint8_t)layer; + mpa->frame.bitrate_index = bridx; + mpa->frame.bitrate = bitrate_table[mpa->frame.LSF][layer - 1][bridx]; + mpa->frame.frequency_index = (fridx += 3*(mpa->frame.LSF + mpa->frame.MPEG25)); + mpa->frame.frequency = frequency_table[fridx]; + mpa->frame.decoded_frequency = mpa->frame.frequency >> mpa->config.quality; + mpa->frame.CRC = (uint8_t)(((header >> 16) & 1) ^ 1); + mpa->frame.padding = ((header >> 9) & 1); + mpa->frame.extension = (uint8_t)((header >> 8) & 1); + mpa->frame.mode = (uint8_t)((header >> 6) & 3); + mpa->frame.mode_ext = (uint8_t)((header >> 4) & 3); + mpa->frame.copyright = (uint8_t)((header >> 3) & 1); + mpa->frame.original = (uint8_t)((header >> 2) & 1); + mpa->frame.emphasis = (uint8_t)(header & 3); + mpa->frame.channels = (uint8_t)((mpa->frame.mode == MPG_MD_MONO) ? 1 : 2); + switch (mpa->config.mode) { + case MPADEC_CONFIG_CHANNEL1: + case MPADEC_CONFIG_CHANNEL2: + case MPADEC_CONFIG_MONO: mpa->frame.decoded_channels = 1; break; + case MPADEC_CONFIG_STEREO: mpa->frame.decoded_channels = 2; break; + default: mpa->frame.decoded_channels = mpa->frame.channels; + } + mpa->free_format = FALSE; + switch (mpa->frame.layer) { + case 1: mpa->frame.frame_samples = 384; + mpa->frame.frame_size = (12000*mpa->frame.bitrate/mpa->frame.frequency + mpa->frame.padding) << 2; + mpa->ssize = 0; + break; + case 2: mpa->frame.frame_samples = 1152; + mpa->frame.frame_size = 144000*mpa->frame.bitrate/mpa->frame.frequency + mpa->frame.padding; + mpa->ssize = 0; + break; + case 3: mpa->frame.frame_samples = 1152 >> mpa->frame.LSF; + if (mpa->frame.LSF) mpa->ssize = (mpa->frame.channels > 1) ? 17 : 9; + else mpa->ssize = (mpa->frame.channels > 1) ? 32 : 17; + if (mpa->frame.bitrate_index) { + mpa->frame.frame_size = 144000*mpa->frame.bitrate/(mpa->frame.frequency << mpa->frame.LSF) + mpa->frame.padding; + mpa->prev_frame_size = 0; + } else { + register uint32_t div = 125*mpa->frame.frame_samples; + if (!mpa->prev_frame_size) { + mpa->frame.frame_size = (mpa->frame.CRC ? 6 : 4) + mpa->ssize + mpa->frame.padding; + mpa->prev_frame_size = detect_frame_size(mpa); + if (mpa->prev_frame_size) mpa->prev_frame_size -= mpa->frame.padding; + } + mpa->frame.frame_size = mpa->prev_frame_size + mpa->frame.padding; + mpa->frame.bitrate = (mpa->frame.frame_size*mpa->frame.frequency + (div >> 1))/div; + mpa->free_format = TRUE; + } + break; + } + mpa->frame.decoded_samples = mpa->frame.frame_samples >> mpa->config.quality; + mpa->frame.downsample = FALSE; + mpa->frame.downsample_sblimit = SBLIMIT; + mpa->frame.decoded_size = mpa->frame.decoded_samples*mpa->frame.decoded_channels; + switch (mpa->config.format) { + case MPADEC_CONFIG_24BIT: mpa->frame.decoded_size *= 3; break; + case MPADEC_CONFIG_32BIT: + case MPADEC_CONFIG_FLOAT: mpa->frame.decoded_size <<= 2; break; + default: mpa->frame.decoded_size <<= 1; break; + } + mpa->hsize = mpa->frame.CRC ? 6 : 4; + if (mpa->frame.frame_size < (mpa->hsize + mpa->ssize)) mpa->frame.frame_size = mpa->hsize + mpa->ssize; + mpa->dsize = mpa->frame.frame_size - (mpa->hsize + mpa->ssize); + return TRUE; +} + +static uint32_t sync_buffer(mpadec_t mpadec) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + register uint8_t *buf = mpa->next_byte; + uint32_t retval = 0, i = mpa->bytes_left; + + if (mpa->state == MPADEC_STATE_START) { + while (i >= 4) { + register uint32_t tmp = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + if (((tmp & 0xFFE00000) == 0xFFE00000) && (tmp & (3 << 17)) && ((tmp & (3 << 10)) != (3 << 10))) { + if (mpa->config.dblsync) { + if (decode_header(mpa, tmp)) { + if ((i < (mpa->frame.frame_size + 4)) || (mpa->free_format && !mpa->prev_frame_size)) break; + else { + register uint32_t tmp2 = (buf[mpa->frame.frame_size] << 24) | (buf[mpa->frame.frame_size + 1] << 16) | (buf[mpa->frame.frame_size + 2] << 8) | buf[mpa->frame.frame_size + 3]; + if (((tmp2 & 0xFFE00000) == 0xFFE00000) && (tmp2 & (3 << 17)) && ((tmp2 & (3 << 10)) != (3 << 10))) { + if ((mpa->frame.layer == (uint8_t)(4 - ((tmp2 >> 17) & 3))) && + (mpa->frame.frequency_index == (((tmp2 >> 10) & 3) + 3*(mpa->frame.LSF + mpa->frame.MPEG25))) && + (mpa->frame.channels == ((((tmp2 >> 6) & 3) == MPG_MD_MONO) ? 1 : 2))) { + retval = tmp; + break; + } + } + } + } + } else { + retval = tmp; + break; + } + } + buf++; i--; + } + } else { + while (i >= 4) { + register uint32_t tmp = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + if (((tmp & 0xFFE00000) == 0xFFE00000) && (tmp & (3 << 17)) && ((tmp & (3 << 10)) != (3 << 10))) { + if ((mpa->frame.layer == (uint8_t)(4 - ((tmp >> 17) & 3))) && + (mpa->frame.frequency_index == (((tmp >> 10) & 3) + 3*(mpa->frame.LSF + mpa->frame.MPEG25))) && + (mpa->frame.channels == ((((tmp >> 6) & 3) == MPG_MD_MONO) ? 1 : 2))) { + retval = tmp; + break; + } + } + buf++; i--; + } + } + if (i < mpa->bytes_left) { + i = mpa->bytes_left - i; + mpa->next_byte = buf;; + mpa->bytes_left -= i; + if (i >= 512) { + mpa->reservoir_size = 0; + i = 512; + } + memcpy(mpa->reservoir + mpa->reservoir_size, mpa->next_byte - i, i); + mpa->reservoir_size += i; + } + return retval; +} + +static int first_frame(mpadec_t mpadec) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + int i, skip = FALSE; + uint32_t framesize; FLOAT scale; + + if (mpa->frame.channels > 1) i = ((mpa->config.mode == MPADEC_CONFIG_STEREO) || (mpa->config.mode == MPADEC_CONFIG_AUTO)) ? 3 : 2; + else i = (mpa->config.mode == MPADEC_CONFIG_STEREO) ? 1 : 0; + (void *)mpa->synth_func = synth_table[mpa->config.quality][mpa->config.endian][mpa->config.format][i]; + mpa->sample_size = mpa->frame.decoded_channels; + switch (mpa->config.format) { + case MPADEC_CONFIG_24BIT: mpa->sample_size *= 3; scale = 0x800000; break; + case MPADEC_CONFIG_32BIT: mpa->sample_size <<= 2; scale = 0x80000000; break; + case MPADEC_CONFIG_FLOAT: mpa->sample_size <<= 2; scale = 1; break; + default: mpa->sample_size <<= 1; scale = 0x8000; break; + } + mpa->synth_size = (mpa->sample_size << 5) >> mpa->config.quality; + if (mpa->config.replaygain != MPADEC_CONFIG_REPLAYGAIN_CUSTOM) { + mpa->config.gain = 0.0; + mpa->replay_gain = 1.0; + } + mpa->skip_samples = 0; + mpa->padding_samples = 0; + mpa->decoded_frames = 0; + mpa->decoded_samples = 0; + memset(&mpa->tag_info, 0, sizeof(mpa->tag_info)); + framesize = (mpa->frame.frame_size < mpa->bytes_left) ? mpa->frame.frame_size : mpa->bytes_left; + if ((mpa->frame.layer == 3) && (framesize >= (mpa->ssize + 124))) { + register uint8_t *buf = mpa->next_byte + 4 + mpa->ssize; + if (((buf[0] == 'X') && (buf[1] == 'i') && (buf[2] == 'n') && (buf[3] == 'g')) || + ((buf[0] == 'I') && (buf[1] == 'n') && (buf[2] == 'f') && (buf[3] == 'o'))) { + skip = TRUE; + mpa->next_byte += framesize; + mpa->bytes_left -= framesize; + buf += 4; + mpa->tag_info.flags = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + buf += 4; + if (mpa->tag_info.flags & 1) { + mpa->tag_info.frames = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + buf += 4; + }; + if (mpa->tag_info.flags & 2) { + mpa->tag_info.bytes = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + buf += 4; + }; + if (mpa->tag_info.flags & 4) { + memcpy(mpa->tag_info.toc, buf, 100); + buf += 100; + }; + if (mpa->tag_info.flags & 8) buf += 4; + mpa->tag_info.flags &= 7; + if (framesize >= mpa->ssize + 160) { + buf += 15; + mpa->tag_info.replay_gain[0] = ((buf[0] << 8) | buf[1]) & 0x1FF; + if (buf[0] & 2) mpa->tag_info.replay_gain[0] = -mpa->tag_info.replay_gain[0]; + buf += 2; + mpa->tag_info.replay_gain[1] = ((buf[0] << 8) | buf[1]) & 0x1FF; + if (buf[0] & 2) mpa->tag_info.replay_gain[1] = -mpa->tag_info.replay_gain[1]; + buf += 4; + mpa->tag_info.enc_delay = (buf[0] << 4) | ((buf[1] >> 4) & 0x0F); + mpa->tag_info.enc_padding = ((buf[1] & 0x0F) << 8) | buf[2]; + if (((mpa->tag_info.enc_delay < 0) || (mpa->tag_info.enc_delay > 3000)) || + ((mpa->tag_info.enc_padding < 0) || (mpa->tag_info.enc_padding > 3000))) { + mpa->tag_info.replay_gain[0] = mpa->tag_info.replay_gain[1] = 0; + mpa->tag_info.enc_delay = 0; + mpa->tag_info.enc_padding = 0; + } else { + if (mpa->config.replaygain == MPADEC_CONFIG_REPLAYGAIN_RADIO) { + mpa->config.gain = ((FLOAT)mpa->tag_info.replay_gain[0])/10.0; + } else if (mpa->config.replaygain == MPADEC_CONFIG_REPLAYGAIN_AUDIOPHILE) { + mpa->config.gain = ((FLOAT)mpa->tag_info.replay_gain[1])/10.0; + } + } + mpa->skip_samples = mpa->tag_info.enc_delay; + mpa->padding_samples = mpa->tag_info.enc_padding; + } + } + } + mpa->replay_gain = pow(10.0, mpa->config.gain/20.0); + if (mpa->config.replaygain != MPADEC_CONFIG_REPLAYGAIN_NONE) scale *= mpa->replay_gain; + init_tables(mpa, scale, SBLIMIT >> mpa->config.quality); + if (mpa->frame.layer == 3) { + mpa->skip_samples += 529; + if ((mpa->tag_info.flags & 1) && (mpa->padding_samples > 529)) mpa->padding_samples -= 529; + else mpa->padding_samples = 0; + } else { + mpa->skip_samples += 241; + mpa->padding_samples = 0; + } + mpa->padding_start = mpa->tag_info.frames*mpa->frame.frame_samples; + if (mpa->padding_start > mpa->padding_samples) mpa->padding_start -= mpa->padding_samples; + else mpa->padding_start = 0; + mpa->state = MPADEC_STATE_DECODE; + return skip; +} + +mpadec_t MPADECAPI mpadec_init(void) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)malloc(sizeof(struct mpadec_t)); + uint8_t temp[2]; + + if (!mpa) return NULL; + memset(mpa, 0, sizeof(struct mpadec_t)); + mpa->size = sizeof(struct mpadec_t); + *((int16_t *)temp) = 1; + mpa->config.quality = MPADEC_CONFIG_FULL_QUALITY; + mpa->config.mode = MPADEC_CONFIG_AUTO; + mpa->config.format = MPADEC_CONFIG_16BIT; + mpa->config.endian = (uint8_t)((uint8_t)temp[0] ? MPADEC_CONFIG_LITTLE_ENDIAN : MPADEC_CONFIG_BIG_ENDIAN); + mpa->config.replaygain = MPADEC_CONFIG_REPLAYGAIN_NONE; + mpa->config.skip = TRUE; + mpa->config.crc = TRUE; + mpa->config.dblsync = TRUE; + mpa->config.gain = 0.0; + mpa->replay_gain = 1.0; + init_tables(mpa, 0x8000, SBLIMIT); + mpa->synth_bufoffs = 1; + mpa->state = MPADEC_STATE_START; + return mpa; +} + +int MPADECAPI mpadec_uninit(mpadec_t mpadec) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + + if (mpa && (mpa->size == sizeof(struct mpadec_t))) { + mpa->size = mpa->state = 0; + free(mpa); + return MPADEC_RETCODE_OK; + } else return MPADEC_RETCODE_INVALID_HANDLE; +} + +int MPADECAPI mpadec_reset(mpadec_t mpadec) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + + if (mpa && (mpa->size == sizeof(struct mpadec_t))) { + memset(mpa->hybrid_in, 0, sizeof(mpa->hybrid_in)); + memset(mpa->hybrid_out, 0, sizeof(mpa->hybrid_out)); + memset(mpa->hybrid_buffers, 0, sizeof(mpa->hybrid_buffers)); + memset(mpa->synth_buffers, 0, sizeof(mpa->synth_buffers)); + mpa->hybrid_block[0] = mpa->hybrid_block[1] = 0; + mpa->synth_bufoffs = 1; + memset(&mpa->tag_info, 0, sizeof(mpa->tag_info)); + if (mpa->config.replaygain != MPADEC_CONFIG_REPLAYGAIN_CUSTOM) mpa->config.gain = 0.0; + mpa->prev_frame_size = 0; + mpa->free_format = FALSE; + mpa->error = FALSE; + mpa->reservoir_size = 0; + mpa->replay_gain = 1.0; + mpa->skip_samples = 0; + mpa->padding_samples = 0; + mpa->decoded_frames = 0; + mpa->decoded_samples = 0; + mpa->state = MPADEC_STATE_START; + return MPADEC_RETCODE_OK; + } else return MPADEC_RETCODE_INVALID_HANDLE; +} + +int MPADECAPI mpadec_configure(mpadec_t mpadec, mpadec_config_t *cfg) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + int32_t i, sblimit; FLOAT scale; + + if (mpa && (mpa->size == sizeof(struct mpadec_t))) { + if (!cfg) return MPADEC_RETCODE_INVALID_PARAMETERS; + if ((cfg->quality > MPADEC_CONFIG_HALF_QUALITY) || (cfg->mode > MPADEC_CONFIG_CHANNEL2) || + (cfg->format > MPADEC_CONFIG_FLOAT) || (cfg->endian > MPADEC_CONFIG_BIG_ENDIAN) || + (cfg->replaygain > MPADEC_CONFIG_REPLAYGAIN_CUSTOM)) return MPADEC_RETCODE_INVALID_PARAMETERS; + mpa->config.quality = cfg->quality; + mpa->config.mode = cfg->mode; + mpa->config.format = cfg->format; + mpa->config.endian = cfg->endian; + mpa->config.replaygain = cfg->replaygain; + mpa->config.skip = (uint8_t)(cfg->skip ? TRUE : FALSE); + mpa->config.crc = (uint8_t)(cfg->crc ? TRUE : FALSE); + mpa->config.dblsync = (uint8_t)(cfg->dblsync ? TRUE : FALSE); + if (mpa->config.replaygain == MPADEC_CONFIG_REPLAYGAIN_CUSTOM) { + mpa->config.gain = cfg->gain; + } else { + mpa->config.gain = 0.0; + if (mpa->tag_info.flags) { + if (mpa->config.replaygain == MPADEC_CONFIG_REPLAYGAIN_RADIO) { + mpa->config.gain = ((FLOAT)mpa->tag_info.replay_gain[0])/10.0; + } else if (mpa->config.replaygain == MPADEC_CONFIG_REPLAYGAIN_AUDIOPHILE) { + mpa->config.gain = ((FLOAT)mpa->tag_info.replay_gain[1])/10.0; + } + } + } + mpa->replay_gain = pow(10.0, mpa->config.gain/20.0); + switch (mpa->config.format) { + case MPADEC_CONFIG_24BIT: scale = 0x800000; break; + case MPADEC_CONFIG_32BIT: scale = 0x80000000; break; + case MPADEC_CONFIG_FLOAT: scale = 1; break; + default: scale = 0x8000; break; + } + sblimit = SBLIMIT >> mpa->config.quality; + if (mpa->config.replaygain != MPADEC_CONFIG_REPLAYGAIN_NONE) scale *= mpa->replay_gain; + init_tables(mpa, scale, sblimit); + if ((mpa->state > MPADEC_STATE_START) && mpa->header) { + decode_header(mpa, mpa->header); + if (mpa->frame.channels < 2) i = (mpa->config.mode == MPADEC_CONFIG_STEREO) ? 1 : 0; + else i = ((mpa->config.mode == MPADEC_CONFIG_STEREO) || (mpa->config.mode == MPADEC_CONFIG_AUTO)) ? 3 : 2; + (void *)mpa->synth_func = synth_table[mpa->config.quality][mpa->config.endian][mpa->config.format][i]; + mpa->sample_size = mpa->frame.decoded_channels; + switch (mpa->config.format) { + case MPADEC_CONFIG_24BIT: mpa->sample_size *= 3; break; + case MPADEC_CONFIG_32BIT: + case MPADEC_CONFIG_FLOAT: mpa->sample_size <<= 2; break; + default: mpa->sample_size <<= 1; break; + } + mpa->synth_size = (mpa->sample_size << 5) >> mpa->config.quality; + } else mpa->state = MPADEC_STATE_START; + return MPADEC_RETCODE_OK; + } else return MPADEC_RETCODE_INVALID_HANDLE; +} + +int MPADECAPI mpadec_get_info(mpadec_t mpadec, void *info, int info_type) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + + if (!mpa || (mpa->size != sizeof(struct mpadec_t))) return MPADEC_RETCODE_INVALID_HANDLE; + if (!info) return MPADEC_RETCODE_INVALID_PARAMETERS; + if (info_type == MPADEC_INFO_CONFIG) { + register mpadec_config_t *cfg = (mpadec_config_t *)info; + cfg->quality = mpa->config.quality; + cfg->mode = mpa->config.mode; + cfg->format = mpa->config.format; + cfg->endian = mpa->config.endian; + cfg->replaygain = mpa->config.replaygain; + cfg->skip = mpa->config.skip; + cfg->crc = mpa->config.crc; + cfg->dblsync = mpa->config.dblsync; + cfg->gain = mpa->config.gain; + } else if (info_type == MPADEC_INFO_TAG) { + register mp3tag_info_t *tag = (mp3tag_info_t *)info; + if (mpa->state < MPADEC_STATE_DECODE) { + memset(tag, 0, sizeof(mp3tag_info_t)); + return MPADEC_RETCODE_BAD_STATE; + } else memcpy(tag, &mpa->tag_info, sizeof(mpa->tag_info)); + } else if (info_type == MPADEC_INFO_STREAM) { + register mpadec_info_t *inf = (mpadec_info_t *)info; + if (mpa->state < MPADEC_STATE_DECODE) { + memset(inf, 0, sizeof(mpadec_info_t)); + return MPADEC_RETCODE_BAD_STATE; + } else { + inf->layer = mpa->frame.layer; + inf->channels = mpa->frame.channels; + inf->frequency = mpa->frame.frequency; + inf->bitrate = mpa->frame.bitrate; + inf->mode = mpa->frame.mode; + inf->copyright = mpa->frame.copyright; + inf->original = mpa->frame.original; + inf->emphasis = mpa->frame.emphasis; + inf->decoded_channels = mpa->frame.decoded_channels; + inf->decoded_frequency = mpa->frame.decoded_frequency; + inf->decoded_sample_size = mpa->sample_size; + inf->frame_size = mpa->frame.frame_size; + inf->frame_samples = mpa->frame.frame_samples; + inf->decoded_frame_samples = mpa->frame.decoded_samples; + if (mpa->tag_info.flags & 1) { + inf->frames = mpa->tag_info.frames; + inf->duration = (mpa->tag_info.frames*mpa->frame.frame_samples + (mpa->frame.frequency >> 1))/mpa->frame.frequency; + } else { + inf->frames = 0; + inf->duration = 0; + } + } + } else return MPADEC_RETCODE_INVALID_PARAMETERS; + return MPADEC_RETCODE_OK; +} + +int MPADECAPI mpadec_decode(mpadec_t mpadec, uint8_t *srcbuf, uint32_t srcsize, uint8_t *dstbuf, uint32_t dstsize, uint32_t *srcused, uint32_t *dstused) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + int retcode = MPADEC_RETCODE_OK; + uint32_t decoded_size = 0; + + if (srcused) *srcused = 0; + if (dstused) *dstused = 0; + if (!dstbuf) dstsize = 0; + if (!mpa || (mpa->size != sizeof(struct mpadec_t))) return MPADEC_RETCODE_INVALID_HANDLE; + if (mpa->state < MPADEC_STATE_START) return MPADEC_RETCODE_BAD_STATE; + if (!srcbuf || ((mpa->state > MPADEC_STATE_START) && !dstbuf )) return MPADEC_RETCODE_INVALID_PARAMETERS; + mpa->next_byte = srcbuf; + mpa->bytes_left = srcsize; + while (mpa->bytes_left >= 4) { + mpa->error = FALSE; + mpa->bits_left = 0; + mpa->header = sync_buffer(mpa); + if (!mpa->header) { + if (!decoded_size) retcode = MPADEC_RETCODE_NO_SYNC; + break; + } + decode_header(mpa, mpa->header); + if ((mpa->bytes_left < mpa->frame.frame_size) || (mpa->free_format && !mpa->prev_frame_size)) { + retcode = MPADEC_RETCODE_NEED_MORE_DATA; + break; + } + if (mpa->state == MPADEC_STATE_START) { + if (first_frame(mpa)) continue; + } else if ((mpa->frame.layer == 3) && (mpa->frame.frame_size >= (mpa->ssize + 12))) { + register uint8_t *buf = mpa->next_byte + 4 + mpa->ssize; + if (((buf[0] == 'X') && (buf[1] == 'i') && (buf[2] == 'n') && (buf[3] == 'g')) || + ((buf[0] == 'I') && (buf[1] == 'n') && (buf[2] == 'f') && (buf[3] == 'o'))) { + mpa->next_byte += mpa->frame.frame_size; + mpa->bytes_left -= mpa->frame.frame_size; + continue; + } + } + if (dstsize < mpa->frame.decoded_size) { + retcode = MPADEC_RETCODE_BUFFER_TOO_SMALL; + break; + } + if (mpa->config.crc && mpa->frame.CRC) { + mpa->frame.crc = (uint16_t)((mpa->next_byte[4] << 8) | mpa->next_byte[5]); + mpa->crc = update_crc(0xFFFF, mpa->next_byte + 2, 16); + } + mpa->next_byte += mpa->hsize; + mpa->bytes_left -= mpa->hsize; + switch (mpa->frame.layer) { + case 1: decode_layer1(mpa, dstbuf); break; + case 2: decode_layer2(mpa, dstbuf); break; + case 3: decode_layer3(mpa, dstbuf); break; + } + if (mpa->config.crc && mpa->error) memset(dstbuf, 0, mpa->frame.decoded_size); + dstbuf += mpa->frame.decoded_size; + dstsize -= mpa->frame.decoded_size; + decoded_size += mpa->frame.decoded_size; + mpa->decoded_samples += mpa->frame.frame_samples; + mpa->decoded_frames++; + if (mpa->config.skip) { + if (mpa->skip_samples) { + if (mpa->skip_samples >= mpa->frame.frame_samples) { + dstbuf -= mpa->frame.decoded_size; + dstsize += mpa->frame.decoded_size; + decoded_size -= mpa->frame.decoded_size; + mpa->skip_samples -= mpa->frame.frame_samples; + } else { + uint32_t tmp = mpa->frame.frame_samples - mpa->skip_samples; + tmp = mpa->sample_size*(tmp >> mpa->config.quality); + memmove(dstbuf - mpa->frame.decoded_size, dstbuf - tmp, tmp); + dstbuf -= mpa->frame.decoded_size - tmp; + dstsize += mpa->frame.decoded_size - tmp; + decoded_size -= mpa->frame.decoded_size - tmp; + mpa->skip_samples = 0; + } + } else if ((mpa->padding_samples) && (mpa->decoded_samples > mpa->padding_start)) { + uint32_t tmp = mpa->decoded_samples - mpa->padding_start; + if (tmp > mpa->padding_samples) tmp = mpa->padding_samples; + mpa->padding_start += tmp; + mpa->padding_samples -= tmp; + tmp = mpa->sample_size*(tmp >> mpa->config.quality); + dstbuf -= tmp; + dstsize += tmp; + decoded_size -= tmp; + } + } + } + if (srcused) *srcused = srcsize - mpa->bytes_left; + if (dstused) *dstused = decoded_size; + if ((retcode == MPADEC_RETCODE_OK) && mpa->bytes_left) retcode = MPADEC_RETCODE_NEED_MORE_DATA; + if (!dstbuf && (retcode == MPADEC_RETCODE_BUFFER_TOO_SMALL)) retcode = MPADEC_RETCODE_OK; + return retcode; +} + +char * MPADECAPI mpadec_error(int code) +{ + static char *mpa_errors[] = { "No error", + "Invalid handle", + "Not enough memory", + "Bad decoder state", + "Invalid parameters", + "Need more data", + "Output buffer too small", + "Unable to synchronize", + "Unknown error" }; + if (code > MPADEC_RETCODE_UNKNOWN) code = MPADEC_RETCODE_UNKNOWN; + return mpa_errors[code]; +} + +mpadec2_t MPADECAPI mpadec2_init(void) +{ + register struct mpadec2_t *mpa = (struct mpadec2_t *)malloc(sizeof(struct mpadec2_t)); + + if (!mpa) return NULL; + mpa->size = sizeof(struct mpadec2_t); + mpa->buffers = NULL; + mpa->in_buffer_offset = mpa->in_buffer_used = 0; + mpa->out_buffer_offset = mpa->out_buffer_used = 0; + mpa->mpadec = mpadec_init(); + if (!mpa->mpadec) { + free(mpa); + return NULL; + } + return mpa; +} + +int MPADECAPI mpadec2_uninit(mpadec2_t mpadec) +{ + register struct mpadec2_t *mpa = (struct mpadec2_t *)mpadec; + + if (mpa && (mpa->size == sizeof(struct mpadec2_t))) { + struct mpabuffer_t *buf = mpa->buffers, *tmp; + while (buf) { + tmp = buf; + buf = buf->next; + free(tmp); + } + mpadec_uninit(mpa->mpadec); + free(mpa); + return MPADEC_RETCODE_OK; + } else return MPADEC_RETCODE_INVALID_HANDLE; +} + +int MPADECAPI mpadec2_reset(mpadec2_t mpadec) +{ + register struct mpadec2_t *mpa = (struct mpadec2_t *)mpadec; + + if (mpa && (mpa->size == sizeof(struct mpadec2_t))) { + struct mpabuffer_t *buf = mpa->buffers, *tmp; + while (buf) { + tmp = buf; + buf = buf->next; + free(tmp); + } + mpa->buffers = NULL; + mpa->in_buffer_offset = mpa->in_buffer_used = 0; + mpa->out_buffer_offset = mpa->out_buffer_used = 0; + mpadec_reset(mpa->mpadec); + return MPADEC_RETCODE_OK; + } else return MPADEC_RETCODE_INVALID_HANDLE; +} + +int MPADECAPI mpadec2_configure(mpadec2_t mpadec, mpadec_config_t *cfg) +{ + register struct mpadec2_t *mpa = (struct mpadec2_t *)mpadec; + + if (!mpa || (mpa->size != sizeof(struct mpadec2_t))) return MPADEC_RETCODE_INVALID_HANDLE; + mpa->out_buffer_offset = mpa->out_buffer_used = 0; + return (mpadec_configure(mpa->mpadec, cfg)); +} + +int MPADECAPI mpadec2_get_info(mpadec2_t mpadec, void *info, int info_type) +{ + register struct mpadec2_t *mpa = (struct mpadec2_t *)mpadec; + + if (!mpa || (mpa->size != sizeof(struct mpadec2_t))) return MPADEC_RETCODE_INVALID_HANDLE; + return (mpadec_get_info(mpa->mpadec, info, info_type)); +} + +int MPADECAPI mpadec2_decode(mpadec2_t mpadec, uint8_t *srcbuf, uint32_t srcsize, uint8_t *dstbuf, uint32_t dstsize, uint32_t *dstused) +{ + register struct mpadec2_t *mpa = (struct mpadec2_t *)mpadec; + uint32_t n, src_used, dst_used; int r; + + if (dstused) *dstused = 0; + if (!mpa || (mpa->size != sizeof(struct mpadec2_t))) return MPADEC_RETCODE_INVALID_HANDLE; + if (((struct mpadec_t *)mpa->mpadec)->state < MPADEC_STATE_START) return MPADEC_RETCODE_BAD_STATE; + if (srcbuf && srcsize) { + struct mpabuffer_t *last = mpa->buffers, *buf; + if (last) { + while (last->next) last = last->next; + if ((last->offset + last->used) < last->size) { + n = last->size - (last->offset + last->used); + if (n > srcsize) n = srcsize; + memcpy(last->buffer + last->offset + last->used, srcbuf, n); + last->used += n; + srcbuf += n; + srcsize -= n; + } + } + if (srcsize) { + n = (srcsize > 4096) ? srcsize : 4096; + buf = (struct mpabuffer_t *)malloc(n + sizeof(struct mpabuffer_t)); + if (buf) { + buf->size = n; + buf->offset = buf->used = 0; + buf->buffer = (uint8_t *)buf + sizeof(struct mpabuffer_t); + buf->next = NULL; + memcpy(buf->buffer, srcbuf, srcsize); + buf->used = srcsize; + if (last) last->next = buf; else mpa->buffers = buf; + } else return MPADEC_RETCODE_NOT_ENOUGH_MEMORY; + } + } + if (!dstbuf || !dstsize) return MPADEC_RETCODE_OK; + while (dstsize) { + struct mpabuffer_t *buf = mpa->buffers; + if (mpa->out_buffer_used) { + n = (dstsize < mpa->out_buffer_used) ? dstsize : mpa->out_buffer_used; + memcpy(dstbuf, mpa->out_buffer + mpa->out_buffer_offset, n); + mpa->out_buffer_offset += n; + mpa->out_buffer_used -= n; + dstbuf += n; + dstsize -= n; + if (dstused) *dstused += n; + } + if (!dstsize) break; + if (mpa->in_buffer_used && mpa->in_buffer_offset) memmove(mpa->in_buffer, mpa->in_buffer + mpa->in_buffer_offset, mpa->in_buffer_used); + mpa->in_buffer_offset = 0; + while (buf && (mpa->in_buffer_used < sizeof(mpa->in_buffer))) { + if (buf->used) { + n = sizeof(mpa->in_buffer) - mpa->in_buffer_used; + if (n > buf->used) n = buf->used; + memcpy(mpa->in_buffer + mpa->in_buffer_offset + mpa->in_buffer_used, buf->buffer + buf->offset, n); + buf->offset += n; + buf->used -= n; + mpa->in_buffer_used += n; + } + if (!buf->used) { + struct mpabuffer_t *tmp = buf; + buf = buf->next; + free(tmp); + } + } + mpa->buffers = buf; + r = mpadec_decode(mpa->mpadec, mpa->in_buffer + mpa->in_buffer_offset, mpa->in_buffer_used, dstbuf, dstsize, &src_used, &dst_used); + mpa->in_buffer_offset += src_used; + mpa->in_buffer_used -= src_used; + dstbuf += dst_used; + dstsize -= dst_used; + if (dstused) *dstused += dst_used; + if (r == MPADEC_RETCODE_BUFFER_TOO_SMALL) { + mpa->out_buffer_offset = mpa->out_buffer_used = 0; + mpadec_decode(mpa->mpadec, mpa->in_buffer + mpa->in_buffer_offset, mpa->in_buffer_used, mpa->out_buffer, sizeof(mpa->out_buffer), &src_used, &mpa->out_buffer_used); + mpa->in_buffer_offset += src_used; + mpa->in_buffer_used -= src_used; + if (!mpa->out_buffer_used) break; + } else if (!mpa->buffers) break; + } + return MPADEC_RETCODE_OK; +} + diff --git a/polymer/jfaud/mpadec/mpadec.def b/polymer/jfaud/mpadec/mpadec.def new file mode 100755 index 000000000..a558226c5 --- /dev/null +++ b/polymer/jfaud/mpadec/mpadec.def @@ -0,0 +1,26 @@ +LIBRARY mpadec +DESCRIPTION "http://mpadec.sourceforge.net/" +EXPORTS + mpadec_init + mpadec_uninit + mpadec_reset + mpadec_configure + mpadec_get_info + mpadec_decode + mpadec_error + mpadec2_init + mpadec2_uninit + mpadec2_reset + mpadec2_configure + mpadec2_get_info + mpadec2_decode + mp3dec_init + mp3dec_init_file + mp3dec_uninit + mp3dec_reset + mp3dec_configure + mp3dec_get_info + mp3dec_decode + mp3dec_seek + mp3dec_error + diff --git a/polymer/jfaud/mpadec/mpadec.h b/polymer/jfaud/mpadec/mpadec.h new file mode 100755 index 000000000..790e374d5 --- /dev/null +++ b/polymer/jfaud/mpadec/mpadec.h @@ -0,0 +1,134 @@ +/* + * mpadec - MPEG audio decoder + * Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: mpadec.h,v 1.1.1.1 2004/07/27 02:57:17 metal_man Exp $ */ + +#ifndef __MPADEC_H +#define __MPADEC_H + +#include "config.h" + +#define MPADEC_VERSION 0x0900 + +#define MPADEC_RETCODE_OK 0 +#define MPADEC_RETCODE_INVALID_HANDLE 1 +#define MPADEC_RETCODE_NOT_ENOUGH_MEMORY 2 +#define MPADEC_RETCODE_BAD_STATE 3 +#define MPADEC_RETCODE_INVALID_PARAMETERS 4 +#define MPADEC_RETCODE_NEED_MORE_DATA 5 +#define MPADEC_RETCODE_BUFFER_TOO_SMALL 6 +#define MPADEC_RETCODE_NO_SYNC 7 +#define MPADEC_RETCODE_UNKNOWN 8 + +#define MPADEC_CONFIG_FULL_QUALITY 0 +#define MPADEC_CONFIG_HALF_QUALITY 1 + +#define MPADEC_CONFIG_AUTO 0 +#define MPADEC_CONFIG_MONO 1 +#define MPADEC_CONFIG_STEREO 2 +#define MPADEC_CONFIG_CHANNEL1 3 +#define MPADEC_CONFIG_CHANNEL2 4 + +#define MPADEC_CONFIG_16BIT 0 +#define MPADEC_CONFIG_24BIT 1 +#define MPADEC_CONFIG_32BIT 2 +#define MPADEC_CONFIG_FLOAT 3 + +#define MPADEC_CONFIG_LITTLE_ENDIAN 0 +#define MPADEC_CONFIG_BIG_ENDIAN 1 + +#define MPADEC_CONFIG_REPLAYGAIN_NONE 0 +#define MPADEC_CONFIG_REPLAYGAIN_RADIO 1 +#define MPADEC_CONFIG_REPLAYGAIN_AUDIOPHILE 2 +#define MPADEC_CONFIG_REPLAYGAIN_CUSTOM 3 + +#define MPADEC_INFO_STREAM 0 +#define MPADEC_INFO_TAG 1 +#define MPADEC_INFO_CONFIG 2 + +typedef struct { + uint8_t quality; + uint8_t mode; + uint8_t format; + uint8_t endian; + uint8_t replaygain; + uint8_t skip; + uint8_t crc; + uint8_t dblsync; + float gain; +} mpadec_config_t; + +typedef struct { + int32_t layer; + int32_t channels; + int32_t frequency; + int32_t bitrate; + uint8_t mode; + uint8_t copyright; + uint8_t original; + uint8_t emphasis; + int32_t frames; + int32_t frame_size; + int32_t frame_samples; + int32_t decoded_channels; + int32_t decoded_frequency; + int32_t decoded_sample_size; + int32_t decoded_frame_samples; + int32_t duration; +} mpadec_info_t; + +typedef struct { + uint32_t flags; + uint32_t frames; + uint32_t bytes; + uint8_t toc[100]; + int32_t replay_gain[2]; + int32_t enc_delay; + int32_t enc_padding; +} mp3tag_info_t; + +typedef void *mpadec_t; +typedef void *mpadec2_t; + +#ifdef __cplusplus +extern "C" { +#endif + +mpadec_t MPADECAPI mpadec_init(void); +int MPADECAPI mpadec_uninit(mpadec_t mpadec); +int MPADECAPI mpadec_reset(mpadec_t mpadec); +int MPADECAPI mpadec_configure(mpadec_t mpadec, mpadec_config_t *cfg); +int MPADECAPI mpadec_get_info(mpadec_t mpadec, void *info, int info_type); +int MPADECAPI mpadec_decode(mpadec_t mpadec, uint8_t *srcbuf, uint32_t srcsize, uint8_t *dstbuf, uint32_t dstsize, uint32_t *srcused, uint32_t *dstused); +char * MPADECAPI mpadec_error(int code); + +mpadec2_t MPADECAPI mpadec2_init(void); +int MPADECAPI mpadec2_uninit(mpadec2_t mpadec); +int MPADECAPI mpadec2_reset(mpadec2_t mpadec); +int MPADECAPI mpadec2_configure(mpadec2_t mpadec, mpadec_config_t *cfg); +int MPADECAPI mpadec2_get_info(mpadec2_t mpadec, void *info, int info_type); +int MPADECAPI mpadec2_decode(mpadec2_t mpadec, uint8_t *srcbuf, uint32_t srcsize, uint8_t *dstbuf, uint32_t dstsize, uint32_t *dstused); +#define mpadec2_error(x) mpadec_error(x) + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/polymer/jfaud/mpadec/mpadec.wlib b/polymer/jfaud/mpadec/mpadec.wlib new file mode 100755 index 000000000..fe4abec80 --- /dev/null +++ b/polymer/jfaud/mpadec/mpadec.wlib @@ -0,0 +1,23 @@ +++_mpadec_init@0.mpadec.mpadec_init.mpadec_init +++_mpadec_uninit@4.mpadec.mpadec_uninit.mpadec_uninit +++_mpadec_reset@4.mpadec.mpadec_reset.mpadec_reset +++_mpadec_configure@8.mpadec.mpadec_configure.mpadec_configure +++_mpadec_get_info@12.mpadec.mpadec_get_info.mpadec_get_info +++_mpadec_decode@28.mpadec.mpadec_decode.mpadec_decode +++_mpadec_error@4.mpadec.mpadec_error.mpadec_error +++_mpadec2_init@0.mpadec.mpadec2_init.mpadec2_init +++_mpadec2_uninit@4.mpadec.mpadec2_uninit.mpadec2_uninit +++_mpadec2_reset@4.mpadec.mpadec2_reset.mpadec2_reset +++_mpadec2_configure@8.mpadec.mpadec2_configure.mpadec2_configure +++_mpadec2_get_info@12.mpadec.mpadec2_get_info.mpadec2_get_info +++_mpadec2_decode@24.mpadec.mpadec2_decode.mpadec2_decode +++_mp3dec_init@0.mpadec.mp3dec_init.mp3dec_init +++_mp3dec_init_file@20.mpadec.mp3dec_init_file.mp3dec_init_file +++_mp3dec_uninit@4.mpadec.mp3dec_uninit.mp3dec_uninit +++_mp3dec_reset@4.mpadec.mp3dec_reset.mp3dec_reset +++_mp3dec_configure@8.mpadec.mp3dec_configure.mp3dec_configure +++_mp3dec_get_info@12.mpadec.mp3dec_get_info.mp3dec_get_info +++_mp3dec_decode@16.mpadec.mp3dec_decode.mp3dec_decode +++_mp3dec_seek@16.mpadec.mp3dec_seek.mp3dec_seek +++_mp3dec_error@4.mpadec.mp3dec_error.mp3dec_error + diff --git a/polymer/jfaud/mpadec/mpadec_internal.h b/polymer/jfaud/mpadec/mpadec_internal.h new file mode 100755 index 000000000..9f30b9006 --- /dev/null +++ b/polymer/jfaud/mpadec/mpadec_internal.h @@ -0,0 +1,211 @@ +/* + * mpadec - MPEG audio decoder + * Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: mpadec_internal.h,v 1.1.1.1 2004/07/27 02:57:55 metal_man Exp $ */ + +#ifndef __MPADEC_INTERNAL_H +#define __MPADEC_INTERNAL_H + +#include "mpadec.h" + +#define MPADEC_STATE_UNDEFINED 0 +#define MPADEC_STATE_START 1 +#define MPADEC_STATE_DECODE 2 + +#define MPG_MD_STEREO 0 +#define MPG_MD_JOINT_STEREO 1 +#define MPG_MD_DUAL_CHANNEL 2 +#define MPG_MD_MONO 3 + +#define SBLIMIT 32 +#define SSLIMIT 18 +#define SCALE_BLOCK 12 + +typedef struct { + FLOAT decwin[512 + 32]; + FLOAT muls[27][64]; + FLOAT gainpow2[256 + 122]; + FLOAT ispow[8207]; + FLOAT win[2][4][36]; + FLOAT *istabs[3][2][2]; + FLOAT tan1_1[16]; + FLOAT tan2_1[16]; + FLOAT tan1_2[16]; + FLOAT tan2_2[16]; + FLOAT pow1_1[2][16]; + FLOAT pow2_1[2][16]; + FLOAT pow1_2[2][16]; + FLOAT pow2_2[2][16]; + int32_t long_limit[9][23]; + int32_t short_limit[9][14]; + int32_t n_slen2[512]; + int32_t i_slen2[256]; + int32_t mapbuf0[9][152]; + int32_t mapbuf1[9][156]; + int32_t mapbuf2[9][44]; + int32_t *map[9][3]; + int32_t *mapend[9][3]; + uint8_t *mp2tables[10]; + uint8_t grp3tab[32*3]; + uint8_t grp5tab[128*3]; + uint8_t grp9tab[1024*3]; +} mpadec_tables_t; + +typedef struct { + uint16_t bits; + int16_t d; +} alloc_table_t; + +typedef struct { + uint32_t linbits; + int16_t *table; +} newhuff_t; + +typedef struct { + int16_t long_idx[23]; + int16_t long_diff[22]; + int16_t short_idx[14]; + int16_t short_diff[13]; +} bandinfo_t; + +typedef struct { + uint8_t layer; + uint8_t mode; + uint8_t channels; + uint8_t decoded_channels; + uint8_t LSF; + uint8_t MPEG25; + uint8_t CRC; + uint8_t extension; + uint8_t mode_ext; + uint8_t copyright; + uint8_t original; + uint8_t emphasis; + uint8_t jsbound; + uint8_t sblimit; + uint8_t downsample; + uint8_t downsample_sblimit; + uint16_t crc; + uint16_t rsvd; + uint32_t padding; + uint32_t bitrate_index; + uint32_t frequency_index; + uint32_t bitrate; + uint32_t frequency; + uint32_t frame_size; + uint32_t frame_samples; + uint32_t decoded_frequency; + uint32_t decoded_samples; + uint32_t decoded_size; + alloc_table_t *alloc_table; +} frameinfo_t; + +typedef struct { + int32_t scfsi; + uint32_t part2_3_length; + uint32_t big_values; + uint32_t scalefac_compress; + uint8_t block_type; + uint8_t mixed_block_flag; + uint8_t preflag; + uint8_t scalefac_scale; + uint32_t table_select[3]; + uint32_t subblock_gain[3]; + uint32_t maxband[3]; + uint32_t maxbandl; + uint32_t maxb; + uint32_t region1start; + uint32_t region2start; + uint32_t count1table_select; + FLOAT *full_gain[3]; + FLOAT *pow2gain; +} grinfo_t; + +typedef struct { + uint32_t main_data_begin; + uint32_t private_bits; + struct { + grinfo_t gr[2]; + } ch[2]; +} sideinfo_t; + +struct mpadec_t { + uint32_t size; + uint32_t state; + uint8_t *next_byte; + uint32_t bytes_left; + uint32_t bit_buffer; + uint8_t bits_left; + uint8_t error; + uint8_t free_format; + uint8_t pad1; + uint32_t sample_size; + uint32_t prev_frame_size; + uint32_t header; + uint32_t hsize; + uint32_t ssize; + uint32_t dsize; + uint16_t crc; + uint16_t pad2; + uint32_t skip_samples; + uint32_t padding_samples; + uint32_t padding_start; + uint32_t decoded_frames; + uint32_t decoded_samples; + mp3tag_info_t tag_info; + uint32_t synth_size; + FLOAT replay_gain; + void (*synth_func)(void *mpadec, FLOAT block[SBLIMIT], int channel, uint8_t *buffer); + uint32_t reservoir_size; + uint8_t reservoir[2048]; + frameinfo_t frame; + sideinfo_t sideinfo; + mpadec_config_t config; + mpadec_tables_t tables; + uint32_t synth_bufoffs; + uint8_t hybrid_block[4]; + FLOAT hybrid_in[2][SBLIMIT][SSLIMIT]; + FLOAT hybrid_out[2][SSLIMIT][SBLIMIT]; + FLOAT hybrid_buffers[2][2][SBLIMIT*SSLIMIT]; + FLOAT synth_buffers[2][2][0x110]; +}; + +struct mpabuffer_t { + uint32_t size; + uint32_t offset; + uint32_t used; + uint8_t *buffer; + struct mpabuffer_t *next; +}; + +struct mpadec2_t { + uint32_t size; + mpadec_t mpadec; + struct mpabuffer_t *buffers; + uint32_t in_buffer_offset; + uint32_t in_buffer_used; + uint32_t out_buffer_offset; + uint32_t out_buffer_used; + uint8_t in_buffer[0x10000]; + uint8_t out_buffer[8*1152]; +}; + +#define GETBITS(n) ((mpa->bits_left >= (uint8_t)(n)) ? ((mpa->bit_buffer >> (mpa->bits_left -= (uint8_t)(n))) & bitmask[n]) : getbits(mpa, n)) + +#endif diff --git a/polymer/jfaud/mpadec/synth.c b/polymer/jfaud/mpadec/synth.c new file mode 100755 index 000000000..7dfc2c501 --- /dev/null +++ b/polymer/jfaud/mpadec/synth.c @@ -0,0 +1,1364 @@ +/* + * mpadec - MPEG audio decoder + * Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: synth.c,v 1.3 2004/08/03 05:22:22 metal_man Exp $ */ + +#include "mpadec_internal.h" + +#define ROUND(x) (floor((x) + 0.5)) +#define LROUND(x) ((int32_t)(ROUND(x))) +#define LLROUND(x) ((int64_t)(ROUND(x))) + +static const FLOAT costab[32] = { + 0.50060299823519630134550410676638, 0.50547095989754365998444458560696, + 0.51544730992262454697495130564925, 0.53104259108978417447573393235719, + 0.55310389603444452782938083813705, 0.58293496820613387367383070125262, + 0.62250412303566481615725615676281, 0.67480834145500574602596871104104, + 0.74453627100229844977698119197295, 0.83934964541552703873926374662543, + 0.97256823786196069369768941405256, 1.16943993343288495515577028404220, + 1.48416461631416627724332693742810, 2.05778100995341155085655447971040, + 3.40760841846871878570119133345910, 10.1900081235480568112121092010360, + 0.50241928618815570551167011928012, 0.52249861493968888062857531905669, + 0.56694403481635770368053791515488, 0.64682178335999012954836011165200, + 0.78815462345125022473398248719742, 1.06067768599034747134045174723310, + 1.72244709823833392781591536415660, 5.10114861868916385810624549234540, + 0.50979557910415916894193980398784, 0.60134488693504528054372182390922, + 0.89997622313641570463850954094189, 2.56291544774150617879608629617770, + 0.54119610014619698439972320536639, 1.30656296487637652785664317342720, + 0.70710678118654752440084436210485, 0.0 +}; + +static void dct64(FLOAT *outptr0, FLOAT *outptr1, FLOAT *samples) +{ + FLOAT tmp1[32], tmp2[32]; + + { + register FLOAT *in = samples; + + tmp1[0] = in[0] + in[31]; + tmp1[1] = in[1] + in[30]; + tmp1[31] = (in[0] - in[31])*costab[0]; + tmp1[30] = (in[1] - in[30])*costab[1]; + + tmp1[2] = in[2] + in[29]; + tmp1[3] = in[3] + in[28]; + tmp1[29] = (in[2] - in[29])*costab[2]; + tmp1[28] = (in[3] - in[28])*costab[3]; + + tmp1[4] = in[4] + in[27]; + tmp1[5] = in[5] + in[26]; + tmp1[27] = (in[4] - in[27])*costab[4]; + tmp1[26] = (in[5] - in[26])*costab[5]; + + tmp1[6] = in[6] + in[25]; + tmp1[7] = in[7] + in[24]; + tmp1[25] = (in[6] - in[25])*costab[6]; + tmp1[24] = (in[7] - in[24])*costab[7]; + + tmp1[8] = in[8] + in[23]; + tmp1[9] = in[9] + in[22]; + tmp1[23] = (in[8] - in[23])*costab[8]; + tmp1[22] = (in[9] - in[22])*costab[9]; + + tmp1[10] = in[10] + in[21]; + tmp1[11] = in[11] + in[20]; + tmp1[21] = (in[10] - in[21])*costab[10]; + tmp1[20] = (in[11] - in[20])*costab[11]; + + tmp1[12] = in[12] + in[19]; + tmp1[13] = in[13] + in[18]; + tmp1[19] = (in[12] - in[19])*costab[12]; + tmp1[18] = (in[13] - in[18])*costab[13]; + + tmp1[14] = in[14] + in[17]; + tmp1[15] = in[15] + in[16]; + tmp1[17] = (in[14] - in[17])*costab[14]; + tmp1[16] = (in[15] - in[16])*costab[15]; + } + { + tmp2[0] = tmp1[0] + tmp1[15]; + tmp2[1] = tmp1[1] + tmp1[14]; + tmp2[15] = (tmp1[0] - tmp1[15])*costab[16 + 0]; + tmp2[14] = (tmp1[1] - tmp1[14])*costab[16 + 1]; + + tmp2[2] = tmp1[2] + tmp1[13]; + tmp2[3] = tmp1[3] + tmp1[12]; + tmp2[13] = (tmp1[2] - tmp1[13])*costab[16 + 2]; + tmp2[12] = (tmp1[3] - tmp1[12])*costab[16 + 3]; + + tmp2[4] = tmp1[4] + tmp1[11]; + tmp2[5] = tmp1[5] + tmp1[10]; + tmp2[11] = (tmp1[4] - tmp1[11])*costab[16 + 4]; + tmp2[10] = (tmp1[5] - tmp1[10])*costab[16 + 5]; + + tmp2[6] = tmp1[6] + tmp1[9]; + tmp2[7] = tmp1[7] + tmp1[8]; + tmp2[9] = (tmp1[6] - tmp1[9])*costab[16 + 6]; + tmp2[8] = (tmp1[7] - tmp1[8])*costab[16 + 7]; + + tmp2[16] = tmp1[16] + tmp1[31]; + tmp2[17] = tmp1[17] + tmp1[30]; + tmp2[31] = (tmp1[31] - tmp1[16])*costab[16 + 0]; + tmp2[30] = (tmp1[30] - tmp1[17])*costab[16 + 1]; + + tmp2[18] = tmp1[18] + tmp1[29]; + tmp2[19] = tmp1[19] + tmp1[28]; + tmp2[29] = (tmp1[29] - tmp1[18])*costab[16 + 2]; + tmp2[28] = (tmp1[28] - tmp1[19])*costab[16 + 3]; + + tmp2[20] = tmp1[20] + tmp1[27]; + tmp2[21] = tmp1[21] + tmp1[26]; + tmp2[27] = (tmp1[27] - tmp1[20])*costab[16 + 4]; + tmp2[26] = (tmp1[26] - tmp1[21])*costab[16 + 5]; + + tmp2[22] = tmp1[22] + tmp1[25]; + tmp2[23] = tmp1[23] + tmp1[24]; + tmp2[25] = (tmp1[25] - tmp1[22])*costab[16 + 6]; + tmp2[24] = (tmp1[24] - tmp1[23])*costab[16 + 7]; + } + { + tmp1[0] = tmp2[0] + tmp2[7]; + tmp1[7] = (tmp2[0] - tmp2[7])*costab[16 + 8 + 0]; + tmp1[1] = tmp2[1] + tmp2[6]; + tmp1[6] = (tmp2[1] - tmp2[6])*costab[16 + 8 + 1]; + tmp1[2] = tmp2[2] + tmp2[5]; + tmp1[5] = (tmp2[2] - tmp2[5])*costab[16 + 8 + 2]; + tmp1[3] = tmp2[3] + tmp2[4]; + tmp1[4] = (tmp2[3] - tmp2[4])*costab[16 + 8 + 3]; + + tmp1[8] = tmp2[8] + tmp2[15]; + tmp1[15] = (tmp2[15] - tmp2[8])*costab[16 + 8 + 0]; + tmp1[9] = tmp2[9] + tmp2[14]; + tmp1[14] = (tmp2[14] - tmp2[9])*costab[16 + 8 + 1]; + tmp1[10] = tmp2[10] + tmp2[13]; + tmp1[13] = (tmp2[13] - tmp2[10])*costab[16 + 8 + 2]; + tmp1[11] = tmp2[11] + tmp2[12]; + tmp1[12] = (tmp2[12] - tmp2[11])*costab[16 + 8 + 3]; + + tmp1[16] = tmp2[16] + tmp2[23]; + tmp1[23] = (tmp2[16] - tmp2[23])*costab[16 + 8 + 0]; + tmp1[17] = tmp2[17] + tmp2[22]; + tmp1[22] = (tmp2[17] - tmp2[22])*costab[16 + 8 + 1]; + tmp1[18] = tmp2[18] + tmp2[21]; + tmp1[21] = (tmp2[18] - tmp2[21])*costab[16 + 8 + 2]; + tmp1[19] = tmp2[19] + tmp2[20]; + tmp1[20] = (tmp2[19] - tmp2[20])*costab[16 + 8 + 3]; + + tmp1[24] = tmp2[24] + tmp2[31]; + tmp1[31] = (tmp2[31] - tmp2[24])*costab[16 + 8 + 0]; + tmp1[25] = tmp2[25] + tmp2[30]; + tmp1[30] = (tmp2[30] - tmp2[25])*costab[16 + 8 + 1]; + tmp1[26] = tmp2[26] + tmp2[29]; + tmp1[29] = (tmp2[29] - tmp2[26])*costab[16 + 8 + 2]; + tmp1[27] = tmp2[27] + tmp2[28]; + tmp1[28] = (tmp2[28] - tmp2[27])*costab[16 + 8 + 3]; + } + { + tmp2[0] = tmp1[0] + tmp1[3]; + tmp2[3] = (tmp1[0] - tmp1[3])*costab[16 + 8 + 4 + 0]; + tmp2[1] = tmp1[1] + tmp1[2]; + tmp2[2] = (tmp1[1] - tmp1[2])*costab[16 + 8 + 4 + 1]; + + tmp2[4] = tmp1[4] + tmp1[7]; + tmp2[7] = (tmp1[7] - tmp1[4])*costab[16 + 8 + 4 + 0]; + tmp2[5] = tmp1[5] + tmp1[6]; + tmp2[6] = (tmp1[6] - tmp1[5])*costab[16 + 8 + 4 + 1]; + + tmp2[8] = tmp1[8] + tmp1[11]; + tmp2[11] = (tmp1[8] - tmp1[11])*costab[16 + 8 + 4 + 0]; + tmp2[9] = tmp1[9] + tmp1[10]; + tmp2[10] = (tmp1[9] - tmp1[10])*costab[16 + 8 + 4 + 1]; + + tmp2[12] = tmp1[12] + tmp1[15]; + tmp2[15] = (tmp1[15] - tmp1[12])*costab[16 + 8 + 4 + 0]; + tmp2[13] = tmp1[13] + tmp1[14]; + tmp2[14] = (tmp1[14] - tmp1[13])*costab[16 + 8 + 4 + 1]; + + tmp2[16] = tmp1[16] + tmp1[19]; + tmp2[19] = (tmp1[16] - tmp1[19])*costab[16 + 8 + 4 + 0]; + tmp2[17] = tmp1[17] + tmp1[18]; + tmp2[18] = (tmp1[17] - tmp1[18])*costab[16 + 8 + 4 + 1]; + + tmp2[20] = tmp1[20] + tmp1[23]; + tmp2[23] = (tmp1[23] - tmp1[20])*costab[16 + 8 + 4 + 0]; + tmp2[21] = tmp1[21] + tmp1[22]; + tmp2[22] = (tmp1[22] - tmp1[21])*costab[16 + 8 + 4 + 1]; + + tmp2[24] = tmp1[24] + tmp1[27]; + tmp2[27] = (tmp1[24] - tmp1[27])*costab[16 + 8 + 4 + 0]; + tmp2[25] = tmp1[25] + tmp1[26]; + tmp2[26] = (tmp1[25] - tmp1[26])*costab[16 + 8 + 4 + 1]; + + tmp2[28] = tmp1[28] + tmp1[31]; + tmp2[31] = (tmp1[31] - tmp1[28])*costab[16 + 8 + 4 + 0]; + tmp2[29] = tmp1[29] + tmp1[30]; + tmp2[30] = (tmp1[30] - tmp1[29])*costab[16 + 8 + 4 + 1]; + } + { + tmp1[0] = tmp2[0] + tmp2[1]; + tmp1[1] = (tmp2[0] - tmp2[1])*costab[16 + 8 + 4 + 2]; + tmp1[2] = tmp2[2] + tmp2[3]; + tmp1[3] = (tmp2[3] - tmp2[2])*costab[16 + 8 + 4 + 2]; + tmp1[2] += tmp1[3]; + + tmp1[4] = tmp2[4] + tmp2[5]; + tmp1[5] = (tmp2[4] - tmp2[5])*costab[16 + 8 + 4 + 2]; + tmp1[6] = tmp2[6] + tmp2[7]; + tmp1[7] = (tmp2[7] - tmp2[6])*costab[16 + 8 + 4 + 2]; + tmp1[6] += tmp1[7]; + tmp1[4] += tmp1[6]; + tmp1[6] += tmp1[5]; + tmp1[5] += tmp1[7]; + + tmp1[8] = tmp2[8] + tmp2[9]; + tmp1[9] = (tmp2[8] - tmp2[9])*costab[16 + 8 + 4 + 2]; + tmp1[10] = tmp2[10] + tmp2[11]; + tmp1[11] = (tmp2[11] - tmp2[10])*costab[16 + 8 + 4 + 2]; + tmp1[10] += tmp1[11]; + + tmp1[12] = tmp2[12] + tmp2[13]; + tmp1[13] = (tmp2[12] - tmp2[13])*costab[16 + 8 + 4 + 2]; + tmp1[14] = tmp2[14] + tmp2[15]; + tmp1[15] = (tmp2[15] - tmp2[14])*costab[16 + 8 + 4 + 2]; + tmp1[14] += tmp1[15]; + tmp1[12] += tmp1[14]; + tmp1[14] += tmp1[13]; + tmp1[13] += tmp1[15]; + + tmp1[16] = tmp2[16] + tmp2[17]; + tmp1[17] = (tmp2[16] - tmp2[17])*costab[16 + 8 + 4 + 2]; + tmp1[18] = tmp2[18] + tmp2[19]; + tmp1[19] = (tmp2[19] - tmp2[18])*costab[16 + 8 + 4 + 2]; + tmp1[18] += tmp1[19]; + + tmp1[20] = tmp2[20] + tmp2[21]; + tmp1[21] = (tmp2[20] - tmp2[21])*costab[16 + 8 + 4 + 2]; + tmp1[22] = tmp2[22] + tmp2[23]; + tmp1[23] = (tmp2[23] - tmp2[22])*costab[16 + 8 + 4 + 2]; + tmp1[22] += tmp1[23]; + tmp1[20] += tmp1[22]; + tmp1[22] += tmp1[21]; + tmp1[21] += tmp1[23]; + + tmp1[24] = tmp2[24] + tmp2[25]; + tmp1[25] = (tmp2[24] - tmp2[25])*costab[16 + 8 + 4 + 2]; + tmp1[26] = tmp2[26] + tmp2[27]; + tmp1[27] = (tmp2[27] - tmp2[26])*costab[16 + 8 + 4 + 2]; + tmp1[26] += tmp1[27]; + + tmp1[28] = tmp2[28] + tmp2[29]; + tmp1[29] = (tmp2[28] - tmp2[29])*costab[16 + 8 + 4 + 2]; + tmp1[30] = tmp2[30] + tmp2[31]; + tmp1[31] = (tmp2[31] - tmp2[30])*costab[16 + 8 + 4 + 2]; + tmp1[30] += tmp1[31]; + tmp1[28] += tmp1[30]; + tmp1[30] += tmp1[29]; + tmp1[29] += tmp1[31]; + } + { + register FLOAT tmp, *out0 = outptr0, *out1 = outptr1; + + out0[16*16] = tmp1[0]; + out0[12*16] = tmp1[4]; + out0[8*16] = tmp1[2]; + out0[4*16] = tmp1[6]; + out0[0*16] = tmp1[1]; + out1[0*16] = tmp1[1]; + out1[4*16] = tmp1[5]; + out1[8*16] = tmp1[3]; + out1[12*16] = tmp1[7]; + + out0[14*16] = tmp1[8] + tmp1[12]; + out0[10*16] = tmp1[12] + tmp1[10]; + out0[6*16] = tmp1[10] + tmp1[14]; + out0[2*16] = tmp1[14] + tmp1[9]; + out1[2*16] = tmp1[9] + tmp1[13]; + out1[6*16] = tmp1[13] + tmp1[11]; + out1[10*16] = tmp1[11] + tmp1[15]; + out1[14*16] = tmp1[15]; + + tmp = tmp1[24] + tmp1[28]; + out0[15*16] = tmp + tmp1[16]; + out0[13*16] = tmp + tmp1[20]; + tmp = tmp1[28] + tmp1[26]; + out0[11*16] = tmp + tmp1[20]; + out0[9*16] = tmp + tmp1[18]; + tmp = tmp1[26] + tmp1[30]; + out0[7*16] = tmp + tmp1[18]; + out0[5*16] = tmp + tmp1[22]; + tmp = tmp1[30] + tmp1[25]; + out0[3*16] = tmp + tmp1[22]; + out0[1*16] = tmp + tmp1[17]; + tmp = tmp1[25] + tmp1[29]; + out1[1*16] = tmp + tmp1[17]; + out1[3*16] = tmp + tmp1[21]; + tmp = tmp1[29] + tmp1[27]; + out1[5*16] = tmp + tmp1[21]; + out1[7*16] = tmp + tmp1[19]; + tmp = tmp1[27] + tmp1[31]; + out1[9*16] = tmp + tmp1[19]; + out1[11*16] = tmp + tmp1[23]; + out1[13*16] = tmp1[23] + tmp1[31]; + out1[15*16] = tmp1[31]; + } +} + +static void synth_full(mpadec_t mpadec, FLOAT *bandptr, int channel, FLOAT *buffer) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + unsigned bo; + FLOAT *b0, (*buf)[0x110]; + + if (!channel) { + mpa->synth_bufoffs--; + mpa->synth_bufoffs &= 0x0F; + buf = mpa->synth_buffers[0]; + } else buf = mpa->synth_buffers[1]; + if (mpa->synth_bufoffs & 1) { + b0 = buf[0]; + bo = mpa->synth_bufoffs; + dct64(buf[1] + ((mpa->synth_bufoffs + 1) & 0x0F), buf[0] + mpa->synth_bufoffs, bandptr); + } else { + b0 = buf[1]; + bo = mpa->synth_bufoffs + 1; + dct64(buf[0] + mpa->synth_bufoffs, buf[1] + (mpa->synth_bufoffs + 1), bandptr); + } + { + register int i; + register FLOAT *out = buffer; + register FLOAT *win = mpa->tables.decwin + (16 - bo); + + for (i = 16; i; i--, win += 32, b0 += 16) { + register FLOAT sum = win[0]*b0[0]; + sum -= win[1]*b0[1]; + sum += win[2]*b0[2]; + sum -= win[3]*b0[3]; + sum += win[4]*b0[4]; + sum -= win[5]*b0[5]; + sum += win[6]*b0[6]; + sum -= win[7]*b0[7]; + sum += win[8]*b0[8]; + sum -= win[9]*b0[9]; + sum += win[10]*b0[10]; + sum -= win[11]*b0[11]; + sum += win[12]*b0[12]; + sum -= win[13]*b0[13]; + sum += win[14]*b0[14]; + sum -= win[15]*b0[15]; + *out++ = sum; + } + { + register FLOAT sum = win[0]*b0[0]; + sum += win[2]*b0[2]; + sum += win[4]*b0[4]; + sum += win[6]*b0[6]; + sum += win[8]*b0[8]; + sum += win[10]*b0[10]; + sum += win[12]*b0[12]; + sum += win[14]*b0[14]; + *out++ = sum; + win -= 32; b0 -= 16; + } + win += (bo << 1); + for (i = 15; i; i--, win -= 32, b0 -= 16) + { + register FLOAT sum = -win[-1]*b0[0]; + sum -= win[-2]*b0[1]; + sum -= win[-3]*b0[2]; + sum -= win[-4]*b0[3]; + sum -= win[-5]*b0[4]; + sum -= win[-6]*b0[5]; + sum -= win[-7]*b0[6]; + sum -= win[-8]*b0[7]; + sum -= win[-9]*b0[8]; + sum -= win[-10]*b0[9]; + sum -= win[-11]*b0[10]; + sum -= win[-12]*b0[11]; + sum -= win[-13]*b0[12]; + sum -= win[-14]*b0[13]; + sum -= win[-15]*b0[14]; + sum -= win[-0]*b0[15]; + *out++ = sum; + } + } +} + +static void synth_half(mpadec_t mpadec, FLOAT *bandptr, int channel, FLOAT *buffer) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + unsigned bo; + FLOAT *b0, (*buf)[0x110]; + + if (!channel) { + mpa->synth_bufoffs--; + mpa->synth_bufoffs &= 0x0F; + buf = mpa->synth_buffers[0]; + } else buf = mpa->synth_buffers[1]; + if (mpa->synth_bufoffs & 1) { + b0 = buf[0]; + bo = mpa->synth_bufoffs; + dct64(buf[1] + ((mpa->synth_bufoffs + 1) & 0x0F), buf[0] + mpa->synth_bufoffs, bandptr); + } else { + b0 = buf[1]; + bo = mpa->synth_bufoffs + 1; + dct64(buf[0] + mpa->synth_bufoffs, buf[1] + (mpa->synth_bufoffs + 1), bandptr); + } + { + register int i; + register FLOAT *out = buffer; + register FLOAT *win = mpa->tables.decwin + (16 - bo); + + for (i = 8; i; i--, win += 64, b0 += 32) { + register FLOAT sum = win[0]*b0[0]; + sum -= win[1]*b0[1]; + sum += win[2]*b0[2]; + sum -= win[3]*b0[3]; + sum += win[4]*b0[4]; + sum -= win[5]*b0[5]; + sum += win[6]*b0[6]; + sum -= win[7]*b0[7]; + sum += win[8]*b0[8]; + sum -= win[9]*b0[9]; + sum += win[10]*b0[10]; + sum -= win[11]*b0[11]; + sum += win[12]*b0[12]; + sum -= win[13]*b0[13]; + sum += win[14]*b0[14]; + sum -= win[15]*b0[15]; + *out++ = sum; + } + { + register FLOAT sum = win[0]*b0[0]; + sum += win[2]*b0[2]; + sum += win[4]*b0[4]; + sum += win[6]*b0[6]; + sum += win[8]*b0[8]; + sum += win[10]*b0[10]; + sum += win[12]*b0[12]; + sum += win[14]*b0[14]; + *out++ = sum; + win -= 64; b0 -= 32; + } + win += (bo << 1); + for (i = 7; i; i--, win -= 64, b0 -= 32) + { + register FLOAT sum = -win[-1]*b0[0]; + sum -= win[-2]*b0[1]; + sum -= win[-3]*b0[2]; + sum -= win[-4]*b0[3]; + sum -= win[-5]*b0[4]; + sum -= win[-6]*b0[5]; + sum -= win[-7]*b0[6]; + sum -= win[-8]*b0[7]; + sum -= win[-9]*b0[8]; + sum -= win[-10]*b0[9]; + sum -= win[-11]*b0[10]; + sum -= win[-12]*b0[11]; + sum -= win[-13]*b0[12]; + sum -= win[-14]*b0[13]; + sum -= win[-15]*b0[14]; + sum -= win[-0]*b0[15]; + *out++ = sum; + } + } +} + +/* Full quality */ + +/* 16 bit, little-endian */ + +static void synth_full16lmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out++) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((int8_t *)out)[1] = (int8_t)(tmp >> 8); + } +} + +#define synth_full16lsm synth_full16lmm + +static void synth_full16lms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out += 2) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[0] = ((uint8_t *)out)[2] = (uint8_t)tmp; + ((int8_t *)out)[1] = ((int8_t *)out)[3] = (int8_t)(tmp >> 8); + } +} + +static void synth_full16lss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT; i++, out += 2) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((int8_t *)out)[1] = (int8_t)(tmp >> 8); + } +} + +/* 16 bit, big-endian */ + +static void synth_full16bmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out++) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[1] = (uint8_t)tmp; + ((int8_t *)out)[0] = (int8_t)(tmp >> 8); + } +} + +#define synth_full16bsm synth_full16bmm + +static void synth_full16bms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out += 2) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[1] = ((uint8_t *)out)[3] = (uint8_t)tmp; + ((int8_t *)out)[0] = ((int8_t *)out)[2] = (int8_t)(tmp >> 8); + } +} + +static void synth_full16bss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT; i++, out += 2) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[1] = (uint8_t)tmp; + ((int8_t *)out)[0] = (int8_t)(tmp >> 8); + } +} + +/* 24 bit, little-endian */ + +static void synth_full24lmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out += 3) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[2] = (int8_t)(tmp >> 16); + } +} + +#define synth_full24lsm synth_full24lmm + +static void synth_full24lms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out += 6) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[0] = ((uint8_t *)out)[3] = (uint8_t)tmp; + ((uint8_t *)out)[1] = ((uint8_t *)out)[4] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[2] = ((int8_t *)out)[5] = (int8_t)(tmp >> 16); + } +} + +static void synth_full24lss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + if (channel) out += 3; + for (i = 0; i < SBLIMIT; i++, out += 6) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[2] = (int8_t)(tmp >> 16); + } +} + +/* 24 bit, big-endian */ + +static void synth_full24bmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out += 3) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[2] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[0] = (int8_t)(tmp >> 16); + } +} + +#define synth_full24bsm synth_full24bmm + +static void synth_full24bms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out += 6) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[2] = ((uint8_t *)out)[5] = (uint8_t)tmp; + ((uint8_t *)out)[1] = ((uint8_t *)out)[4] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[0] = ((int8_t *)out)[3] = (int8_t)(tmp >> 16); + } +} + +static void synth_full24bss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + if (channel) out += 3; + for (i = 0; i < SBLIMIT; i++, out += 6) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[2] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[0] = (int8_t)(tmp >> 16); + } +} + +/* 32 bit , little-endian */ + +static void synth_full32lmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out++) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = (int8_t)(tmp >> 24); + } +} + +#define synth_full32lsm synth_full32lmm + +static void synth_full32lms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out += 2) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[0] = ((uint8_t *)out)[4] = (uint8_t)tmp; + ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = ((int8_t *)out)[7] = (int8_t)(tmp >> 24); + } +} + +static void synth_full32lss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT; i++, out += 2) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = (int8_t)(tmp >> 24); + } +} + +/* 32 bit, big-endian */ + +static void synth_full32bmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out++) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[3] = (uint8_t)tmp; + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = (int8_t)(tmp >> 24); + } +} + +#define synth_full32bsm synth_full32bmm + +static void synth_full32bms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out += 2) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[3] = ((uint8_t *)out)[7] = (uint8_t)tmp; + ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = ((int8_t *)out)[4] = (int8_t)(tmp >> 24); + } +} + +static void synth_full32bss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT; i++, out += 2) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[3] = (uint8_t)tmp; + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = (int8_t)(tmp >> 24); + } +} + +/* 32 bit floating-point, little-endian */ + +static void synth_full32flmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out++) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = (int8_t)(tmp >> 24); + } +} + +#define synth_full32flsm synth_full32flmm + +static void synth_full32flms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out += 2) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[0] = ((uint8_t *)out)[4] = (uint8_t)tmp; + ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = ((int8_t *)out)[7] = (int8_t)(tmp >> 24); + } +} + +static void synth_full32flss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT; i++, out += 2) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = (int8_t)(tmp >> 24); + } +} + +/* 32 bit floating-point, big-endian */ + +static void synth_full32fbmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out++) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[3] = (uint8_t)tmp; + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = (int8_t)(tmp >> 24); + } +} + +#define synth_full32fbsm synth_full32fbmm + +static void synth_full32fbms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT; i++, out += 2) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[3] = ((uint8_t *)out)[7] = (uint8_t)tmp; + ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = ((int8_t *)out)[4] = (int8_t)(tmp >> 24); + } +} + +static void synth_full32fbss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT]; + + synth_full(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT; i++, out += 2) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[3] = (uint8_t)tmp; + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = (int8_t)(tmp >> 24); + } +} + +/* Half quality */ + +/* 16 bit, little-endian */ + +static void synth_half16lmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out++) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((int8_t *)out)[1] = (int8_t)(tmp >> 8); + } +} + +#define synth_half16lsm synth_half16lmm + +static void synth_half16lms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[0] = ((uint8_t *)out)[2] = (uint8_t)tmp; + ((int8_t *)out)[1] = ((int8_t *)out)[3] = (int8_t)(tmp >> 8); + } +} + +static void synth_half16lss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((int8_t *)out)[1] = (int8_t)(tmp >> 8); + } +} + +/* 16 bit, big-endian */ + +static void synth_half16bmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out++) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[1] = (uint8_t)tmp; + ((int8_t *)out)[0] = (int8_t)(tmp >> 8); + } +} + +#define synth_half16bsm synth_half16bmm + +static void synth_half16bms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[1] = ((uint8_t *)out)[3] = (uint8_t)tmp; + ((int8_t *)out)[0] = ((int8_t *)out)[2] = (int8_t)(tmp >> 8); + } +} + +static void synth_half16bss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int16_t *out = (int16_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 32767) tmp = 32767; else if (tmp < -32768) tmp = -32768; + ((uint8_t *)out)[1] = (uint8_t)tmp; + ((int8_t *)out)[0] = (int8_t)(tmp >> 8); + } +} + +/* 24 bit, little-endian */ + +static void synth_half24lmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out += 3) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[2] = (int8_t)(tmp >> 16); + } +} + +#define synth_half24lsm synth_half24lmm + +static void synth_half24lms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out += 6) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[0] = ((uint8_t *)out)[3] = (uint8_t)tmp; + ((uint8_t *)out)[1] = ((uint8_t *)out)[4] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[2] = ((int8_t *)out)[5] = (int8_t)(tmp >> 16); + } +} + +static void synth_half24lss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + if (channel) out += 3; + for (i = 0; i < SBLIMIT/2; i++, out += 6) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[2] = (int8_t)(tmp >> 16); + } +} + +/* 24 bit, big-endian */ + +static void synth_half24bmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out += 3) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[2] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[0] = (int8_t)(tmp >> 16); + } +} + +#define synth_half24bsm synth_half24bmm + +static void synth_half24bms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out += 6) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[2] = ((uint8_t *)out)[5] = (uint8_t)tmp; + ((uint8_t *)out)[1] = ((uint8_t *)out)[4] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[0] = ((int8_t *)out)[3] = (int8_t)(tmp >> 16); + } +} + +static void synth_half24bss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register uint8_t *out = (uint8_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + if (channel) out += 3; + for (i = 0; i < SBLIMIT/2; i++, out += 6) { + register int32_t tmp = LROUND(buf[i]); + if (tmp > 0x7FFFFF) tmp = 0x7FFFFF; else if (tmp < -0x800000) tmp = -0x800000; + ((uint8_t *)out)[2] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((int8_t *)out)[0] = (int8_t)(tmp >> 16); + } +} + +/* 32 bit, little-endian */ + +static void synth_half32lmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out++) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = (int8_t)(tmp >> 24); + } +} + +#define synth_half32lsm synth_half32lmm + +static void synth_half32lms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[0] = ((uint8_t *)out)[4] = (uint8_t)tmp; + ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = ((int8_t *)out)[7] = (int8_t)(tmp >> 24); + } +} + +static void synth_half32lss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = (int8_t)(tmp >> 24); + } +} + +/* 32 bit, big-endian */ + +static void synth_half32bmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out++) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[3] = (uint8_t)tmp; + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = (int8_t)(tmp >> 24); + } +} + +#define synth_half32bsm synth_half32bmm + +static void synth_half32bms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[3] = ((uint8_t *)out)[7] = (uint8_t)tmp; + ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = ((int8_t *)out)[4] = (int8_t)(tmp >> 24); + } +} + +static void synth_half32bss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register int32_t *out = (int32_t *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + register int64_t tmp = LLROUND(buf[i]); + if (tmp > 0x7FFFFFFF) tmp = 0x7FFFFFFF; else if (tmp < (-0x7FFFFFFF - 1)) tmp = (-0x7FFFFFFF - 1); + ((uint8_t *)out)[3] = (uint8_t)tmp; + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = (int8_t)(tmp >> 24); + } +} + +/* 32 bit floating-point, little-endian */ + +static void synth_half32flmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out++) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = (int8_t)(tmp >> 24); + } +} + +#define synth_half32flsm synth_half32flmm + +static void synth_half32flms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[0] = ((uint8_t *)out)[4] = (uint8_t)tmp; + ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = ((int8_t *)out)[7] = (int8_t)(tmp >> 24); + } +} + +static void synth_half32flss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[0] = (uint8_t)tmp; + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[3] = (int8_t)(tmp >> 24); + } +} + +/* 32 bit floating-point, big-endian */ + +static void synth_half32fbmm(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out++) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[3] = (uint8_t)tmp; + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = (int8_t)(tmp >> 24); + } +} + +#define synth_half32fbsm synth_half32fbmm + +static void synth_half32fbms(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[3] = ((uint8_t *)out)[7] = (uint8_t)tmp; + ((uint8_t *)out)[2] = ((uint8_t *)out)[6] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = ((uint8_t *)out)[5] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = ((int8_t *)out)[4] = (int8_t)(tmp >> 24); + } +} + +static void synth_half32fbss(mpadec_t mpadec, FLOAT *bandptr, int channel, uint8_t *buffer) +{ + register int i; + register float *out = (float *)buffer; + FLOAT buf[SBLIMIT/2]; + + synth_half(mpadec, bandptr, channel, buf); + if (channel) out++; + for (i = 0; i < SBLIMIT/2; i++, out += 2) { + int32_t tmp; + *((float *)(&tmp)) = (float)buf[i]; + ((uint8_t *)out)[3] = (uint8_t)tmp; + ((uint8_t *)out)[2] = (uint8_t)(tmp >> 8); + ((uint8_t *)out)[1] = (uint8_t)(tmp >> 16); + ((int8_t *)out)[0] = (int8_t)(tmp >> 24); + } +} + +void *synth_table[2][2][4][4] = { + { { { synth_full16lmm, synth_full16lms, synth_full16lsm, synth_full16lss }, + { synth_full24lmm, synth_full24lms, synth_full24lsm, synth_full24lss }, + { synth_full32lmm, synth_full32lms, synth_full32lsm, synth_full32lss }, + { synth_full32flmm, synth_full32flms, synth_full32flsm, synth_full32flss } }, + { { synth_full16bmm, synth_full16bms, synth_full16bsm, synth_full16bss }, + { synth_full24bmm, synth_full24bms, synth_full24bsm, synth_full24bss }, + { synth_full32bmm, synth_full32bms, synth_full32bsm, synth_full32bss }, + { synth_full32fbmm, synth_full32fbms, synth_full32fbsm, synth_full32fbss } } }, + { { { synth_half16lmm, synth_half16lms, synth_half16lsm, synth_half16lss }, + { synth_half24lmm, synth_half24lms, synth_half24lsm, synth_half24lss }, + { synth_half32lmm, synth_half32lms, synth_half32lsm, synth_half32lss }, + { synth_half32flmm, synth_half32flms, synth_half32flsm, synth_half32flss } }, + { { synth_half16bmm, synth_half16bms, synth_half16bsm, synth_half16bss }, + { synth_half24bmm, synth_half24bms, synth_half24bsm, synth_half24bss }, + { synth_half32bmm, synth_half32bms, synth_half32bsm, synth_half32bss }, + { synth_half32fbmm, synth_half32fbms, synth_half32fbsm, synth_half32fbss } } } +}; + diff --git a/polymer/jfaud/mpadec/tables.c b/polymer/jfaud/mpadec/tables.c new file mode 100755 index 000000000..14c29a5c7 --- /dev/null +++ b/polymer/jfaud/mpadec/tables.c @@ -0,0 +1,821 @@ +/* + * mpadec - MPEG audio decoder + * Copyright (C) 2002-2004 Dmitriy Startsev (dstartsev@rambler.ru) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: tables.c,v 1.1.1.1 2004/07/27 02:58:48 metal_man Exp $ */ + +#include "mpadec_internal.h" + +const uint16_t crc_table[256] = { + 0x0000, 0x8005, 0x800F, 0x000A, 0x801B, 0x001E, 0x0014, 0x8011, + 0x8033, 0x0036, 0x003C, 0x8039, 0x0028, 0x802D, 0x8027, 0x0022, + 0x8063, 0x0066, 0x006C, 0x8069, 0x0078, 0x807D, 0x8077, 0x0072, + 0x0050, 0x8055, 0x805F, 0x005A, 0x804B, 0x004E, 0x0044, 0x8041, + 0x80C3, 0x00C6, 0x00CC, 0x80C9, 0x00D8, 0x80DD, 0x80D7, 0x00D2, + 0x00F0, 0x80F5, 0x80FF, 0x00FA, 0x80EB, 0x00EE, 0x00E4, 0x80E1, + 0x00A0, 0x80A5, 0x80AF, 0x00AA, 0x80BB, 0x00BE, 0x00B4, 0x80B1, + 0x8093, 0x0096, 0x009C, 0x8099, 0x0088, 0x808D, 0x8087, 0x0082, + 0x8183, 0x0186, 0x018C, 0x8189, 0x0198, 0x819D, 0x8197, 0x0192, + 0x01B0, 0x81B5, 0x81BF, 0x01BA, 0x81AB, 0x01AE, 0x01A4, 0x81A1, + 0x01E0, 0x81E5, 0x81EF, 0x01EA, 0x81FB, 0x01FE, 0x01F4, 0x81F1, + 0x81D3, 0x01D6, 0x01DC, 0x81D9, 0x01C8, 0x81CD, 0x81C7, 0x01C2, + 0x0140, 0x8145, 0x814F, 0x014A, 0x815B, 0x015E, 0x0154, 0x8151, + 0x8173, 0x0176, 0x017C, 0x8179, 0x0168, 0x816D, 0x8167, 0x0162, + 0x8123, 0x0126, 0x012C, 0x8129, 0x0138, 0x813D, 0x8137, 0x0132, + 0x0110, 0x8115, 0x811F, 0x011A, 0x810B, 0x010E, 0x0104, 0x8101, + 0x8303, 0x0306, 0x030C, 0x8309, 0x0318, 0x831D, 0x8317, 0x0312, + 0x0330, 0x8335, 0x833F, 0x033A, 0x832B, 0x032E, 0x0324, 0x8321, + 0x0360, 0x8365, 0x836F, 0x036A, 0x837B, 0x037E, 0x0374, 0x8371, + 0x8353, 0x0356, 0x035C, 0x8359, 0x0348, 0x834D, 0x8347, 0x0342, + 0x03C0, 0x83C5, 0x83CF, 0x03CA, 0x83DB, 0x03DE, 0x03D4, 0x83D1, + 0x83F3, 0x03F6, 0x03FC, 0x83F9, 0x03E8, 0x83ED, 0x83E7, 0x03E2, + 0x83A3, 0x03A6, 0x03AC, 0x83A9, 0x03B8, 0x83BD, 0x83B7, 0x03B2, + 0x0390, 0x8395, 0x839F, 0x039A, 0x838B, 0x038E, 0x0384, 0x8381, + 0x0280, 0x8285, 0x828F, 0x028A, 0x829B, 0x029E, 0x0294, 0x8291, + 0x82B3, 0x02B6, 0x02BC, 0x82B9, 0x02A8, 0x82AD, 0x82A7, 0x02A2, + 0x82E3, 0x02E6, 0x02EC, 0x82E9, 0x02F8, 0x82FD, 0x82F7, 0x02F2, + 0x02D0, 0x82D5, 0x82DF, 0x02DA, 0x82CB, 0x02CE, 0x02C4, 0x82C1, + 0x8243, 0x0246, 0x024C, 0x8249, 0x0258, 0x825D, 0x8257, 0x0252, + 0x0270, 0x8275, 0x827F, 0x027A, 0x826B, 0x026E, 0x0264, 0x8261, + 0x0220, 0x8225, 0x822F, 0x022A, 0x823B, 0x023E, 0x0234, 0x8231, + 0x8213, 0x0216, 0x021C, 0x8219, 0x0208, 0x820D, 0x8207, 0x0202 +}; + +const FLOAT newcos[8] = { + 0.93969262078590838405410927732473, -0.17364817766693034885171662676931, + -0.76604444311897803520239265055542, 0.98480775301220805936674302458952, + -0.34202014332566873304409961468226, -0.64278760968653932632264340990726, + 0.86602540378443864676372317075294, 0.5 +}; + +const FLOAT tfcos36[9] = { + 0.50190991877167369479228784572231, 0.51763809020504152469779767524810, + 0.55168895948124587824344735167135, 0.61038729438072803416729403213053, + 0.70710678118654752440084436210485, 0.87172339781054900991884170836219, + 1.18310079157624925896683916310440, 1.93185165257813657349948639945780, + 5.73685662283492756457461251791420 +}; + +const FLOAT tfcos12[3] = { + 0.5176380902050415246977976752481, 0.70710678118654752440084436210485, + 1.9318516525781365734994863994578 +}; + +const FLOAT cs[8] = { + 0.85749292571254418689325777610964, 0.88174199731770518177557399759066, + 0.94962864910273289204833276115398, 0.98331459249179014599030200066392, + 0.99551781606758576429088040422867, 0.99916055817814750452934664352117, + 0.99989919524444704626703489425565, 0.99999315507028023572010150517204 +}; + +const FLOAT ca[8] = { + -0.5144957554275265121359546656657900, -0.4717319685649722722499320887110000, + -0.3133774542039018543759498111808100, -0.1819131996109811770082058701228300, + -0.0945741925264206476076336384017240, -0.0409655828853040476857032123843680, + -0.0141985685724711480569918954984300, -0.0036999746737600368721643755691366 +}; + +bandinfo_t band_info[9] = { + /* MPEG 1.0 */ + { { 0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, 576 }, + { 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10, 12, 16, 20, 24, 28, 34, 42, 50, 54, 76, 158 }, + { 0, 4*3, 8*3, 12*3, 16*3, 22*3, 30*3, 40*3, 52*3, 66*3, 84*3, 106*3, 136*3, 192*3 }, + { 4, 4, 4, 4, 6, 8, 10, 12, 14, 18, 22, 30, 56 } }, + { { 0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, 576 }, + { 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10, 12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192 }, + { 0, 4*3, 8*3, 12*3, 16*3, 22*3, 28*3, 38*3, 50*3, 64*3, 80*3, 100*3, 126*3, 192*3 }, + { 4, 4, 4, 4, 6, 6, 10, 12, 14, 16, 20, 26, 66 } }, + { { 0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, 576 }, + { 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12, 16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26 }, + { 0, 4*3, 8*3, 12*3, 16*3, 22*3, 30*3, 42*3, 58*3, 78*3, 104*3, 138*3, 180*3, 192*3 }, + { 4, 4, 4, 4, 6, 8, 12, 16, 20, 26, 34, 42, 12 } }, + /* MPEG 2.0 */ + { { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576 }, + { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54 }, + { 0, 4*3, 8*3, 12*3, 18*3, 24*3, 32*3, 42*3, 56*3, 74*3, 100*3, 132*3, 174*3, 192*3 }, + { 4, 4, 4, 6, 6, 8, 10, 14, 18, 26, 32, 42, 18 } }, + { { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 114, 136, 162, 194, 232, 278, 330, 394, 464, 540, 576 }, + { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 18, 22, 26, 32, 38, 46, 52, 64, 70, 76, 36 }, + { 0, 4*3, 8*3, 12*3, 18*3, 26*3, 36*3, 48*3, 62*3, 80*3, 104*3, 136*3, 180*3, 192*3 }, + { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 32, 44, 12 } }, + { { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576 }, + { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54 }, + { 0, 4*3, 8*3, 12*3, 18*3, 26*3, 36*3, 48*3, 62*3, 80*3, 104*3, 134*3, 174*3, 192*3 }, + { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18 } }, + /* MPEG 2.5 */ + { { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576 }, + { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54 }, + { 0, 12, 24, 36, 54, 78, 108, 144, 186, 240, 312, 402, 522, 576 }, + { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18 } }, + { { 0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576 }, + { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54 }, + { 0, 12, 24, 36, 54, 78, 108, 144, 186, 240, 312, 402, 522, 576 }, + { 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18 } }, + { { 0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192, 232, 280, 336, 400, 476, 566, 568, 570, 572, 574, 576 }, + { 12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32, 40, 48, 56, 64, 76, 90, 2, 2, 2, 2, 2 }, + { 0, 24, 48, 72, 108, 156, 216, 288, 372, 480, 486, 492, 498, 576 }, + { 8, 8, 8, 12, 16, 20, 24, 28, 36, 2, 2, 2, 26 } }, +}; + +static alloc_table_t alloc_0[] = { + {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511}, + {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767}, + {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511}, + {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767}, + {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511}, + {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {2,0}, {5,3}, {7,5}, {16,-32767}, + {2,0}, {5,3}, {7,5}, {16,-32767}, + {2,0}, {5,3}, {7,5}, {16,-32767}, + {2,0}, {5,3}, {7,5}, {16,-32767} +}; + +static alloc_table_t alloc_1[] = { + {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511}, + {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767}, + {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511}, + {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767}, + {4,0}, {5,3}, {3,-3}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, {10,-511}, + {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {3,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {16,-32767}, + {2,0}, {5,3}, {7,5}, {16,-32767}, + {2,0}, {5,3}, {7,5}, {16,-32767}, + {2,0}, {5,3}, {7,5}, {16,-32767}, + {2,0}, {5,3}, {7,5}, {16,-32767}, + {2,0}, {5,3}, {7,5}, {16,-32767}, + {2,0}, {5,3}, {7,5}, {16,-32767}, + {2,0}, {5,3}, {7,5}, {16,-32767} +}; + +static alloc_table_t alloc_2[] = { + {4,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, + {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, + {4,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, + {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63} +}; + +static alloc_table_t alloc_3[] = { + {4,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, + {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, + {4,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, {9,-255}, + {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, {15,-16383}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63} +}; + +static alloc_table_t alloc_4[] = { + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, + {4,0}, {5,3}, {7,5}, {3,-3}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, {8,-127}, + {9,-255}, {10,-511}, {11,-1023}, {12,-2047}, {13,-4095}, {14,-8191}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {3,0}, {5,3}, {7,5}, {10,9}, {4,-7}, {5,-15}, {6,-31}, {7,-63}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9}, + {2,0}, {5,3}, {7,5}, {10,9} +}; + +alloc_table_t *alloc_tables[5] = { alloc_0, alloc_1, alloc_2, alloc_3, alloc_4 }; + +static int16_t tab0[] = { 0 }; + +static int16_t tab1[] = { -5, -3, -1, 17, 1, 16, 0 }; + +static int16_t tab2[] = { + -15, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 17, -1, 1, + 16, 0 +}; + +static int16_t tab3[] = { + -13, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 16, 17, -1, + 1, 0 +}; + +static int16_t tab5[] = { + -29, -25, -23, -15, -7, -5, -3, -1, 51, 35, 50, 49, -3, -1, 19, + 3, -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, 17, -1, 1, 16, + 0 +}; + +static int16_t tab6[] = { + -25, -19, -13, -9, -5, -3, -1, 51, 3, 35, -1, 50, 48, -1, 19, + 49, -3, -1, 34, 2, 18, -3, -1, 33, 32, 1, -1, 17, -1, 16, + 0 +}; + +static int16_t tab7[] = { + -69, -65, -57, -39, -29, -17, -11, -7, -3, -1, 85, 69, -1, 84, 83, + -1, 53, 68, -3, -1, 37, 82, 21, -5, -1, 81, -1, 5, 52, -1, + 80, -1, 67, 51, -5, -3, -1, 36, 66, 20, -1, 65, 64, -11, -7, + -3, -1, 4, 35, -1, 50, 3, -1, 19, 49, -3, -1, 48, 34, 18, + -5, -1, 33, -1, 2, 32, 17, -1, 1, 16, 0 +}; + +static int16_t tab8[] = { + -65, -63, -59, -45, -31, -19, -13, -7, -5, -3, -1, 85, 84, 69, 83, + -3, -1, 53, 68, 37, -3, -1, 82, 5, 21, -5, -1, 81, -1, 52, + 67, -3, -1, 80, 51, 36, -5, -3, -1, 66, 20, 65, -3, -1, 4, + 64, -1, 35, 50, -9, -7, -3, -1, 19, 49, -1, 3, 48, 34, -1, + 2, 32, -1, 18, 33, 17, -3, -1, 1, 16, 0 +}; + +static int16_t tab9[] = { + -63, -53, -41, -29, -19, -11, -5, -3, -1, 85, 69, 53, -1, 83, -1, + 84, 5, -3, -1, 68, 37, -1, 82, 21, -3, -1, 81, 52, -1, 67, + -1, 80, 4, -7, -3, -1, 36, 66, -1, 51, 64, -1, 20, 65, -5, + -3, -1, 35, 50, 19, -1, 49, -1, 3, 48, -5, -3, -1, 34, 2, + 18, -1, 33, 32, -3, -1, 17, 1, -1, 16, 0 +}; + +static int16_t tab10[] = { + -125, -121, -111, -83, -55, -35, -21, -13, -7, -3, -1, 119, 103, -1, 118, + 87, -3, -1, 117, 102, 71, -3, -1, 116, 86, -1, 101, 55, -9, -3, + -1, 115, 70, -3, -1, 85, 84, 99, -1, 39, 114, -11, -5, -3, -1, + 100, 7, 112, -1, 98, -1, 69, 53, -5, -1, 6, -1, 83, 68, 23, + -17, -5, -1, 113, -1, 54, 38, -5, -3, -1, 37, 82, 21, -1, 81, + -1, 52, 67, -3, -1, 22, 97, -1, 96, -1, 5, 80, -19, -11, -7, + -3, -1, 36, 66, -1, 51, 4, -1, 20, 65, -3, -1, 64, 35, -1, + 50, 3, -3, -1, 19, 49, -1, 48, 34, -7, -3, -1, 18, 33, -1, + 2, 32, 17, -1, 1, 16, 0 +}; + +static int16_t tab11[] = { + -121, -113, -89, -59, -43, -27, -17, -7, -3, -1, 119, 103, -1, 118, 117, + -3, -1, 102, 71, -1, 116, -1, 87, 85, -5, -3, -1, 86, 101, 55, + -1, 115, 70, -9, -7, -3, -1, 69, 84, -1, 53, 83, 39, -1, 114, + -1, 100, 7, -5, -1, 113, -1, 23, 112, -3, -1, 54, 99, -1, 96, + -1, 68, 37, -13, -7, -5, -3, -1, 82, 5, 21, 98, -3, -1, 38, + 6, 22, -5, -1, 97, -1, 81, 52, -5, -1, 80, -1, 67, 51, -1, + 36, 66, -15, -11, -7, -3, -1, 20, 65, -1, 4, 64, -1, 35, 50, + -1, 19, 49, -5, -3, -1, 3, 48, 34, 33, -5, -1, 18, -1, 2, + 32, 17, -3, -1, 1, 16, 0 +}; + +static int16_t tab12[] = { + -115, -99, -73, -45, -27, -17, -9, -5, -3, -1, 119, 103, 118, -1, 87, + 117, -3, -1, 102, 71, -1, 116, 101, -3, -1, 86, 55, -3, -1, 115, + 85, 39, -7, -3, -1, 114, 70, -1, 100, 23, -5, -1, 113, -1, 7, + 112, -1, 54, 99, -13, -9, -3, -1, 69, 84, -1, 68, -1, 6, 5, + -1, 38, 98, -5, -1, 97, -1, 22, 96, -3, -1, 53, 83, -1, 37, + 82, -17, -7, -3, -1, 21, 81, -1, 52, 67, -5, -3, -1, 80, 4, + 36, -1, 66, 20, -3, -1, 51, 65, -1, 35, 50, -11, -7, -5, -3, + -1, 64, 3, 48, 19, -1, 49, 34, -1, 18, 33, -7, -5, -3, -1, + 2, 32, 0, 17, -1, 1, 16 +}; + +static int16_t tab13[] = { + -509, -503, -475, -405, -333, -265, -205, -153, -115, -83, -53, -35, -21, -13, -9, + -7, -5, -3, -1, 254, 252, 253, 237, 255, -1, 239, 223, -3, -1, 238, + 207, -1, 222, 191, -9, -3, -1, 251, 206, -1, 220, -1, 175, 233, -1, + 236, 221, -9, -5, -3, -1, 250, 205, 190, -1, 235, 159, -3, -1, 249, + 234, -1, 189, 219, -17, -9, -3, -1, 143, 248, -1, 204, -1, 174, 158, + -5, -1, 142, -1, 127, 126, 247, -5, -1, 218, -1, 173, 188, -3, -1, + 203, 246, 111, -15, -7, -3, -1, 232, 95, -1, 157, 217, -3, -1, 245, + 231, -1, 172, 187, -9, -3, -1, 79, 244, -3, -1, 202, 230, 243, -1, + 63, -1, 141, 216, -21, -9, -3, -1, 47, 242, -3, -1, 110, 156, 15, + -5, -3, -1, 201, 94, 171, -3, -1, 125, 215, 78, -11, -5, -3, -1, + 200, 214, 62, -1, 185, -1, 155, 170, -1, 31, 241, -23, -13, -5, -1, + 240, -1, 186, 229, -3, -1, 228, 140, -1, 109, 227, -5, -1, 226, -1, + 46, 14, -1, 30, 225, -15, -7, -3, -1, 224, 93, -1, 213, 124, -3, + -1, 199, 77, -1, 139, 184, -7, -3, -1, 212, 154, -1, 169, 108, -1, + 198, 61, -37, -21, -9, -5, -3, -1, 211, 123, 45, -1, 210, 29, -5, + -1, 183, -1, 92, 197, -3, -1, 153, 122, 195, -7, -5, -3, -1, 167, + 151, 75, 209, -3, -1, 13, 208, -1, 138, 168, -11, -7, -3, -1, 76, + 196, -1, 107, 182, -1, 60, 44, -3, -1, 194, 91, -3, -1, 181, 137, + 28, -43, -23, -11, -5, -1, 193, -1, 152, 12, -1, 192, -1, 180, 106, + -5, -3, -1, 166, 121, 59, -1, 179, -1, 136, 90, -11, -5, -1, 43, + -1, 165, 105, -1, 164, -1, 120, 135, -5, -1, 148, -1, 119, 118, 178, + -11, -3, -1, 27, 177, -3, -1, 11, 176, -1, 150, 74, -7, -3, -1, + 58, 163, -1, 89, 149, -1, 42, 162, -47, -23, -9, -3, -1, 26, 161, + -3, -1, 10, 104, 160, -5, -3, -1, 134, 73, 147, -3, -1, 57, 88, + -1, 133, 103, -9, -3, -1, 41, 146, -3, -1, 87, 117, 56, -5, -1, + 131, -1, 102, 71, -3, -1, 116, 86, -1, 101, 115, -11, -3, -1, 25, + 145, -3, -1, 9, 144, -1, 72, 132, -7, -5, -1, 114, -1, 70, 100, + 40, -1, 130, 24, -41, -27, -11, -5, -3, -1, 55, 39, 23, -1, 113, + -1, 85, 7, -7, -3, -1, 112, 54, -1, 99, 69, -3, -1, 84, 38, + -1, 98, 53, -5, -1, 129, -1, 8, 128, -3, -1, 22, 97, -1, 6, + 96, -13, -9, -5, -3, -1, 83, 68, 37, -1, 82, 5, -1, 21, 81, + -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20, -19, -11, + -5, -1, 65, -1, 4, 64, -3, -1, 35, 50, 19, -3, -1, 49, 3, + -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16, + 0 +}; + +static int16_t tab15[] = { + -495, -445, -355, -263, -183, -115, -77, -43, -27, -13, -7, -3, -1, 255, 239, + -1, 254, 223, -1, 238, -1, 253, 207, -7, -3, -1, 252, 222, -1, 237, + 191, -1, 251, -1, 206, 236, -7, -3, -1, 221, 175, -1, 250, 190, -3, + -1, 235, 205, -1, 220, 159, -15, -7, -3, -1, 249, 234, -1, 189, 219, + -3, -1, 143, 248, -1, 204, 158, -7, -3, -1, 233, 127, -1, 247, 173, + -3, -1, 218, 188, -1, 111, -1, 174, 15, -19, -11, -3, -1, 203, 246, + -3, -1, 142, 232, -1, 95, 157, -3, -1, 245, 126, -1, 231, 172, -9, + -3, -1, 202, 187, -3, -1, 217, 141, 79, -3, -1, 244, 63, -1, 243, + 216, -33, -17, -9, -3, -1, 230, 47, -1, 242, -1, 110, 240, -3, -1, + 31, 241, -1, 156, 201, -7, -3, -1, 94, 171, -1, 186, 229, -3, -1, + 125, 215, -1, 78, 228, -15, -7, -3, -1, 140, 200, -1, 62, 109, -3, + -1, 214, 227, -1, 155, 185, -7, -3, -1, 46, 170, -1, 226, 30, -5, + -1, 225, -1, 14, 224, -1, 93, 213, -45, -25, -13, -7, -3, -1, 124, + 199, -1, 77, 139, -1, 212, -1, 184, 154, -7, -3, -1, 169, 108, -1, + 198, 61, -1, 211, 210, -9, -5, -3, -1, 45, 13, 29, -1, 123, 183, + -5, -1, 209, -1, 92, 208, -1, 197, 138, -17, -7, -3, -1, 168, 76, + -1, 196, 107, -5, -1, 182, -1, 153, 12, -1, 60, 195, -9, -3, -1, + 122, 167, -1, 166, -1, 192, 11, -1, 194, -1, 44, 91, -55, -29, -15, + -7, -3, -1, 181, 28, -1, 137, 152, -3, -1, 193, 75, -1, 180, 106, + -5, -3, -1, 59, 121, 179, -3, -1, 151, 136, -1, 43, 90, -11, -5, + -1, 178, -1, 165, 27, -1, 177, -1, 176, 105, -7, -3, -1, 150, 74, + -1, 164, 120, -3, -1, 135, 58, 163, -17, -7, -3, -1, 89, 149, -1, + 42, 162, -3, -1, 26, 161, -3, -1, 10, 160, 104, -7, -3, -1, 134, + 73, -1, 148, 57, -5, -1, 147, -1, 119, 9, -1, 88, 133, -53, -29, + -13, -7, -3, -1, 41, 103, -1, 118, 146, -1, 145, -1, 25, 144, -7, + -3, -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 71, -7, + -3, -1, 40, 130, -1, 24, 129, -7, -3, -1, 116, 8, -1, 128, 86, + -3, -1, 101, 55, -1, 115, 70, -17, -7, -3, -1, 39, 114, -1, 100, + 23, -3, -1, 85, 113, -3, -1, 7, 112, 54, -7, -3, -1, 99, 69, + -1, 84, 38, -3, -1, 98, 22, -3, -1, 6, 96, 53, -33, -19, -9, + -5, -1, 97, -1, 83, 68, -1, 37, 82, -3, -1, 21, 81, -3, -1, + 5, 80, 52, -7, -3, -1, 67, 36, -1, 66, 51, -1, 65, -1, 20, + 4, -9, -3, -1, 35, 50, -3, -1, 64, 3, 19, -3, -1, 49, 48, + 34, -9, -7, -3, -1, 18, 33, -1, 2, 32, 17, -3, -1, 1, 16, + 0 +}; + +static int16_t tab16[] = { + -509, -503, -461, -323, -103, -37, -27, -15, -7, -3, -1, 239, 254, -1, 223, + 253, -3, -1, 207, 252, -1, 191, 251, -5, -1, 175, -1, 250, 159, -3, + -1, 249, 248, 143, -7, -3, -1, 127, 247, -1, 111, 246, 255, -9, -5, + -3, -1, 95, 245, 79, -1, 244, 243, -53, -1, 240, -1, 63, -29, -19, + -13, -7, -5, -1, 206, -1, 236, 221, 222, -1, 233, -1, 234, 217, -1, + 238, -1, 237, 235, -3, -1, 190, 205, -3, -1, 220, 219, 174, -11, -5, + -1, 204, -1, 173, 218, -3, -1, 126, 172, 202, -5, -3, -1, 201, 125, + 94, 189, 242, -93, -5, -3, -1, 47, 15, 31, -1, 241, -49, -25, -13, + -5, -1, 158, -1, 188, 203, -3, -1, 142, 232, -1, 157, 231, -7, -3, + -1, 187, 141, -1, 216, 110, -1, 230, 156, -13, -7, -3, -1, 171, 186, + -1, 229, 215, -1, 78, -1, 228, 140, -3, -1, 200, 62, -1, 109, -1, + 214, 155, -19, -11, -5, -3, -1, 185, 170, 225, -1, 212, -1, 184, 169, + -5, -1, 123, -1, 183, 208, 227, -7, -3, -1, 14, 224, -1, 93, 213, + -3, -1, 124, 199, -1, 77, 139, -75, -45, -27, -13, -7, -3, -1, 154, + 108, -1, 198, 61, -3, -1, 92, 197, 13, -7, -3, -1, 138, 168, -1, + 153, 76, -3, -1, 182, 122, 60, -11, -5, -3, -1, 91, 137, 28, -1, + 192, -1, 152, 121, -1, 226, -1, 46, 30, -15, -7, -3, -1, 211, 45, + -1, 210, 209, -5, -1, 59, -1, 151, 136, 29, -7, -3, -1, 196, 107, + -1, 195, 167, -1, 44, -1, 194, 181, -23, -13, -7, -3, -1, 193, 12, + -1, 75, 180, -3, -1, 106, 166, 179, -5, -3, -1, 90, 165, 43, -1, + 178, 27, -13, -5, -1, 177, -1, 11, 176, -3, -1, 105, 150, -1, 74, + 164, -5, -3, -1, 120, 135, 163, -3, -1, 58, 89, 42, -97, -57, -33, + -19, -11, -5, -3, -1, 149, 104, 161, -3, -1, 134, 119, 148, -5, -3, + -1, 73, 87, 103, 162, -5, -1, 26, -1, 10, 160, -3, -1, 57, 147, + -1, 88, 133, -9, -3, -1, 41, 146, -3, -1, 118, 9, 25, -5, -1, + 145, -1, 144, 72, -3, -1, 132, 117, -1, 56, 131, -21, -11, -5, -3, + -1, 102, 40, 130, -3, -1, 71, 116, 24, -3, -1, 129, 128, -3, -1, + 8, 86, 55, -9, -5, -1, 115, -1, 101, 70, -1, 39, 114, -5, -3, + -1, 100, 85, 7, 23, -23, -13, -5, -1, 113, -1, 112, 54, -3, -1, + 99, 69, -1, 84, 38, -3, -1, 98, 22, -1, 97, -1, 6, 96, -9, + -5, -1, 83, -1, 53, 68, -1, 37, 82, -1, 81, -1, 21, 5, -33, + -23, -13, -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20, + -5, -1, 65, -1, 4, 64, -1, 35, 50, -3, -1, 19, 49, -3, -1, + 3, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16, + 0 +}; + +static int16_t tab24[] = { + -451, -117, -43, -25, -15, -7, -3, -1, 239, 254, -1, 223, 253, -3, -1, + 207, 252, -1, 191, 251, -5, -1, 250, -1, 175, 159, -1, 249, 248, -9, + -5, -3, -1, 143, 127, 247, -1, 111, 246, -3, -1, 95, 245, -1, 79, + 244, -71, -7, -3, -1, 63, 243, -1, 47, 242, -5, -1, 241, -1, 31, + 240, -25, -9, -1, 15, -3, -1, 238, 222, -1, 237, 206, -7, -3, -1, + 236, 221, -1, 190, 235, -3, -1, 205, 220, -1, 174, 234, -15, -7, -3, + -1, 189, 219, -1, 204, 158, -3, -1, 233, 173, -1, 218, 188, -7, -3, + -1, 203, 142, -1, 232, 157, -3, -1, 217, 126, -1, 231, 172, 255, -235, + -143, -77, -45, -25, -15, -7, -3, -1, 202, 187, -1, 141, 216, -5, -3, + -1, 14, 224, 13, 230, -5, -3, -1, 110, 156, 201, -1, 94, 186, -9, + -5, -1, 229, -1, 171, 125, -1, 215, 228, -3, -1, 140, 200, -3, -1, + 78, 46, 62, -15, -7, -3, -1, 109, 214, -1, 227, 155, -3, -1, 185, + 170, -1, 226, 30, -7, -3, -1, 225, 93, -1, 213, 124, -3, -1, 199, + 77, -1, 139, 184, -31, -15, -7, -3, -1, 212, 154, -1, 169, 108, -3, + -1, 198, 61, -1, 211, 45, -7, -3, -1, 210, 29, -1, 123, 183, -3, + -1, 209, 92, -1, 197, 138, -17, -7, -3, -1, 168, 153, -1, 76, 196, + -3, -1, 107, 182, -3, -1, 208, 12, 60, -7, -3, -1, 195, 122, -1, + 167, 44, -3, -1, 194, 91, -1, 181, 28, -57, -35, -19, -7, -3, -1, + 137, 152, -1, 193, 75, -5, -3, -1, 192, 11, 59, -3, -1, 176, 10, + 26, -5, -1, 180, -1, 106, 166, -3, -1, 121, 151, -3, -1, 160, 9, + 144, -9, -3, -1, 179, 136, -3, -1, 43, 90, 178, -7, -3, -1, 165, + 27, -1, 177, 105, -1, 150, 164, -17, -9, -5, -3, -1, 74, 120, 135, + -1, 58, 163, -3, -1, 89, 149, -1, 42, 162, -7, -3, -1, 161, 104, + -1, 134, 119, -3, -1, 73, 148, -1, 57, 147, -63, -31, -15, -7, -3, + -1, 88, 133, -1, 41, 103, -3, -1, 118, 146, -1, 25, 145, -7, -3, + -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 40, -17, -7, + -3, -1, 130, 24, -1, 71, 116, -5, -1, 129, -1, 8, 128, -1, 86, + 101, -7, -5, -1, 23, -1, 7, 112, 115, -3, -1, 55, 39, 114, -15, + -7, -3, -1, 70, 100, -1, 85, 113, -3, -1, 54, 99, -1, 69, 84, + -7, -3, -1, 38, 98, -1, 22, 97, -5, -3, -1, 6, 96, 53, -1, + 83, 68, -51, -37, -23, -15, -9, -3, -1, 37, 82, -1, 21, -1, 5, + 80, -1, 81, -1, 52, 67, -3, -1, 36, 66, -1, 51, 20, -9, -5, + -1, 65, -1, 4, 64, -1, 35, 50, -1, 19, 49, -7, -5, -3, -1, + 3, 48, 34, 18, -1, 33, -1, 2, 32, -3, -1, 17, 1, -1, 16, + 0 +}; + +static int16_t tab_c0[] = { + -29, -21, -13, -7, -3, -1, 11, 15, -1, 13, 14, -3, -1, 7, 5, + 9, -3, -1, 6, 3, -1, 10, 12, -3, -1, 2, 1, -1, 4, 8, + 0 +}; + +static int16_t tab_c1[] = { + -15, -7, -3, -1, 15, 14, -1, 13, 12, -3, -1, 11, 10, -1, 9, + 8, -7, -3, -1, 7, 6, -1, 5, 4, -3, -1, 3, 2, -1, 1, + 0 +}; + +newhuff_t hufft[] = { + { 0, tab0 }, { 0, tab1 }, { 0, tab2 }, { 0, tab3 }, + { 0, tab0 }, { 0, tab5 }, { 0, tab6 }, { 0, tab7 }, + { 0, tab8 }, { 0, tab9 }, { 0, tab10 }, { 0, tab11 }, + { 0, tab12 }, { 0, tab13 }, { 0, tab0 }, { 0, tab15 }, + { 1, tab16 }, { 2, tab16 }, { 3, tab16 }, { 4, tab16 }, + { 6, tab16 }, { 8, tab16 }, { 10, tab16 }, { 13, tab16 }, + { 4, tab24 }, { 5, tab24 }, { 6, tab24 }, { 7, tab24 }, + { 8, tab24 }, { 9, tab24 }, { 11, tab24 }, { 13, tab24 } +}; + +newhuff_t hufftc[] = { { 0, tab_c0 }, { 0, tab_c1 } }; + +static int32_t intwinbase[] = { + 0, -1, -1, -1, -1, -1, -1, -2, -2, -2, + -2, -3, -3, -4, -4, -5, -5, -6, -7, -7, + -8, -9, -10, -11, -13, -14, -16, -17, -19, -21, + -24, -26, -29, -31, -35, -38, -41, -45, -49, -53, + -58, -63, -68, -73, -79, -85, -91, -97, -104, -111, + -117, -125, -132, -139, -147, -154, -161, -169, -176, -183, + -190, -196, -202, -208, -213, -218, -222, -225, -227, -228, + -228, -227, -224, -221, -215, -208, -200, -189, -177, -163, + -146, -127, -106, -83, -57, -29, 2, 36, 72, 111, + 153, 197, 244, 294, 347, 401, 459, 519, 581, 645, + 711, 779, 848, 919, 991, 1064, 1137, 1210, 1283, 1356, + 1428, 1498, 1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962, + 2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063, 2037, 2000, + 1952, 1893, 1822, 1739, 1644, 1535, 1414, 1280, 1131, 970, + 794, 605, 402, 185, -45, -288, -545, -814, -1095, -1388, + -1692, -2006, -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788, + -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, -7910, -8209, + -8491, -8755, -8998, -9219, -9416, -9585, -9727, -9838, -9916, -9959, + -9966, -9935, -9863, -9750, -9592, -9389, -9139, -8840, -8492, -8092, + -7640, -7134, -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082, + -70, 998, 2122, 3300, 4533, 5818, 7154, 8540, 9975, 11455, + 12980, 14548, 16155, 17799, 19478, 21189, 22929, 24694, 26482, 28289, + 30112, 31947, 33791, 35640, 37489, 39336, 41176, 43006, 44821, 46617, + 48390, 50137, 51853, 53534, 55178, 56778, 58333, 59838, 61289, 62684, + 64019, 65290, 66494, 67629, 68692, 69679, 70590, 71420, 72169, 72835, + 73415, 73908, 74313, 74630, 74856, 74992, 75038 +}; + +static void make_synth_window(mpadec_t mpadec, FLOAT scale) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + register int i, j, k; + + scale = -scale; + for (i = 0, j = 0, k = 0; i < 256; i++, j++, k += 32) { + if (k < (512 + 16)) mpa->tables.decwin[k] = mpa->tables.decwin[k + 16] = ((FLOAT)intwinbase[j]/65536.0)*scale; + if ((i & 31) == 31) k -= 1023; + if ((i & 63) == 63) scale = -scale; + } + for (; i < 512; i++, j--, k += 32) { + if (k < (512 + 16)) mpa->tables.decwin[k] = mpa->tables.decwin[k + 16] = ((FLOAT)intwinbase[j]/65536.0)*scale; + if ((i & 31) == 31) k -= 1023; + if ((i & 63) == 63) scale = -scale; + } +} + +static void init_limits(mpadec_t mpadec, int32_t sblimit) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + register int i, j; + + for (i = 0; i < 9; i++) { + for (j = 0; j < 23; j++) { + mpa->tables.long_limit[i][j] = (band_info[i].long_idx[j] + 7)/SSLIMIT + 1; + if (mpa->tables.long_limit[i][j] > sblimit) mpa->tables.long_limit[i][j] = sblimit; + } + for (j = 0; j < 14; j++) { + mpa->tables.short_limit[i][j] = (band_info[i].short_idx[j] - 1)/SSLIMIT + 1; + if (mpa->tables.short_limit[i][j] > sblimit) mpa->tables.short_limit[i][j] = sblimit; + } + } +} + +static void init_layer2(mpadec_t mpadec) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + int i, j, k; uint8_t *tab; + static FLOAT mulmul[27] = { 0.0, -2.0/3.0, 2.0/3.0, 2.0/7.0, 2.0/15.0, 2.0/31.0, 2.0/63.0, + 2.0/127.0, 2.0/255.0, 2.0/511.0, 2.0/1023.0, 2.0/2047.0, + 2.0/4095.0, 2.0/8191.0, 2.0/16383.0, 2.0/32767.0, 2.0/65535.0, + -4.0/5.0, -2.0/5.0, 2.0/5.0, 4.0/5.0, -8.0/9.0, + -4.0/9.0, -2.0/9.0, 2.0/9.0, 4.0/9.0, 8.0/9.0 }; + static uint8_t base[3][9] = { { 1, 0, 2, }, { 17, 18, 0, 19, 20, }, + { 21, 1, 22, 23, 0, 24, 25, 2, 26 } }; + + tab = mpa->tables.grp3tab; + for (i = 0; i < 3; i++) + for (j = 0; j < 3; j++) + for (k = 0; k < 3; k++, tab += 3) { + tab[0] = base[0][k]; + tab[1] = base[0][j]; + tab[2] = base[0][i]; + } + tab = mpa->tables.grp5tab; + for (i = 0; i < 5; i++) + for (j = 0; j < 5; j++) + for (k = 0; k < 5; k++, tab += 3) { + tab[0] = base[1][k]; + tab[1] = base[1][j]; + tab[2] = base[1][i]; + } + tab = mpa->tables.grp9tab; + for (i = 0; i < 9; i++) + for (j = 0; j < 9; j++) + for (k = 0; k < 9; k++, tab += 3) { + tab[0] = base[2][k]; + tab[1] = base[2][j]; + tab[2] = base[2][i]; + } + mpa->tables.mp2tables[0] = mpa->tables.mp2tables[1] = mpa->tables.mp2tables[2] = NULL; + mpa->tables.mp2tables[3] = mpa->tables.grp3tab; + mpa->tables.mp2tables[4] = NULL; + mpa->tables.mp2tables[5] = mpa->tables.grp5tab; + mpa->tables.mp2tables[6] = mpa->tables.mp2tables[7] = mpa->tables.mp2tables[8] = NULL; + mpa->tables.mp2tables[9] = mpa->tables.grp9tab; + for (i = 0; i < 27; i++) { + for (j = 0, k = 3; j < 63; j++, k--) mpa->tables.muls[i][j] = mulmul[i]*pow(2.0, (FLOAT)k/3.0); + mpa->tables.muls[i][63] = 0.0; + } +} + +static void init_layer3(mpadec_t mpadec) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + int i, j, k, l; + + for (i = -256; i < 122; i++) mpa->tables.gainpow2[i + 256] = pow(2.0, -0.25*(i + 210)); + for (i = 0; i < 8207; i++) mpa->tables.ispow[i] = pow(i, 4.0/3.0); + for (i = 0; i < 18; i++) { + mpa->tables.win[0][0][i] = mpa->tables.win[0][1][i] = 0.5*sin((2*i + 1)*M_PI/72.0)/cos((2*i + 19)*M_PI/72.0); + mpa->tables.win[0][0][i + 18] = mpa->tables.win[0][3][i + 18] = 0.5*sin((2*(i + 18) + 1)*M_PI/72.0)/cos((2*(i + 18) + 19)*M_PI/72.0); + } + for (i = 0; i < 6; i++) { + mpa->tables.win[0][1][i + 18] = 0.5/cos((2*(i + 18) + 19)*M_PI/72.0); + mpa->tables.win[0][3][i + 12] = 0.5/cos((2*(i + 12) + 19)*M_PI/72.0); + mpa->tables.win[0][1][i + 24] = 0.5*sin((2*i + 13)*M_PI/24.0)/cos((2*(i + 24) + 19)*M_PI/72.0); + mpa->tables.win[0][1][i + 30] = mpa->tables.win[0][3][i] = 0.0; + mpa->tables.win[0][3][i + 6] = 0.5*sin((2*i + 1)*M_PI/24.0)/cos((2*(i + 6) + 19)*M_PI/72.0); + } + for (i = 0; i < 12; i++) { + mpa->tables.win[0][2][i] = 0.5*sin((2*i + 1)*M_PI/24.0)/cos((2*i + 7)*M_PI/24.0); + } + for (i = 0; i < 4; i++) { + int len = (i == 2) ? 12 : 36; + for (j = 0; j < len; j += 2) { + mpa->tables.win[1][i][j] = mpa->tables.win[0][i][j]; + mpa->tables.win[1][i][j + 1] = -mpa->tables.win[0][i][j + 1]; + } + } + for (i = 0; i < 16; i++) { + FLOAT tmp = tan(i*M_PI/12.0); + mpa->tables.tan1_1[i] = tmp/(1.0 + tmp); + mpa->tables.tan2_1[i] = 1.0/(1.0 + tmp); + mpa->tables.tan1_2[i] = M_SQRT2*tmp/(1.0 + tmp); + mpa->tables.tan2_2[i] = M_SQRT2/(1.0 + tmp); + for (j = 0; j < 2; j++) { + FLOAT base = pow(2.0, -0.25*(j + 1)); + FLOAT p1 = 1.0, p2 = 1.0; + if (i > 0) { + if (i & 1) p1 = pow(base, 0.5*(i + 1)); + else p2 = pow(base, 0.5*i); + } + mpa->tables.pow1_1[j][i] = p1; + mpa->tables.pow2_1[j][i] = p2; + mpa->tables.pow1_2[j][i] = M_SQRT2*p1; + mpa->tables.pow2_2[j][i] = M_SQRT2*p2; + } + } + mpa->tables.istabs[0][0][0] = mpa->tables.tan1_1; + mpa->tables.istabs[0][0][1] = mpa->tables.tan2_1; + mpa->tables.istabs[0][1][0] = mpa->tables.tan1_2; + mpa->tables.istabs[0][1][1] = mpa->tables.tan2_2; + mpa->tables.istabs[1][0][0] = mpa->tables.pow1_1[0]; + mpa->tables.istabs[1][0][1] = mpa->tables.pow2_1[0]; + mpa->tables.istabs[1][1][0] = mpa->tables.pow1_2[0]; + mpa->tables.istabs[1][1][1] = mpa->tables.pow2_2[0]; + mpa->tables.istabs[2][0][0] = mpa->tables.pow1_1[1]; + mpa->tables.istabs[2][0][1] = mpa->tables.pow2_1[1]; + mpa->tables.istabs[2][1][0] = mpa->tables.pow1_2[1]; + mpa->tables.istabs[2][1][1] = mpa->tables.pow2_2[1]; + for (i = 0; i < 9; i++) { + bandinfo_t *bi = &band_info[i]; + int32_t *mp, cb, lwin; int16_t *bdf; + mp = mpa->tables.map[i][0] = mpa->tables.mapbuf0[i]; + bdf = bi->long_diff; + for (cb = 0, j = 0; cb < 8; cb++, j += *bdf++, mp += 4) { + mp[0] = (*bdf) >> 1; + mp[1] = j; + mp[2] = 3; + mp[3] = cb; + } + bdf = bi->short_diff + 3; + for (cb = 3; cb < 13; cb++) { + int l = (*bdf++) >> 1; + for (lwin = 0; lwin < 3; lwin++, mp += 4) { + mp[0] = l; + mp[1] = j + lwin; + mp[2] = lwin; + mp[3] = cb; + } + j += 6*l; + } + mpa->tables.mapend[i][0] = mp; + mp = mpa->tables.map[i][1] = mpa->tables.mapbuf1[i]; + bdf = bi->short_diff; + for (cb = 0, j = 0; cb < 13; cb++) { + int l = (*bdf++) >> 1; + for (lwin = 0; lwin < 3; lwin++, mp += 4) { + mp[0] = l; + mp[1] = j + lwin; + mp[2] = lwin; + mp[3] = cb; + } + j += 6*l; + } + mpa->tables.mapend[i][1] = mp; + mp = mpa->tables.map[i][2] = mpa->tables.mapbuf2[i]; + bdf = bi->long_diff; + for (cb = 0; cb < 22; cb++, mp += 2) { + mp[0] = (*bdf++) >> 1; + mp[1] = cb; + } + mpa->tables.mapend[i][2] = mp; + } + for (i = 0; i < 5; i++) { + for (j = 0; j < 6; j++) { + for (k = 0; k < 6; k++) { + register int n = k + 6*j + 36*i; + mpa->tables.i_slen2[n] = i | (j << 3) | (k << 6) | (3 << 12); + } + } + } + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + for (k = 0; k < 4; k++) { + register int n = k + 4*j + 16*i; + mpa->tables.i_slen2[n + 180] = i | (j << 3) | (k << 6) | (4 << 12); + } + } + } + for (i = 0; i < 4; i++) { + for (j = 0; j < 3; j++) { + register int n = j + 3*i; + mpa->tables.i_slen2[n + 244] = i | (j << 3) | (5 << 12); + mpa->tables.n_slen2[n + 500] = i | (j << 3) | (2 << 12) | (1 << 15); + } + } + for (i = 0; i < 5; i++) { + for (j = 0; j < 5; j++) { + for (k = 0; k < 4; k++) { + for (l = 0; l < 4; l++) { + register int n = l + 4*k + 16*j + 80*i; + mpa->tables.n_slen2[n] = i | (j << 3) | (k << 6) | (l << 9); + } + } + } + } + for (i = 0; i < 5; i++) { + for (j = 0; j < 5; j++) { + for (k = 0; k < 4; k++) { + register int n = k + 4*j + 20*i; + mpa->tables.n_slen2[n + 400] = i | (j << 3) | (k << 6) | (1 << 12); + } + } + } +} + +void init_tables(mpadec_t mpadec, FLOAT scale, int32_t sblimit) +{ + register struct mpadec_t *mpa = (struct mpadec_t *)mpadec; + + if (mpa->state < MPADEC_STATE_START) { + init_layer2(mpa); + init_layer3(mpa); + } + init_limits(mpa, sblimit); + make_synth_window(mpa, scale); +} + diff --git a/polymer/jfaud/processdeps.pl b/polymer/jfaud/processdeps.pl new file mode 100755 index 000000000..60ee6c813 --- /dev/null +++ b/polymer/jfaud/processdeps.pl @@ -0,0 +1,25 @@ +#!/usr/bin/perl -w + +use strict; + +my $obj = shift; +my $src = shift; +my $inc = shift; + +my @srcd = (); +my @incd = (); +print("# Automatically generated by processdeps.pl\n"); +while (<>) { + if (/^(\S+?)\.o:/) { + print( map " \$($src)$_", @srcd ); + print( map " \$($inc)$_", @incd ); + print("\n\$($obj)/$1\.\$o\E:"); + @srcd = (); + @incd = (); + } + push @srcd, /$src(\/\S+)/og; + push @incd, /$inc(\/\S+)/og; +} +print( map " \$($src)$_", @srcd ); +print( map " \$($inc)$_", @incd ); +print("\n"); diff --git a/polymer/jfaud/src/almixer.cpp b/polymer/jfaud/src/almixer.cpp new file mode 100755 index 000000000..f3302c74d --- /dev/null +++ b/polymer/jfaud/src/almixer.cpp @@ -0,0 +1,793 @@ +#define JFAUD_INTERNAL +#if USEAL + +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdio" +# include "watcomhax/cstring" +#else +# include +# include +#endif +#include "almixer.hpp" +#include "log.h" + +#if defined _WIN32 +# include "al.h" +#elif defined __APPLE__ +# include +#else +# include +#endif + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +#define STREAMCHUNK 22050 // samples. 1sec @ 22.05KHz + +//{{{ Dynamic loading +#if !LINKAL +#include "dynlib.hpp" +#define GETDLSYM(sym,sig) do { if (( libsyms.sym = (sig) lib->Get( (const char *)#sym )) == NULL) return getdlsymerr( #sym ); } while (0) +#define GETDLSYMSOFT(sym,sig) do { libsyms.sym = (sig) lib->Get( (const char *)#sym ); } while (0) +static bool getdlsymerr(const char *sym) { _JFAud_LogMsg(" Symbol %s not found. OpenAL disabled.\n", sym); return false; } +static DynamicLibrary *lib = NULL; +static int refcount = 0; + +static struct { + ALboolean (ALCAPIENTRY *alcIsExtensionPresent)(ALCdevice *device, ALubyte *extName); + ALCdevice * (ALCAPIENTRY *alcOpenDevice)(ALubyte *tokstr); + ALCcontext * (ALCAPIENTRY *alcCreateContext)(ALCdevice *dev, ALint* attrlist); + ALubyte* (ALCAPIENTRY *alcGetString)(ALCdevice *deviceHandle, ALCenum token); + ALCenum (ALCAPIENTRY *alcGetError)(ALCdevice *dev); + ALboolean (ALCAPIENTRY *alcMakeContextCurrent)(ALCcontext *context); + ALvoid (ALCAPIENTRY *alcDestroyContext)(ALCcontext* context); + void (ALCAPIENTRY *alcCloseDevice)(ALCdevice *dev); + + ALboolean (ALAPIENTRY *alIsExtensionPresent)(const ALubyte* extname); + ALubyte* (ALAPIENTRY *alGetString)(ALenum param); + ALenum (ALAPIENTRY *alGetError)(ALvoid); + void (ALAPIENTRY *alGenSources)(ALsizei n, ALuint* sources); + void (ALAPIENTRY *alGenBuffers)(ALsizei n, ALuint* buffers); + void (ALAPIENTRY *alDeleteSources)(ALsizei n, ALuint* sources); + void (ALAPIENTRY *alDeleteBuffers)(ALsizei n, ALuint* buffers); + void (ALAPIENTRY *alListenerf)(ALenum pname, ALfloat param); + void (ALAPIENTRY *alListener3f)(ALenum pname, ALfloat f1, ALfloat f2, ALfloat f3); + void (ALAPIENTRY *alListenerfv)(ALenum pname, ALfloat* param); + void (ALAPIENTRY *alGetListenerf)( ALenum pname, ALfloat* value ); + void (ALAPIENTRY *alGetListenerfv)( ALenum pname, ALfloat* values ); + void (ALAPIENTRY *alSourcePlay)(ALuint sid); + void (ALAPIENTRY *alSourcePause)(ALuint sid); + void (ALAPIENTRY *alSourceStop)(ALuint sid); + void (ALAPIENTRY *alSourceRewind)(ALuint sid); + void (ALAPIENTRY *alSourcei)(ALuint sid, ALenum param, ALint value); + void (ALAPIENTRY *alSourcef)(ALuint sid, ALenum param, ALfloat value); + void (ALAPIENTRY *alSource3f)(ALuint sid, ALenum param, ALfloat f1, ALfloat f2, ALfloat f3); + void (ALAPIENTRY *alGetSourcei)(ALuint sid, ALenum pname, ALint* value); + void (ALAPIENTRY *alGetSourcef)(ALuint sid, ALenum pname, ALfloat* value); + void (ALAPIENTRY *alGetSourcefv)(ALuint sid, ALenum pname, ALfloat* values ); + void (ALAPIENTRY *alSourceQueueBuffers)(ALuint sid, ALsizei numEntries, ALuint *bids); + void (ALAPIENTRY *alSourceUnqueueBuffers)(ALuint sid, ALsizei numEntries, ALuint *bids); + void (ALAPIENTRY *alBufferData)(ALuint buffer, ALenum format, ALvoid* data, ALsizei size, ALsizei freq); +} libsyms; + +static bool getallsyms() +{ + GETDLSYMSOFT(alcIsExtensionPresent, ALboolean (ALCAPIENTRY *)(ALCdevice *, ALubyte *)); + GETDLSYM(alcOpenDevice, ALCdevice * (ALCAPIENTRY *)(ALubyte *)); + GETDLSYM(alcCreateContext, ALCcontext * (ALCAPIENTRY *)(ALCdevice *, ALint* )); + GETDLSYM(alcGetString, ALubyte* (ALCAPIENTRY *)(ALCdevice *, ALCenum )); + GETDLSYM(alcGetError, ALCenum (ALCAPIENTRY *)(ALCdevice *)); + GETDLSYM(alcMakeContextCurrent, ALboolean (ALCAPIENTRY *)(ALCcontext *)); + GETDLSYM(alcDestroyContext, ALvoid (ALCAPIENTRY *)(ALCcontext *)); + GETDLSYM(alcCloseDevice, void (ALCAPIENTRY *)(ALCdevice *)); + GETDLSYMSOFT(alIsExtensionPresent, ALboolean (ALAPIENTRY *)(const ALubyte*)); + GETDLSYM(alGetString, ALubyte* (ALAPIENTRY *)(ALenum )); + GETDLSYM(alGetError, ALenum (ALAPIENTRY *)(ALvoid)); + GETDLSYM(alGenSources, void (ALAPIENTRY *)(ALsizei , ALuint* )); + GETDLSYM(alGenBuffers, void (ALAPIENTRY *)(ALsizei , ALuint* )); + GETDLSYM(alDeleteSources, void (ALAPIENTRY *)(ALsizei , ALuint* )); + GETDLSYM(alDeleteBuffers, void (ALAPIENTRY *)(ALsizei , ALuint* )); + GETDLSYM(alListenerf, void (ALAPIENTRY *)(ALenum , ALfloat )); + GETDLSYM(alListener3f, void (ALAPIENTRY *)(ALenum , ALfloat , ALfloat , ALfloat )); + GETDLSYM(alListenerfv, void (ALAPIENTRY *)(ALenum , ALfloat* )); + GETDLSYM(alGetListenerf, void (ALAPIENTRY *)(ALenum pname, ALfloat* value )); + GETDLSYM(alGetListenerfv, void (ALAPIENTRY *)(ALenum pname, ALfloat* values )); + GETDLSYM(alSourcePlay, void (ALAPIENTRY *)(ALuint )); + GETDLSYM(alSourcePause, void (ALAPIENTRY *)(ALuint )); + GETDLSYM(alSourceStop, void (ALAPIENTRY *)(ALuint )); + GETDLSYM(alSourceRewind, void (ALAPIENTRY *)(ALuint )); + GETDLSYM(alSourcei, void (ALAPIENTRY *)(ALuint , ALenum , ALint )); + GETDLSYM(alSourcef, void (ALAPIENTRY *)(ALuint , ALenum , ALfloat )); + GETDLSYM(alSource3f, void (ALAPIENTRY *)(ALuint , ALenum , ALfloat, ALfloat, ALfloat )); + GETDLSYM(alGetSourcei, void (ALAPIENTRY *)(ALuint , ALenum , ALint* )); + GETDLSYM(alGetSourcef, void (ALAPIENTRY *)(ALuint , ALenum , ALfloat* )); + GETDLSYM(alGetSourcefv, void (ALAPIENTRY *)(ALuint , ALenum , ALfloat* )); + GETDLSYM(alSourceQueueBuffers, void (ALAPIENTRY *)(ALuint , ALsizei , ALuint *)); + GETDLSYM(alSourceUnqueueBuffers, void (ALAPIENTRY *)(ALuint , ALsizei , ALuint *)); + GETDLSYM(alBufferData, void (ALAPIENTRY *)(ALuint , ALenum , ALvoid* , ALsizei , ALsizei )); + return true; +} + +#define alcIsExtensionPresent libsyms.alcIsExtensionPresent +#define alcOpenDevice libsyms.alcOpenDevice +#define alcCreateContext libsyms.alcCreateContext +#define alcGetString libsyms.alcGetString +#define alcGetError libsyms.alcGetError +#define alcMakeContextCurrent libsyms.alcMakeContextCurrent +#define alcDestroyContext libsyms.alcDestroyContext +#define alcCloseDevice libsyms.alcCloseDevice +#define alIsExtensionPresent libsyms.alIsExtensionPresent +#define alGetString libsyms.alGetString +#define alGetError libsyms.alGetError +#define alGenSources libsyms.alGenSources +#define alGenBuffers libsyms.alGenBuffers +#define alDeleteSources libsyms.alDeleteSources +#define alDeleteBuffers libsyms.alDeleteBuffers +#define alListenerf libsyms.alListenerf +#define alListener3f libsyms.alListener3f +#define alListenerfv libsyms.alListenerfv +#define alGetListenerf libsyms.alGetListenerf +#define alGetListenerfv libsyms.alGetListenerfv +#define alSourcePlay libsyms.alSourcePlay +#define alSourcePause libsyms.alSourcePause +#define alSourceStop libsyms.alSourceStop +#define alSourceRewind libsyms.alSourceRewind +#define alSourcei libsyms.alSourcei +#define alSourcef libsyms.alSourcef +#define alSource3f libsyms.alSource3f +#define alGetSourcei libsyms.alGetSourcei +#define alGetSourcef libsyms.alGetSourcef +#define alGetSourcefv libsyms.alGetSourcefv +#define alSourceQueueBuffers libsyms.alSourceQueueBuffers +#define alSourceUnqueueBuffers libsyms.alSourceUnqueueBuffers +#define alBufferData libsyms.alBufferData + +#endif +//}}} + +//{{{ ALMixerChannel +ALMixerChannel::ALMixerChannel(ALMixer *own, ALuint src) + : owner(own), source(src), + streamed(false), looped(false), shouldbeplaying(false), laststate(false), + media(NULL), + JFAudMixerChannel() +{ + buffer[0] = buffer[1] = 0; + bufferused[0] = bufferused[1] = false; +} + +ALMixerChannel::~ALMixerChannel() +{ +#ifdef DEBUG + _JFAud_LogMsg("ALMixerChannel::~ALMixerChannel: destructing %p\n",this); +#endif + + Cleanup(); + alDeleteSources(1,&source); + + if (media) delete media; +} + +ALint ALMixerChannel::SourceState(void) const +{ + ALint state; + + alGetError(); + alGetSourcei(source, AL_SOURCE_STATE, &state); + return alGetError() == AL_NO_ERROR ? state : AL_FALSE; +} + +bool ALMixerChannel::FillBuffer(int n) +{ + PcmBuffer *buf; + int ch,by; + ALenum format[2][2] = { + { AL_FORMAT_MONO8, AL_FORMAT_MONO16 }, + { AL_FORMAT_STEREO8, AL_FORMAT_STEREO16 } + }; + + if (!media) return false; + + buf = media->ReadSamples(streamed ? STREAMCHUNK : 0, looped); + if (!buf) return false; + +#ifdef DEBUG + _JFAud_LogMsg("ALMixerChannel::FillBuffer: read %d samples\n", buf->GetNumSamples()); +#endif + + switch (buf->GetNumChannels()) { + case 1: ch = 0; break; + case 2: ch = 1; break; + default: delete buf; return false; + } + switch (buf->GetBytesPerSample()) { + case 1: by = 0; break; + case 2: by = 1; break; + default: delete buf; return false; + } + + alGetError(); + alBufferData(buffer[n], format[ch][by], buf->GetData(), + buf->GetNumSamples()*buf->GetBlockSize(), + buf->GetSampleRate()); + + delete buf; + + if (alGetError() == AL_NO_ERROR) { + if (streamed) { + alSourceQueueBuffers(source, 1, &buffer[n]); + } else { + alSourcei(source, AL_BUFFER, buffer[n]); + } + if (alGetError() == AL_NO_ERROR) { + bufferused[n] = true; +#ifdef DEBUG + _JFAud_LogMsg("ALMixerChannel::FillBuffer: queued buffer on %p\n",this); +#endif + } + } + + return bufferused[n]; +} + +void ALMixerChannel::Cleanup() +{ + ALuint b; + + if (stopcallback && !IsPlaying() && laststate) { + laststate = false; + stopcallback(stopcallbackid); + } + + alSourceStop(source); + + // unqueue and delete any buffers + alSourcei(source, AL_BUFFER, 0); + if (buffer[0]) alDeleteBuffers(1,&buffer[0]); + if (buffer[1]) alDeleteBuffers(1,&buffer[1]); + buffer[0] = buffer[1] = 0; + bufferused[0] = bufferused[1] = false; +} + +bool ALMixerChannel::SetMedia(WaveformFile *file) +{ + if (!file) return false; + + Cleanup(); + if (media) { + // clean up after our predecessor + delete media; + media = NULL; + } + + media = file; + + looped = false; + alSourcei(source, AL_LOOPING, AL_FALSE); + + alGetError(); + if (file->GetPCMLength() >= (2*STREAMCHUNK)) { + streamed = true; + alGenBuffers(2, &buffer[0]); + } else { + streamed = false; + alGenBuffers(1, &buffer[0]); + } + if (alGetError() != AL_NO_ERROR) { media = NULL; return false; } + if (!FillBuffer(0)) { media = NULL; return false; } + + return true; +} + +bool ALMixerChannel::Play(void) +{ + alGetError(); + alSourcePlay(source); + shouldbeplaying = (alGetError() == AL_NO_ERROR); + laststate = shouldbeplaying; + return shouldbeplaying; +} + +bool ALMixerChannel::Update(void) +{ + ALint nq = 0; + ALuint b; + bool retv = true; + + if (!streamed) { + if (stopcallback && !IsPlaying() && laststate) { + laststate = false; + stopcallback(stopcallbackid); + } + return true; + } + + alGetSourcei(source, AL_BUFFERS_PROCESSED, &nq); + for (; nq>0; nq--) { + alSourceUnqueueBuffers(source, 1, &b); + + if (b == buffer[0]) bufferused[0] = false; + else if (b == buffer[1]) bufferused[1] = false; + //else !?! + } + + if (!bufferused[0] && !FillBuffer(0)) retv = false; + if (!bufferused[1] && !FillBuffer(1)) retv = false; + + if (!retv) shouldbeplaying = false; // end of file or error + if (shouldbeplaying && SourceState() != AL_PLAYING) // underran, so the source stopped + alSourcePlay(source); + + if (stopcallback && !IsPlaying() && laststate) { + laststate = false; + stopcallback(stopcallbackid); + } + + return retv; +} + +bool ALMixerChannel::IsPlaying(void) const +{ + if (!streamed) return SourceState() == AL_PLAYING; + + if (shouldbeplaying) return true; + return SourceState() == AL_PLAYING; +} + +bool ALMixerChannel::Pause(void) +{ + alGetError(); + alSourcePause(source); + shouldbeplaying = laststate = false; + return alGetError() == AL_NO_ERROR; +} + +bool ALMixerChannel::SetGain(float gain) +{ + alGetError(); + alSourcef(source, AL_GAIN, gain); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixerChannel::SetPitch(float pitch) +{ + if (pitch > 2.0) pitch = 2.0; + alGetError(); + alSourcef(source, AL_PITCH, pitch); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixerChannel::SetPosition(float x, float y, float z) +{ + alGetError(); + alSource3f(source, AL_POSITION, x,y,z); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixerChannel::SetVelocity(float x, float y, float z) +{ + alGetError(); + alSource3f(source, AL_VELOCITY, x,y,z); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixerChannel::SetDirection(float x, float y, float z) +{ + alGetError(); + alSource3f(source, AL_DIRECTION, x,y,z); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixerChannel::SetRefDist(float refdist) +{ + alGetError(); + alSourcef(source, AL_REFERENCE_DISTANCE, refdist); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixerChannel::SetMaxDist(float maxdist) +{ + alGetError(); + alSourcef(source, AL_MAX_DISTANCE, maxdist); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixerChannel::SetRolloff(float rolloff) +{ + alGetError(); + alSourcef(source, AL_ROLLOFF_FACTOR, rolloff); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixerChannel::SetLoop(bool onf) +{ + looped = onf; + if (streamed) return true; // streamed sources don't loop in AL. it's implicit in the feeding + + alGetError(); + alSourcei(source, AL_LOOPING, onf ? AL_TRUE : AL_FALSE); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixerChannel::SetFollowListener(bool onf) +{ + alGetError(); + alSourcei(source, AL_SOURCE_RELATIVE, onf ? AL_TRUE : AL_FALSE); + return alGetError() == AL_NO_ERROR; +} + +float ALMixerChannel::GetGain(void) const +{ + ALfloat f; + alGetSourcef(source, AL_GAIN, &f); + return f; +} + +float ALMixerChannel::GetPitch(void) const +{ + ALfloat f; + alGetSourcef(source, AL_PITCH, &f); + return f; +} + +void ALMixerChannel::GetPosition(float *x, float *y, float *z) const +{ + ALfloat v[3]; + alGetSourcefv(source, AL_POSITION, v); + *x = v[0]; *y = v[1]; *z = v[2]; +} + +void ALMixerChannel::GetVelocity(float *x, float *y, float *z) const +{ + ALfloat v[3]; + alGetSourcefv(source, AL_VELOCITY, v); + *x = v[0]; *y = v[1]; *z = v[2]; +} + +void ALMixerChannel::GetDirection(float *x, float *y, float *z) const +{ + ALfloat v[3]; + alGetSourcefv(source, AL_DIRECTION, v); + *x = v[0]; *y = v[1]; *z = v[2]; +} + +float ALMixerChannel::GetRefDist(void) const +{ + ALfloat f; + alGetSourcef(source, AL_REFERENCE_DISTANCE, &f); + return f; +} + +float ALMixerChannel::GetMaxDist(void) const +{ + ALfloat f; + alGetSourcef(source, AL_MAX_DISTANCE, &f); + return f; +} + +float ALMixerChannel::GetRolloff(void) const +{ + ALfloat f; + alGetSourcef(source, AL_ROLLOFF_FACTOR, &f); + return f; +} + +bool ALMixerChannel::GetLoop(void) const +{ + ALint i; + alGetSourcei(source, AL_LOOPING, &i); + return i == AL_TRUE; +} + +bool ALMixerChannel::GetFollowListener(void) const +{ + ALint i; + alGetSourcei(source, AL_SOURCE_RELATIVE, &i); + return i == AL_TRUE; +} + +//}}} +//{{{ ALMixer +bool ALMixer::SetListenerPosition(float x, float y, float z) +{ + alGetError(); + alListener3f(AL_POSITION, x,y,z); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixer::SetListenerOrientation(float atx, float aty, float atz, float upx, float upy, float upz) +{ + ALfloat v[6] = { atx,aty,atz,upx,upy,upz }; + alGetError(); + alListenerfv(AL_ORIENTATION, v); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixer::SetListenerVelocity(float x, float y, float z) +{ + alGetError(); + alListener3f(AL_VELOCITY, x,y,z); + return alGetError() == AL_NO_ERROR; +} + +bool ALMixer::SetListenerGain(float gain) +{ + alGetError(); + alListenerf(AL_GAIN, gain); + return alGetError() == AL_NO_ERROR; +} + +void ALMixer::GetListenerPosition(float *x, float *y, float *z) const +{ + ALfloat v[3]; + alGetListenerfv(AL_POSITION, v); + *x = v[0]; *z = -v[1]; *y = v[2]; +} + +void ALMixer::GetListenerOrientation(float *atx, float *aty, float *atz, float *upx, float *upy, float *upz) const +{ + ALfloat v[6]; + alGetListenerfv(AL_ORIENTATION, v); + *atx = v[0]; *aty = v[1]; *atz = v[2]; + *upx = v[3]; *upy = v[4]; *upz = v[5]; +} + +void ALMixer::GetListenerVelocity(float *x, float *y, float *z) const +{ + ALfloat v[3]; + alGetListenerfv(AL_VELOCITY, v); + *x = v[0]; *y = v[1]; *z = v[2]; +} + +float ALMixer::GetListenerGain(void) const +{ + ALfloat f; + alGetListenerf(AL_GAIN, &f); + return f; +} + + +JFAudMixerChannel *ALMixer::AcquireChannel(void) +{ + ALuint src; + ALMixerChannel *ch; + ALMixerChanList *chanlist; + + alGetError(); + alGenSources(1,&src); + if (alGetError() != AL_NO_ERROR) return NULL; + + ch = new ALMixerChannel(this, src); + if (!ch) { + alDeleteSources(1,&src); + return NULL; + } + + chanlist = new ALMixerChanList; + if (chanlist) { + chanlist->next = chans; + chanlist->chan = ch; + chans = chanlist; + } + + return ch; +} + +bool ALMixer::ReleaseChannel(JFAudMixerChannel *ch) +{ + ALMixerChannel *alch = static_cast(ch); + ALMixerChanList *chanlist, *chanbak; + + if (!ch) return false; + if (alch->GetALMixer() != this) return false; // not one of our channels + + // Remove the channel from the refresh list + chanlist = chans; + chanbak = NULL; + while (chanlist) { + if (chanlist->chan != alch) { + chanbak = chanlist; + chanlist = chanlist->next; + continue; + } + + if (!chanbak) { + // the head of the list dies + chans = chans->next; + delete chanlist; + } else { + // a link dies + chanbak->next = chanlist->next; + delete chanlist; + } + delete alch; + break; + } + + return false; +} + +bool ALMixer::Update() +{ + ALMixerChanList *chanlist, *next; + + // Walk the refresh list and poke each channel + chanlist = chans; + while (chanlist) { + // save the next pointer before updating the channel because the + // link we're on might evaporate if a stop callback triggered in + // Update() releases the channel + next = chanlist->next; + + chanlist->chan->Update(); + chanlist = next; + } + return true; +} + +#include + +ALMixer::ALMixer() + : alctx(NULL), aldev(NULL), chans(NULL) +{ +} + +ALMixer::~ALMixer() +{ + Close(); + Uninit(); +} + +bool ALMixer::Init(void) +{ +#if !LINKAL + if (lib) { refcount++; return true; } + + _JFAud_LogMsg("Loading " ALDL "\n"); + lib = new DynamicLibrary(ALDL); + if (!lib) return false; + if (!lib->IsOpen()) { + delete lib; + lib = NULL; + return false; + } + + if (getallsyms()) refcount = 1; + else { + delete lib; + lib = NULL; + return false; + } +#endif + return true; +} + +bool ALMixer::Uninit(void) +{ +#if !LINKAL + if (refcount > 1) { refcount--; return true; } + if (refcount == 0 || !lib) return false; + refcount = 0; + delete lib; + lib = NULL; + memset(&libsyms,0,sizeof(libsyms)); +#endif + return true; +} + +char **ALMixer::Enumerate(char **def) +{ + char *defdev, *devlist, *devp, *p; + char **rl, **rp; + int numdevs, devstrlen, i; + +#if !LINKAL + if (!alcIsExtensionPresent) return NULL; +#endif + if (alcIsExtensionPresent(NULL,(ALubyte*)"ALC_ENUMERATION_EXT") != AL_TRUE) return NULL; + + defdev = (char*)alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER); + devlist = (char*)alcGetString(NULL, ALC_DEVICE_SPECIFIER); + if (!devlist) return NULL; + + for (numdevs = devstrlen = 0, devp = devlist; devp[0]; ) { + i = strlen(devp)+1; + devstrlen += i; + devp += i; + numdevs++; + } + if (!numdevs) return NULL; + + rl = (char**)calloc(1, sizeof(char*)*(numdevs+1)+devstrlen); + if (!rl) return NULL; + + p = (char*)rl + sizeof(char*)*(numdevs+1); + for (rp = rl, devp = devlist; devp[0]; devp += strlen(devp)+1) { + *rp = p; + strcpy(p, devp); + p += strlen(devp) + 1; + if (def && defdev && !strcmp(defdev, devp)) *def = *rp; + rp++; + } + + return rl; +} + +bool ALMixer::Open(const char *dev, int frequency, int *maxvoices) +{ + ALint ctxattrs[] = { + ALC_SYNC, AL_FALSE, + ALC_FREQUENCY, frequency, + ALC_INVALID + }; + ALubyte *s; + + if (alctx) return true; + + aldev = alcOpenDevice((ALubyte*)dev); + if (!aldev) return false; + + alctx = alcCreateContext(aldev, ctxattrs); + if (!alctx) { + alcCloseDevice(aldev); + aldev = NULL; + return false; + } + + alcGetError(aldev); + alcMakeContextCurrent(alctx); + if (alcGetError(aldev) != ALC_NO_ERROR) { + alcMakeContextCurrent(NULL); + alcDestroyContext(alctx); + alcCloseDevice(aldev); + alctx = NULL; + aldev = NULL; + return false; + } + + // If the user passes in a maximum voice count, adjust it to the maximum + // we can actually take. + if (maxvoices && *maxvoices > 0) { + int i; + ALuint *v = new ALuint[*maxvoices]; + + alGetError(); + for (i=*maxvoices; i>0; i--) { + alGenSources(i, v); + if (alGetError() == AL_NO_ERROR) break; + } + if (i > 0) alDeleteSources(i, v); + *maxvoices = i; + + delete v; + } + + _JFAud_LogMsg("OpenAL device information\n"); + s = alGetString(AL_VENDOR); _JFAud_LogMsg(" Vendor: %s\n", s); + s = alGetString(AL_VERSION); _JFAud_LogMsg(" Version: %s\n", s); + s = alGetString(AL_RENDERER); _JFAud_LogMsg(" Renderer: %s\n", s); + s = alGetString(AL_EXTENSIONS); _JFAud_LogMsg(" Extensions: %s\n", s); + + return true; +} + +bool ALMixer::Close(void) +{ + if (!alctx) return true; + + alcMakeContextCurrent(NULL); + alcDestroyContext(alctx); + alcCloseDevice(aldev); + alctx = NULL; + aldev = NULL; + + return true; +} + +//}}} + +#endif + +// vim:fdm=marker: diff --git a/polymer/jfaud/src/almixer.hpp b/polymer/jfaud/src/almixer.hpp new file mode 100755 index 000000000..1b5abd137 --- /dev/null +++ b/polymer/jfaud/src/almixer.hpp @@ -0,0 +1,113 @@ +#ifndef __almixer_hpp__ +#define __almixer_hpp__ + +#include "mixer.hpp" + +#if defined _WIN32 +# include "al.h" +# include "alc.h" +#elif defined __APPLE__ +# include +# include +#else +# include +# include +#endif + +class ALMixer; + +class ALMixerChannel : public JFAudMixerChannel { +private: + ALMixer *owner; + ALuint source; + ALuint buffer[2]; + bool bufferused[2]; + + bool streamed, looped, shouldbeplaying; + + WaveformFile *media; + bool laststate; + + ALint SourceState(void) const; + bool FillBuffer(int n); + void Cleanup(); + +public: + ALMixerChannel(ALMixer *own, ALuint src); // should only be called by ALMixer::AcquireChannel()! + virtual ~ALMixerChannel(); + + ALuint GetALSource(void) const { return source; } // you'd want to have a very good reason to call this + ALMixer *GetALMixer(void) const { return owner; } + + virtual bool SetMedia(WaveformFile *); + + virtual bool Play(void); + virtual bool Pause(void); + virtual bool Update(void); + virtual bool IsPlaying(void) const; + virtual bool IsPaused(void) const { return SourceState() == AL_PAUSED; } + virtual bool IsStopped(void) const { ALint a = SourceState(); return a == AL_INITIAL || a == AL_STOPPED; } + + virtual bool SetGain(float gain); + virtual bool SetPitch(float pitch); + virtual bool SetPosition(float x, float y, float z); + virtual bool SetVelocity(float x, float y, float z); + virtual bool SetDirection(float x, float y, float z); + virtual bool SetRefDist(float refdist); + virtual bool SetMaxDist(float maxdist); + virtual bool SetRolloff(float rolloff); + virtual bool SetLoop(bool onf); + virtual bool SetFollowListener(bool onf); + + virtual float GetGain(void) const; + virtual float GetPitch(void) const; + virtual void GetPosition(float *x, float *y, float *z) const; + virtual void GetVelocity(float *x, float *y, float *z) const; + virtual void GetDirection(float *x, float *y, float *z) const; + virtual float GetRefDist(void) const; + virtual float GetMaxDist(void) const; + virtual float GetRolloff(void) const; + virtual bool GetLoop(void) const; + virtual bool GetFollowListener(void) const; +}; + +class ALMixerChanList { + public: + class ALMixerChanList *next; + ALMixerChannel *chan; +}; +class ALMixer : public JFAudMixer { +private: + ALCcontext *alctx; + ALCdevice *aldev; + + ALMixerChanList *chans; + +public: + ALMixer(); + virtual ~ALMixer(); + + virtual bool Init(void); + virtual bool Uninit(void); + virtual char **Enumerate(char **def); + + virtual bool Open(const char *dev, int frequency, int *maxvoices = NULL); + virtual bool Close(void); + + virtual JFAudMixerChannel *AcquireChannel(void); + virtual bool ReleaseChannel(JFAudMixerChannel *); // NOTE: this deletes its parameter + + virtual bool Update(); + + virtual bool SetListenerPosition(float x, float y, float z); + virtual bool SetListenerOrientation(float atx, float aty, float atz, float upx, float upy, float upz); + virtual bool SetListenerVelocity(float x, float y, float z); + virtual bool SetListenerGain(float gain); + + virtual void GetListenerPosition(float *x, float *y, float *z) const; + virtual void GetListenerOrientation(float *atx, float *aty, float *atz, float *upx, float *upy, float *upz) const; + virtual void GetListenerVelocity(float *x, float *y, float *z) const; + virtual float GetListenerGain(void) const; +}; + +#endif diff --git a/polymer/jfaud/src/cda_null.cpp b/polymer/jfaud/src/cda_null.cpp new file mode 100755 index 000000000..554478f68 --- /dev/null +++ b/polymer/jfaud/src/cda_null.cpp @@ -0,0 +1,42 @@ +#define JFAUD_INTERNAL +#include "cda_null.hpp" + +CDA_Null::CDA_Null(const char *name) +{ + +} + +CDA_Null::~CDA_Null() +{ +} + +bool CDA_Null::IsValid() const +{ + return true; +} + +bool CDA_Null::PlayTrack(int n) +{ + return false; +} + +bool CDA_Null::Pause() +{ + return false; +} + +bool CDA_Null::Resume() +{ + return false; +} + +JFAudCDA::State CDA_Null::CheckDisc() +{ + return JFAudCDA::NOT_READY; +} + +JFAudCDA::State CDA_Null::GetPlayMode() +{ + return JFAudCDA::NOT_READY; +} + diff --git a/polymer/jfaud/src/cda_null.hpp b/polymer/jfaud/src/cda_null.hpp new file mode 100755 index 000000000..d1054140f --- /dev/null +++ b/polymer/jfaud/src/cda_null.hpp @@ -0,0 +1,25 @@ +#ifndef __cda_null_hpp__ +#define __cda_null_hpp__ + +#include "cda.hpp" + +class CDA_Null : public JFAudCDA { +private: + +protected: +public: + CDA_Null(const char *name); + virtual ~CDA_Null(); + virtual bool IsValid() const; + + virtual int GetNumTracks() const { return 0; } + virtual bool IsTrackPlayable(int n) const { return false; } + virtual bool PlayTrack(int n); + virtual bool Pause(); + virtual bool Resume(); + + virtual State CheckDisc(); + virtual State GetPlayMode(); +}; + +#endif diff --git a/polymer/jfaud/src/cda_sdl.cpp b/polymer/jfaud/src/cda_sdl.cpp new file mode 100755 index 000000000..f11e3d701 --- /dev/null +++ b/polymer/jfaud/src/cda_sdl.cpp @@ -0,0 +1,118 @@ +#define JFAUD_INTERNAL +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +#else +# include +#endif + +#include "sysdefs.h" +#include "log.h" +#include "cda_sdl.hpp" +#if defined __APPLE__ +# include +#else +# include "SDL.h" +#endif + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +static SDL_CD *cddev = NULL; + +CDA_SDL::CDA_SDL(const char *name) + : isvalid(false) +{ + int i = 0; + + if (cddev) return; // one device at a time, for simplicity + if (!SDL_WasInit(SDL_INIT_CDROM)) return; + + if (SDL_CDNumDrives() < 1) + return; + + if (name) i = atoi(name); + if ((unsigned) i > (unsigned)SDL_CDNumDrives()) return; + +#ifdef DEBUG + _JFAud_LogMsg("CDA_SDL::CDA_SDL(): opening drive %d (%s)\n", i, SDL_CDName(i)); +#endif + cddev = SDL_CDOpen(i); + if (!cddev) return; + + isvalid = true; +} + +CDA_SDL::~CDA_SDL() +{ + if (isvalid && cddev) { + SDL_CDClose(cddev); + cddev = NULL; + } +} + +char **CDA_SDL::Enumerate(char **def) +{ + return NULL; // FIXME: implement +} + +int CDA_SDL::GetNumTracks() const +{ + if (!isvalid) return 0; + + if (SDL_CDStatus(cddev) <= CD_TRAYEMPTY) return 0; + return cddev->numtracks; +} + +bool CDA_SDL::IsTrackPlayable(int n) const +{ + if (!isvalid) return false; + + if (SDL_CDStatus(cddev) <= CD_TRAYEMPTY) return false; + if ((unsigned) n >= (unsigned)cddev->numtracks) return false; + + return (cddev->track[n].type == SDL_AUDIO_TRACK); +} + +bool CDA_SDL::PlayTrack(int n) +{ + if (!isvalid) return false; + + if (SDL_CDStatus(cddev) <= CD_TRAYEMPTY) return false; + if ((unsigned) n >= (unsigned)cddev->numtracks) return false; + if (cddev->track[n].type != SDL_AUDIO_TRACK) return false; + + return (SDL_CDPlay(cddev, cddev->track[n].offset, cddev->track[n].length) == 0); +} + +bool CDA_SDL::Pause() +{ + if (!isvalid) return false; + return (SDL_CDPause(cddev) == 0); +} + +bool CDA_SDL::Resume() +{ + if (!isvalid) return false; + return (SDL_CDResume(cddev) == 0); +} + +JFAudCDA::State CDA_SDL::CheckDisc() +{ + if (!isvalid) return JFAudCDA::NOT_READY; + + return (SDL_CDStatus(cddev) <= CD_TRAYEMPTY) ? JFAudCDA::NOT_READY : JFAudCDA::READY; +} + +JFAudCDA::State CDA_SDL::GetPlayMode() +{ + if (!isvalid) return JFAudCDA::NOT_READY; + + switch (SDL_CDStatus(cddev)) { + case CD_STOPPED: return JFAudCDA::READY; + case CD_PLAYING: return JFAudCDA::PLAYING; + case CD_PAUSED: return JFAudCDA::PAUSED; + default: return JFAudCDA::NOT_READY; + } +} + diff --git a/polymer/jfaud/src/cda_sdl.hpp b/polymer/jfaud/src/cda_sdl.hpp new file mode 100755 index 000000000..daffc96d6 --- /dev/null +++ b/polymer/jfaud/src/cda_sdl.hpp @@ -0,0 +1,27 @@ +#ifndef __cda_sdl_hpp__ +#define __cda_sdl_hpp__ + +#include "cda.hpp" + +class CDA_SDL : public JFAudCDA { +private: + bool isvalid; + +protected: +public: + CDA_SDL(const char *name); + virtual ~CDA_SDL(); + virtual bool IsValid() const { return isvalid; } + virtual char **Enumerate(char **def); + + virtual int GetNumTracks() const; + virtual bool IsTrackPlayable(int n) const; + virtual bool PlayTrack(int n); + virtual bool Pause(); + virtual bool Resume(); + + virtual State CheckDisc(); + virtual State GetPlayMode(); +}; + +#endif diff --git a/polymer/jfaud/src/cda_win32.cpp b/polymer/jfaud/src/cda_win32.cpp new file mode 100755 index 000000000..e00b6dc7b --- /dev/null +++ b/polymer/jfaud/src/cda_win32.cpp @@ -0,0 +1,304 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#include "log.h" +#include "cda_win32.hpp" + +#define WIN32_LEAN_AND_MEAN +#include +#include +#undef PlaySound +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +#else +# include +using namespace std; +#endif + +static MCIDEVICEID deviceid = 0; + +static int sendCommand(UINT msg, DWORD flags, DWORD param) +{ + MCIERROR err; + TCHAR errmsg[128]; + + err = mciSendCommand(deviceid, msg, flags, param); + if (err == 0) return 0; + + if (mciGetErrorString(LOWORD(err), errmsg, 128)) + _JFAud_LogMsg("MCI error: %s", errmsg); + + return LOWORD(err); +} + +static int toMSF(int frames) +{ + int m,s,f; + + f = frames % 75; + s = (frames / 75) % 60; + m = (frames / 75) / 60; + + return MCI_MAKE_MSF(m,s,f); +} + + + +CDA_Win32::CDA_Win32(const char *name) + : numtracks(0), isvalid(false), + pausepos(-1), playend(-1), + laststate(NOT_READY) +{ + MCI_OPEN_PARMS mop; + MCI_SET_PARMS msp; + char drivename[4] = "?:\\"; + + if (deviceid != 0) return; // only allow one instance of the CDA device + + if (name) drivename[0] = name[0]; + + memset(&mop, 0, sizeof(mop)); + mop.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_CD_AUDIO; + mop.lpstrElementName = drivename; + + if (sendCommand(MCI_OPEN, MCI_WAIT|MCI_OPEN_SHAREABLE|MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID | + (name ? MCI_OPEN_ELEMENT : 0), (DWORD)&mop)) + return; + + deviceid = mop.wDeviceID; + + memset(&msp, 0, sizeof(msp)); + msp.dwTimeFormat = MCI_FORMAT_MSF; + + if (sendCommand(MCI_SET, MCI_WAIT|MCI_SET_TIME_FORMAT, (DWORD)&msp)) { + MCI_GENERIC_PARMS mgp; + memset(&mgp, 0, sizeof(mgp)); + sendCommand(MCI_CLOSE, MCI_WAIT, (DWORD)&mgp); + deviceid = 0; + return; + } + + isvalid = true; +} + +CDA_Win32::~CDA_Win32() +{ + if (isvalid) { + MCI_GENERIC_PARMS mgp; + + memset(&mgp, 0, sizeof(mgp)); + sendCommand(MCI_STOP, 0, (DWORD)&mgp); + sendCommand(MCI_CLOSE, 0, (DWORD)&mgp); + deviceid = 0; + } +} + +char **CDA_Win32::Enumerate(char **def) +{ + DWORD lds; + char ldstr[4] = "?:\\"; + char **rl, **rp, *p; + int numdevs, devstrlen, i, mask; + + lds = GetLogicalDrives(); + numdevs = 0; + for (i=0; i<32; i++) { + mask = 1<= (unsigned)numtracks) return false; + if (toc[n].isdata) return false; + return true; +} + +bool CDA_Win32::PlayTrack(int n) +{ + MCI_PLAY_PARMS mpp; + + if (!isvalid || CheckDisc() != READY) return false; + if ((unsigned)n >= (unsigned)numtracks) return false; + + memset(&mpp, 0, sizeof(mpp)); + mpp.dwFrom = toMSF(toc[n].start); + mpp.dwTo = toMSF(toc[n].end); + + if (sendCommand(MCI_PLAY, MCI_FROM|MCI_TO, (DWORD)&mpp)) return false; + + pausepos = -1; + playend = toc[n].end; + + return true; +} + +bool CDA_Win32::Pause() +{ + MCI_STATUS_PARMS msp; + MCI_GENERIC_PARMS mgp; + + if (!isvalid || playend < 0) return false; + if (pausepos >= 0) return true; + + memset(&msp, 0, sizeof(msp)); + memset(&mgp, 0, sizeof(mgp)); + + msp.dwItem = MCI_STATUS_POSITION; + if (sendCommand(MCI_STATUS, MCI_WAIT|MCI_STATUS_ITEM, (DWORD)&msp)) return false; + pausepos = msp.dwReturn; + + if (sendCommand(MCI_STOP, 0, (DWORD)&mgp)) { + pausepos = -1; + return false; + } + + return true; +} + +bool CDA_Win32::Resume() +{ + MCI_PLAY_PARMS mpp; + + if (!isvalid || pausepos < 0) return false; + + memset(&mpp, 0, sizeof(mpp)); + mpp.dwFrom = pausepos; + mpp.dwTo = toMSF(playend); + pausepos = -1; + + if (sendCommand(MCI_PLAY, MCI_FROM|MCI_TO, (DWORD)&mpp)) return false; + return true; +} + +JFAudCDA::State CDA_Win32::CheckDisc() +{ + MCI_STATUS_PARMS msp; + + if (!isvalid) return NOT_READY; + + memset(&msp, 0, sizeof(msp)); + msp.dwItem = MCI_STATUS_MEDIA_PRESENT; + + if (sendCommand(MCI_STATUS, MCI_WAIT|MCI_STATUS_ITEM, (DWORD)&msp)) + return NOT_READY; + + if ((laststate == NOT_READY && msp.dwReturn) || + (laststate == READY && !msp.dwReturn)) { + if (!msp.dwReturn || !readTOC()) { + numtracks = 0; + pausepos = playend = -1; + laststate = NOT_READY; + } else { +#ifdef DEBUG + int i; + for (i=0;i= 0) return PAUSED; + return READY; + default: + return NOT_READY; + } +} + +bool CDA_Win32::readTOC() +{ + MCI_STATUS_PARMS msp; + int i; + + numtracks = 0; + + memset(&msp, 0, sizeof(msp)); + msp.dwItem = MCI_STATUS_NUMBER_OF_TRACKS; + + if (sendCommand(MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD)&msp)) return false; + numtracks = msp.dwReturn; + + memset(&msp, 0, sizeof(msp)); + for (i=0; i>1)) : (j>>1); + crc32table[i] = j; + } +} + + +CRC32::CRC32() +{ + if (crc32table[0] != 0) initcrc32table(); + Reset(); +} + +CRC32::~CRC32() +{ +} + +void CRC32::Reset() +{ + sum = 0xffffffffl; +} + +void CRC32::ProcessBlock(const void *block, unsigned length) +{ + const unsigned char *b = (const unsigned char *)block; + while (length--) sum = crc32table[(sum ^ *(b++)) & 255] ^ (sum >> 8); +} + +uint32_t CRC32::Value() const +{ + return sum ^ 0xffffffffl; +} + diff --git a/polymer/jfaud/src/crc32.hpp b/polymer/jfaud/src/crc32.hpp new file mode 100755 index 000000000..5c1cc78c0 --- /dev/null +++ b/polymer/jfaud/src/crc32.hpp @@ -0,0 +1,18 @@ +#ifndef __crc32_hpp__ +#define __crc32_hpp__ + +class CRC32 +{ +private: + uint32_t sum; +protected: +public: + CRC32(); + ~CRC32(); + + void Reset(); + void ProcessBlock(const void *block, unsigned length); + uint32_t Value() const; +}; + +#endif diff --git a/polymer/jfaud/src/dynlib.cpp b/polymer/jfaud/src/dynlib.cpp new file mode 100755 index 000000000..fbf16c405 --- /dev/null +++ b/polymer/jfaud/src/dynlib.cpp @@ -0,0 +1,96 @@ +#define JFAUD_INTERNAL +#include "dynlib.hpp" +#include "sysdefs.h" +#ifdef _WIN32 +# define WIN32_LEAN_AND_MEAN +# include +#elif defined __APPLE__ +# include +# include +#else +# ifdef SCREWED_UP_CPP +# include "watcomhax/cstdio" +# else +# include +# endif +# include +#endif + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +DynamicLibrary::DynamicLibrary(const char *name) + : handle(NULL) +{ +#ifdef _WIN32 + handle = (void*)LoadLibrary((LPCTSTR)name); +#elif defined __APPLE__ + CFBundleRef lib; + CFURLRef libname, base; + CFStringRef cfname; + int i; + + cfname = CFStringCreateWithCString(kCFAllocatorDefault, name, kCFStringEncodingASCII); + + for (i=0; i<=2; i++) { + base = NULL; + switch (i) { + case 0: { // app bundle private frameworks + CFBundleRef app = CFBundleGetMainBundle(); + if (!app) continue; + base = CFBundleCopyPrivateFrameworksURL(app); + } break; + case 1: // user frameworks + case 2: { // system frameworks + FSRef r; + if (FSFindFolder( i==1 ? kUserDomain : kLocalDomain, + kFrameworksFolderType, + kDontCreateFolder, &r) < 0) continue; + base = CFURLCreateFromFSRef(kCFAllocatorDefault, &r); + } break; + } + if (!base) continue; + + libname = CFURLCreateCopyAppendingPathComponent(kCFAllocatorDefault, base, cfname, false); + CFRelease(base); + if (!libname) continue; + + lib = CFBundleCreate(kCFAllocatorDefault, libname); + CFRelease(libname); + if (lib) { handle = (void*)lib; break; } + } + + CFRelease(cfname); +#else + handle = dlopen(name, RTLD_NOW|RTLD_GLOBAL); +#endif +} + +DynamicLibrary::~DynamicLibrary() +{ + if (!handle) return; +#ifdef _WIN32 + FreeLibrary((HMODULE)handle); +#elif defined __APPLE__ + CFRelease((CFBundleRef)handle); +#else + dlclose(handle); +#endif +} + +void *DynamicLibrary::Get(const char *sym) +{ + if (!handle) return NULL; +#ifdef _WIN32 + return (void*)GetProcAddress((HMODULE)handle, (LPCSTR)sym); +#elif defined __APPLE__ + CFStringRef s = CFStringCreateWithCString(kCFAllocatorDefault, sym, kCFStringEncodingASCII); + void *p = CFBundleGetFunctionPointerForName((CFBundleRef)handle, s); + CFRelease(s); + return p; +#else + return dlsym(handle, sym); +#endif +} + diff --git a/polymer/jfaud/src/dynlib.hpp b/polymer/jfaud/src/dynlib.hpp new file mode 100755 index 000000000..5a917d320 --- /dev/null +++ b/polymer/jfaud/src/dynlib.hpp @@ -0,0 +1,16 @@ +#ifndef __dynlib_hpp__ +#define __dynlib_hpp__ + +class DynamicLibrary { +private: + void *handle; +public: + DynamicLibrary(const char *name); + ~DynamicLibrary(); + + bool IsOpen(void) const { return handle != (void*)0; } + + void * Get(const char *sym); +}; + +#endif diff --git a/polymer/jfaud/src/file.cpp b/polymer/jfaud/src/file.cpp new file mode 100755 index 000000000..a0fab7c18 --- /dev/null +++ b/polymer/jfaud/src/file.cpp @@ -0,0 +1,39 @@ +#define JFAUD_INTERNAL +#include "file.hpp" +#include "sysdefs.h" + + +JFAudFile::JFAudFile() +{ +} + +JFAudFile::JFAudFile(const char *filename, const char *subfilename) +{ +} + +JFAudFile::~JFAudFile() +{ +} + +bool JFAudFile::ReadByte(char *c) +{ + return (Read(1, c) == 1); +} + +bool JFAudFile::ReadShort(short *s, bool big) +{ + short ss; + if (Read(2, &ss) != 2) return false; + if (big) ss = B_BIG16(ss); else ss = B_LITTLE16(ss); + *s = ss; + return true; +} + +bool JFAudFile::ReadLong(int *l, bool big) +{ + int ll; + if (Read(4, &ll) != 4) return false; + if (big) ll = B_BIG32(ll); else ll = B_LITTLE32(ll); + *l = ll; + return true; +} diff --git a/polymer/jfaud/src/jfaud.cpp b/polymer/jfaud/src/jfaud.cpp new file mode 100755 index 000000000..b5eadaae2 --- /dev/null +++ b/polymer/jfaud/src/jfaud.cpp @@ -0,0 +1,878 @@ +#define JFAUD_INTERNAL + +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstring" +# include "watcomhax/cstdarg" +# include "watcomhax/cstdio" +# include "watcomhax/cstdlib" +#else +# include +# include +# include +# include +#endif + +#ifdef _WIN32 +// because wtypes.h decides to be stupid and declare a variable named 'int64' which +// sysdefs.h makes a type +# define WIN32_LEAN_AND_MEAN +# include +# include +# undef PlaySound +# define DIRECTSOUND_VERSION 0x0300 +# include +#endif + +#include "log.h" +#include "stdfile.hpp" +#include "waveformfile.hpp" +#include "waveformfile_raw.hpp" +#include "midifile.hpp" +#include "soundfile.hpp" +#include "cda_null.hpp" +#include "soundcache.hpp" +#include "midisynth.hpp" + +#include "nullmixer.hpp" +#if USEAL +# include "almixer.hpp" +#endif +#include "softwaremixer.hpp" + +#ifdef _WIN32 +# include "midisynth_win32.hpp" +# include "cda_win32.hpp" +# include "waveout_dsound.hpp" +#else +# include "cda_sdl.hpp" +# include "waveout_sdl.hpp" +# include +#endif + +#include "jfaud.hpp" + +#ifdef _WIN32 +# define vsnprintf _vsnprintf +#endif + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +//{{{ log +static void _JFAud_DefLogFunc(const char *f) { fputs(f,stderr); } +static void (*_JFAud_LogFunc)(const char *) = _JFAud_DefLogFunc; + +void _JFAud_LogMsg(const char *f, ...) +{ + char s[512]; + va_list va; + va_start(va,f); + vsnprintf(s,sizeof(s),f,va); + va_end(va); + _JFAud_LogFunc(s); +} + +void JFAud_SetLogFunc(void (*func)(const char *)) +{ + if (!func) func = _JFAud_DefLogFunc; + _JFAud_LogFunc = func; +} +//}}} + +JFAud::JFAud() + : useropenfunc(NULL), + wavemixer(NULL), + waveout(NULL), + midisynth(NULL), + numwavechans(0), + wavechans(NULL), + musicchan(NULL), + cddev(NULL), + cache(NULL), + winhnd(NULL) +{ +} + +JFAud::~JFAud() +{ + Uninit(); +} + +//{{{ Initialisation and general control +bool JFAud::InitWave(const char *name, int numvoices, int frequency) +{ + char *devid = NULL; + int drv = -1, n; + char *devs[] = { + "software", +#if USEAL + "openal", +#endif + }; + + if (wavemixer) return false; + if (numvoices < 1) numvoices = 1; + + if (name) devid = strchr(name, ':'); + if (devid) devid++; + + if (!name) drv = 0; + else { + for (n = 0; n < sizeof(devs)/sizeof(devs[0]); n++) { + if (devid && !strncasecmp(name, devs[n], devid-name)) { drv = n; break; } + else if (!devid && !strcasecmp(name, devs[n])) { drv = n; break; } + } + } + + if (!cache) { + cache = new SoundCache(); + } + + switch (drv) { + case 0: { +#ifdef _WIN32 + WaveOut_DSound *wout; +#else + WaveOut_SDL *wout; +#endif + SoftwareMixer *mixer; +#ifndef _WIN32 + if (!SDL_WasInit(SDL_INIT_AUDIO)) { + if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) + return false; + } +#endif + // 1. Create the software mixer object (uninitialised) + mixer = new SoftwareMixer(); + if (!mixer) return false; + + // 2. Create the output device object, passing the software mixer object + // to the constructor +#ifdef _WIN32 + wout = new WaveOut_DSound(mixer); +#else + wout = new WaveOut_SDL(mixer); +#endif + if (!wout) { + delete mixer; + return false; + } + +#ifdef _WIN32 + wout->SetWindowHandle((HWND)winhnd); +#endif + + // 3. Initialise the output device object + // 4. Initialise the software mixer with the frequency and chans of the output + if (!wout->Init(frequency, 2, 16) || !mixer->Setup(wout, numvoices)) { + delete mixer; + delete wout; + return false; + } + + // 5. Unpause the output device which will call the software mixer for data + wout->Pause(false); + + if (waveout) delete waveout; + if (wavemixer) delete wavemixer; + waveout = static_cast(wout); + wavemixer = static_cast(mixer); + } break; +#if USEAL + case 1: { + ALMixer *mixer; + + mixer = new ALMixer(); + if (!mixer) return false; + + if (!mixer->Init() || !mixer->Open(devid, frequency, &numvoices)) { + delete mixer; + return false; + } + + if (numvoices < 1) { + delete mixer; + return false; + } + + if (wavemixer) delete wavemixer; + wavemixer = static_cast(mixer); + } break; +#endif + + default: return false; + } + + numwavechans = numvoices; + wavechans = new struct _wavechan[numvoices]; + if (!wavechans) { + Uninit(); + return false; + } else { + memset(wavechans, 0, sizeof(struct _wavechan) * numvoices); + } + + return InitialiseWaveformReaders(); + + //return true; +} + +bool JFAud::SetWindowHandle(void *h) +{ + winhnd = h; + return true; +} + +bool JFAud::SetCacheSize(unsigned cachee, unsigned object) +{ + if (cache) return cache->SetCacheSize(cachee, object); + return false; +} + +bool JFAud::SetCacheItemAge(unsigned age) +{ + if (cache) return cache->SetMaxItemAge(age); + return false; +} + +bool JFAud::InitMIDI(const char *name) +{ +#ifdef _WIN32 + MidiSynth_Win32 *synth; + + if (midisynth) return false; + + synth = new MidiSynth_Win32(); + if (!synth) return false; + + if (synth->Open(name)) { + midisynth = static_cast(synth); + return true; + } + + delete synth; +#endif + return false; +} + +bool JFAud::InitCDA(const char *name) +{ + if (cddev) return false; + +#ifdef _WIN32 + cddev = new CDA_Win32(name); +#else + if (!SDL_WasInit(SDL_INIT_CDROM)) { + if (SDL_InitSubSystem(SDL_INIT_CDROM) < 0) + return false; + } + cddev = new CDA_SDL(name); +#endif + + if (!cddev) return false; + if (!cddev->IsValid()) { + delete cddev; + cddev = NULL; + return false; + } + + cddev->CheckDisc(); + + return true; +} + +bool JFAud::Uninit(void) +{ + int i; + + if (wavechans) { + for (i=0; iReleaseChannel(wavechans[i].h); + } + delete [] wavechans; + wavechans = NULL; + musicchan = NULL; + UninitialiseWaveformReaders(); + } + + if (waveout) { + waveout->Pause(true); + delete waveout; + waveout = NULL; + } + + if (wavemixer) { + delete wavemixer; + wavemixer = NULL; + } + + if (midisynth) { + delete midisynth; + midisynth = NULL; + } + + if (cddev) { + delete cddev; + cddev = NULL; + } + + if (cache) { + delete cache; + cache = NULL; + } + +#ifndef _WIN32 + SDL_QuitSubSystem(SDL_INIT_CDROM|SDL_INIT_AUDIO); +#endif + + return true; +} + +bool JFAud::Update(bool agecache) +{ + int i; + + if (wavemixer) wavemixer->Update(); + for (i=numwavechans-1; i>=0; i--) wavechans[i].age++; + + if (cache && agecache) cache->Update(); + + if (midisynth) midisynth->Update(); + + return true; +} + +bool JFAud::AgeCache(void) +{ + if (cache) return cache->Update(); + return false; +} +//}}} + +//{{{ Enumeration +char **JFAud::EnumerateWaveDevices(const char *name, char **def) +{ + char **ar = NULL, *p; + int i, siz = 0; + + if (!name) { + const char *devices[] = { + "software", +#if USEAL + "openal", +#endif + }; + + // calculate the size of the pointers table plus the length of all the strings + siz = sizeof(char*) * (arsiz(devices)+1); + for (i=0; iInit()) { + delete mixer; + return NULL; + } + + ar = mixer->Enumerate(def); + + delete mixer; + } +#endif + + return ar; +} + +char **JFAud::EnumerateMIDIDevices(char **def) +{ + char **ar = NULL; + +#ifdef _WIN32 + ar = MidiSynth_Win32::Enumerate(def); +#endif + + return ar; +} + +char **JFAud::EnumerateCDADevices(char **def) +{ + char **ar = NULL; + +#ifdef _WIN32 + ar = CDA_Win32::Enumerate(def); +#endif + + return ar; +} +//}}} + +//{{{ Sound effect playback +struct _wavechan * JFAud::FindFreeWaveChan(int priority) +{ + int firstfree, oldestused = -1; + + for (firstfree = numwavechans-1; firstfree >= 0; firstfree--) { + if (!wavechans[firstfree].h) break; + + if (wavechans[firstfree].priority <= priority) { + if (oldestused < 0) + oldestused = firstfree; + else if (wavechans[firstfree].priority < wavechans[oldestused].priority) + oldestused = firstfree; + else if (wavechans[firstfree].age > wavechans[oldestused].age) + oldestused = firstfree; + } + } + if (firstfree < 0) firstfree = oldestused; + + return firstfree < 0 ? NULL : &wavechans[firstfree]; +} + +JFAudMixerChannel *JFAud::PlaySound(const char *filename, const char *subfilename, int priority) +{ + JFAudFile *file = NULL, *ffile; + JFAudMixerChannel *chan; + + if (!wavemixer || !filename) return NULL; + + if (cache) { + // first, see if the file we're being asked to play is in the sound cache + file = cache->CheckCache(filename, subfilename); + if (file) { + // it is, so go ahead and use it +#ifdef DEBUG + _JFAud_LogMsg("JFAud::PlaySound: playing %s(%s) from cache\n", filename, subfilename); +#endif + ffile = file; + chan = PlaySoundFile(&ffile, priority); + if (ffile) delete file; + return chan; + } + } + + // We see if the user wants to take over file opening from us + if (useropenfunc) { + file = useropenfunc(filename, subfilename); + } else { + StdFile *sfile; + sfile = new StdFile(filename, subfilename); + file = static_cast(sfile); + } + if (!file) return NULL; + if (!file->IsOpen()) { + // open failed to yield a valid file handle + delete file; +#ifdef DEBUG + if (!subfilename) subfilename = ""; + _JFAud_LogMsg("JFAud::PlaySound: failed opening %s(%s)\n", filename, subfilename); +#endif + return NULL; + } + + if (cache) { + // try and cache the file + ffile = cache->CacheFile(file, filename, subfilename); + if (ffile) { + // caching succeeded, so throw away the file and play from the cache + delete file; + file = ffile; + chan = PlaySoundFile(&ffile, priority); + if (ffile) delete file; + return chan; + } + } + + // otherwise, play direct from the file + ffile = file; + chan = PlaySoundFile(&ffile, priority); + + if (ffile) delete file; // PlaySoundFile didn't take control of the file, so we clean it up + + return chan; +} + +JFAudMixerChannel *JFAud::PlaySoundFile(JFAudFile **file, int priority) +{ + JFAudMixerChannel *chan; + WaveformFile *sound; + + struct _wavechan *wavechan; + + if (!wavemixer) return NULL; + if (!file || !(*file) || !(*file)->IsOpen()) return NULL; + + wavechan = FindFreeWaveChan(priority); + + // if everyone's more important than us, there's nothing we can do + if (!wavechan) return NULL; + + if (wavechan->h) { + wavemixer->ReleaseChannel(wavechan->h); + wavechan->h = NULL; + } + + // See if the file is one of the recognised waveform formats + sound = IdentifyWaveformFile(*file); + if (!sound) return NULL; + + *file = NULL; +#ifdef DEBUG + _JFAud_LogMsg("JFAud::PlaySoundFile: format %s\n", sound->GetFormatName()); +#endif + + // Get a waveform channel + chan = wavemixer->AcquireChannel(); + if (!chan) { + delete sound; + // sound owns file now that it was properly identified + // and deleted it in its destructor + return NULL; + } + + // Attach the waveform source to the channel + if (!chan->SetMedia(sound)) { + delete sound; + wavemixer->ReleaseChannel(chan); + return NULL; + } + + wavechan->h = chan; + wavechan->priority = priority; + wavechan->age = 0; + + return chan; +} + +JFAudMixerChannel *JFAud::PlayRawSound(const char *filename, const char *subfilename, int priority, int samplerate, int channels, int bytespersample, bool bigendian) +{ + JFAudFile *file, *ffile; + JFAudMixerChannel *chan; + + if (!wavemixer || !filename) return NULL; + + // We see if the user wants to take over file opening from us + if (useropenfunc) { + file = useropenfunc(filename, subfilename); + } else { + StdFile *sfile; + sfile = new StdFile(filename, subfilename); + file = static_cast(sfile); + } + if (!file) return NULL; + if (!file->IsOpen()) { + // open failed to yield a valid file handle + delete file; +#ifdef DEBUG + if (!subfilename) subfilename = ""; + _JFAud_LogMsg("JFAud::PlaySound: failed opening %s(%s)\n", filename, subfilename); +#endif + return NULL; + } + + ffile = file; + chan = PlayRawSoundFile(&ffile, priority, samplerate, channels, bytespersample, bigendian); + + if (ffile) delete file; // PlayRawSoundFile didn't take control of the file, so we clean it up + + return chan; +} + +JFAudMixerChannel *JFAud::PlayRawSoundFile(JFAudFile **file, int priority, int samplerate, int channels, int bytespersample, bool bigendian) +{ + JFAudMixerChannel *chan; + WaveformFile_Raw *sound; + + struct _wavechan *wavechan; + + if (!wavemixer) return NULL; + if (!file || !(*file) || !(*file)->IsOpen()) return NULL; + + wavechan = FindFreeWaveChan(priority); + + // if everyone's more important than us, there's nothing we can do + if (!wavechan) return NULL; + + if (wavechan->h) { + wavemixer->ReleaseChannel(wavechan->h); + wavechan->h = NULL; + } + + // See if the file is one of the recognised waveform formats + sound = new WaveformFile_Raw(*file, samplerate, channels, bytespersample, bigendian); + if (!sound) return NULL; + if (!sound->IsValid()) { + delete sound; + return NULL; + } + *file = NULL; + + // Get a waveform channel + chan = wavemixer->AcquireChannel(); + if (!chan) { + delete sound; + // sound owns file now that it was properly identified + // and deleted it in its destructor + return NULL; + } + + // Attach the waveform source to the channel + if (!chan->SetMedia(sound)) { + delete sound; + wavemixer->ReleaseChannel(chan); + return NULL; + } + + wavechan->h = chan; + wavechan->priority = priority; + wavechan->age = 0; + + return chan; +} + + +bool JFAud::FreeSound(JFAudMixerChannel *chan) +{ + int i; + + if (!wavechans || !chan) return false; + + for (i=numwavechans-1;i>=0;i--) { + if (chan == wavechans[i].h) { + wavemixer->ReleaseChannel(chan); + wavechans[i].h = NULL; + + return true; + } + } + + return false; +} + +bool JFAud::IsValidSound(JFAudMixerChannel *chan) const +{ + int i; + + if (!wavechans || !chan) return false; + + for (i=numwavechans-1;i>=0;i--) + if (chan == wavechans[i].h) + return true; + + return false; +} +//}}} + +//{{{ Music playback +bool JFAud::PlayMusic(const char *filename, const char *subfilename) +{ + JFAudFile *file, *ffile; + SoundFile *sound; + bool r; + + if (!wavemixer && !midisynth) return false; + + StopMusic(); + + // We see if the user wants to take over file opening from us + if (useropenfunc) { + file = useropenfunc(filename, subfilename); + } else { + StdFile *sfile; + sfile = new StdFile(filename, subfilename); + file = static_cast(sfile); + } + if (!file) return false; + if (!file->IsOpen()) { + // open failed to yield a valid file handle + delete file; +#ifdef DEBUG + if (!subfilename) subfilename = ""; + _JFAud_LogMsg("JFAud::PlayMusic: failed opening %s(%s)\n", filename, subfilename); +#endif + return false; + } + + ffile = file; + r = PlayMusicFile(&ffile); + + if (ffile) delete file; // PlayMusicFile didn't take control of the file, so we clean it up + + return r; +} + +bool JFAud::PlayMusicFile(JFAudFile **file) +{ + SoundFile *sound; + + if (!wavemixer && !midisynth) return false; + + StopMusic(); + + // See if the file is one of the recognised formats + sound = IdentifySoundFile(*file); + if (!sound) return false; + + *file = NULL; +#ifdef DEBUG + _JFAud_LogMsg("JFAud::PlayMusicFile: format %s\n", + sound->GetType() == SoundFile::TYPE_WAVEFORM ? + (static_cast(sound))->GetFormatName() : + (static_cast(sound))->GetFormatName() + ); +#endif + + if (sound->GetType() == SoundFile::TYPE_WAVEFORM) { + struct _wavechan *wavechan; + JFAudMixerChannel *chan; + + if (!wavemixer) { + // can't play waveform files because the device isn't initialised + delete sound; + return false; + } + + wavechan = FindFreeWaveChan(0x7fffffff); + + // if everyone's more important than us (!), there's nothing we can do + if (!wavechan) { + delete sound; +#ifdef DEBUG + _JFAud_LogMsg("JFAud::PlayMusicFile: no free channels\n"); +#endif + return false; + } + + if (wavechan->h) { + wavemixer->ReleaseChannel(wavechan->h); + wavechan->h = NULL; + } + + // Get a waveform channel + chan = wavemixer->AcquireChannel(); + if (!chan) { + delete sound; + // sound owns file now that it was properly identified + // and deleted it in its destructor +#ifdef DEBUG + _JFAud_LogMsg("JFAud::PlayMusicFile: failed acquiring a channel\n"); +#endif + return false; + } + + // Attach the waveform source to the channel + if (!chan->SetMedia(static_cast(sound))) { + delete sound; + wavemixer->ReleaseChannel(chan); +#ifdef DEBUG + _JFAud_LogMsg("JFAud::PlayMusicFile: failed setting channel media\n"); +#endif + return false; + } + + chan->SetGain(1.0); + chan->SetPitch(1.0); + chan->SetPosition(0.0,0.0,0.0); + chan->SetVelocity(0.0,0.0,0.0); + chan->SetDirection(0.0,0.0,1.0); + chan->SetRolloff(0.0); + chan->SetLoop(true); + chan->SetFollowListener(true); + chan->SetFilter(JFAudMixerChannel::Filter4Point); + + musicchan = wavechan; + wavechan->h = chan; + wavechan->priority = 0x7fffffff; + wavechan->age = 0; + + chan->Play(); + + } else if (sound->GetType() == SoundFile::TYPE_MIDI) { + MidiSequencer *seq; + + if (!midisynth) { + // can't play midi files because the device isn't initialised + delete sound; + return false; + } + + seq = new MidiSequencer(static_cast(sound)); + delete sound; // sound is no longer necessary if the sequencer was created successfully, or if it failed + if (seq && !seq->IsValid()) { delete seq; seq = NULL; } + if (!seq) { +#ifdef DEBUG + _JFAud_LogMsg("JFAud::PlayMusicFile: couldn't create a sequencer\n"); +#endif + return false; + } + + if (!midisynth->SetMedia(seq)) { +#ifdef DEBUG + _JFAud_LogMsg("JFAud::PlayMusicFile: failed setting synthesiser\n"); +#endif + return false; + } + + midisynth->SetLoop(true); + midisynth->Play(); + midisynth->Resume(); + } else { + delete sound; +#ifdef DEBUG + _JFAud_LogMsg("JFAud::PlayMusicFile: unknown file type\n"); +#endif + return false; + } + + return true; +} + +bool JFAud::PauseMusic(bool onf) +{ + if (musicchan) { + return onf ? musicchan->h->Pause() : musicchan->h->Play(); + } + if (midisynth) { + return onf ? midisynth->Pause() : midisynth->Resume(); + } + return false; +} + +bool JFAud::StopMusic(void) +{ + if (musicchan) { + FreeSound(musicchan->h); + musicchan = NULL; + } + if (midisynth) { + midisynth->Stop(); + } + return true; +} +//}}} + +// vim:fdm=marker: + diff --git a/polymer/jfaud/src/jfaudtest.cpp b/polymer/jfaud/src/jfaudtest.cpp new file mode 100755 index 000000000..d95ee8108 --- /dev/null +++ b/polymer/jfaud/src/jfaudtest.cpp @@ -0,0 +1,511 @@ +#ifdef __APPLE__ +# include "jfaud/sysdefs.h" +#else +# include "sysdefs.h" +#endif + +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +# include "watcomhax/cstdio" +# include "watcomhax/cstring" +# include "watcomhax/cmath" +# include "watcomhax/ctime" +#else +# include +# include +# include +# include +# include +#endif + +#define _SDL_audio_h +#ifdef __APPLE__ +# include +# include +# include "jfaud/jfaud.hpp" +#else +# include "SDL.h" +# include "jfaud.hpp" +#endif + + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +#define XRES 640 +#define YRES 480 + +#define OSC 128 +#define NCHANS 3 + +SDL_Surface *surf; +int counter = 0; + +void ClearScreen(unsigned char c); +void DrawGrid(unsigned char c); +void DrawPixel(int x, int y, unsigned char c); +void DrawLine(int x0, int y0, int x1, int y1, unsigned char c); +void DrawOrigin(float x, float y, float c, float s); +void DrawWander(float x, float y, unsigned char c); +void DrawSource(float x, float y, unsigned char c); + +typedef struct _ChanListItem { + struct _ChanListItem *next; + JFAudMixerChannel * it; + int tag; +} ChanListItem; +class ChanList { +private: + ChanListItem *items, *cur; +public: + ChanList() : items(NULL), cur(NULL) { } + ~ChanList() { + ChanListItem *x; + while (items) { + x = items->next; + delete items; + items = x; + } + } + void Store(JFAudMixerChannel * x, int t = 0) { + ChanListItem *y; + y = items; + while (y) { + if (y->it == x) { + y->tag = t; + return; + } + y = y->next; + } + y = new ChanListItem; + y->it = x; + y->tag = t; + y->next = items; + items = y; + } + void Rewind() { cur = items; } + bool Each(JFAudMixerChannel * *x, int *tag = NULL) { + if (!cur) return false; + *x = cur->it; + if (tag) *tag = cur->tag; + Next(); + return true; + } + void Next() { + if (!cur) return; + cur = cur->next; + } +}; + +/* +#include "soundcache.hpp" +#include "memfile.hpp" +int testcache(void) +{ + SoundCache *cache; + MemFile *testfile; + JFAudFile *cachef; + void *xbuf; + + cache = new SoundCache(); + cache->SetCacheSize(262144, 262144); + + xbuf = malloc(262144); + testfile = new MemFile(xbuf, 262144, free); + + printf("caching 262144 byte file\n"); + cachef = cache->CacheFile(static_cast(testfile), "bigfile",NULL); + cache->Update(); + + printf("releasing 262144 byte file\n"); + if (cachef) delete cachef; + cache->Update(); + + xbuf = malloc(65535); + testfile = new MemFile(xbuf, 65535, free); + + printf("caching 65535 byte file\n"); + cachef = cache->CacheFile(static_cast(testfile), "smallfile",NULL); + cache->Update(); + + printf("releasing 65535 byte file\n"); + if (cachef) delete cachef; + cache->Update(); + + delete cache; + + return 0; +} +*/ + +extern "C" int main(int argc, char *argv[]) +{ + char **enumer, **enumer2, *def; + int i,j; + bool done = false; + SDL_Event ev; + char buttons=0; + + char *clicksound = "testsnd/pop.wav"; + char *wandersound = "testsnd/relaxation.au"; + char *bgmsound = "testsnd/fishpolk.mid"; + char *wavedev = NULL; + char *mididev = NULL; + char *cdadev = NULL; + + bool nowave=false, nomidi=false, nocda=false; + + float originx=0.0, originz=0.0, origina=-M_PI/2.0; + float mousex=0.0, mousez=0.0; + + JFAud *jfaud = NULL; + JFAudMixerChannel *wanderchan = NULL, *ch; + ChanList clicks; + bool paused = false; + + srand((unsigned int)time(NULL)); + + for (i=1; i Use named wave device\n" + " -midi Use named MIDI device\n" + " -cda Use named CDA device\n" + " -wander Filename of the sound that wanders around the listener\n" + " default: %s\n" + " -click Filename of the sound that plays if you click the mouse\n" + " default: %s\n" + " -bgm Filename of the background music sound (or *CDA[:track])\n" + " default: %s\n" + " -help, -? This message\n" + ,argv[0], + wandersound, clicksound, bgmsound); + return 0; + } + } + + enumer = JFAud::EnumerateWaveDevices(NULL, &def); + if (enumer) { + printf("Wave devices\n * default: %s\n", def); + for (i=0; enumer[i]; i++) { + printf(" - %s\n", enumer[i]); + + enumer2 = jfaud->EnumerateWaveDevices(enumer[i], &def); + if (enumer2) { + printf(" * default: %s\n", def); + for (j=0; enumer2[j]; j++) { + printf(" - %s\n", enumer2[j]); + } + free(enumer2); + } + } + free(enumer); + } + + enumer = JFAud::EnumerateMIDIDevices(&def); + if (enumer) { + printf("MIDI devices\n * default: %s\n", def); + for (i=0; enumer[i]; i++) { + printf(" - %s\n", enumer[i]); + } + free(enumer); + } + + enumer = JFAud::EnumerateCDADevices(&def); + if (enumer) { + printf("CDA devices\n * default: %s\n", def); + for (i=0; enumer[i]; i++) { + printf(" - %s\n", enumer[i]); + } + free(enumer); + } + + jfaud = new JFAud(); + + // Initialising SDL here so the window is created before JFAud needs it + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER)) { + delete jfaud; + puts("Error initialising SDL"); + return -1; + } + SDL_WM_SetCaption("JFAud Test", NULL); + + surf = SDL_SetVideoMode(XRES,YRES,8,SDL_SWSURFACE); + if (!surf) { + delete jfaud; + SDL_Quit(); + puts("Error setting video mode"); + return -1; + } else { + SDL_Color cmap[256]; + int i; + for (i=0;i<256;i++) { + cmap[i].r = i; + cmap[i].g = (cmap[i].r+32)%256; + cmap[i].b = (cmap[i].g+64)%256; + } + SDL_SetColors(surf, cmap, 0, 256); + } + + SDL_GetMouseState(NULL,NULL); + SDL_EnableKeyRepeat(10,10); + + if (!jfaud->InitWave(wavedev, NCHANS)) { + puts("Error initialising wave output"); + nowave = true; + } else jfaud->SetCacheSize(1048576,1048576); + + if (!jfaud->InitMIDI(mididev)) { + puts("Error initialising MIDI device. No biggie."); + nomidi = true; + } + + if (!strncasecmp(bgmsound, "*CDA", 4)) { + if (!jfaud->InitCDA(cdadev)) { + puts("Couldn't initialise CDA. No biggie."); + } else { + JFAudCDA *cda = jfaud->GetCDA(); + int rtrack = 0; + + if (bgmsound[4] == ':') { + rtrack = atoi(bgmsound+5); + if (!cda->IsTrackPlayable(rtrack)) + printf("CDA track %d isn't playable\n", rtrack); + else { + cda->PlayTrack(rtrack); + printf("Playing CDA track %d\n", rtrack); + } + } else { + int attempts = 3; + if (cda->GetNumTracks() > 0) { + do { + rtrack = rand() % cda->GetNumTracks(); + } while (!cda->IsTrackPlayable(rtrack) && --attempts > 0); + } + if (attempts > 0) { + printf("Playing CDA track %d\n", rtrack); + cda->PlayTrack(rtrack); + } else { + printf("Gave up trying to find a playable CDA track\n"); + nocda = true; + } + } + } + bgmsound = NULL; + } else { + nocda = true; + } + + if (wandersound && !nowave) { + wanderchan = jfaud->PlaySound(wandersound, NULL, 2); + if (!wanderchan) printf("Error playing wandering sound %s\n", wandersound); + else { + wanderchan->SetLoop(true); + wanderchan->Play(); + } + } + + if (bgmsound) { + jfaud->PlayMusic(bgmsound); + } + + while (1) { + while (SDL_PollEvent(&ev)) { + if (ev.type == SDL_QUIT) { done = true; } + else if (ev.type == SDL_KEYDOWN) { + switch (ev.key.keysym.sym) { + case SDLK_SPACE: jfaud->PauseMusic(paused ^= true); break; + case SDLK_ESCAPE: done = true; break; + case SDLK_LEFT: origina -= M_PI/20.0; break; + case SDLK_RIGHT: origina += M_PI/20.0; break; + case SDLK_UP: + originx += cos(origina)*0.1; + originz += sin(origina)*0.1; + break; + case SDLK_DOWN: + originx -= cos(origina)*0.1; + originz -= sin(origina)*0.1; + break; + default: break; + } + } else if (ev.type == SDL_MOUSEBUTTONDOWN) { + if (ev.button.button == SDL_BUTTON_LEFT) buttons |= 1; + } else if (ev.type == SDL_MOUSEBUTTONUP) { + if (ev.button.button == SDL_BUTTON_LEFT) buttons &= ~1; + } else if (ev.type == SDL_MOUSEMOTION) { + mousex = (float)(ev.motion.x-XRES/2) / OSC; + mousez = (float)(ev.motion.y-YRES/2) / OSC; + } + } + if (done) break; + + if (SDL_MUSTLOCK(surf)) SDL_LockSurface(surf); + ClearScreen(0); + DrawGrid(32); + + { + float x,y,z; + + //DrawSource(mousex, mousez, 130); + + if (!nowave) { + jfaud->GetWave()->SetListenerPosition(originx,0.0,originz); + jfaud->GetWave()->SetListenerOrientation(cos(origina),0.0,sin(origina),0.0,1.0,0.0); + DrawOrigin(originx,originz,cos(origina),sin(origina)); + } + + if (wanderchan) { + y = M_PI*(float)counter/180.0; + x = cos(y); + z = sin(y); + DrawWander(x, z, 96); + if (!paused) wanderchan->SetPosition(x,0.0,z); + } + + if (buttons & 1) { + ch = jfaud->PlaySound(clicksound, NULL, 1); + if (!ch) clicksound = NULL; + else { + ch->SetFilter(JFAudMixerChannel::Filter4Point); + ch->SetRefDist(1.0); + ch->SetMaxDist(2.0); + ch->SetRolloff(1.0); + ch->SetPosition(mousex,0.0,mousez); + ch->Play(); + clicks.Store(ch,0); + } + buttons &= ~1; + } + + clicks.Rewind(); + while (clicks.Each(&ch,NULL)) { + if (!jfaud->IsValidSound(ch) || !ch->IsPlaying()) { continue; } + ch->GetPosition(&x,&y,&z); + DrawSource(x, z, 200); + } + } + + if (SDL_MUSTLOCK(surf)) SDL_UnlockSurface(surf); + + SDL_Flip(surf); + + jfaud->Update(); + + SDL_Delay(50); + if (!paused) counter++; + } + + SDL_Quit(); + + if (wanderchan) jfaud->FreeSound(wanderchan); + clicks.Rewind(); while (clicks.Each(&ch,NULL)) jfaud->FreeSound(ch); + delete jfaud; + + return 0; +} + +void ClearScreen(unsigned char c) +{ + memset(surf->pixels, c, YRES * surf->pitch); +} + +void DrawGrid(unsigned char c) +{ + int i; + DrawLine(0,YRES/2,XRES-1,YRES/2,c); + DrawLine(XRES-1-16, YRES/2-16, XRES-1, YRES/2, c); + DrawLine(XRES-1-16, YRES/2+16, XRES-1, YRES/2, c); + DrawLine(XRES/2,0,XRES/2,YRES-1,c); + DrawLine(XRES/2-16, YRES-1-16, XRES/2, YRES-1, c); + DrawLine(XRES/2+16, YRES-1-16, XRES/2, YRES-1, c); + + for (i = (XRES/2)/OSC; i>=0; i--) { + DrawLine(XRES/2+i*OSC,YRES/2-8,XRES/2+i*OSC,YRES/2+8, c); + DrawLine(XRES/2-i*OSC,YRES/2-8,XRES/2-i*OSC,YRES/2+8, c); + } + for (i = (YRES/2)/OSC; i>=0; i--) { + DrawLine(XRES/2-8,YRES/2+i*OSC,XRES/2+8,YRES/2+i*OSC, c); + DrawLine(XRES/2-8,YRES/2-i*OSC,XRES/2+8,YRES/2-i*OSC, c); + } +} + +void DrawPixel(int x, int y, unsigned char c) +{ + if (x < 0 || y < 0 || x >= XRES || y >= YRES) return; + ((unsigned char *)surf->pixels)[(y * surf->pitch) + x] = c; +} + +void DrawLine(int x0, int y0, int x1, int y1, unsigned char c) +{ + int dx, dy, x, y, steps; + dx = (x1-x0); + dy = (y1-y0); + steps = (abs(dx) > abs(dy)) ? abs(dx) : abs(dy); + DrawPixel(x0,y0,c); + if (steps == 0) return; + x = x0<<8; + y = y0<<8; + dx = (dx<<8) / steps; + dy = (dy<<8) / steps; + for (--steps ; steps >= 0; steps--) { + x += dx; + y += dy; + DrawPixel(x>>8,y>>8,c); + } +} + +void RotatePoint(float *x, float *y, float c, float s) +{ + float nx,ny; + nx = c*(*x) - s*(*y); + ny = s*(*x) + c*(*y); + *x = nx; *y = ny; +} + +void DrawOrigin(float x, float y, float c, float s) +{ + float ox,oy, tx,ty, lx,ly, rx,ry; + + ox = XRES/2 + x*OSC; oy = YRES/2 + y*OSC; + tx = 24.0; ty = 0.0; RotatePoint(&tx, &ty, c,s); + lx = 0.0; ly = 8.0; RotatePoint(&lx, &ly, c,s); + rx = 0.0; ry = -8.0; RotatePoint(&rx, &ry, c,s); + + DrawLine((int)(ox+tx),(int)(oy+ty),(int)(ox+lx),(int)(oy+ly), 255); + DrawLine((int)(ox+tx),(int)(oy+ty),(int)(ox+rx),(int)(oy+ry), 255); + DrawLine((int)(ox+lx),(int)(oy+ly),(int)(ox+rx),(int)(oy+ry), 255); +} + +void DrawSource(float x, float y, unsigned char c) +{ + int l,t,r,b,m,n; + m = XRES/2 + (int)(x*OSC); n = YRES/2 + (int)(y*OSC); + l = XRES/2 + (int)(x*OSC) - 8; t = YRES/2 + (int)(y*OSC) - 8; + r = XRES/2 + (int)(x*OSC) + 8; b = YRES/2 + (int)(y*OSC) + 8; + DrawLine(m,t,l,n, c); + DrawLine(m,t,r,n, c); + DrawLine(l,n,m,b, c); + DrawLine(r,n,m,b, c); +} + +void DrawWander(float x, float y, unsigned char c) +{ + int l,t,r,b; + l = XRES/2 + (int)(x*OSC) - 8; t = YRES/2 + (int)(y*OSC) - 8; + r = XRES/2 + (int)(x*OSC) + 8; b = YRES/2 + (int)(y*OSC) + 8; + DrawLine(l,t,r,t, c); + DrawLine(l,b,r,b, c); + DrawLine(l,t,l,b, c); + DrawLine(r,t,r,b, c); +} + diff --git a/polymer/jfaud/src/log.h b/polymer/jfaud/src/log.h new file mode 100755 index 000000000..e7f5e57d4 --- /dev/null +++ b/polymer/jfaud/src/log.h @@ -0,0 +1,6 @@ +#ifndef __log_h__ +#define __log_h__ + +void _JFAud_LogMsg(const char *, ...); + +#endif diff --git a/polymer/jfaud/src/midibuffer.cpp b/polymer/jfaud/src/midibuffer.cpp new file mode 100755 index 000000000..2ae561909 --- /dev/null +++ b/polymer/jfaud/src/midibuffer.cpp @@ -0,0 +1,96 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstring" +#else +# include +#endif +#include "midibuffer.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +MidiBuffer::MidiBuffer() + : numtracks(0), ppqn(0), tracklength(NULL), tracks(NULL) +{ +} + +MidiBuffer::~MidiBuffer() +{ + unsigned i; + + if (tracks) { + for (i=0;i= numtracks || !tracklength) return 0; + return tracklength[track]; +} + +unsigned char * MidiBuffer::GetTrackData(unsigned int track) const +{ + if (track >= numtracks || !tracks) return NULL; + return tracks[track]; +} + +bool MidiBuffer::Allocate(unsigned int numtracks) +{ + if (tracks || tracklength) { + delete [] tracks; + delete [] tracklength; + + tracks = NULL; + tracklength = NULL; + this->numtracks = 0; + } + + if (numtracks == 0) return true; + + tracks = new unsigned char*[numtracks]; + tracklength = new unsigned int[numtracks]; + + if (!tracks || !tracklength) { + if (tracks) delete [] tracks; + if (tracklength) delete [] tracklength; + return false; + } + + memset(tracks, 0, sizeof(unsigned char *)*numtracks); + memset(tracklength, 0, sizeof(unsigned int)*numtracks); + + this->numtracks = numtracks; + + return true; +} + +bool MidiBuffer::AllocateTrack(unsigned int track, unsigned int length) +{ + if (track > numtracks || !tracks) return false; + + if (tracks[track]) { + delete [] tracks[track]; + tracks[track] = NULL; + tracklength[track] = 0; + } + + if (length == 0) return true; + + tracks[track] = new unsigned char[length]; + if (!tracks[track]) return false; + + memset(tracks[track], 0, length); + tracklength[track] = length; + + return true; +} + diff --git a/polymer/jfaud/src/midibuffer.hpp b/polymer/jfaud/src/midibuffer.hpp new file mode 100755 index 000000000..8f0a4e537 --- /dev/null +++ b/polymer/jfaud/src/midibuffer.hpp @@ -0,0 +1,29 @@ +#ifndef __midibuffer_hpp__ +#define __midibuffer_hpp__ + +#include "buffer.hpp" + +class MidiBuffer : public Buffer { +private: + unsigned int numtracks, ppqn; + unsigned int *tracklength; + unsigned char **tracks; +protected: +public: + MidiBuffer(); + virtual ~MidiBuffer(); + + virtual Type GetType() const { return TYPE_MIDI; } + + unsigned int GetNumTracks() const { return numtracks; } + unsigned int GetPPQN() const { return ppqn; } + unsigned int GetTrackLength(unsigned int track) const; + unsigned char * GetTrackData(unsigned int track) const; + + void SetPPQN(unsigned int ppqn) { this->ppqn = ppqn; } + + bool Allocate(unsigned int numtracks); + bool AllocateTrack(unsigned int track, unsigned int length); +}; + +#endif diff --git a/polymer/jfaud/src/midifile.cpp b/polymer/jfaud/src/midifile.cpp new file mode 100755 index 000000000..845b3ecf8 --- /dev/null +++ b/polymer/jfaud/src/midifile.cpp @@ -0,0 +1,80 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdio" +#else +# include +#endif + +#include "log.h" +#include "soundfile.hpp" +#include "midifile.hpp" + +#include "midifile_smf.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +static int init = 0; + +bool InitialiseMIDIReaders(void) +{ + int i; + SoundFile::InitState r; + const char *name; + + if (init > 0) return true; + + _JFAud_LogMsg("Supported MIDI formats:\n"); + for (i=MidiFile::FORMAT_FIRST; i<=MidiFile::FORMAT_LAST; i++) { + switch (i) { + case MidiFile::FORMAT_SMF: /*r = MidiFile_SMF::Init();*/ continue; + default: continue; + } + + switch (r) { + case SoundFile::InitFailed: return false; + case SoundFile::InitOK: _JFAud_LogMsg(" %s\n", name); break; + case SoundFile::InitDisabled: _JFAud_LogMsg(" %s (disabled)\n", name); break; + } + } + init++; + return true; +} + +void UninitialiseMIDIReaders(void) +{ + int i; + + if (init <= 0) return; + + for (i=MidiFile::FORMAT_FIRST; i<=MidiFile::FORMAT_LAST; i++) { + switch (i) { + case MidiFile::FORMAT_SMF: /*MidiFile_SMF::Uninit();*/ continue; + default: continue; + } + } + init--; +} + +MidiFile *IdentifyMIDIFile(JFAudFile *fh) +{ + int i; + MidiFile *sfile; + for (i=MidiFile::FORMAT_FIRST; i<=MidiFile::FORMAT_LAST; i++) { + switch (i) { + case MidiFile::FORMAT_SMF: sfile = new MidiFile_SMF(fh); break; + default: continue; + } + + if (!sfile) return NULL; + if (!sfile->IsValid()) delete sfile; + else if (!sfile->IsUsable()) { + delete sfile; + return NULL; + } else return sfile; + } + return NULL; +} + diff --git a/polymer/jfaud/src/midifile.hpp b/polymer/jfaud/src/midifile.hpp new file mode 100755 index 000000000..86a85d4ce --- /dev/null +++ b/polymer/jfaud/src/midifile.hpp @@ -0,0 +1,35 @@ +#ifndef __midifile_hpp__ +#define __midifile_hpp__ + +#include "soundfile.hpp" +#include "midibuffer.hpp" + +class MidiFile : public SoundFile { +public: + typedef enum { + FORMAT_UNKNOWN = -1, + FORMAT_FIRST = 0, + FORMAT_SMF = 0, + FORMAT_LAST = FORMAT_SMF + } Format; + + MidiFile() { } + virtual ~MidiFile() { } + + virtual Type GetType() const { return TYPE_MIDI; } + virtual const char *GetTypeName() const { return "MIDI"; } + virtual Format GetFormat() const = 0; + virtual const char *GetFormatName() const = 0; + + // Sub-classes should implement these + //static InitState Init() { return InitDisabled; } + //static bool Uninit() { return false; } + + virtual MidiBuffer *ReadData(void) = 0; +}; + +bool InitialiseMIDIReaders(void); +void UninitialiseMIDIReaders(void); +MidiFile *IdentifyMIDIFile(JFAudFile *); + +#endif diff --git a/polymer/jfaud/src/midifile_smf.cpp b/polymer/jfaud/src/midifile_smf.cpp new file mode 100755 index 000000000..5da214fdb --- /dev/null +++ b/polymer/jfaud/src/midifile_smf.cpp @@ -0,0 +1,112 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdio" +#else +# include +#endif + +#include "log.h" +#include "midifile_smf.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +static unsigned int getbignum(unsigned char *ptr, int size) +{ + unsigned int val = 0; + if (size > 4) size = 4; + while (size--) { + val <<= 8; + val |= *(ptr++); + } + return val; +} + + +MidiFile_SMF::MidiFile_SMF(JFAudFile *tfh) + : isvalid(false), isusable(false), numtracks(0), datastart(-1) +{ + unsigned char headerbuf[8]; + unsigned i, chunksz; + + tfh->Rewind(); + + if (tfh->Read(4*2, headerbuf) != 4*2) return; + if (headerbuf[0] != 'M' || headerbuf[1] != 'T' || headerbuf[2] != 'h' || headerbuf[3] != 'd') return; + isvalid = true; + if ((chunksz=getbignum(&headerbuf[4], 4)) < 6) return; + + if (tfh->Read(2*3, headerbuf) != 2*3) return; + + i = getbignum(&headerbuf[0], 2); // format + numtracks = getbignum(&headerbuf[2], 2); + if (i > 1 || numtracks < 1) return; + + ppqn = getbignum(&headerbuf[4], 2); + + datastart = tfh->Tell(); + + fh = tfh; + isusable = true; +} + +MidiFile_SMF::~MidiFile_SMF() +{ + // We're responsible for deleting the file handle if we acknowledged the file as being + // one of our own and it was usable by us in the constructor. Otherwise, the caller of + // the constructor cleans up the file handle. + if (fh && isvalid && isusable) delete fh; +} + +MidiBuffer * MidiFile_SMF::ReadData(void) +{ + MidiBuffer *midi; + unsigned i, tracklen; + unsigned char headerbuf[8]; + + midi = new MidiBuffer(); + if (!midi) return NULL; + + midi->SetPPQN(ppqn); + fh->Seek(datastart, JFAudFile::Set); + + if (!midi->Allocate(numtracks)) { + delete midi; + return NULL; + } + + for (i=0; iRead(4*2, headerbuf) != 4*2) { + delete midi; + return NULL; + } + + if (headerbuf[0] != 'M' || headerbuf[1] != 'T' || headerbuf[2] != 'r' || headerbuf[3] != 'k') { + delete midi; + return NULL; + } + + tracklen = getbignum(&headerbuf[4], 4); + if (!midi->AllocateTrack(i, tracklen)) { + delete midi; + return NULL; + } + + if (fh->Read(tracklen, midi->GetTrackData(i)) != tracklen) { + delete midi; + return NULL; + } + } + +#ifdef DEBUG + _JFAud_LogMsg("MidiFile_SMF::ReadData(): %d tracks, %d PPQN\n", midi->GetNumTracks(), midi->GetPPQN()); + for (i=0; iGetTrackLength(i)); + } +#endif + + return midi; +} + diff --git a/polymer/jfaud/src/midifile_smf.hpp b/polymer/jfaud/src/midifile_smf.hpp new file mode 100755 index 000000000..bb35afbc6 --- /dev/null +++ b/polymer/jfaud/src/midifile_smf.hpp @@ -0,0 +1,35 @@ +#ifndef __midifile_smf_hpp__ +#define __midifile_smf_hpp__ + +#include "midifile.hpp" + +class MidiFile_SMF : public MidiFile { +private: + bool isvalid, isusable; + + unsigned numtracks, ppqn; + int datastart; + + JFAudFile *fh; + +public: + MidiFile_SMF(JFAudFile *); + virtual ~MidiFile_SMF(); + virtual bool IsValid() const { return isvalid; } + virtual bool IsUsable() const { return isusable; } + + static InitState Init() { return InitOK; } + static bool Uninit() { return true; } + + // these static versions retrieve the identifiers for this particular class + static Format GetClassFormat() { return FORMAT_SMF; } + static const char *GetClassFormatName() { return "Standard MIDI"; } + // these virtual versions return the identifier based on whether the file is valid or not + virtual Format GetFormat() const { return isvalid ? FORMAT_SMF : FORMAT_UNKNOWN; } + virtual const char *GetFormatName() const { return isvalid ? "Standard MIDI" : NULL; } + + virtual MidiBuffer *ReadData(void); +}; + +#endif + diff --git a/polymer/jfaud/src/midiseq.cpp b/polymer/jfaud/src/midiseq.cpp new file mode 100755 index 000000000..9288d9bef --- /dev/null +++ b/polymer/jfaud/src/midiseq.cpp @@ -0,0 +1,472 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdio" +#else +# include +#endif +#include "midiseq.hpp" +#include "log.h" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +// Track flags +enum { + IgnoreTrack = 1, + IgnorePrograms = 2, + IgnoreVolumes = 4, + TrackDisabled = 8 +}; + +// Command lengths +static const int cmdlens[] = { + 2 /*noteoff 0x80*/, 2 /*noteon 0x90*/, 2 /*aftertouch 0xA0*/, 2 /*control 0xB0*/, + 1 /*program 0xC0*/, 1 /*channelaftertouch 0xD0*/, 2 /*pitchwheel 0xE0*/, 0 /*syscommon 0xF0*/ +}; + +unsigned int MidiSequencer::GetMidiNum(TrackDef *track) +{ + int val = 0; + int by; + do { + by = track->GetByte(); + if (by < 0) return 0; + val <<= 7; + val |= (by&0x7f); + } while (by&0x80); + return val; +} + +unsigned int MidiSequencer::TrackDef::GetMidiNum() +{ + int val = 0; + int by; + do { + by = GetByte(); + if (by < 0) return 0; + val <<= 7; + val |= (by&0x7f); + } while (by&0x80); + return val; +} + + +MidiSequencer::TrackDef::TrackDef() + : start(NULL), pos(NULL), len(0) +{ + Reset(); +} + +MidiSequencer::TrackDef::~TrackDef() +{ +} + +void MidiSequencer::TrackDef::Reset() +{ + flags = 0; + delta = 0; + evtptr = NULL; + command = 0; + evtlen = 0; + loopcount = 0; + loopstart = 0; + loopend = 0; +} + +bool MidiSequencer::TrackDef::FetchEvent() +{ + int cmd,length; + + if (EOT()) return false; + + delta = GetMidiNum(); + if (PeekByte(0) & 0x80) command = GetByte(); + cmd = command; + length = cmdlens[ (cmd>>4) & 7 ]; + evtptr = GetPosPtr(); + evtlen = length; + + if (length == 0) { // system common event + switch (cmd) { + case 0xF0: + // sysex + do evtlen++; while (GetByte() != 0xF7); + break; + case 0xFF: + // meta + cmd = GetByte(); + length = GetByte(); + evtlen += length + 2; + while (length--) GetByte(); + break; + case 0xF2: + // two-byte messages + evtlen++; GetByte(); + case 0xF1: + case 0xF3: + // one-byte messages + evtlen++; GetByte(); + default: + // command-byte-only messages + break; + } + } else { + while (length--) GetByte(); + } + + return 0; +} + +void MidiSequencer::Scan(int device) +{ + unsigned i; + char foundincl; + int deltatime; + unsigned char command, parm1, parm2; + + for (i=0; iGetNumTracks(); i++) { + foundincl = 0; + command = 0; + seqtrack[i].Rewind(); + seqtrack[i].Reset(); + while (!seqtrack[i].EOT()) { + deltatime = GetMidiNum(&seqtrack[i]); + if (seqtrack[i].PeekByte(0) & 0x80) { + command = seqtrack[i].GetByte(); + } else if (!command) { + while (!((command = seqtrack[i].GetByte()) & 0x80)) ; + } + + if ((command&0xF0) == 0xB0) { // controller change + parm1 = seqtrack[i].GetByte(); + parm2 = seqtrack[i].GetByte(); + switch (parm1) { + case 110: // EMIDI include + if (parm2 == 127 || parm2 == device) { + seqtrack[i].ClrFlag(IgnoreTrack); + } else if (!foundincl) { + seqtrack[i].SetFlag(IgnoreTrack); + } + foundincl = 1; + break; + + case 111: // EMIDI exclude + if (parm2 == 127 || parm2 == device) { + seqtrack[i].SetFlag(IgnoreTrack); + } + break; + + case 112: // EMIDI program + seqtrack[i].SetFlag(IgnorePrograms); + break; + + case 113: // EMIDI volume + seqtrack[i].SetFlag(IgnoreVolumes); + break; + } + } else if ((command&0xF0) == 0xF0) { // meta event + switch (command) { + case 0xF0: + while (seqtrack[i].GetByte() != 0xF7) ; + break; + case 0xFF: + seqtrack[i].GetByte(); + for (parm2=seqtrack[i].GetByte(); parm2>0; parm2--) + seqtrack[i].GetByte(); + break; + case 0xF2: + seqtrack[i].GetByte(); + case 0xF1: case 0xF3: + seqtrack[i].GetByte(); + default: + break; + } + command = 0; + } else { + for (parm2=cmdlens[ (command>>4) & 7 ]; parm2>0; parm2--) + seqtrack[i].GetByte(); + } + } + seqtrack[i].Rewind(); + } + +#ifdef DEBUG + for (i=0; iGetNumTracks(); i++) { + _JFAud_LogMsg("MidiSequencer::Scan(%d): track %d is %s\n",device,i, + seqtrack[i].TestFlag(IgnoreTrack)?"ignored":"enabled"); + } +#endif +} + + + +MidiSequencer::MidiSequencer(MidiFile *fh) + : midifile(NULL), seqtrack(NULL), lastcommand(0), infiniteloop(false) +{ + MidiBuffer *buf; + + if (!fh || !fh->IsValid() || !fh->IsUsable()) return; + + buf = fh->ReadData(); + if (!buf) return; + + if (buf->GetNumTracks() < 1) { + delete buf; + return; + } + + seqtrack = new TrackDef[ buf->GetNumTracks() ]; + if (!seqtrack) { + delete buf; + return; + } else { + unsigned i; + + for (i=0; i < buf->GetNumTracks(); i++) { + seqtrack[i].Setup(buf->GetTrackData(i), buf->GetTrackLength(i)); + seqtrack[i].Reset(); + + // prime the track + if (seqtrack[i].FetchEvent()) + seqtrack[i].SetFlag(TrackDisabled); + } + } + + midifile = buf; +} + +MidiSequencer::~MidiSequencer() +{ + if (seqtrack) delete [] seqtrack; + if (midifile) delete midifile; +} + +bool MidiSequencer::IsValid() const +{ + return midifile != NULL; +} + + +void MidiSequencer::SetDevice(EMIDIDevice dev) +{ + unsigned i; + + if ((unsigned)dev > DEV_ALL) dev = DEV_ALL; + + lastcommand = 0; + Scan((int)dev); + + for (i=0; iGetNumTracks(); i++) { + if (seqtrack[i].TestFlag(IgnoreTrack)) { + seqtrack[i].SetFlag(TrackDisabled); + continue; + } + if (seqtrack[i].FetchEvent()) + seqtrack[i].SetFlag(TrackDisabled); + } +} + +void MidiSequencer::SetLoop(bool loop) +{ + infiniteloop = loop; +} + +void MidiSequencer::Rewind(void) +{ + unsigned i; + + if (!midifile) return; + + for (i=0; iGetNumTracks(); i++) seqtrack[i].Rewind(); + lastcommand = 0; +} + +int MidiSequencer::GetEvent(unsigned *delta, unsigned char *command, unsigned *len, unsigned char const **evtdata) +{ + unsigned int deltaacc = 0, mindelta = 0xfffffff; + int mindeltatrk = -1, j; + unsigned i; + char gotevent = 0; + + TrackDef *curtrack; + +again: + // find the track with the nearest event + mindelta = 0xffffffff; + mindeltatrk = -1; + for (i=0;iGetNumTracks();i++) { + if (seqtrack[i].TestFlag(TrackDisabled)) continue; + if (seqtrack[i].GetDelta() >= mindelta) continue; + mindelta = seqtrack[i].GetDelta(); + mindeltatrk = i; + } + if (mindeltatrk < 0) { + if (!infiniteloop) return 1; + for (i=0;iGetNumTracks();i++) { + if (seqtrack[i].TestFlag(IgnoreTrack)) { + seqtrack[i].SetFlag(TrackDisabled); + continue; + } + seqtrack[i].ClrFlag(TrackDisabled); + seqtrack[i].Rewind(); + if (seqtrack[i].FetchEvent()) + seqtrack[i].SetFlag(TrackDisabled); + } + goto again; + } + + // check out the event + curtrack = &seqtrack[mindeltatrk]; + switch (curtrack->GetCommand() & 0xF0) { + case 0xC0: // program + if (curtrack->TestFlag(IgnorePrograms)) + break; + case 0x80: // note off + case 0x90: // note on + case 0xA0: // aftertouch + case 0xD0: // channel aftertouch + case 0xE0: // pitch wheel + gotevent = 1; + break; + case 0xF0: // system common event + // we keep tempo meta events so they can be interpreted, but all other metas get swallowed + if (curtrack->GetCommand() == 0xFF && *(curtrack->GetEventPtr()) == 0x51) + gotevent = 1; + else if (curtrack->GetCommand() == 0xFF && + *(curtrack->GetEventPtr()) >= 1 && + *(curtrack->GetEventPtr()) <= 7) { +/* + char msg[256], *type; + memset(msg,0,256); + memcpy(msg, curtrack->GetEventPtr()+2, *(curtrack->GetEventPtr()+1)); + switch (*(curtrack->GetEventPtr())) { + case 1: type = "text"; break; + case 2: type = "copyright"; break; + case 3: type = "track name"; break; + case 4: type = "instrument name"; break; + case 5: type = "lyric"; break; + case 6: type = "marker"; break; + case 7: type = "cue point"; break; + default: type = "?"; break; + } + debuglog(DEBUGLVL_WORDY,jsprintf("%s event: %s",type,msg)); +*/ + } + else if (curtrack->GetCommand() == 0xFF && *(curtrack->GetEventPtr()) == 0x2F) + curtrack->SetFlag(TrackDisabled); + break; + case 0xB0: // control + switch (*(curtrack->GetEventPtr())) { + case 110: // EMIDI include + case 111: // EMIDI exclude + case 114: // EMIDI context start + case 115: // EMIDI context end + break; + case 113: // EMIDI volume + evtbuf[0] = 7; // cook up a normal volume change event + evtbuf[1] = *(curtrack->GetEventPtr()+1); + *command = curtrack->GetCommand(); + *evtdata = evtbuf; + *len = 2; + gotevent = 2; + break; + case 112: // EMIDI program + *command = 0xC0 | (curtrack->GetCommand() & 15); // cook up a normal + evtbuf[0] = *(curtrack->GetEventPtr()+1) & 0x7F; // program change event + *evtdata = evtbuf; + *len = 1; + gotevent = 2; + break; + case 116: // EMIDI loop begin + case 118: // EMIDI song loop begin + if (*(curtrack->GetEventPtr()+1) == 0) { + j = -1; + } else { + j = *(curtrack->GetEventPtr()+1); + //debuglog(DEBUGLVL_WORDY,jsprintf("Track %d: Entering %d-cycle loop",mindeltatrk,j)); + } + + if (*(curtrack->GetEventPtr()) == 118) { + // song-wide loop + for (i=0;iGetNumTracks();i++) { + seqtrack[i].SetLoopCount(j); + seqtrack[i].SetLoopStart( seqtrack[i].GetPos() ); + } + } else { + curtrack->SetLoopCount(j); + curtrack->SetLoopStart( curtrack->GetPos() ); + } + break; + case 117: // EMIDI loop end + case 119: // EMIDI song loop end + if (*(curtrack->GetEventPtr()+1) != 127) { + break; + } + if (!infiniteloop && curtrack->GetLoopCount() < 0) { + break; + } + + if (*(curtrack->GetEventPtr()) == 118) { + // song-wide loop + for (i=0;iGetNumTracks();i++) + seqtrack[i].SetLoopEnd( seqtrack[i].GetPos() ); + } + + if (curtrack->GetLoopCount()) { + if (curtrack->GetLoopCount() > 0) { + curtrack->SetLoopCount( curtrack->GetLoopCount() - 1 ); + //debuglog(DEBUGLVL_WORDY,jsprintf("Track %d: %d to go...",mindeltatrk,curtrack->GetLoopCount())); + } + curtrack->SetPos( curtrack->GetLoopStart() ); + } + break; + case 7: // volume change + if (curtrack->TestFlag(IgnoreVolumes)) + break; + default: + gotevent = 1; + break; + } + break; + } + + if (gotevent) { + if (gotevent == 1) { + *command = curtrack->GetCommand(); + *evtdata = curtrack->GetEventPtr(); + *len = curtrack->GetEventLen(); + } + lastcommand = *command; + *delta = deltaacc + mindelta; + } + + // move all events forward and get a new one for the track we just ate + for (i=0;iGetNumTracks();i++) { + if (seqtrack[i].TestFlag(TrackDisabled)) continue; + if (i == (unsigned)mindeltatrk) { + if (seqtrack[i].FetchEvent()) { + seqtrack[i].SetFlag(TrackDisabled); + } + } else { + seqtrack[i].SetDelta( seqtrack[i].GetDelta() - mindelta ); + } + } + + if (gotevent) { + return 0; + } else { + deltaacc += mindelta; + goto again; + } + + return -1; +} + +unsigned int MidiSequencer::GetPPQN(void) const +{ + if (!midifile) return 0; + return midifile->GetPPQN(); +} + diff --git a/polymer/jfaud/src/midiseq.hpp b/polymer/jfaud/src/midiseq.hpp new file mode 100755 index 000000000..f50584a9d --- /dev/null +++ b/polymer/jfaud/src/midiseq.hpp @@ -0,0 +1,97 @@ +#ifndef __midiseq_hpp__ +#define __midiseq_hpp__ + +#include "midibuffer.hpp" +#include "midifile.hpp" + +class MidiSequencer { +private: + class TrackDef { + private: + unsigned int delta; + unsigned char const *evtptr; + unsigned char command; + unsigned int evtlen; + int loopcount; // loop repeat counter (-1 = infinite) + unsigned int loopstart, loopend; + + unsigned char *start, *pos, flags; + unsigned int len; + public: + TrackDef(); + ~TrackDef(); + + void Reset(); + void Setup(unsigned char *start, unsigned int len) { + this->start = this->pos = start; + this->len = len; + } + + void SetFlag(char flag) { flags |= flag; } + void ClrFlag(char flag) { flags &= ~flag; } + char TestFlag(char flag) const { return flags & flag; } + + unsigned int GetPos() const { return (unsigned int)(pos-start); } + unsigned char *GetPosPtr() const { return pos; } + void SetPos(unsigned int off) { pos = start + off; } + void Rewind() { pos = start; } + bool EOT() const { return GetPos() >= len; } + int GetByte() { if (EOT()) return -1; return *(pos++); } + int PeekByte(unsigned ahead) { if ((unsigned int)(pos+ahead-start) >= len) return -1; return pos[ahead]; } + + bool FetchEvent(); + unsigned int GetMidiNum(); + unsigned int GetDelta() const { return delta; } + unsigned char const *GetEventPtr() const { return evtptr; } + unsigned char GetCommand() const { return command; } + unsigned int GetEventLen() const { return evtlen; } + int GetLoopCount() const { return loopcount; } + unsigned int GetLoopStart() const { return loopstart; } + unsigned int GetLoopEnd() const { return loopend; } + void SetDelta(unsigned int d) { delta = d; } + void SetLoopCount(int count) { loopcount = count; } + void SetLoopStart(unsigned int off) { loopstart = off; } + void SetLoopEnd(unsigned int off) { loopend = off; } + }; + + MidiBuffer *midifile; + TrackDef *seqtrack; + unsigned char lastcommand; + bool infiniteloop; + unsigned char evtbuf[4]; // for synthesised events + + unsigned int GetMidiNum(TrackDef *track); + + void Scan(int device); + +public: + enum EMIDIDevice { + DEV_GeneralMidi = 0, // general midi + DEV_SoundCanvas, // roland sound canvas + DEV_SoundBlasterEmu, // sound blaster emu8k (AWE cards) + DEV_WaveBlaster, // wave blaster + DEV_SoundBlasterOpl, // sound blaster fm synth (opl2,3) + DEV_ProAudio, // media vision pro audio + DEV_SoundMan16, // logitech sound man 16 + DEV_Adlib, // adlib + DEV_SoundScape, // esoniq soundscape + DEV_Gus, // gravis ultrasound + DEV_ALL = 127 + }; + + MidiSequencer(MidiFile *); + ~MidiSequencer(); + + bool IsValid(void) const; + + void SetDevice(EMIDIDevice dev); + void SetLoop(bool loop); + void Rewind(void); + + int GetEvent(unsigned *delta, unsigned char *command, unsigned *len, unsigned char const **evtdata); + // returns 0 if a message was returned, 1 if the end of the song was reached, or -1 on error + unsigned int GetPPQN(void) const; +}; + +#endif + diff --git a/polymer/jfaud/src/midisynth.cpp b/polymer/jfaud/src/midisynth.cpp new file mode 100755 index 000000000..a12376359 --- /dev/null +++ b/polymer/jfaud/src/midisynth.cpp @@ -0,0 +1,10 @@ +#define JFAUD_INTERNAL +#include "midisynth.hpp" + +JFAudMidiSynth::JFAudMidiSynth() +{ +} + +JFAudMidiSynth::~JFAudMidiSynth() +{ +} diff --git a/polymer/jfaud/src/midisynth.hpp b/polymer/jfaud/src/midisynth.hpp new file mode 100755 index 000000000..955d3847a --- /dev/null +++ b/polymer/jfaud/src/midisynth.hpp @@ -0,0 +1,32 @@ +#ifndef __midisynth_hpp__ +#define __midisynth_hpp__ + +#ifdef JFAUD_INTERNAL +# include "midiseq.hpp" +#else +class MidiSequencer; +#endif + +class JFAudMidiSynth { +private: +protected: +public: + JFAudMidiSynth(); + virtual ~JFAudMidiSynth(); + + virtual bool Open(const char *dev) = 0; + virtual bool Close(void) = 0; + virtual bool Update(void) = 0; + + virtual bool SetMedia(MidiSequencer *) = 0; + + virtual bool Play(void) = 0; + virtual bool Stop(void) = 0; + virtual bool Pause(void) = 0; + virtual bool Resume(void) = 0; + + virtual bool SetLoop(bool onf) = 0; + virtual bool GetLoop(void) const = 0; +}; + +#endif diff --git a/polymer/jfaud/src/midisynth_win32.cpp b/polymer/jfaud/src/midisynth_win32.cpp new file mode 100755 index 000000000..8ab8f8df3 --- /dev/null +++ b/polymer/jfaud/src/midisynth_win32.cpp @@ -0,0 +1,485 @@ +#define JFAUD_INTERNAL +#define WIN32_LEAN_AND_MEAN +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +#else +# include +#endif + +#include + +#include +#include + +#include "midisynth_win32.hpp" +#include "log.h" + +#ifndef MOD_WAVETABLE +#define MOD_WAVETABLE 6 +#define MOD_SWSYNTH 7 +#endif + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +#define USE_THREAD + +void MidiSynth_Win32::Lock() +{ +#ifdef USE_THREAD + EnterCriticalSection(&mutex); +#endif +} +void MidiSynth_Win32::Unlock() +{ +#ifdef USE_THREAD + LeaveCriticalSection(&mutex); +#endif +} + +void CALLBACK MidiSynth_Win32::midiCallback(HMIDIOUT handle, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2) +{ + LPMIDIHDR hdr; + struct hdrtyp *hdrtyp; + + if (uMsg != MOM_DONE) return; + + hdr = (LPMIDIHDR)dwParam1; + hdrtyp = (struct hdrtyp *)(hdr->dwUser); + hdrtyp->synth->_BufferDone(hdrtyp->n); +} + +DWORD WINAPI MidiSynth_Win32::BufThread(class MidiSynth_Win32 *myself) +{ + MSG msg; + int i; + + while (1) { + switch (GetMessage(&msg, NULL, 0, 0)) { + case 0: return 0; // WM_QUIT.. do threads get this? + case -1: return 1; // fatal error from GetMessage + default: break; + } + if (msg.message == MM_MOM_OPEN) continue; + else if (msg.message == MM_MOM_CLOSE) return 0; + else if (msg.message == MM_MOM_DONE) { + myself->Lock(); + for (i=0;i<2;i++) { + if ((LPARAM)&myself->headers[i].header == msg.lParam) { + myself->_BufferDone(i); + break; + } + } + if (i == 2) _JFAud_LogMsg("MidiSynth_Win32::BufThread(): MM_MOM_DONE gave us an unknown buffer!\n"); + if (myself->streamhnd && myself->seq) myself->_Update(); + myself->Unlock(); + } + } +} + +void MidiSynth_Win32::_BufferDone(int n) +{ + if (headers[n].header.dwFlags & MHDR_PREPARED) { + midiOutUnprepareHeader((HMIDIOUT)streamhnd, &headers[n].header, sizeof(MIDIHDR)); + buffersplaying--; + buffullness[n] = 0; + } +} + + +MidiSynth_Win32::MidiSynth_Win32() + : streamhnd(NULL), seq(NULL), threadhnd(NULL) +{ +#ifdef USE_THREAD + InitializeCriticalSection(&mutex); +#endif + memset(headers, 0, sizeof(headers)); + memset(buffullness, 0, sizeof(buffullness)); + buffersplaying = 0; + Reset(); +} + +MidiSynth_Win32::~MidiSynth_Win32() +{ + Close(); +#ifdef USE_THREAD + DeleteCriticalSection(&mutex); +#endif +} + +bool MidiSynth_Win32::Open(const char *dev) +{ + MMRESULT result; + int numdevs, i, j, matchdev = -1, matchchars = -1; + MIDIOUTCAPS caps, matchcaps; + const char *type; + + numdevs = midiOutGetNumDevs(); + if (!numdevs) { + _JFAud_LogMsg("MidiSynth_Win32::Open(): no MIDI devices\n"); + return false; + } + + // note: a zero-length string in dev will choose the first device + if (!dev) dev = ""; + for (i=0; i matchchars) matchchars = j, matchdev = i, memcpy(&matchcaps,&caps, sizeof(MIDIOUTCAPS)); + } + if (matchdev < 0) return false; // shouldn't happen! + + switch (matchcaps.wTechnology) { + case MOD_MIDIPORT: type = "a hardware port"; devtype = MidiSequencer::DEV_GeneralMidi; break; + case MOD_SYNTH: type = "a generic synthesiser"; devtype = MidiSequencer::DEV_GeneralMidi; break; + case MOD_SQSYNTH: type = "a square-wave synthesiser"; devtype = MidiSequencer::DEV_SoundBlasterOpl; break; + case MOD_FMSYNTH: type = "an FM synthesiser"; devtype = MidiSequencer::DEV_SoundBlasterOpl; break; + case MOD_WAVETABLE: type = "a wavetable synthesiser"; devtype = MidiSequencer::DEV_GeneralMidi; break; + case MOD_SWSYNTH: type = "a software synthesiser"; devtype = MidiSequencer::DEV_GeneralMidi; break; + default: type = "an unknown synthesiser"; devtype = MidiSequencer::DEV_GeneralMidi; break; + } +#ifdef DEBUG + _JFAud_LogMsg("MidiSynth_Win32::Open(): device %d is \"%s\", %s\n", matchdev, matchcaps.szPname, type); +#endif + +#ifdef USE_THREAD + threadhnd = CreateThread(NULL, 4096, (LPTHREAD_START_ROUTINE)BufThread, (LPVOID)this, 0, &threadid); + if (!threadhnd) { + _JFAud_LogMsg("MidiSynth_Win32::Open(): CreateThread() failed with error 0x%x\n", GetLastError()); + return false; + } else _JFAud_LogMsg("MidiSynth_Win32::Open(): Spawned buffering thread %d\n", threadid); + + result = midiStreamOpen(&streamhnd, (LPUINT)&matchdev, 1, (DWORD)threadid, 0, CALLBACK_THREAD); +#else + result = midiStreamOpen(&streamhnd, (LPUINT)&matchdev, 1, (DWORD)midiCallback, 0, CALLBACK_FUNCTION); +#endif + // dwInstance would be the pointer to the stream info struct + if (result != MMSYSERR_NOERROR) return false; + + return true; +} + +bool MidiSynth_Win32::Close(void) +{ + if (!streamhnd) return false; + + Lock(); + if (!Reset()) { Unlock(); return false; } + + midiStreamClose(streamhnd); + streamhnd = NULL; + Unlock(); + +#ifdef USE_THREAD + if (threadhnd) { + switch (WaitForSingleObject(threadhnd, 1000)) { + case WAIT_OBJECT_0: { + DWORD d = 0; + GetExitCodeThread(threadhnd, &d); + _JFAud_LogMsg("MidiSynth_Win32::Close(): Buffering thread exited with code %d\n", d); + } break; + default: _JFAud_LogMsg("MidiSynth_Win32::Close(): Buffering thread failed to exit\n"); break; + } + CloseHandle(threadhnd); + threadhnd = NULL; + } +#endif + + return true; +} + +bool MidiSynth_Win32::Reset(bool stop) +{ + int i; + + if (streamhnd) { + midiStreamStop(streamhnd); + /*for (i=0;i<2;i++) + if (headers[i].header.dwFlags & MHDR_PREPARED) + midiOutUnprepareHeader((HMIDIOUT)streamhnd, &headers[i].header, sizeof(MIDIHDR)); */ + StopAllNotes(); + } + + if (stop) { + if (seq) seq->Rewind(); + } else { + if (seq) delete seq; + seq = NULL; + loop = false; + } + + // the callback/thread will handle these when _BufferDone is called + //memset(headers, 0, sizeof(headers)); + //memset(buffullness, 0, sizeof(buffullness)); + //buffersplaying = 0; + memset(bufdata, 0, sizeof(bufdata)); + evtcommand = 0; + paused = justpaused = false; + + return true; +} + +void MidiSynth_Win32::StopAllNotes(void) +{ + int i; + if (!streamhnd) return; + for (i=0;i<16;i++) { + midiOutShortMsg((HMIDIOUT)streamhnd, (0xB0+i) | (64<<8)); + midiOutShortMsg((HMIDIOUT)streamhnd, (0xB0+i) | (123<<8)); + midiOutShortMsg((HMIDIOUT)streamhnd, (0xB0+i) | (120<<8)); + } +} + +bool MidiSynth_Win32::_Update() +{ + int i; + for (i=0;i<2;i++) { + if (buffullness[i] > 0) continue; + switch (bufferdata(i)) { + case 0: continue; + case -1: return false; // midi device error + default: return true; // eof or midi file error + } + } + return true; +} +bool MidiSynth_Win32::Update(void) +{ +#ifdef USE_THREAD + return true; +#else + bool r; + + if (!streamhnd) return false; + if (!seq) return true; + + Lock(); + r = _Update(); + Unlock(); + return r; +#endif +} + +char **MidiSynth_Win32::Enumerate(char **def) +{ + int numdevs, tnumdevs=0, i, devstrlen = 0; + char **rl, **rp, *p; + MIDIOUTCAPS caps; + + numdevs = midiOutGetNumDevs(); + + for (i=0; i0; i++, tnumdevs--) { + if (midiOutGetDevCaps(i,&caps,sizeof(MIDIOUTCAPS)) != MMSYSERR_NOERROR) continue; + *(rp++) = p; + if (def && i==0) *def = p; + strcpy(p, caps.szPname); + p += strlen(caps.szPname) + 1; + } + + return rl; +} + +bool MidiSynth_Win32::SetMedia(MidiSequencer *media) +{ + if (!media || !media->IsValid()) return false; + + Lock(); + if (!Reset()) { Unlock(); return false; } + + seq = media; + seq->SetDevice(devtype); + Unlock(); + + return true; +} + +bool MidiSynth_Win32::Play(void) +{ + MMRESULT result; + MIDIPROPTIMEDIV tdiv; + + if (!streamhnd || !seq) return false; + + Lock(); + tdiv.cbStruct = sizeof(MIDIPROPTIMEDIV); + tdiv.dwTimeDiv = seq->GetPPQN(); + result = midiStreamProperty(streamhnd, (LPBYTE)&tdiv, MIDIPROP_SET|MIDIPROP_TIMEDIV); + if (result != MMSYSERR_NOERROR) { Unlock(); return false; } + + paused = true; + + result = midiStreamRestart(streamhnd); + if (result != MMSYSERR_NOERROR) { Unlock(); return false; } + _Update(); + Unlock(); + + return true; +} + +bool MidiSynth_Win32::Stop(void) +{ + Lock(); + Reset(true); + Unlock(); + return true; +} + +bool MidiSynth_Win32::Pause(void) +{ + Lock(); + paused = justpaused = true; + Unlock(); + return streamhnd && seq; +} + +bool MidiSynth_Win32::Resume(void) +{ + Lock(); + paused = false; + Unlock(); + return streamhnd && seq; +} + +bool MidiSynth_Win32::SetLoop(bool onf) +{ + if (!seq || !streamhnd) return false; + + Lock(); + loop = onf; + seq->SetLoop(onf); + Unlock(); + return true; +} + +bool MidiSynth_Win32::GetLoop(void) const +{ + return loop; +} + + +int MidiSynth_Win32::bufferdata(int num) +{ + MMRESULT result; + + // buffers some messages and queues them + unsigned int tickamt; + int i=0,j,k; + + buffullness[num] = 0; + + if (!evtcommand) { + if (seq->GetEvent(&evtdelta, &evtcommand, &evtlength, &evtdata)) { + evtcommand = 0; + return 1; // error or eof + } + } + + tickamt = seq->GetPPQN()/8; // the div by eight increases buffering but pausing becomes more responsive + + if (paused) { + if (justpaused) { + // turn all notes off + for (i=0;i<16;i++) { + bufdata[num][ buffullness[num]++ ] = 0; + bufdata[num][ buffullness[num]++ ] = 0; + bufdata[num][ buffullness[num]++ ] = MEVT_F_SHORT | (0xB0+i) | (64<<8); + bufdata[num][ buffullness[num]++ ] = 0; + bufdata[num][ buffullness[num]++ ] = 0; + bufdata[num][ buffullness[num]++ ] = MEVT_F_SHORT | (0xB0+i) | (123<<8); + bufdata[num][ buffullness[num]++ ] = 0; + bufdata[num][ buffullness[num]++ ] = 0; + bufdata[num][ buffullness[num]++ ] = MEVT_F_SHORT | (0xB0+i) | (120<<8); + } + justpaused = false; + } + + // queue a nop for tickamt + bufdata[num][ buffullness[num]++ ] = tickamt; + bufdata[num][ buffullness[num]++ ] = 0; + bufdata[num][ buffullness[num]++ ] = (MEVT_NOP<<24); + goto queueandret; + } + + if (evtdelta > tickamt) { + evtdelta -= tickamt; + + // queue a nop for tickamt + bufdata[num][ buffullness[num]++ ] = tickamt; + bufdata[num][ buffullness[num]++ ] = 0; + bufdata[num][ buffullness[num]++ ] = (MEVT_NOP<<24); + goto queueandret; + } + + do { + // queue the event. tempo events get inserted as MEVT_TEMPO + tickamt -= evtdelta; + + bufdata[num][ buffullness[num]++ ] = evtdelta; + bufdata[num][ buffullness[num]++ ] = 0; + if (evtcommand == 0xFF && evtdata[0] == 0x51) { + bufdata[num][ buffullness[num]++ ] = (MEVT_TEMPO<<24) | ((DWORD)evtdata[2]<<16) | + ((DWORD)evtdata[3]<<8) | ((DWORD)evtdata[4]); + } else if (evtlength < 3) { + bufdata[num][ buffullness[num] ] = MEVT_F_SHORT | evtcommand; + switch (evtlength) { + case 2: bufdata[num][ buffullness[num] ] |= (DWORD)evtdata[1] << 16; + case 1: bufdata[num][ buffullness[num] ] |= (DWORD)evtdata[0] << 8; + default: break; + } + buffullness[num]++; + } else { + bufdata[num][ buffullness[num]++ ] = MEVT_F_LONG | (1+evtlength); + bufdata[num][ buffullness[num] ] = evtcommand; + for(j=1,k=0;k0) buffullness[num]++; // ended on a partial? + } + + i = seq->GetEvent(&evtdelta, &evtcommand, &evtlength, &evtdata); + if (i>0) { + evtcommand = 0; + break; // end of song + } else if (i<0) { + evtcommand = 0; + return 1; // error or eof + } + } while (evtdelta <= tickamt && STREAMBUFLEN-buffullness[num] > (evtlength+sizeof(MIDIEVENT)+3)/4); + +queueandret: + headers[num].n = num; + headers[num].synth = this; + + // queue buffer + headers[num].header.lpData = (LPSTR)&bufdata[num]; + headers[num].header.dwBufferLength = headers[num].header.dwBytesRecorded = buffullness[num]*4; + headers[num].header.dwUser = (DWORD)&headers[num]; + headers[num].header.dwFlags = 0; + result = midiOutPrepareHeader((HMIDIOUT)streamhnd, &headers[num].header, sizeof(MIDIHDR)); + if (result != MMSYSERR_NOERROR) return -1; + result = midiStreamOut(streamhnd, &headers[num].header, sizeof(MIDIHDR)); + if (result != MMSYSERR_NOERROR) return -1; + buffersplaying++; + + return i; +} + diff --git a/polymer/jfaud/src/midisynth_win32.hpp b/polymer/jfaud/src/midisynth_win32.hpp new file mode 100755 index 000000000..2a725cb57 --- /dev/null +++ b/polymer/jfaud/src/midisynth_win32.hpp @@ -0,0 +1,75 @@ +#ifndef __midisynth_win32_hpp__ +#define __midisynth_win32_hpp__ + +#include "midisynth.hpp" + +class MidiSynth_Win32; + +struct hdrtyp { + MIDIHDR header; + int n; + MidiSynth_Win32 *synth; +}; + +#define STREAMBUFLEN 256 // *4 = 4K of event data per quarter note + +class MidiSynth_Win32 : public JFAudMidiSynth { +private: + bool loop, paused, justpaused; + + HMIDISTRM streamhnd; + struct hdrtyp headers[2]; + DWORD bufdata[2][STREAMBUFLEN], buffullness[2]; + int buffersplaying; + + MidiSequencer *seq; + MidiSequencer::EMIDIDevice devtype; + + unsigned evtdelta, evtlength; + unsigned char evtcommand; + unsigned char const *evtdata; + int bufferdata(int num); + + bool Reset(bool stop = true); + void StopAllNotes(void); + + // for threaded buffering + HANDLE threadhnd; DWORD threadid; + CRITICAL_SECTION mutex; + static DWORD WINAPI BufThread(class MidiSynth_Win32 *myself); + + // for callback notification + static void CALLBACK midiCallback(HMIDIOUT handle, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2); + + // used internally by both thread and callback + void _BufferDone(int n); + bool _Update(); + void Lock(); + void Unlock(); +protected: +public: + MidiSynth_Win32(); + virtual ~MidiSynth_Win32(); + + virtual bool Open(const char *dev); + virtual bool Close(void); + virtual bool Update(void); + static char **Enumerate(char **def); + + virtual bool SetMedia(MidiSequencer *); + + virtual bool Play(void); + virtual bool Stop(void); + virtual bool Pause(void); + virtual bool Resume(void); + + virtual bool SetLoop(bool onf); + virtual bool GetLoop(void) const; + +}; + +#ifndef _INC_MMSYSTEM +# undef DWORD +#endif + +#endif diff --git a/polymer/jfaud/src/mixer.cpp b/polymer/jfaud/src/mixer.cpp new file mode 100755 index 000000000..cc9a167e7 --- /dev/null +++ b/polymer/jfaud/src/mixer.cpp @@ -0,0 +1,39 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +#else +# include +#endif +#include "mixer.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +JFAudMixerChannel::JFAudMixerChannel() + : stopcallback(NULL), stopcallbackid(0) +{ +} + +JFAudMixerChannel::~JFAudMixerChannel() +{ +} + +bool JFAudMixerChannel::SetStopCallback( void (*cb)(int), int id) +{ + stopcallback = cb; + stopcallbackid = id; + + return true; +} + +bool JFAudMixerChannel::SetFilter(Filter which) +{ + return false; // not supported by default +} + +bool JFAudMixerChannel::SetDistanceModel(DistanceModel which) +{ + return false; +} diff --git a/polymer/jfaud/src/nullmixer.cpp b/polymer/jfaud/src/nullmixer.cpp new file mode 100755 index 000000000..820e02b1b --- /dev/null +++ b/polymer/jfaud/src/nullmixer.cpp @@ -0,0 +1,66 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdio" +# include "watcomhax/cstring" +#else +# include +# include +#endif +#include "nullmixer.hpp" +#include "log.h" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +//{{{ NullMixerChannel +NullMixerChannel::NullMixerChannel() { } +NullMixerChannel::~NullMixerChannel() { } + +bool NullMixerChannel::SetMedia(WaveformFile *) { return false; } + +bool NullMixerChannel::Play(void) { return true; } +bool NullMixerChannel::Pause(void) { return true; } +bool NullMixerChannel::Update(void) { return true; } +bool NullMixerChannel::IsPlaying(void) const { return false; } +bool NullMixerChannel::IsPaused(void) const { return false; } +bool NullMixerChannel::IsStopped(void) const { return true; } + +bool NullMixerChannel::SetGain(float gain) { return true; } +bool NullMixerChannel::SetPitch(float pitch) { return true; } +bool NullMixerChannel::SetPosition(float x, float y, float z) { return true; } +bool NullMixerChannel::SetVelocity(float x, float y, float z) { return true; } +bool NullMixerChannel::SetDirection(float x, float y, float z) { return true; } +bool NullMixerChannel::SetRefDist(float refdist) { return true; } +bool NullMixerChannel::SetRolloff(float rolloff) { return true; } +bool NullMixerChannel::SetLoop(bool onf) { return true; } +bool NullMixerChannel::SetFollowListener(bool onf) { return true; } + +float NullMixerChannel::GetGain(void) const { return 0.0; } +float NullMixerChannel::GetPitch(void) const { return 1.0; } +void NullMixerChannel::GetPosition(float *x, float *y, float *z) const { *x = *y = *z = 0.0; } +void NullMixerChannel::GetVelocity(float *x, float *y, float *z) const { *x = *y = *z = 0.0; } +void NullMixerChannel::GetDirection(float *x, float *y, float *z) const { *x = *y = *z = 0.0; } +float NullMixerChannel::GetRefDist(void) const { return 0.0; } +float NullMixerChannel::GetRolloff(void) const { return 0.0; } +bool NullMixerChannel::GetLoop(void) const { return false; } +bool NullMixerChannel::GetFollowListener(void) const { return false; } +//}}} +//{{{ NullMixer +NullMixer::NullMixer() { } +NullMixer::~NullMixer() { } +JFAudMixerChannel *NullMixer::AcquireChannel(void) { return NULL; } +bool NullMixer::ReleaseChannel(JFAudMixerChannel *ch) { return false; } +bool NullMixer::Update() { return true; } +bool NullMixer::SetListenerPosition(float x, float y, float z) { return true; } +bool NullMixer::SetListenerOrientation(float atx, float aty, float atz, float upx, float upy, float upz) { return true; } +bool NullMixer::SetListenerVelocity(float x, float y, float z) { return true; } +bool NullMixer::SetListenerGain(float gain) { return true; } +void NullMixer::GetListenerPosition(float *x, float *y, float *z) const { *x = *y = *z = 0.0; } +void NullMixer::GetListenerOrientation(float *atx, float *aty, float *atz, float *upx, float *upy, float *upz) const { *atx = *aty = *atz = *upx = *upy = *upz = 0.0; } +void NullMixer::GetListenerVelocity(float *x, float *y, float *z) const { *x = *y = *z = 0.0; } +float NullMixer::GetListenerGain(void) const { return 0.0; } +//}}} + +// vim:fdm=marker: diff --git a/polymer/jfaud/src/nullmixer.hpp b/polymer/jfaud/src/nullmixer.hpp new file mode 100755 index 000000000..8627dec45 --- /dev/null +++ b/polymer/jfaud/src/nullmixer.hpp @@ -0,0 +1,66 @@ +#ifndef __nullmixer_hpp__ +#define __nullmixer_hpp__ + +#include "mixer.hpp" + +class NullMixer; + +class NullMixerChannel : public JFAudMixerChannel { +private: +public: + NullMixerChannel(); + virtual ~NullMixerChannel(); + + virtual bool SetMedia(WaveformFile *); + + virtual bool Play(void); + virtual bool Pause(void); + virtual bool Update(void); + virtual bool IsPlaying(void) const; + virtual bool IsPaused(void) const; + virtual bool IsStopped(void) const; + + virtual bool SetGain(float gain); + virtual bool SetPitch(float pitch); + virtual bool SetPosition(float x, float y, float z); + virtual bool SetVelocity(float x, float y, float z); + virtual bool SetDirection(float x, float y, float z); + virtual bool SetRefDist(float refdist); + virtual bool SetRolloff(float rolloff); + virtual bool SetLoop(bool onf); + virtual bool SetFollowListener(bool onf); + + virtual float GetGain(void) const; + virtual float GetPitch(void) const; + virtual void GetPosition(float *x, float *y, float *z) const; + virtual void GetVelocity(float *x, float *y, float *z) const; + virtual void GetDirection(float *x, float *y, float *z) const; + virtual float GetRefDist(void) const; + virtual float GetRolloff(void) const; + virtual bool GetLoop(void) const; + virtual bool GetFollowListener(void) const; +}; + +class NullMixer : public JFAudMixer { +private: +public: + NullMixer(); + virtual ~NullMixer(); + + virtual JFAudMixerChannel *AcquireChannel(void); + virtual bool ReleaseChannel(JFAudMixerChannel *); + + virtual bool Update(); + + virtual bool SetListenerPosition(float x, float y, float z); + virtual bool SetListenerOrientation(float atx, float aty, float atz, float upx, float upy, float upz); + virtual bool SetListenerVelocity(float x, float y, float z); + virtual bool SetListenerGain(float gain); + + virtual void GetListenerPosition(float *x, float *y, float *z) const; + virtual void GetListenerOrientation(float *atx, float *aty, float *atz, float *upx, float *upy, float *upz) const; + virtual void GetListenerVelocity(float *x, float *y, float *z) const; + virtual float GetListenerGain(void) const; +}; + +#endif diff --git a/polymer/jfaud/src/pcmbuffer.cpp b/polymer/jfaud/src/pcmbuffer.cpp new file mode 100755 index 000000000..ad5a1da66 --- /dev/null +++ b/polymer/jfaud/src/pcmbuffer.cpp @@ -0,0 +1,89 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +#else +# include +#endif + +#include "pcmbuffer.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +PcmBuffer::~PcmBuffer() +{ + if (data) free(data); +} + +bool PcmBuffer::Allocate(unsigned int nsamp, unsigned int srate, unsigned int chans, unsigned int bps) +{ + if (data) free(data); + numsamples = 0; + maxsamples = nsamp; + samplerate = srate; + channels = chans; + bytespersample = bps; + data = calloc(channels*bytespersample, maxsamples); + return (data!=NULL); +} + +bool PcmBuffer::ConvertToNByte(int n) +{ + if (n == bytespersample) return true; // nothing to do + if (n < 1 || n > 2) return false; + + if (n > bytespersample) { // enlarging + unsigned char *p; + + p = (unsigned char *)realloc(data, numsamples * n * channels); + if (!p) return false; + + data = p; + maxsamples = numsamples; + if (bytespersample == 1 && n == 2) { + // convert 8bit to 16bit + short *to; + unsigned char *from; + int i; + to = (short*)data + numsamples * channels - 1; + from = (unsigned char*)data + numsamples * channels - 1; + for (i = numsamples*channels-1; i>=0; i--) + *(to--) = (short)(*(from--) ^ 128) << 8; + } else { + // convert everything else + int copy, zero, i, j; + unsigned char *q; + copy = bytespersample-1; + zero = n - bytespersample-1; + q = (unsigned char *)data + numsamples * n * channels - 1; + p = (unsigned char *)data + numsamples * bytespersample * channels - 1; + for (j = numsamples*channels-1; j>=0; j--) { +#if B_BIG_ENDIAN != 0 + for (i = zero; i>=0; i--) *(q--) = 0; +#endif + if (bytespersample == 1) *(q--) = *(p--) ^ 128; + else for (i = copy; i>=0; i--) *(q--) = *(p--); +#if B_LITTLE_ENDIAN != 0 + for (i = zero; i>=0; i--) *(q--) = 0; +#endif + } + } + } else { // shrinking + int copy, zero, i, j; + unsigned char *p, *q; + zero = bytespersample - n; + p = q = (unsigned char *)data; +#if B_LITTLE_ENDIAN != 0 + p += zero; +#endif + for (j = numsamples*channels-1; j>=0; j--) { + if (n == 1) *(q++) = *(p++) ^ 128; + else for (i = bytespersample; i>0; i--) *(q++) = *(p++); + p += zero; + } + } + bytespersample = n; + return true; +} diff --git a/polymer/jfaud/src/softwaremixer.cpp b/polymer/jfaud/src/softwaremixer.cpp new file mode 100755 index 000000000..517a49e93 --- /dev/null +++ b/polymer/jfaud/src/softwaremixer.cpp @@ -0,0 +1,832 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +# include "watcomhax/cstring" +# include "watcomhax/cmath" +# include "watcomhax/cstdio" +#else +# include +# include +# include +# include +#endif +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif +#include "softwaremixer.hpp" +#include "waveout.hpp" +#include "log.h" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +#define STREAMCHUNK 22050 // samples. 1sec @ 22.05KHz +//#define TESTTONE + +#define CHANGED_BUFFER 1 +#define CHANGED_RATE 2 +#define CHANGED_POSITION 4 + +#define SHIFTFACT 8 +#define OUTFACT (8+2) +//#define SHIFTFACT 8 +//#define OUTFACT (8+1) + +//{{{ Distance attenuation functions +float SoftwareMixerChannel::DistanceLinear(float distance, float refdist, float maxdist, float rolloff) +{ + if (rolloff <= 0.0) return 1.0; + if (distance <= refdist) return 1.0; + if (distance >= maxdist) return 0.0; + return 1.0-rolloff*((distance-refdist)/(maxdist-refdist)); +} + +float SoftwareMixerChannel::DistanceInverse(float distance, float refdist, float maxdist, float rolloff) +{ + if (rolloff <= 0.0) return 1.0; + if (distance <= refdist) return 1.0; + if (distance >= maxdist) return 0.0; + float f = refdist + (rolloff * (distance - refdist)); + if (f <= 0.0) return 1.0; + return refdist/f; +} +//}}} + +//{{{ Sample interpolation functions +#define COEFTABLESIZE 5 // 1 LSH this many bits +static short CoefTable4[1<bufferp[ (chan->samplepos>>32)*stride+offset ]; +} + +int SoftwareMixerChannel::InterpolateLinear(SoftwareMixerChannel *chan, int offset, int stride) +{ + int sample1, sample2; + int s; + unsigned int sub; + + s = chan->samplepos>>32; + sample1 = chan->bufferp[ s*stride + offset ]; + s++; + if (s < chan->buffer->GetNumSamples()) { + sample2 = chan->bufferp[ s*stride + offset ]; + } else { + s -= chan->buffer->GetNumSamples(); + if (!chan->streamed) { + sample2 = chan->bufferp[ s*stride + offset ]; + } else { + if (!chan->buffer2) return sample1; // no buffer2 yet so the best we can do is nearest + if (chan->buffer2->GetNumSamples() <= s) return sample1; // somehow we jumped buffer2 completely + sample2 = ((short*)chan->buffer2->GetData())[ s*stride + offset ]; + } + } + sub = chan->samplepos & INT64_C(0xffffffff); + return sample1 + ((int)((sample2-sample1)*(sub>>17)) >> 15); +} + +int SoftwareMixerChannel::Interpolate4Point(SoftwareMixerChannel *chan, int offset, int stride) +{ + const int ncoefs = 4; + int samples[ncoefs], mixed = 0; + unsigned int sub; + int s, i; + + short *bufp[3], *coeftable; + unsigned int bufs[3]; + + s = (chan->samplepos >> 32) - (ncoefs / 2); + sub = (chan->samplepos & INT64_C(0xffffffff)) >> (32-COEFTABLESIZE); + + bufp[0] = bufp[2] = NULL; + bufs[0] = bufs[2] = 0; + bufp[1] = (short *)chan->buffer->GetData(); + bufs[1] = chan->buffer->GetNumSamples(); + if (!chan->streamed) { + if (chan->loop) { + bufp[0] = bufp[2] = bufp[1]; + bufs[0] = bufs[2] = bufs[1]; + } + } else { + if (chan->buffer0) { + bufp[0] = (short *)chan->buffer0->GetData(); + bufs[0] = chan->buffer0->GetNumSamples(); + } + if (chan->buffer2) { + bufp[2] = (short *)chan->buffer2->GetData(); + bufs[2] = chan->buffer2->GetNumSamples(); + } + } + + memset(samples, 0, sizeof(samples)); + for (i=0; i> 16; + + if (mixed < -32768) return -32768; + else if (mixed > 32767) return 32767; + return mixed; +} +//}}} + +//{{{ n-to-n mixing functions +void SoftwareMixerChannel::Mix1To1(SoftwareMixerChannel *chan, int **mmixbuffer, int *mmb, int v1, int v2) +{ + int *mixbuffer = *mmixbuffer, mb = *mmb, s, v = v1+v2; + for (; + mb >= 0 && (int)(chan->samplepos>>32) < chan->buffer->GetNumSamples(); + chan->samplepos += chan->sampleinc, mb--) { + s = chan->filterfunc(chan, 0, 1) << SHIFTFACT; + *(mixbuffer++) += s * v / 256; + } + *mmixbuffer = mixbuffer; *mmb = mb; +} +void SoftwareMixerChannel::Mix1To2(SoftwareMixerChannel *chan, int **mmixbuffer, int *mmb, int v1, int v2) +{ + int *mixbuffer = *mmixbuffer, mb = *mmb, s; + for (; + mb >= 0 && (int)(chan->samplepos>>32) < chan->buffer->GetNumSamples(); + chan->samplepos += chan->sampleinc, mb--) { + s = chan->filterfunc(chan, 0, 1) << SHIFTFACT; + *(mixbuffer++) += s * v1 / 256; + *(mixbuffer++) += s * v2 / 256; + } + *mmixbuffer = mixbuffer; *mmb = mb; +} +void SoftwareMixerChannel::Mix2To1(SoftwareMixerChannel *chan, int **mmixbuffer, int *mmb, int v1, int v2) +{ + int *mixbuffer = *mmixbuffer, mb = *mmb, s, v = v1+v2; + for (; + mb >= 0 && (int)(chan->samplepos>>32) < chan->buffer->GetNumSamples(); + chan->samplepos += chan->sampleinc, mb--) { + s = ((chan->filterfunc(chan,0,2) + chan->filterfunc(chan,1,2)) << SHIFTFACT) / 2; + *(mixbuffer++) += s * v / 256; + } + *mmixbuffer = mixbuffer; *mmb = mb; +} +void SoftwareMixerChannel::Mix2To2(SoftwareMixerChannel *chan, int **mmixbuffer, int *mmb, int v1, int v2) +{ + int *mixbuffer = *mmixbuffer, mb = *mmb, s1, s2; + for (; + mb >= 0 && (int)(chan->samplepos>>32) < chan->buffer->GetNumSamples(); + chan->samplepos += chan->sampleinc, mb--) { + s1 = chan->filterfunc(chan,0,2) << SHIFTFACT; + s2 = chan->filterfunc(chan,1,2) << SHIFTFACT; + *(mixbuffer++) += s1 * v1 / 256; + *(mixbuffer++) += s2 * v2 / 256; + } + *mmixbuffer = mixbuffer; *mmb = mb; +} +void SoftwareMixerChannel::DownMix2To2(SoftwareMixerChannel *chan, int **mmixbuffer, int *mmb, int v1, int v2) +{ + int *mixbuffer = *mmixbuffer, mb = *mmb, s; + for (; + mb >= 0 && (int)(chan->samplepos>>32) < chan->buffer->GetNumSamples(); + chan->samplepos += chan->sampleinc, mb--) { + s = ((chan->filterfunc(chan,0,2) + chan->filterfunc(chan,1,2)) << SHIFTFACT) / 2; + *(mixbuffer++) += s * v1 / 256; + *(mixbuffer++) += s * v2 / 256; + } + *mmixbuffer = mixbuffer; *mmb = mb; +} +//}}} + + +void SoftwareMixerChannel::MixSome(int *mixbuffer, int mb) +{ + int i; + + if (state != Playing || !media) return; // paused or stopped + + for (mb -= 1; mb >= 0; ) { + if (!UpdateProps() || !mixfunc) return; + + mixfunc(this, &mixbuffer, &mb, volumes[0], volumes[1]); + + if ((int)(samplepos >> 32) >= buffer->GetNumSamples()) { + samplepos -= (int64_t)buffer->GetNumSamples() << 32; + if (streamed) { + if (buffer0) delete buffer0; + buffer0 = buffer; + buffer = buffer2; + buffer2 = NULL; + changed |= CHANGED_BUFFER; + } else if (!loop) { + state = Stopped; + if (stopcallback) stopcallback(stopcallbackid); + return; + } + } + } +} + +bool SoftwareMixerChannel::UpdateProps(void) +{ + if (!media) return false; + + if ((!streamed && !buffer) || (streamed && !buffer2)) { + buffer2 = media->ReadSamples(streamed ? STREAMCHUNK : 0, streamed ? loop : false); + if (buffer2 && (buffer2->GetNumSamples() == 0 || !buffer2->ConvertToNByte(2))) { + delete buffer2; + buffer2 = NULL; + } + + if (!buffer) { + buffer = buffer2; + buffer2 = NULL; + changed |= CHANGED_BUFFER; + } + } + + if (!buffer) { + // error, or out of data + state = Stopped; + if (stopcallback) stopcallback(stopcallbackid); + return false; + } + if (changed) { + if (changed & CHANGED_BUFFER) { + bufferp = (short *)buffer->GetData(); + if (buffer->GetSampleRate() != oldsamplerate) { + changed |= CHANGED_RATE; + oldsamplerate = buffer->GetSampleRate(); + } + + if (buffer->GetNumChannels() == 1 && owner->chans == 2) { + mixfunc = Mix1To2; + } else if (buffer->GetNumChannels() == 2 && owner->chans == 2) { + if (follow) mixfunc = Mix2To2; + else mixfunc = DownMix2To2; + } else if (buffer->GetNumChannels() == 1 && owner->chans == 1) { + mixfunc = Mix1To1; + } else if (buffer->GetNumChannels() == 2 && owner->chans == 1) { + mixfunc = Mix2To1; + } + } + if (changed & CHANGED_RATE) { + sampleinc = (int64_t)(((double)buffer->GetSampleRate() * pitch / owner->frequency) * (INT64_C(1)<<32)); + } + if (changed & CHANGED_POSITION) { + float distance, atten; + float dx, dy, dz; + float t, b; + + // owner->at[xyz] is a unit vector + + if (follow) { + dx = posx; + dy = posy; + dz = posz; + } else { + dx = posx - owner->posx; + dy = posy - owner->posy; + dz = posz - owner->posz; + } + + distance = sqrt(dx*dx + dy*dy + dz*dz); + if (distance >= maxdist) { + volumes[0] = volumes[1] = 0; + } else { + if (distance <= refdist) atten = gain*128.0; + else atten = gain*128.0*distfunc(distance,refdist,maxdist,rolloff); + + b = dx*dx + dz*dz; + if (b <= 0.0) { + volumes[0] = volumes[1] = (int)(2.0*atten); + } else { + t = (dx*owner->atz - dz*owner->atx)/sqrt(b); + volumes[0] = (int)((1.0+t) * atten); + volumes[1] = (int)((1.0-t) * atten); + } + } + //_JFAud_LogMsg("d=%+f,%+f,%+f distance=%+f atten=%+f t=%+f l=%d r=%d\n",dx,dy,dz,distance,atten,t,volumes[1],volumes[0]); + } + changed = 0; + } + + return true; +} + +void SoftwareMixerChannel::Cleanup(void) +{ + if (stopcallback && state != Stopped) { + stopcallback(stopcallbackid); + } + stopcallback = NULL; + stopcallbackid = 0; + + samplepos = 0; + mixfunc = NULL; + filterfunc = InterpolateLinear; + distfunc = DistanceInverse; + state = Stopped; + gain = 1.0; + pitch = 1.0; + posx = posy = posz = 0.0; + refdist = 1.0; + maxdist = 10.0; + rolloff = 1.0; + streamed = false; + loop = false; + follow = false; + + if (buffer0) delete buffer0; + if (buffer) delete buffer; + if (buffer2) delete buffer2; + if (media) delete media; + buffer0 = NULL; + buffer = NULL; + buffer2 = NULL; + oldsamplerate = 0; + volumes[0] = volumes[0] = 0; + changed = 0; + media = NULL; +} + +SoftwareMixerChannel::SoftwareMixerChannel(SoftwareMixer *own) + : owner(own), media(NULL), + buffer0(NULL), buffer(NULL), buffer2(NULL), + oldsamplerate(0), samplepos(0), sampleinc(0), + bufferp(NULL), changed(0), + mixfunc(NULL), filterfunc(InterpolateLinear), distfunc(DistanceInverse), + state(Stopped), gain(1.0), pitch(1.0), + posx(0.0), posy(0.0), posz(0.0), + refdist(1.0), maxdist(10.0), rolloff(1.0), + streamed(false), loop(false), follow(false) +{ + volumes[0] = volumes[1] = 0; +} + +SoftwareMixerChannel::~SoftwareMixerChannel() +{ + Cleanup(); +} + +bool SoftwareMixerChannel::SetMedia(WaveformFile *file) +{ + if (!file) return false; + + owner->waveout->Lock(); + if (media) { + // clean up after our predecessor + delete media; + media = NULL; + } + + media = file; + + if (file->GetPCMLength() >= (2*STREAMCHUNK)) streamed = true; + else streamed = false; + changed = -1; + owner->waveout->Unlock(); + + return true; +} + +bool SoftwareMixerChannel::SetFilter(Filter which) +{ + switch (which) { + case Filter4Point: + owner->waveout->Lock(); + filterfunc = Interpolate4Point; + owner->waveout->Unlock(); + return true; + case FilterLinear: + owner->waveout->Lock(); + filterfunc = InterpolateLinear; + owner->waveout->Unlock(); + return true; + case FilterNearest: + owner->waveout->Lock(); + filterfunc = InterpolateNearest; + owner->waveout->Unlock(); + return true; + default: + return false; + } +} + +bool SoftwareMixerChannel::SetDistanceModel(DistanceModel which) +{ + switch (which) { + case DistanceModelInverse: + owner->waveout->Lock(); + distfunc = DistanceInverse; + owner->waveout->Unlock(); + return true; + case DistanceModelLinear: + owner->waveout->Lock(); + distfunc = DistanceLinear; + owner->waveout->Unlock(); + return true; + default: + return false; + } +} + +bool SoftwareMixerChannel::Play(void) +{ + if (!media) return false; + owner->waveout->Lock(); + state = Playing; + UpdateProps(); + owner->waveout->Unlock(); + return true; +} + +bool SoftwareMixerChannel::Pause(void) +{ + if (!media) return false; + owner->waveout->Lock(); + state = Paused; + owner->waveout->Unlock(); + return true; +} + +bool SoftwareMixerChannel::Update(void) +{ + return true; +} + +bool SoftwareMixerChannel::IsPlaying(void) const { return state == Playing; } +bool SoftwareMixerChannel::IsPaused(void) const { return state == Paused; } +bool SoftwareMixerChannel::IsStopped(void) const { return state == Stopped; } + +bool SoftwareMixerChannel::SetGain(float gain) +{ + owner->waveout->Lock(); + this->gain = gain; + changed |= CHANGED_POSITION; + owner->waveout->Unlock(); + return true; +} + +bool SoftwareMixerChannel::SetPitch(float pitch) +{ + owner->waveout->Lock(); + this->pitch = pitch; + changed |= CHANGED_RATE; + owner->waveout->Unlock(); + return true; +} + +bool SoftwareMixerChannel::SetPosition(float x, float y, float z) +{ + owner->waveout->Lock(); + posx = x; posy = y; posz = z; + changed |= CHANGED_POSITION; + owner->waveout->Unlock(); + return true; +} + +bool SoftwareMixerChannel::SetVelocity(float x, float y, float z) { return false; } +bool SoftwareMixerChannel::SetDirection(float x, float y, float z) { return false; } + +bool SoftwareMixerChannel::SetRefDist(float refdist) +{ + owner->waveout->Lock(); + this->refdist = refdist; + changed |= CHANGED_POSITION; + owner->waveout->Unlock(); + return true; +} + +bool SoftwareMixerChannel::SetMaxDist(float maxdist) +{ + owner->waveout->Lock(); + this->maxdist = maxdist; + changed |= CHANGED_POSITION; + owner->waveout->Unlock(); + return true; +} + +bool SoftwareMixerChannel::SetRolloff(float rolloff) +{ + owner->waveout->Lock(); + this->rolloff = rolloff; + changed |= CHANGED_POSITION; + owner->waveout->Unlock(); + return true; +} + +bool SoftwareMixerChannel::SetLoop(bool onf) +{ + owner->waveout->Lock(); + loop = onf; + owner->waveout->Unlock(); + return true; +} + +bool SoftwareMixerChannel::SetFollowListener(bool onf) +{ + owner->waveout->Lock(); + follow = onf; + changed |= CHANGED_POSITION; + owner->waveout->Unlock(); + return true; +} + +float SoftwareMixerChannel::GetGain(void) const { return gain; } +float SoftwareMixerChannel::GetPitch(void) const { return pitch; } +void SoftwareMixerChannel::GetPosition(float *x, float *y, float *z) const { *x = posx; *y = posy; *z = posz; } +void SoftwareMixerChannel::GetVelocity(float *x, float *y, float *z) const { *x = *y = *z = 0.0; } +void SoftwareMixerChannel::GetDirection(float *x, float *y, float *z) const { *x = *y = *z = 0.0; } +float SoftwareMixerChannel::GetRefDist(void) const { return refdist; } +float SoftwareMixerChannel::GetMaxDist(void) const { return maxdist; } +float SoftwareMixerChannel::GetRolloff(void) const { return rolloff; } +bool SoftwareMixerChannel::GetLoop(void) const { return loop; } +bool SoftwareMixerChannel::GetFollowListener(void) const { return follow; } + +SoftwareMixer::SoftwareMixer() + : waveout(NULL), voices(NULL), nvoices(0), + frequency(0), bytesamp(0), chans(0), + mixbuffer(NULL), mixbufferlen(0), mixbufferused(0), mixbufferpos(0), + posx(0.0), posy(0.0), posz(0.0), + atx(0.0), aty(1.0), atz(0.0), upx(0.0), upy(0.0), upz(1.0), + velx(0.0), vely(0.0), velz(0.0), + gain(1.0) +{ + // build the 4 coefficient interpolation table + const int ncoefs = 4; + double sinc, window, xx, sub; + int i, j; + for (j = 0; j < (1<=0;i--) if (voices[i].chan) delete voices[i].chan; + delete [] voices; + } + if (mixbuffer) delete [] mixbuffer; +} + +void SoftwareMixer::DoMix(void) +{ + int i; + if (mixbufferpos >= mixbufferused) { + memset(mixbuffer, 0, sizeof(int)*mixbufferlen*chans); + for (i=nvoices-1; i>=0; i--) { + if (!voices[i].used) continue; + voices[i].chan->MixSome(mixbuffer, mixbufferlen); + } + + mixbufferpos = 0; + mixbufferused = mixbufferlen; + } +} + +bool SoftwareMixer::Setup(WaveOut *dev, int maxvoices) +{ + int i; + + waveout = dev; + frequency = dev->GetSampleRate(); + chans = dev->GetChannels(); + bytesamp = dev->GetBitsPerSample() / 8; + + // the size of our internal 32bit mixing buffer should contain at + // least enough samples to match what the wave output device is + // likely to ask for at any one time + mixbufferlen = dev->GetMixBufferLen(); + mixbufferpos = mixbufferused = 0; + mixbuffer = new int[mixbufferlen*chans]; + if (!mixbuffer) return false; + + voices = new struct _voicestat [maxvoices]; + if (!voices) { delete [] mixbuffer; mixbuffer = NULL; return false; } + for (i=maxvoices-1;i>=0;i--) { + voices[i].used = false; + voices[i].chan = new SoftwareMixerChannel(this); + if (!voices[i].chan) { + for (i++; iLock(); + for (i=nvoices-1; i>=0; i--) { + if (voices[i].used) continue; + voices[i].used = true; + waveout->Unlock(); + return static_cast(voices[i].chan); + } + waveout->Unlock(); + return NULL; +} + +bool SoftwareMixer::ReleaseChannel(JFAudMixerChannel *ch) +{ + int i; + + waveout->Lock(); + for (i=nvoices-1; i>=0; i--) { + if (!voices[i].used) continue; + if (voices[i].chan != static_cast(ch)) continue; + voices[i].used = false; + voices[i].chan->Cleanup(); + waveout->Unlock(); + return true; + } + waveout->Unlock(); + return false; +} + +bool SoftwareMixer::Update() +{ + return true; +} + +void SoftwareMixer::MixSome(void *buf, int bytes) +{ +#ifdef TESTTONE + int s; + static int i = 0; + unsigned char *c = (unsigned char *)buf; + + for (; bytes >= bytesamp; bytes -= bytesamp) { + s = (int)((float)0x7fffffff * sin((float)i++ * 2.0 * M_PI * 440.0 / (float)frequency)); + + if (bytesamp == 1) *(c++) = (unsigned char)((s>>24)+128); + else if (bytesamp == 2) { + *(short *)c = (short)(s>>16); + c += 2; + } + } +#else + int i, *rp; + char *bp = (char *)buf; + int samples = bytes / (bytesamp*chans); + + // FIXME: assumes the caller isn't stupid enough to ask for a partial sample + + while (samples > 0) { + DoMix(); + + // convert and copy the 32bit samples from our mixing buffer to what is wanted in the output + i = min(mixbufferlen - mixbufferpos, samples); + switch (bytesamp) { + case 1: { + int n, *in = &mixbuffer[mixbufferpos*chans]; + unsigned char *out = (unsigned char *)bp; + for (n = i*chans-1; n>=0; n--) *(out++) = (unsigned char)max(-128,min(127,(*(in++) >> 24))) ^ 128; + } break; + case 2: { + int n, *in = &mixbuffer[mixbufferpos*chans]; + short *out = (short *)bp; + for (n = i*chans-1; n>=0; n--, in++) *(out++) = (short)max(-32768,min(32767,(*in >> OUTFACT))); + } break; + } + mixbufferpos += i; + bp += bytesamp*chans*i; + samples -= i; + } +#endif +} + +bool SoftwareMixer::SetListenerPosition(float x, float y, float z) +{ + int i; + + waveout->Lock(); + posx = x; posy = y; posz = z; + for (i=nvoices-1; i>=0; i--) { + if (!voices[i].used) continue; + voices[i].chan->changed |= CHANGED_POSITION; + } + waveout->Unlock(); + return true; +} + +bool SoftwareMixer::SetListenerOrientation(float atx, float aty, float atz, float upx, float upy, float upz) +{ + int i; + + // make sure everything passed is a unit vector + if (atx == 0.0 && aty == 0.0 && atz == 0.0) aty = 1.0; + else { + float l = sqrt(atx*atx + aty*aty + atz*atz); + atx /= l; aty /= l; atz /= l; + } + if (upx == 0.0 && upy == 0.0 && upz == 0.0) upz = 1.0; + else { + float l = sqrt(upx*upx + upy*upy + upz*upz); + upx /= l; upy /= l; upz /= l; + } + + waveout->Lock(); + this->atx = atx; this->aty = aty; this->atz = atz; + this->upx = upx; this->upy = upy; this->upz = upz; + for (i=nvoices-1; i>=0; i--) { + if (!voices[i].used) continue; + voices[i].chan->changed |= CHANGED_POSITION; + } + waveout->Unlock(); + return true; +} + +bool SoftwareMixer::SetListenerVelocity(float x, float y, float z) +{ + waveout->Lock(); + velx = x; vely = y; velz = z; + waveout->Unlock(); + return true; +} + +bool SoftwareMixer::SetListenerGain(float gain) +{ + waveout->Lock(); + this->gain = gain; + waveout->Unlock(); + return true; +} + +void SoftwareMixer::GetListenerPosition(float *x, float *y, float *z) const +{ + *x = posx; *y = posy; *z = posz; +} + +void SoftwareMixer::GetListenerOrientation(float *atx, float *aty, float *atz, float *upx, float *upy, float *upz) const +{ + *atx = this->atx; *aty = this->aty; *atz = this->atz; + *upx = this->upx; *upy = this->upy; *upz = this->upz; +} + +void SoftwareMixer::GetListenerVelocity(float *x, float *y, float *z) const +{ + *x = velx; *y = vely; *z = velz; +} + +float SoftwareMixer::GetListenerGain(void) const +{ + return gain; +} + +// vim:fdm=marker: + diff --git a/polymer/jfaud/src/softwaremixer.hpp b/polymer/jfaud/src/softwaremixer.hpp new file mode 100755 index 000000000..6ef81da78 --- /dev/null +++ b/polymer/jfaud/src/softwaremixer.hpp @@ -0,0 +1,142 @@ +#ifndef __softwaremixer_hpp__ +#define __softwaremixer_hpp__ + +#include "sysdefs.h" +#include "mixer.hpp" +//#include "waveout.hpp" +#include "pcmbuffer.hpp" + +class WaveOut; // SoftwareMixer and WaveOut have a circular reference to each other +class SoftwareMixer; + +class SoftwareMixerChannel : public JFAudMixerChannel { +private: + SoftwareMixer *owner; + WaveformFile *media; + + PcmBuffer *buffer0, *buffer, *buffer2; + int oldsamplerate; + int64_t samplepos; // low 32b = subsample + int64_t sampleinc; + short *bufferp; + int volumes[2]; + int changed; + + // set to the appropriate mixing function on a buffer change + void (*mixfunc)(class SoftwareMixerChannel *, int**, int*, int, int); + // set to the appropriate interpolation function + int (*filterfunc)(class SoftwareMixerChannel *, int, int); + // set to the appropriate distance model function + float (*distfunc)(float, float, float, float); + + enum { Stopped = 0, Paused = 1, Playing = 2 } state; + float gain, pitch; + float posx, posy, posz; + float refdist, maxdist, rolloff; + bool streamed, loop, follow; + + static void Mix1To1(class SoftwareMixerChannel *, int**, int*, int, int); + static void Mix1To2(class SoftwareMixerChannel *, int**, int*, int, int); + static void Mix2To1(class SoftwareMixerChannel *, int**, int*, int, int); + static void Mix2To2(class SoftwareMixerChannel *, int**, int*, int, int); + static void DownMix2To2(class SoftwareMixerChannel *, int**, int*, int, int); + + static int InterpolateNearest(class SoftwareMixerChannel *, int offset, int stride); + static int InterpolateLinear(class SoftwareMixerChannel *, int offset, int stride); + static int Interpolate4Point(class SoftwareMixerChannel *, int offset, int stride); + + static float DistanceLinear(float distance, float refdist, float maxdist, float rolloff); + static float DistanceInverse(float distance, float refdist, float maxdist, float rolloff); + + // functions called by SoftwareMixer since it's our friend + virtual void MixSome(int *, int); + virtual bool UpdateProps(void); + virtual void Cleanup(void); +protected: +public: + SoftwareMixerChannel(SoftwareMixer *); + virtual ~SoftwareMixerChannel(); + + virtual bool SetMedia(WaveformFile *); + virtual bool SetFilter(Filter which); + virtual bool SetDistanceModel(DistanceModel which); + + virtual bool Play(void); + virtual bool Pause(void); + virtual bool Update(void); + virtual bool IsPlaying(void) const; + virtual bool IsPaused(void) const; + virtual bool IsStopped(void) const; + + virtual bool SetGain(float gain); + virtual bool SetPitch(float pitch); + virtual bool SetPosition(float x, float y, float z); + virtual bool SetVelocity(float x, float y, float z); + virtual bool SetDirection(float x, float y, float z); + virtual bool SetRefDist(float refdist); + virtual bool SetMaxDist(float maxdist); + virtual bool SetRolloff(float rolloff); + virtual bool SetLoop(bool onf); + virtual bool SetFollowListener(bool onf); + + virtual float GetGain(void) const; + virtual float GetPitch(void) const; + virtual void GetPosition(float *x, float *y, float *z) const; + virtual void GetVelocity(float *x, float *y, float *z) const; + virtual void GetDirection(float *x, float *y, float *z) const; + virtual float GetRefDist(void) const; + virtual float GetMaxDist(void) const; + virtual float GetRolloff(void) const; + virtual bool GetLoop(void) const; + virtual bool GetFollowListener(void) const; + + friend class SoftwareMixer; +}; + +class SoftwareMixer : public JFAudMixer { +private: + WaveOut *waveout; + struct _voicestat { + SoftwareMixerChannel *chan; + bool used; + } *voices; + int nvoices; + + int frequency, bytesamp, chans; + int *mixbuffer, mixbufferlen, mixbufferused, mixbufferpos; + + // listener properties + float posx, posy, posz; + float atx, aty, atz, upx, upy, upz; + float velx, vely, velz; + float gain; + + virtual void DoMix(void); +protected: +public: + SoftwareMixer(); + virtual ~SoftwareMixer(); + + virtual bool Setup(WaveOut *dev, int maxvoices); + + virtual JFAudMixerChannel *AcquireChannel(void); + virtual bool ReleaseChannel(JFAudMixerChannel *); + + virtual bool Update(); + virtual void MixSome(void *, int); // called by the output device when it's starved + + virtual bool SetListenerPosition(float x, float y, float z); + virtual bool SetListenerOrientation(float atx, float aty, float atz, float upx, float upy, float upz); + virtual bool SetListenerVelocity(float x, float y, float z); + virtual bool SetListenerGain(float gain); + + virtual void GetListenerPosition(float *x, float *y, float *z) const; + virtual void GetListenerOrientation(float *atx, float *aty, float *atz, float *upx, float *upy, float *upz) const; + virtual void GetListenerVelocity(float *x, float *y, float *z) const; + virtual float GetListenerGain(void) const; + + friend class SoftwareMixerChannel; +}; + +#endif + diff --git a/polymer/jfaud/src/soundcache.cpp b/polymer/jfaud/src/soundcache.cpp new file mode 100755 index 000000000..61b746371 --- /dev/null +++ b/polymer/jfaud/src/soundcache.cpp @@ -0,0 +1,436 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstring" +# include "watcomhax/cstdlib" +#else +# include +# include +#endif + +#include "log.h" +#include "file.hpp" +#include "soundcache.hpp" +#include "crc32.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +//{{{ SoundCacheFile +SoundCacheFile::SoundCacheFile(SoundCacheItem *o) + : posn(0), owner(o) +{ +} + +SoundCacheFile::~SoundCacheFile() +{ + owner->Release(); +} + +long SoundCacheFile::Read(long nbytes, void *buf) +{ + long toread = owner->length - posn; + if (toread > nbytes) toread = nbytes; + memcpy(buf, (void *)((intptr_t)owner->data + posn), toread); + posn += toread; + return toread; +} + +long SoundCacheFile::Seek(long pos, SeekFrom where) +{ + if (where == JFAudFile::Set) { + posn = pos; + } else if (where == JFAudFile::Cur) { + posn = posn + pos; + } else if (where == JFAudFile::End) { + posn = owner->length + pos; + } else return -1; + + if (posn < 0) posn = 0; + else if (posn > owner->length) posn = owner->length; + + return posn; +} + +long SoundCacheFile::Tell(void) const +{ + return posn; +} + +long SoundCacheFile::Length(void) const +{ + return owner->length; +} +//}}} + +//{{{ SoundCacheItem +void SoundCacheItem::Release() +{ + if (lock == 0) { + _JFAud_LogMsg("SoundCacheItem::Release() called on 0 lock count!\n"); + return; + } + if (--lock == 0) age = 0; +} + +void SoundCacheItem::Retain() +{ + lock++; +} + +SoundCacheItem::SoundCacheItem(uint64_t h, void *d, long l) + : hashval(h), data(d), length(l), + lock(0), usage(0), age(0) +{ +} + +SoundCacheItem::~SoundCacheItem() +{ + free(data); +} + +SoundCacheFile * SoundCacheItem::SpawnFile(void) +{ + SoundCacheFile *f = new SoundCacheFile(this); + if (f) { + Retain(); + usage++; + } + return f; +} +//}}} + +//{{{ SoundCache +uint64_t SoundCache::HashName(const char *filename, const char *subfilename) const +{ + uint32_t hash = 0, subhash = 0; + CRC32 crc; + + if (filename) { + crc.Reset(); + crc.ProcessBlock(filename, strlen(filename)); + hash = crc.Value(); + } + if (subfilename) { + crc.Reset(); + crc.ProcessBlock(subfilename, strlen(subfilename)); + subhash = crc.Value(); + } + return (uint64_t)hash | ((uint64_t)subhash << 32); +} + +bool SoundCache::ReclaimSpace(unsigned bytes) +{ + SoundCacheItem *p, *option; + void *optionp; + int optioni, i; + + while (maxcachesize - currentsize < bytes) { + option = NULL; + for (i = 0; i < sizeof(hashtable)/sizeof(hashtable[0]); i++) { + for (hashtable[i].Beginning(); hashtable[i].Valid(); hashtable[i].Next()) { + p = hashtable[i].CurrentItem(); + if (p->GetLockCount() > 0) continue; + if (option) { + if (p->GetUsageCount() < option->GetUsageCount()) continue; + // popular items are more likely to be kept around + if (p->GetAge() < option->GetAge()) continue; + // younger items are kept around longer + } + option = p; + optionp = hashtable[i].GetCurrentPointer(); + optioni = i; + } + } + + if (option == NULL) return false; // all space locked up + +#ifdef DEBUG + _JFAud_LogMsg("SoundCache::ReclaimSpace(): reclaiming %d bytes from %016llx age:%d usage:%d\n", + option->GetLength(), option->GetHashValue(), option->GetAge(), option->GetUsageCount()); +#endif + + currentsize -= option->GetLength(); + delete option; + hashtable[optioni].SetCurrentPointer(optionp); + hashtable[optioni].DeleteCurrent(); + } + + return true; +} + +SoundCache::SoundCache() + : maxcachesize(1048576), maxobjectsize(1048576), maxage(1024), + currentsize(0) +{ +} + +SoundCache::~SoundCache() +{ + FlushCache(); +} + +bool SoundCache::SetCacheSize(unsigned cache, unsigned object) +{ + maxcachesize = cache; + maxobjectsize = object; + return true; +} + + +bool SoundCache::SetMaxItemAge(unsigned age) +{ + maxage = age; + return true; +} + +bool SoundCache::FlushCache(void) +{ + SoundCacheItem *p; + int i; + + for (i = 0; i < sizeof(hashtable)/sizeof(hashtable[0]); i++) { + for (hashtable[i].Beginning(); hashtable[i].Valid(); hashtable[i].Next()) { + p = hashtable[i].CurrentItem(); + if (p->GetLockCount() > 0) continue; + currentsize -= p->GetLength(); + delete p; + hashtable[i].DeleteCurrent(); + } + } + + return true; +} + +JFAudFile* SoundCache::CheckCache(const char *filename, const char *subfilename) +{ + SoundCacheItem *p; + int i; + uint64_t hash; + + hash = HashName(filename, subfilename); + i = hash % (sizeof(hashtable)/sizeof(hashtable[0])); + for (hashtable[i].Beginning(); hashtable[i].Valid(); hashtable[i].Next()) { + p = hashtable[i].CurrentItem(); + if (p->GetHashValue() == hash) + return static_cast( p->SpawnFile() ); + } + return NULL; +} + +JFAudFile* SoundCache::CacheFile(JFAudFile *file, const char *filename, const char *subfilename) +{ + void *data; + long len; + int i; + uint64_t hash; + SoundCacheItem *p; + + if (file->Length() > maxobjectsize) { +#ifdef DEBUG + _JFAud_LogMsg("%s(%s) too big for caching: %d vs %d\n", filename, subfilename, file->Length(), maxobjectsize); +#endif + return NULL; // object too big for cache + } + if (!ReclaimSpace(file->Length())) { +#ifdef DEBUG + _JFAud_LogMsg("%s(%s) too big for available cache space: %d vs %d\n", filename, subfilename, file->Length(), maxcachesize - currentsize); +#endif + return NULL; // not enough cache space for object + } + + file->Rewind(); + data = malloc(file->Length()); + if (!data) return false; + + len = file->Read(file->Length(), data); + + hash = HashName(filename, subfilename); + i = hash % (sizeof(hashtable)/sizeof(hashtable[0])); + + p = new SoundCacheItem(hash, data, len); + if (!p) { + free(data); + return NULL; + } + + hashtable[i].Beginning(); + hashtable[i].InsertBeforeCurrent(p); + currentsize += len; + + return static_cast( p->SpawnFile() ); +} + +bool SoundCache::Update(void) +{ + SoundCacheItem *p; + int i; + +#if 0 //def DEBUG + _JFAud_LogMsg("Beginning cache state dump (%d bytes total used)...\n", currentsize); +#endif + + for (i = 0; i < sizeof(hashtable)/sizeof(hashtable[0]); i++) { + for (hashtable[i].Beginning(); hashtable[i].Valid(); hashtable[i].Next()) { + p = hashtable[i].CurrentItem(); + if (p->GetLockCount() > 0) continue; + + p->IncrementAge(); +#if 0 //def DEBUG + _JFAud_LogMsg(" %016llx Lock:%d Used:%d Age:%d\n", + p->GetHashValue(), p->GetLockCount(), p->GetUsageCount(), p->GetAge()); +#endif + if (p->GetAge() < maxage) continue; + + currentsize -= p->GetLength(); + delete p; + hashtable[i].DeleteCurrent(); + } + } + +#if 0 //def DEBUG + _JFAud_LogMsg("End cache state dump...\n"); +#endif + + return true; +} +//}}} + +//{{{ SoundCacheItemListNode +SoundCacheItemListNode::SoundCacheItemListNode(SoundCacheItem* i) : + next(NULL), + prev(NULL), + item(i) +{ } +SoundCacheItemListNode::~SoundCacheItemListNode() { } +//}}} + +//{{{ SoundCacheItemList +SoundCacheItemList::SoundCacheItemList() : + head(NULL), + tail(NULL), + cur(NULL), + next(NULL), + prev(NULL) +{ } + +SoundCacheItemList::~SoundCacheItemList() +{ + for (; head; head = cur) { + cur = head->next; + delete head; + } +} + +bool SoundCacheItemList::Beginning() +{ + cur = head; + if (!cur) return false; + next = head->next; + prev = (SoundCacheItemListNode*)0; + return true; +} + +bool SoundCacheItemList::End() +{ + cur = tail; + if (!cur) return false; + next = (SoundCacheItemListNode*)0; + prev = tail->prev; + return true; +} + +bool SoundCacheItemList::Next() +{ + cur = next; + if (!cur) return false; + next = cur->next; + prev = cur->prev; + return true; +} + +bool SoundCacheItemList::Prev() +{ + cur = prev; + if (!cur) return false; + next = cur->next; + prev = cur->prev; + return true; +} + +SoundCacheItem* SoundCacheItemList::CurrentItem() const +{ + if (cur) return cur->item; + return (SoundCacheItem*)0; +} + +bool SoundCacheItemList::Valid() const { return !!cur; } + +bool SoundCacheItemList::DeleteCurrent() +{ + if (!cur) return false; + if (cur == head) { + head = head->next; + if (head) head->prev = (SoundCacheItemListNode*)0; + delete cur; + } else if (cur == tail) { + tail = tail->prev; + if (tail) tail->next = (SoundCacheItemListNode*)0; + delete cur; + } else { + cur->next->prev = cur->prev; + cur->prev->next = cur->next; + delete cur; + } + cur = (SoundCacheItemListNode*)0; + return true; +} + +bool SoundCacheItemList::InsertBeforeCurrent(SoundCacheItem* i) +{ + SoundCacheItemListNode *x; + x = new SoundCacheItemListNode(i); + if (!head) { + head = tail = cur = x; + } else if (cur == head) { + x->next = head; + head->prev = x; + head = x; + } else { + x->next = cur; + x->prev = cur->prev; + } + prev = cur->prev; + return true; +} + +bool SoundCacheItemList::InsertAfterCurrent(SoundCacheItem* i) +{ + SoundCacheItemListNode *x; + x = new SoundCacheItemListNode(i); + if (!head) { + head = tail = cur = x; + } else if (cur == tail) { + x->prev = tail; + tail->next = x; + tail = x; + } else { + x->prev = cur; + x->next = cur->next; + } + next = cur->next; + return true; +} + +bool SoundCacheItemList::AtBeginning() const { return !cur ? false : (cur == head); } +bool SoundCacheItemList::AtEnd() const { return !cur ? false : (cur == tail); } + +void *SoundCacheItemList::GetCurrentPointer() const { return (void*)cur; } +void SoundCacheItemList::SetCurrentPointer(void *p) +{ + cur = (SoundCacheItemListNode *)p; + next = cur->next; + prev = cur->prev; +} +//}}} diff --git a/polymer/jfaud/src/soundcache.hpp b/polymer/jfaud/src/soundcache.hpp new file mode 100755 index 000000000..1c40c469a --- /dev/null +++ b/polymer/jfaud/src/soundcache.hpp @@ -0,0 +1,127 @@ +#ifndef __soundcache_hpp__ +#define __soundcache_hpp__ + +/* + * The SoundCache holds the contents of files in a hashed pool. The file data + * is stored in SoundCacheItems which maintain the basic data block and size + * information. The data can be used in the form of a SoundCacheFile object + * which are spawned as needed thereby increasing the usage and lock count for + * the cache item, and deleted at will which in its destructor decreases the + * lock count. Cache items with high usage counts have longer persistence than + * those with low usage counts, and only when a cache item has a zero lock will + * can it be freed. + */ + +class SoundCacheItem; + +class SoundCacheItemListNode { + public: + class SoundCacheItemListNode *next, *prev; + SoundCacheItem* item; + SoundCacheItemListNode(SoundCacheItem* i); + ~SoundCacheItemListNode(); +}; + +class SoundCacheItemList +{ +private: + SoundCacheItemListNode *head, *tail, *cur, *next, *prev; +protected: +public: + SoundCacheItemList(); + ~SoundCacheItemList(); + + bool Beginning(); + bool End(); + bool Next(); + bool Prev(); + SoundCacheItem* CurrentItem() const; + bool Valid() const; + bool DeleteCurrent(); + bool InsertBeforeCurrent(SoundCacheItem* i); + bool InsertAfterCurrent(SoundCacheItem* i); + bool AtBeginning() const; + bool AtEnd() const; + void *GetCurrentPointer() const; + void SetCurrentPointer(void *p); +}; + +class SoundCacheFile : public JFAudFile { +private: + long posn; + class SoundCacheItem *owner; +protected: +public: + SoundCacheFile(class SoundCacheItem *owner); + virtual ~SoundCacheFile(); + virtual bool IsOpen(void) const { return true; } + + virtual long Read(long nbytes, void *buf); + virtual long Seek(long pos, SeekFrom where); + virtual long Tell(void) const; + virtual long Length(void) const; +}; + +class SoundCacheItem { +private: + void *data; + long length; + unsigned lock, usage, age; + + uint64_t hashval; + + void Release(); + void Retain(); +protected: +public: + SoundCacheItem(uint64_t, void *, long); + ~SoundCacheItem(); + + SoundCacheFile * SpawnFile(void); + + unsigned GetLockCount(void) const { return lock; } + unsigned GetUsageCount(void) const { return usage; } + unsigned GetAge(void) const { return lock > 0 ? 0 : age; } + long GetLength(void) const { return length; } + uint64_t GetHashValue(void) const { return hashval; } + void IncrementAge(void) { age++; } + + friend class SoundCacheFile; // SoundCacheFile accesses data, length, Release(), and Retain() +}; + +class SoundCache { +private: + unsigned maxcachesize, maxobjectsize, maxage; + unsigned currentsize; + + SoundCacheItemList hashtable[234]; + + uint64_t HashName(const char *filename, const char *subfilename) const; + bool ReclaimSpace(unsigned bytes); +protected: +public: + SoundCache(); + ~SoundCache(); + + bool SetCacheSize(unsigned cache, unsigned object); + // sets the total cache and per object sound file cache sizes + + bool SetMaxItemAge(unsigned age); + // sets the maximum age any unused item will grow to before being thrown out + + bool FlushCache(void); + // forces all unlocked entries to be freed immediately + + JFAudFile* CheckCache(const char *filename, const char *subfilename); + // probes the cache for the given file and if it is present, returns + // a file object + + JFAudFile* CacheFile(JFAudFile *file, const char *filename, const char *subfilename); + // attempts to load the contents of file into the cache. returns the cached + // file object on success or NULL if unable to cache. + + bool Update(void); + // ages the cache, etc +}; + +#endif diff --git a/polymer/jfaud/src/soundfile.cpp b/polymer/jfaud/src/soundfile.cpp new file mode 100755 index 000000000..1936a040f --- /dev/null +++ b/polymer/jfaud/src/soundfile.cpp @@ -0,0 +1,30 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdio" +# include "watcomhax/cstdlib" +#else +# include +# include +#endif + +#include "soundfile.hpp" +#include "waveformfile.hpp" +#include "midifile.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +SoundFile *IdentifySoundFile(JFAudFile *fh) +{ + WaveformFile *wfile; + MidiFile *mfile; + if ((mfile = IdentifyMIDIFile(fh)) != NULL) return static_cast(mfile); + if ((wfile = IdentifyWaveformFile(fh)) != NULL) return static_cast(wfile); + return NULL; +} + + + +// vim:fdm=marker:fdc=2: diff --git a/polymer/jfaud/src/stdfile.cpp b/polymer/jfaud/src/stdfile.cpp new file mode 100755 index 000000000..ba5b73977 --- /dev/null +++ b/polymer/jfaud/src/stdfile.cpp @@ -0,0 +1,98 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstring" +# include "watcomhax/cstdio" +#else +# include +# include +#endif +#include +#include +#ifdef _WIN32 +# include +#else +# include +#endif +#include "stdfile.hpp" + + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +StdFile::StdFile(const char *filename, const char *subfilename) + : JFAudFile(filename, subfilename) +{ + fh = -1; + if (subfilename && strlen(subfilename) > 0) return; // stdio doesn't handle containers + + fh = open(filename, O_RDONLY|O_BINARY); + +#ifdef DEBUG + strncpy(fn, filename, sizeof(fn)-1); + fn[sizeof(fn)-1] = 0; + _JFAud_LogMsg("StdFile::StdFile: opened %s\n", fn); +#endif +} + +StdFile::~StdFile() +{ + if (fh >= 0) { + close(fh); +#ifdef DEBUG + _JFAud_LogMsg("StdFile::StdFile: closed %s\n", fn); +#endif + } +} + +bool StdFile::IsOpen(void) const +{ + return fh >= 0; +} + +long StdFile::Read(long nbytes, void *buf) +{ + if (fh < 0) return -1; + return read(fh, buf, nbytes); +} + +long StdFile::Seek(long pos, SeekFrom where) +{ + int whence; + if (fh < 0) return -1; + switch (where) { + case JFAudFile::Cur: whence = SEEK_CUR; break; + case JFAudFile::Set: whence = SEEK_SET; break; + case JFAudFile::End: whence = SEEK_END; break; + default: return -1; + } + return lseek(fh, pos, whence); +} + +long StdFile::Tell(void) const +{ + if (fh < 0) return -1; +#ifdef _WIN32 + return tell(fh); +#else + return (long)lseek(fh,0,SEEK_CUR); +#endif +} + +long StdFile::Length(void) const +{ + if (fh < 0) return -1; +#ifdef _WIN32 + return filelength(fh); +#else + { + long x,y; + + x = lseek(fh, 0, SEEK_CUR); + y = lseek(fh, 0, SEEK_END); + lseek(fh, x, SEEK_SET); + return y; + } +#endif +} diff --git a/polymer/jfaud/src/stdfile.hpp b/polymer/jfaud/src/stdfile.hpp new file mode 100755 index 000000000..e17ba442b --- /dev/null +++ b/polymer/jfaud/src/stdfile.hpp @@ -0,0 +1,27 @@ +#ifndef __stdfile_hpp__ +#define __stdfile_hpp__ + +#include "file.hpp" + +#ifdef DEBUG +#include "log.h" +#endif + +class StdFile : public JFAudFile { + int fh; +#ifdef DEBUG + char fn[32]; +#endif + +public: + StdFile(const char *filename, const char *subfilename = (const char*)0); + virtual ~StdFile(); + virtual bool IsOpen(void) const; + + virtual long Read(long nbytes, void *buf); + virtual long Seek(long pos, SeekFrom where); + virtual long Tell(void) const; + virtual long Length(void) const; +}; + +#endif diff --git a/polymer/jfaud/src/watcomhax/cerrno b/polymer/jfaud/src/watcomhax/cerrno new file mode 100755 index 000000000..edcc29d2c --- /dev/null +++ b/polymer/jfaud/src/watcomhax/cerrno @@ -0,0 +1 @@ +#include diff --git a/polymer/jfaud/src/watcomhax/cmath b/polymer/jfaud/src/watcomhax/cmath new file mode 100755 index 000000000..1c27225af --- /dev/null +++ b/polymer/jfaud/src/watcomhax/cmath @@ -0,0 +1 @@ +#include diff --git a/polymer/jfaud/src/watcomhax/cstdarg b/polymer/jfaud/src/watcomhax/cstdarg new file mode 100755 index 000000000..8942a2e77 --- /dev/null +++ b/polymer/jfaud/src/watcomhax/cstdarg @@ -0,0 +1 @@ +#include diff --git a/polymer/jfaud/src/watcomhax/cstdio b/polymer/jfaud/src/watcomhax/cstdio new file mode 100755 index 000000000..bfcdbf0e9 --- /dev/null +++ b/polymer/jfaud/src/watcomhax/cstdio @@ -0,0 +1 @@ +#include diff --git a/polymer/jfaud/src/watcomhax/cstdlib b/polymer/jfaud/src/watcomhax/cstdlib new file mode 100755 index 000000000..9ada8e59c --- /dev/null +++ b/polymer/jfaud/src/watcomhax/cstdlib @@ -0,0 +1 @@ +#include diff --git a/polymer/jfaud/src/watcomhax/cstring b/polymer/jfaud/src/watcomhax/cstring new file mode 100755 index 000000000..8e69c1fc0 --- /dev/null +++ b/polymer/jfaud/src/watcomhax/cstring @@ -0,0 +1 @@ +#include diff --git a/polymer/jfaud/src/watcomhax/ctime b/polymer/jfaud/src/watcomhax/ctime new file mode 100755 index 000000000..23b073712 --- /dev/null +++ b/polymer/jfaud/src/watcomhax/ctime @@ -0,0 +1 @@ +#include diff --git a/polymer/jfaud/src/waveformfile.cpp b/polymer/jfaud/src/waveformfile.cpp new file mode 100755 index 000000000..2565c353d --- /dev/null +++ b/polymer/jfaud/src/waveformfile.cpp @@ -0,0 +1,146 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdio" +#else +# include +#endif + +#include "log.h" +#include "soundfile.hpp" +#include "waveformfile.hpp" + +#include "waveformfile_riffwave.hpp" +#include "waveformfile_aiff.hpp" +#include "waveformfile_voc.hpp" +#include "waveformfile_au.hpp" +#include "waveformfile_oggvorbis.hpp" +#include "waveformfile_flac.hpp" +#include "waveformfile_mpeg.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +static int init = 0; + +bool InitialiseWaveformReaders(void) +{ + int i; + SoundFile::InitState r; + const char *name; + + if (init > 0) return true; + + _JFAud_LogMsg("Supported waveform formats:\n"); + for (i=WaveformFile::FORMAT_FIRST; i<=WaveformFile::FORMAT_LAST; i++) { + switch (i) { + case WaveformFile::FORMAT_RAW: /*r = WaveformFile_Raw::Init();*/ continue; + case WaveformFile::FORMAT_RIFFWAV: + r = WaveformFile_RiffWave::Init(); + name = WaveformFile_RiffWave::GetClassFormatName(); + break; + case WaveformFile::FORMAT_AIFF: + r = WaveformFile_Aiff::Init(); + name = WaveformFile_Aiff::GetClassFormatName(); + break; + case WaveformFile::FORMAT_VOC: + r = WaveformFile_Voc::Init(); + name = WaveformFile_Voc::GetClassFormatName(); + break; + case WaveformFile::FORMAT_AU: + r = WaveformFile_Au::Init(); + name = WaveformFile_Au::GetClassFormatName(); + break; +#if USEVORBIS + case WaveformFile::FORMAT_OGGVORBIS: + r = WaveformFile_OggVorbis::Init(); + name = WaveformFile_OggVorbis::GetClassFormatName(); + break; +#endif +#if USEFLAC + case WaveformFile::FORMAT_FLAC: + r = WaveformFile_Flac::Init(); + name = WaveformFile_Flac::GetClassFormatName(); + break; +#endif +#if USEMPADEC + case WaveformFile::FORMAT_MPEG: + r = WaveformFile_Mpeg::Init(); + name = WaveformFile_Mpeg::GetClassFormatName(); + break; +#endif + default: continue; + } + + switch (r) { + case SoundFile::InitFailed: return false; + case SoundFile::InitOK: _JFAud_LogMsg(" %s\n", name); break; + case SoundFile::InitDisabled: _JFAud_LogMsg(" %s (disabled)\n", name); break; + } + } + init++; + return true; +} + +void UninitialiseWaveformReaders(void) +{ + int i; + + if (init <= 0) return; + + for (i=WaveformFile::FORMAT_FIRST; i<=WaveformFile::FORMAT_LAST; i++) { + switch (i) { + case WaveformFile::FORMAT_RAW: /*WaveformFile_Raw::Uninit();*/ continue; + case WaveformFile::FORMAT_RIFFWAV: WaveformFile_RiffWave::Uninit(); break; + case WaveformFile::FORMAT_AIFF: WaveformFile_Aiff::Uninit(); break; + case WaveformFile::FORMAT_VOC: WaveformFile_Voc::Uninit(); break; + case WaveformFile::FORMAT_AU: WaveformFile_Au::Uninit(); break; +#if USEVORBIS + case WaveformFile::FORMAT_OGGVORBIS: WaveformFile_OggVorbis::Uninit(); break; +#endif +#if USEFLAC + case WaveformFile::FORMAT_FLAC: WaveformFile_Flac::Uninit(); break; +#endif +#if USEMPADEC + case WaveformFile::FORMAT_MPEG: WaveformFile_Mpeg::Uninit(); break; +#endif + default: continue; + } + } + init--; +} + +WaveformFile *IdentifyWaveformFile(JFAudFile *fh) +{ + int i; + WaveformFile *sfile; + for (i=WaveformFile::FORMAT_FIRST; i<=WaveformFile::FORMAT_LAST; i++) { + switch (i) { + case WaveformFile::FORMAT_RAW: continue; + case WaveformFile::FORMAT_RIFFWAV: sfile = new WaveformFile_RiffWave(fh); break; + case WaveformFile::FORMAT_AIFF: sfile = new WaveformFile_Aiff(fh); break; + case WaveformFile::FORMAT_VOC: sfile = new WaveformFile_Voc(fh); break; + case WaveformFile::FORMAT_AU: sfile = new WaveformFile_Au(fh); break; +#if USEVORBIS + case WaveformFile::FORMAT_OGGVORBIS: sfile = new WaveformFile_OggVorbis(fh); break; +#endif +#if USEFLAC + case WaveformFile::FORMAT_FLAC: sfile = new WaveformFile_Flac(fh); break; +#endif +#if USEMPADEC + case WaveformFile::FORMAT_MPEG: sfile = new WaveformFile_Mpeg(fh); break; +#endif + default: continue; + } + + if (!sfile) return NULL; + if (!sfile->IsValid()) delete sfile; + else if (!sfile->IsUsable()) { + delete sfile; + return NULL; + } else return sfile; + } + return NULL; +} + diff --git a/polymer/jfaud/src/waveformfile_aiff.cpp b/polymer/jfaud/src/waveformfile_aiff.cpp new file mode 100755 index 000000000..bee7fba03 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_aiff.cpp @@ -0,0 +1,187 @@ +#define JFAUD_INTERNAL +// format description: http://www.borg.com/~jglatt/tech/aiff.htm + +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +#else +# include +#endif + +#include "log.h" +#include "waveformfile_aiff.hpp" +#include "pcmbuffer.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +//{{{ Private methods +bool WaveformFile_Aiff::ReadChunkHead(char type[4], int *len) +{ + if (fh->Read(4, type) != 4 || !fh->ReadLong(len, true)) + return false; + return true; +} + +bool WaveformFile_Aiff::FindChunk(const char *type, int *start, int *len) +{ + char id[4]; + + fh->Seek(4+4+4, JFAudFile::Set); + + while (ReadChunkHead(id,len)) { + if (id[0] == type[0] && id[1] == type[1] && id[2] == type[2] && id[3] == type[3]) { + *start = fh->Tell(); + return true; + } + + fh->Seek(*len, JFAudFile::Cur); + } + + *start = *len = -1; + + return false; +} + +int WaveformFile_Aiff::LoadSamples(PcmBuffer *buf, bool loop) +{ + int bytes; + unsigned int totalbytes = buf->GetMaxSamples() * buf->GetBlockSize(), readbytes = 0; + char *sp = (char*)buf->GetData(); + bool breakloop = false; + + while (totalbytes > 0) { + bytes = datalen - datapos; + if (bytes > totalbytes) bytes = totalbytes; + + bytes = fh->Read(bytes, sp); + + if (bytes < 0) return -1; // read failure + else if (bytes == 0) { + if (loop) { + if (breakloop) break; // to prevent endless loops + + fh->Seek(datastart, JFAudFile::Set); + datapos = 0; + breakloop = true; + } else { + break; + } + } else { + sp += bytes; + datapos += bytes; + readbytes += bytes; + totalbytes -= bytes; + breakloop = false; + } + } + + // AIFF uses signed chars, but we use unsigned + if (readbytes > 0 && buf->GetBytesPerSample() == 1) { + unsigned char *spp = (unsigned char*)buf->GetData(); + for (bytes=0; bytes 0 && buf->GetBytesPerSample() == 2) { + unsigned short *spp = (unsigned short *)buf->GetData(); + for (bytes=0; bytesSetNumSamples(readbytes / buf->GetBlockSize()); + + return 0; +} + +// courtesy of Ken Silverman +int WaveformFile_Aiff::tbyte2int_bigendian(unsigned char *t) +{ + int i; + uint64_t q; + for(i=0,q=0;i<8;i++) q = (q<<8)+t[i+2]; + return((int)(q>>(16446-(t[0]<<8)-t[1]))); +} +//}}} + +//{{{ Public methods +WaveformFile_Aiff::WaveformFile_Aiff(JFAudFile *tfh) + : isvalid(false), isusable(false), WaveformFile(), fh(NULL), + samplerate(-1), channels(-1), bytespersample(-1), + datastart(-1), datalen(-1), datapos(-1) +{ + int l,len; + char id[10]; + short s; + + if (!tfh) return; + + fh = tfh; + fh->Rewind(); + + if (!ReadChunkHead(id,&len)) return; + if (id[0] != 'F' || id[1] != 'O' || id[2] != 'R' || id[3] != 'M') return; + if (fh->Read(4, id) != 4) return; + if (id[0] != 'A' || id[1] != 'I' || id[2] != 'F' || id[3] != 'F') return; + isvalid = true; + + // read the format chunk + if (!FindChunk("COMM",&l,&len) || len < (2+4+2+10)) return; + if (!fh->ReadShort(&s, true)) return; else channels = s; + if (!fh->ReadLong(&l, true)) return; // skip numsampleframes + if (!fh->ReadShort(&s, true) || (s != 8 && s != 16)) return; else bytespersample = s/8; + if (fh->Read(10, id) != 10) return; else samplerate = tbyte2int_bigendian((unsigned char *)id); + + // locate the data chunk and keep its properties + if (!FindChunk("SSND",(int*)&datastart,(int*)&datalen)) return; + if (datastart < 0 || datalen < 0) return; + + if (!fh->ReadLong(&l, true)) return; // read offset + datalen -= 4+4 + l; + datastart += 4+4 + l; + fh->Seek(datastart, JFAudFile::Cur); + + datapos = 0; + + isusable = true; +} + +WaveformFile_Aiff::~WaveformFile_Aiff() +{ + // We're responsible for deleting the file handle if we acknowledged the file as being + // one of our own and it was usable by us in the constructor. Otherwise, the caller of + // the constructor cleans up the file handle. + if (fh && isvalid && isusable) delete fh; +} + +PcmBuffer *WaveformFile_Aiff::ReadSamples(unsigned int nsamps, bool loop) +{ + PcmBuffer *buf; + + if (!isvalid) return NULL; + + buf = new PcmBuffer(); + if (!buf) return NULL; + + if (nsamps == 0) { + nsamps = TotalSamples(); + loop = false; + } + + if (!buf->Allocate(nsamps, samplerate, channels, bytespersample) || + LoadSamples(buf, loop) < 0 || + buf->GetNumSamples() == 0) { + delete buf; + return NULL; + } + + return buf; +} +//}}} + +// vim:fdm=marker: + diff --git a/polymer/jfaud/src/waveformfile_aiff.hpp b/polymer/jfaud/src/waveformfile_aiff.hpp new file mode 100755 index 000000000..ddd4f7724 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_aiff.hpp @@ -0,0 +1,44 @@ +#ifndef __waveformfile_aiff_hpp__ +#define __waveformfile_aiff_hpp__ + +#include "waveformfile.hpp" + +class WaveformFile_Aiff : public WaveformFile { +private: + JFAudFile *fh; + bool isvalid, isusable; + + int samplerate; + int channels; + int bytespersample; + + int datastart, datalen, datapos; + + bool ReadChunkHead(char type[4], int *len); + bool FindChunk(const char *type, int *start, int *len); + int tbyte2int_bigendian(unsigned char *t); + unsigned int TotalSamples() const { return datalen / (channels*bytespersample); } + int LoadSamples(PcmBuffer *buf, bool loop); + +public: + WaveformFile_Aiff(JFAudFile *); + virtual ~WaveformFile_Aiff(); + virtual bool IsValid() const { return isvalid; } + virtual bool IsUsable() const { return isusable; } + + static InitState Init() { return InitOK; } + static bool Uninit() { return true; } + + // these static versions retrieve the identifiers for this particular class + static Format GetClassFormat() { return FORMAT_AIFF; } + static const char *GetClassFormatName() { return "AIFF"; } + // these virtual versions return the identifier based on whether the file is valid or not + virtual Format GetFormat() const { return isvalid ? FORMAT_AIFF : FORMAT_UNKNOWN; } + virtual const char *GetFormatName() const { return isvalid ? "AIFF" : NULL; } + + virtual PcmBuffer *ReadSamples(unsigned int nsamps = 0, bool loop = false); + virtual float GetPlayTime(void) const { return isvalid ? (float)TotalSamples() / (float)samplerate : 0.0; } + virtual unsigned int GetPCMLength(void) const { return !isvalid ? 0 : TotalSamples(); } +}; + +#endif diff --git a/polymer/jfaud/src/waveformfile_au.cpp b/polymer/jfaud/src/waveformfile_au.cpp new file mode 100755 index 000000000..07ea0bc86 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_au.cpp @@ -0,0 +1,142 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +#else +# include +#endif + +#include "log.h" +#include "waveformfile_au.hpp" +#include "pcmbuffer.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +//{{{ Private methods +int WaveformFile_Au::LoadSamples(PcmBuffer *buf, bool loop) +{ + int bytes; + unsigned int totalbytes = buf->GetMaxSamples() * buf->GetBlockSize(), readbytes = 0; + char *sp = (char*)buf->GetData(); + bool breakloop = false; + + while (totalbytes > 0) { + bytes = datalen - datapos; + if (bytes > totalbytes) bytes = totalbytes; + + bytes = fh->Read(bytes, sp); + + if (bytes < 0) return -1; // read failure + else if (bytes == 0) { + if (loop) { + if (breakloop) break; // to prevent endless loops + + fh->Seek(datastart, JFAudFile::Set); + datapos = 0; + breakloop = true; + } else { + break; + } + } else { + sp += bytes; + datapos += bytes; + readbytes += bytes; + totalbytes -= bytes; + breakloop = false; + } + } + +#if B_BIG_ENDIAN != 1 + if (readbytes > 0 && buf->GetBytesPerSample() == 2) { + unsigned short *spp = (unsigned short *)buf->GetData(); + for (bytes=0; bytesSetNumSamples(readbytes / buf->GetBlockSize()); + + return 0; +} +//}}} + +//{{{ Public methods +WaveformFile_Au::WaveformFile_Au(JFAudFile *tfh) + : isvalid(false), isusable(false), WaveformFile(), fh(NULL), + samplerate(-1), channels(-1), bytespersample(-1), + datastart(-1), datalen(-1), datapos(-1) +{ + char id[4]; + + int l; + long len; + short s; + + if (!tfh) return; + + len = tfh->Seek(0, JFAudFile::End); + tfh->Rewind(); + + if (tfh->Read(4, id) != 4) return; + if (id[0] != '.' || id[1] != 's' || id[2] != 'n' || id[3] != 'd') return; + isvalid = true; // passed the magic test, so we're dealing with a .snd file + // now see whether the contents are acceptable to us + + if (!tfh->ReadLong(&l, true) || l < 24) return; else datastart = l; + if (!tfh->ReadLong(&l, true)) return; else datalen = l; + if (datalen < 0 || len-datastart < datalen) datalen = len-datastart; + if (datalen < 0) return; + if (!tfh->ReadLong(&l, true)) return; + switch (l) { + case fmt_pcm8: bytespersample = 1; break; + case fmt_pcm16: bytespersample = 2; break; + default: return; + } + if (!tfh->ReadLong(&l, true)) return; else samplerate = l; + if (!tfh->ReadLong(&l, true) || (l != 1 && l != 2)) return; else channels = l; + + tfh->Seek(datastart, JFAudFile::Set); + + fh = tfh; + isusable = true; // file passed all the tests, so we can play it +} + +WaveformFile_Au::~WaveformFile_Au() +{ + // We're responsible for deleting the file handle if we acknowledged the file as being + // one of our own and it was usable by us in the constructor. Otherwise, the caller of + // the constructor cleans up the file handle. + if (fh && isvalid && isusable) delete fh; +} + +PcmBuffer *WaveformFile_Au::ReadSamples(unsigned int nsamps, bool loop) +{ + PcmBuffer *buf; + + if (!isvalid) return NULL; + + buf = new PcmBuffer(); + if (!buf) return NULL; + + if (nsamps == 0) { + nsamps = TotalSamples(); + loop = false; + } + + if (!buf->Allocate(nsamps, samplerate, channels, bytespersample) || + LoadSamples(buf, loop) < 0 || + buf->GetNumSamples() == 0) { + delete buf; + return NULL; + } + + return buf; +} +//}}} + +// vim:fdm=marker: + diff --git a/polymer/jfaud/src/waveformfile_au.hpp b/polymer/jfaud/src/waveformfile_au.hpp new file mode 100755 index 000000000..96e7b7bd2 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_au.hpp @@ -0,0 +1,50 @@ +#ifndef __waveformfile_au_hpp__ +#define __waveformfile_au_hpp__ + +#include "waveformfile.hpp" + +class WaveformFile_Au : public WaveformFile { +private: + JFAudFile *fh; + bool isvalid, isusable; + + int samplerate; + int channels; + int bytespersample; + + long datastart, datalen, datapos; + + enum { + fmt_pcm8 = 2, + fmt_pcm16 = 3, + fmt_pcm24 = 4, + fmt_pcm32 = 5, + fmt_ieee32 = 6, + fmt_ieee64 = 7 + }; + + unsigned int TotalSamples() const { return datalen / (channels*bytespersample); } + int LoadSamples(PcmBuffer *buf, bool loop); + +public: + WaveformFile_Au(JFAudFile *); + virtual ~WaveformFile_Au(); + virtual bool IsValid() const { return isvalid; } + virtual bool IsUsable() const { return isusable; } + + static InitState Init() { return InitOK; } + static bool Uninit() { return true; } + + // these static versions retrieve the identifiers for this particular class + static Format GetClassFormat() { return FORMAT_AU; } + static const char *GetClassFormatName() { return "Sun AU"; } + // these virtual versions return the identifier based on whether the file is valid or not + virtual Format GetFormat() const { return isvalid ? FORMAT_AU : FORMAT_UNKNOWN; } + virtual const char *GetFormatName() const { return isvalid ? "Sun AU" : NULL; } + + virtual PcmBuffer *ReadSamples(unsigned int nsamps = 0, bool loop = false); + virtual float GetPlayTime(void) const { return isvalid ? (float)TotalSamples() / (float)samplerate : 0.0; } + virtual unsigned int GetPCMLength(void) const { return !isvalid ? 0 : TotalSamples(); } +}; + +#endif diff --git a/polymer/jfaud/src/waveformfile_flac.cpp b/polymer/jfaud/src/waveformfile_flac.cpp new file mode 100755 index 000000000..b875bceea --- /dev/null +++ b/polymer/jfaud/src/waveformfile_flac.cpp @@ -0,0 +1,385 @@ +#define JFAUD_INTERNAL +#if USEFLAC + +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +# include "watcomhax/cstring" +#else +# include +# include +#endif + +#include "log.h" +#include "waveformfile_flac.hpp" +#include "pcmbuffer.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +#if !LINKFLAC +#include "dynlib.hpp" +#define GETDLSYM(sym,sig) if (( libsyms.sym = (sig) lib->Get( (const char *)#sym )) == NULL) return getdlsymerr( #sym ) +static bool getdlsymerr(const char *sym) { _JFAud_LogMsg(" Symbol %s not found. FLAC disabled.\n", sym); return false; } +static DynamicLibrary *lib = NULL; +static int refcount = 0; + +static struct { + FLAC__SeekableStreamDecoder *(*FLAC__seekable_stream_decoder_new)(); + void (*FLAC__seekable_stream_decoder_delete)(FLAC__SeekableStreamDecoder *decoder); + FLAC__bool (*FLAC__seekable_stream_decoder_set_client_data)(FLAC__SeekableStreamDecoder *decoder, void *value); + FLAC__bool (*FLAC__seekable_stream_decoder_set_read_callback)(FLAC__SeekableStreamDecoder *decoder, FLAC__SeekableStreamDecoderReadCallback value); + FLAC__bool (*FLAC__seekable_stream_decoder_set_write_callback)(FLAC__SeekableStreamDecoder *decoder, FLAC__SeekableStreamDecoderWriteCallback value); + FLAC__bool (*FLAC__seekable_stream_decoder_set_seek_callback)(FLAC__SeekableStreamDecoder *decoder, FLAC__SeekableStreamDecoderSeekCallback value); + FLAC__bool (*FLAC__seekable_stream_decoder_set_tell_callback)(FLAC__SeekableStreamDecoder *decoder, FLAC__SeekableStreamDecoderTellCallback value); + FLAC__bool (*FLAC__seekable_stream_decoder_set_length_callback)(FLAC__SeekableStreamDecoder *decoder, FLAC__SeekableStreamDecoderLengthCallback value); + FLAC__bool (*FLAC__seekable_stream_decoder_set_eof_callback)(FLAC__SeekableStreamDecoder *decoder, FLAC__SeekableStreamDecoderEofCallback value); + FLAC__bool (*FLAC__seekable_stream_decoder_set_metadata_callback)(FLAC__SeekableStreamDecoder *decoder, FLAC__SeekableStreamDecoderMetadataCallback value); + FLAC__bool (*FLAC__seekable_stream_decoder_set_error_callback)(FLAC__SeekableStreamDecoder *decoder, FLAC__SeekableStreamDecoderErrorCallback value); + FLAC__SeekableStreamDecoderState (*FLAC__seekable_stream_decoder_init)(FLAC__SeekableStreamDecoder *decoder); + FLAC__bool (*FLAC__seekable_stream_decoder_finish)(FLAC__SeekableStreamDecoder *decoder); + FLAC__SeekableStreamDecoderState (*FLAC__seekable_stream_decoder_get_state)(const FLAC__SeekableStreamDecoder *decoder); + const char *(*FLAC__seekable_stream_decoder_get_resolved_state_string)(const FLAC__SeekableStreamDecoder *decoder); + FLAC__bool (*FLAC__seekable_stream_decoder_process_single)(FLAC__SeekableStreamDecoder *decoder); + FLAC__bool (*FLAC__seekable_stream_decoder_process_until_end_of_metadata)(FLAC__SeekableStreamDecoder *decoder); + FLAC__bool (*FLAC__seekable_stream_decoder_seek_absolute)(FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 sample); + + const char * const *FLAC__SeekableStreamDecoderStateString; +} libsyms; + +static bool getallsyms() +{ + GETDLSYM(FLAC__seekable_stream_decoder_new, FLAC__SeekableStreamDecoder *(*)()); + GETDLSYM(FLAC__seekable_stream_decoder_delete, void (*)(FLAC__SeekableStreamDecoder *)); + GETDLSYM(FLAC__seekable_stream_decoder_set_client_data, FLAC__bool (*)(FLAC__SeekableStreamDecoder *,void *)); + GETDLSYM(FLAC__seekable_stream_decoder_set_read_callback, FLAC__bool (*)(FLAC__SeekableStreamDecoder *,FLAC__SeekableStreamDecoderReadCallback)); + GETDLSYM(FLAC__seekable_stream_decoder_set_write_callback, FLAC__bool (*)(FLAC__SeekableStreamDecoder *,FLAC__SeekableStreamDecoderWriteCallback)); + GETDLSYM(FLAC__seekable_stream_decoder_set_seek_callback, FLAC__bool (*)(FLAC__SeekableStreamDecoder *,FLAC__SeekableStreamDecoderSeekCallback)); + GETDLSYM(FLAC__seekable_stream_decoder_set_tell_callback, FLAC__bool (*)(FLAC__SeekableStreamDecoder *,FLAC__SeekableStreamDecoderTellCallback)); + GETDLSYM(FLAC__seekable_stream_decoder_set_length_callback, FLAC__bool (*)(FLAC__SeekableStreamDecoder *,FLAC__SeekableStreamDecoderLengthCallback)); + GETDLSYM(FLAC__seekable_stream_decoder_set_eof_callback, FLAC__bool (*)(FLAC__SeekableStreamDecoder *,FLAC__SeekableStreamDecoderEofCallback)); + GETDLSYM(FLAC__seekable_stream_decoder_set_metadata_callback, FLAC__bool (*)(FLAC__SeekableStreamDecoder *,FLAC__SeekableStreamDecoderMetadataCallback)); + GETDLSYM(FLAC__seekable_stream_decoder_set_error_callback, FLAC__bool (*)(FLAC__SeekableStreamDecoder *,FLAC__SeekableStreamDecoderErrorCallback)); + GETDLSYM(FLAC__seekable_stream_decoder_init, FLAC__SeekableStreamDecoderState (*)(FLAC__SeekableStreamDecoder *)); + GETDLSYM(FLAC__seekable_stream_decoder_finish, FLAC__bool (*)(FLAC__SeekableStreamDecoder *)); + GETDLSYM(FLAC__seekable_stream_decoder_get_state, FLAC__SeekableStreamDecoderState (*)(const FLAC__SeekableStreamDecoder *)); + GETDLSYM(FLAC__seekable_stream_decoder_get_resolved_state_string, const char *(*)(const FLAC__SeekableStreamDecoder *)); + GETDLSYM(FLAC__seekable_stream_decoder_process_single, FLAC__bool (*)(FLAC__SeekableStreamDecoder *)); + GETDLSYM(FLAC__seekable_stream_decoder_process_until_end_of_metadata, FLAC__bool (*)(FLAC__SeekableStreamDecoder *)); + GETDLSYM(FLAC__seekable_stream_decoder_seek_absolute, FLAC__bool (*)(FLAC__SeekableStreamDecoder *, FLAC__uint64)); + GETDLSYM(FLAC__SeekableStreamDecoderStateString, const char * const *); + return true; +} + +#define FLAC__seekable_stream_decoder_new libsyms.FLAC__seekable_stream_decoder_new +#define FLAC__seekable_stream_decoder_delete libsyms.FLAC__seekable_stream_decoder_delete +#define FLAC__seekable_stream_decoder_set_client_data libsyms.FLAC__seekable_stream_decoder_set_client_data +#define FLAC__seekable_stream_decoder_set_read_callback libsyms.FLAC__seekable_stream_decoder_set_read_callback +#define FLAC__seekable_stream_decoder_set_write_callback libsyms.FLAC__seekable_stream_decoder_set_write_callback +#define FLAC__seekable_stream_decoder_set_seek_callback libsyms.FLAC__seekable_stream_decoder_set_seek_callback +#define FLAC__seekable_stream_decoder_set_tell_callback libsyms.FLAC__seekable_stream_decoder_set_tell_callback +#define FLAC__seekable_stream_decoder_set_length_callback libsyms.FLAC__seekable_stream_decoder_set_length_callback +#define FLAC__seekable_stream_decoder_set_eof_callback libsyms.FLAC__seekable_stream_decoder_set_eof_callback +#define FLAC__seekable_stream_decoder_set_metadata_callback libsyms.FLAC__seekable_stream_decoder_set_metadata_callback +#define FLAC__seekable_stream_decoder_set_error_callback libsyms.FLAC__seekable_stream_decoder_set_error_callback +#define FLAC__seekable_stream_decoder_init libsyms.FLAC__seekable_stream_decoder_init +#define FLAC__seekable_stream_decoder_finish libsyms.FLAC__seekable_stream_decoder_finish +#define FLAC__seekable_stream_decoder_get_state libsyms.FLAC__seekable_stream_decoder_get_state +#define FLAC__seekable_stream_decoder_get_resolved_state_string libsyms.FLAC__seekable_stream_decoder_get_resolved_state_string +#define FLAC__seekable_stream_decoder_process_single libsyms.FLAC__seekable_stream_decoder_process_single +#define FLAC__seekable_stream_decoder_process_until_end_of_metadata libsyms.FLAC__seekable_stream_decoder_process_until_end_of_metadata +#define FLAC__seekable_stream_decoder_seek_absolute libsyms.FLAC__seekable_stream_decoder_seek_absolute +#define FLAC__SeekableStreamDecoderStateString libsyms.FLAC__SeekableStreamDecoderStateString + +#endif + +//{{{ Callbacks +FLAC__SeekableStreamDecoderReadStatus WaveformFile_Flac::readCb( + const FLAC__SeekableStreamDecoder *decoder, + FLAC__byte buffer[], unsigned *bytes, void *client_data) +{ + WaveformFile_Flac *file = (WaveformFile_Flac *)client_data; + int rb; + + rb = file->fh->Read(*bytes, buffer); + if (rb < 0) return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_ERROR; + + *bytes = (unsigned)rb; + + return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK; +} + +FLAC__StreamDecoderWriteStatus WaveformFile_Flac::writeCb( + const FLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, + const FLAC__int32 *const buffer[], void *client_data) +{ + WaveformFile_Flac *file = (WaveformFile_Flac *)client_data; + unsigned i,j; + short *p; + + /* + file->samplerate = frame->header.sample_rate; + file->channels = frame->header.channels; + file->blocksize = (int)frame->header.channels * 2; + */ + file->pcmleft = (int)frame->header.blocksize; + if (file->pcmalloc < file->pcmleft) { + p = (short *)realloc(file->pcm, file->pcmleft * file->blocksize); + if (!p) { + file->pcmleft = 0; + return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT; + } + file->pcm = p; + file->pcmalloc = file->pcmleft; + } else p = file->pcm; + for (i = 0; i < frame->header.blocksize; i++) + for (j = 0; j < frame->header.channels; j++) + *(p++) = buffer[j][i];// >> 16; + + return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; +} + +FLAC__SeekableStreamDecoderSeekStatus WaveformFile_Flac::seekCb( + const FLAC__SeekableStreamDecoder *decoder, + FLAC__uint64 absolute_byte_offset, void *client_data) +{ + WaveformFile_Flac *file = (WaveformFile_Flac *)client_data; + + if (file->fh->Seek((int)absolute_byte_offset, JFAudFile::Set) < 0) + return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR; + + return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK; +} + +FLAC__SeekableStreamDecoderTellStatus WaveformFile_Flac::tellCb( + const FLAC__SeekableStreamDecoder *decoder, + FLAC__uint64 *absolute_byte_offset, void *client_data) +{ + WaveformFile_Flac *file = (WaveformFile_Flac *)client_data; + int rb; + + rb = file->fh->Tell(); + if (rb < 0) return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_ERROR; + + *absolute_byte_offset = (FLAC__uint64)rb; + return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK; +} + +FLAC__SeekableStreamDecoderLengthStatus WaveformFile_Flac::lengthCb( + const FLAC__SeekableStreamDecoder *decoder, + FLAC__uint64 *stream_length, void *client_data) +{ + WaveformFile_Flac *file = (WaveformFile_Flac *)client_data; + + *stream_length = file->filelen; + return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK; +} + +FLAC__bool WaveformFile_Flac::eofCb( + const FLAC__SeekableStreamDecoder *decoder, void *client_data) +{ + WaveformFile_Flac *file = (WaveformFile_Flac *)client_data; + int rb; + + rb = file->fh->Tell(); + if (rb < 0) return 1; + + return ((FLAC__uint64)rb >= file->filelen); + +} + +void WaveformFile_Flac::metadataCb( + const FLAC__SeekableStreamDecoder *decoder, + const FLAC__StreamMetadata *metadata, void *client_data) +{ + WaveformFile_Flac *file = (WaveformFile_Flac *)client_data; + switch (metadata->type) { + case FLAC__METADATA_TYPE_STREAMINFO: + file->samplerate = metadata->data.stream_info.sample_rate; + file->channels = metadata->data.stream_info.channels; + file->pcmlen = metadata->data.stream_info.total_samples;; + file->blocksize = file->channels * 2; + break; + default: break; + } +} + +void WaveformFile_Flac::errorCb(const FLAC__SeekableStreamDecoder *decoder, + FLAC__StreamDecoderErrorStatus status, void *client_data) +{ + _JFAud_LogMsg("flac error\n"); +} +//}}} + +//{{{ Private methods +int WaveformFile_Flac::LoadSamples(PcmBuffer *buf, bool loop) +{ + int bytes; + unsigned int totalsamples = buf->GetMaxSamples(), readsamples = 0, samps; + char *sp = (char *)buf->GetData(); + + while (totalsamples > 0) { + if (pcmleft == 0) { + if (FLAC__seekable_stream_decoder_get_state(ssd) == + FLAC__SEEKABLE_STREAM_DECODER_END_OF_STREAM) { + if (loop) { + if (!FLAC__seekable_stream_decoder_seek_absolute(ssd, 0)) + break; // failed to seek, so end + continue; + } else break; + } else if (!FLAC__seekable_stream_decoder_process_single(ssd)) + return -1; // failed decoding, so fail + } else { + samps = pcmleft; + if (samps > totalsamples) samps = totalsamples; + + memcpy(sp, pcm, samps * blocksize); + pcmleft -= samps; + if (pcmleft > 0) + memmove(pcm, (char*)pcm + samps * blocksize, pcmleft * blocksize); + sp += samps * blocksize; + readsamples += samps; + totalsamples -= samps; + } + } + + buf->SetNumSamples(readsamples); + + return 0; +} +//}}} + +//{{{ Public methods +WaveformFile_Flac::WaveformFile_Flac(JFAudFile *tfh) + : fh(NULL), isvalid(false), isusable(false), + ssd(NULL), filelen(0), pcmlen(0), + pcmleft(0), pcmalloc(0), pcm(NULL), + samplerate(0), channels(0), blocksize(0) +{ + char sig[4]; + FLAC__SeekableStreamDecoderState ssdstate; + + if (!tfh) return; +#if !LINKFLAC + if (!lib) return; +#endif + fh = tfh; + + filelen = fh->Length(); + fh->Rewind(); + + if (fh->Read(4, sig) != 4) return; + if (sig[0] != 'f' || sig[1] != 'L' || sig[2] != 'a' || sig[3] != 'C') return; + fh->Rewind(); + isvalid = true; + + ssd = FLAC__seekable_stream_decoder_new(); + if (!ssd) return; + + if (!FLAC__seekable_stream_decoder_set_client_data(ssd, (void*)this) || + !FLAC__seekable_stream_decoder_set_read_callback(ssd, readCb) || + !FLAC__seekable_stream_decoder_set_write_callback(ssd, writeCb) || + !FLAC__seekable_stream_decoder_set_seek_callback(ssd, seekCb) || + !FLAC__seekable_stream_decoder_set_tell_callback(ssd, tellCb) || + !FLAC__seekable_stream_decoder_set_length_callback(ssd, lengthCb) || + !FLAC__seekable_stream_decoder_set_eof_callback(ssd, eofCb) || + !FLAC__seekable_stream_decoder_set_metadata_callback(ssd, metadataCb) || + !FLAC__seekable_stream_decoder_set_error_callback(ssd, errorCb)) { + FLAC__seekable_stream_decoder_delete(ssd); + return; + } + + ssdstate = FLAC__seekable_stream_decoder_init(ssd); + if (ssdstate != FLAC__SEEKABLE_STREAM_DECODER_OK) { + _JFAud_LogMsg("flac error = %s\n", FLAC__SeekableStreamDecoderStateString[ssdstate]); + return; + } + + if (!FLAC__seekable_stream_decoder_process_until_end_of_metadata(ssd)) { + _JFAud_LogMsg("flac error = %s",FLAC__seekable_stream_decoder_get_resolved_state_string(ssd)); + return; + } + + isusable = true; +} + +WaveformFile_Flac::~WaveformFile_Flac() +{ + if (ssd) { + FLAC__seekable_stream_decoder_finish(ssd); + FLAC__seekable_stream_decoder_delete(ssd); + } + if (pcm) free(pcm); + + // We're responsible for deleting the file handle if we acknowledged the file as being + // one of our own and it was usable by us in the constructor. Otherwise, the caller of + // the constructor cleans up the file handle. + if (fh && isvalid && isusable) delete fh; +} + +PcmBuffer *WaveformFile_Flac::ReadSamples(unsigned int nsamps, bool loop) +{ + PcmBuffer *buf; + + if (!isusable) return NULL; + + buf = new PcmBuffer(); + if (!buf) return NULL; + + if (nsamps == 0) { + nsamps = (unsigned int)pcmlen; + loop = false; + } + + if (!buf->Allocate(nsamps, samplerate, channels, 2) || + LoadSamples(buf, loop) < 0 || + buf->GetNumSamples() == 0) { + delete buf; + return NULL; + } + + return buf; +} + +SoundFile::InitState WaveformFile_Flac::Init() +{ +#if !LINKFLAC + if (lib) { refcount++; return SoundFile::InitOK; } + + _JFAud_LogMsg("Loading " FLACDL "\n"); + lib = new DynamicLibrary(FLACDL); + if (!lib) return SoundFile::InitDisabled; + if (!lib->IsOpen()) { + delete lib; + lib = NULL; + return SoundFile::InitDisabled; + } + + if (getallsyms()) refcount = 1; + else { + delete lib; + lib = NULL; + return SoundFile::InitDisabled; + } +#endif + return SoundFile::InitOK; +} + +bool WaveformFile_Flac::Uninit() +{ +#if !LINKFLAC + if (refcount > 1) { refcount--; return true; } + if (refcount == 0 || !lib) return false; + refcount = 0; + delete lib; + lib = NULL; +#endif + return true; +} +//}}} + +#endif + +// vim:fdm=marker: + diff --git a/polymer/jfaud/src/waveformfile_flac.hpp b/polymer/jfaud/src/waveformfile_flac.hpp new file mode 100755 index 000000000..6ff89d926 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_flac.hpp @@ -0,0 +1,74 @@ +#ifndef __waveformfile_flac_hpp__ +#define __waveformfile_flac_hpp__ + +// FIXME: not entirely 64bit safe on bloody long files + +#if USEFLAC + +#include "waveformfile.hpp" +#ifdef __APPLE__ +# include +#else +# include "FLAC/seekable_stream_decoder.h" +#endif + +class WaveformFile_Flac : public WaveformFile { +private: + JFAudFile *fh; + bool isvalid, isusable; + + FLAC__SeekableStreamDecoder *ssd; + FLAC__uint64 filelen, pcmlen; + unsigned pcmleft, pcmalloc; + short *pcm; + unsigned samplerate, channels, blocksize; + + int LoadSamples(PcmBuffer *buf, bool loop); + + static FLAC__SeekableStreamDecoderReadStatus readCb( + const FLAC__SeekableStreamDecoder *decoder, + FLAC__byte buffer[], unsigned *bytes, void *client_data); + static FLAC__StreamDecoderWriteStatus writeCb( + const FLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, + const FLAC__int32 *const buffer[], void *client_data); + static FLAC__SeekableStreamDecoderSeekStatus seekCb( + const FLAC__SeekableStreamDecoder *decoder, + FLAC__uint64 absolute_byte_offset, void *client_data); + static FLAC__SeekableStreamDecoderTellStatus tellCb( + const FLAC__SeekableStreamDecoder *decoder, + FLAC__uint64 *absolute_byte_offset, void *client_data); + static FLAC__SeekableStreamDecoderLengthStatus lengthCb( + const FLAC__SeekableStreamDecoder *decoder, + FLAC__uint64 *stream_length, void *client_data); + static FLAC__bool eofCb( + const FLAC__SeekableStreamDecoder *decoder, void *client_data); + static void metadataCb( + const FLAC__SeekableStreamDecoder *decoder, + const FLAC__StreamMetadata *metadata, void *client_data); + static void errorCb(const FLAC__SeekableStreamDecoder *decoder, + FLAC__StreamDecoderErrorStatus status, void *client_data); + +public: + WaveformFile_Flac(JFAudFile *); + virtual ~WaveformFile_Flac(); + virtual bool IsValid() const { return isvalid; } + virtual bool IsUsable() const { return isusable; } + + static InitState Init(); + static bool Uninit(); + + // these static versions retrieve the identifiers for this particular class + static Format GetClassFormat() { return FORMAT_FLAC; } + static const char *GetClassFormatName() { return "FLAC"; } + // these virtual versions return the identifier based on whether the file is valid or not + virtual Format GetFormat() const { return isvalid ? FORMAT_FLAC : FORMAT_UNKNOWN; } + virtual const char *GetFormatName() const { return isvalid ? "FLAC" : NULL; } + + virtual PcmBuffer *ReadSamples(unsigned int nsamps = 0, bool loop = false); + virtual float GetPlayTime(void) const { return isusable ? (float)pcmlen / (float)samplerate : 0.0; } + virtual unsigned int GetPCMLength(void) const { return isusable ? pcmlen : 0; } +}; + +#endif //USEFLAC + +#endif diff --git a/polymer/jfaud/src/waveformfile_mpeg.cpp b/polymer/jfaud/src/waveformfile_mpeg.cpp new file mode 100755 index 000000000..3864b0ed7 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_mpeg.cpp @@ -0,0 +1,389 @@ +#define JFAUD_INTERNAL +#if USEMPADEC + +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +#else +# include +#endif + +#include "log.h" +#include "pcmbuffer.hpp" +#include "waveformfile_mpeg.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +#if !LINKMPADEC +#include "dynlib.hpp" +#define GETDLSYM(sym,sig) if (( libsyms.sym = (sig) lib->Get( (const char *)#sym )) == NULL) return getdlsymerr( #sym ) +static bool getdlsymerr(const char *sym) { _JFAud_LogMsg(" Symbol %s not found. MPEG disabled.\n", sym); return false; } +static DynamicLibrary *lib = NULL; +static int refcount = 0; + +static struct { + mpadec_t (MPADECAPI *mpadec_init)(void); + int (MPADECAPI *mpadec_uninit)(mpadec_t mpadec); + int (MPADECAPI *mpadec_reset)(mpadec_t mpadec); + int (MPADECAPI *mpadec_configure)(mpadec_t mpadec, mpadec_config_t *cfg); + int (MPADECAPI *mpadec_get_info)(mpadec_t mpadec, void *info, int info_type); + int (MPADECAPI *mpadec_decode)(mpadec_t mpadec, uint8_t *srcbuf, uint32_t srcsize, uint8_t *dstbuf, uint32_t dstsize, uint32_t *srcused, uint32_t *dstused); + char * (MPADECAPI *mpadec_error)(int code); +} libsyms; + +static bool getallsyms() +{ + GETDLSYM(mpadec_init, mpadec_t (MPADECAPI *)(void)); + GETDLSYM(mpadec_uninit, int (MPADECAPI *)(mpadec_t)); + GETDLSYM(mpadec_reset, int (MPADECAPI *)(mpadec_t)); + GETDLSYM(mpadec_configure, int (MPADECAPI *)(mpadec_t, mpadec_config_t *)); + GETDLSYM(mpadec_get_info, int (MPADECAPI *)(mpadec_t, void *, int)); + GETDLSYM(mpadec_decode, int (MPADECAPI *)(mpadec_t, uint8_t *, uint32_t, uint8_t *, uint32_t, uint32_t *, uint32_t *)); + GETDLSYM(mpadec_error, char * (MPADECAPI *)(int)); + return true; +} + +#define mpadec_init libsyms.mpadec_init +#define mpadec_uninit libsyms.mpadec_uninit +#define mpadec_reset libsyms.mpadec_reset +#define mpadec_configure libsyms.mpadec_configure +#define mpadec_get_info libsyms.mpadec_get_info +#define mpadec_decode libsyms.mpadec_decode +#define mpadec_error libsyms.mpadec_error + +#endif + +//{{{ Private methods +int WaveformFile_Mpeg::InitDecoder(JFAudFile *fh) +{ + int r, i; + uint32_t siz, inpos; + + mpadec_config_t conf = { + MPADEC_CONFIG_FULL_QUALITY, MPADEC_CONFIG_AUTO, MPADEC_CONFIG_16BIT, + B_BIG_ENDIAN ? MPADEC_CONFIG_BIG_ENDIAN : MPADEC_CONFIG_LITTLE_ENDIAN, + MPADEC_CONFIG_REPLAYGAIN_NONE, 1, 1, 1, 0.0 + }; + + mpa = mpadec_init(); + if (!mpa) return Error; + + if ((r = mpadec_configure(mpa, &conf)) != MPADEC_RETCODE_OK) { + _JFAud_LogMsg("mpadec_configure error: %s\n",mpadec_error(r)); + return Error; + } + + // set up + insiz = inpos = 0; + outsiz = outpos = 0; + streamoffs = streamlen = streampos = 0; + + streamlen = fh->Seek(0,JFAudFile::End); + fh->Rewind(); + + // check for an ID3v2 tag + r = fh->Read(min(10,streamlen), inbuf); + if (r < 0) return Error; + if (r < 4) return NotMpeg; + + if (r == 10 && + inbuf[0] == 'I' && inbuf[1] == 'D' && inbuf[2] == '3' && // magic number + inbuf[3] < 255 && inbuf[4] < 255 && // version + inbuf[6] < 128 && inbuf[7] < 128 && inbuf[8] < 128 && inbuf[9] < 128 // size + ) { + // ID3v2 was found, so work out how big it is to skip it + streamoffs = (int)inbuf[6] << 21; + streamoffs |= (int)inbuf[7] << 14; + streamoffs |= (int)inbuf[8] << 7; + streamoffs |= (int)inbuf[9]; + if (inbuf[5] & 16) streamoffs += 10; // footer + streamoffs += 10; // length of id3v2 header + + fh->Seek(streamoffs,JFAudFile::Set); + streampos = 0; + streamlen -= streamoffs; + insiz = 0; + } else { + // no tag, so the ten bytes we read are probably audio data + insiz = streampos = r; + } + + // top up the input buffer + r = fh->Read(sizeof(inbuf) - insiz, inbuf + insiz); + if (r < 0) return Error; + insiz += r; + streampos += r; + if (insiz < 4) return NotMpeg; + + if ((r = mpadec_reset(mpa)) != MPADEC_RETCODE_OK) { + _JFAud_LogMsg("mpadec_reset error: %s\n",mpadec_error(r)); + return Error; + } + + // decode the header + r = mpadec_decode(mpa, inbuf, insiz, NULL, 0, &inpos, NULL); + if (r != MPADEC_RETCODE_OK) { + _JFAud_LogMsg("mpadec_decode error: %s\n",mpadec_error(r)); + return NotMpeg; + } + + if (inpos > 0) { + insiz -= inpos; + memmove(inbuf, inbuf + inpos, insiz); + } + + // fetch stream format info and any xing/lame tags + if ((r = mpadec_get_info(mpa, &streaminfo, MPADEC_INFO_STREAM)) != MPADEC_RETCODE_OK || + (r = mpadec_get_info(mpa, &taginfo, MPADEC_INFO_TAG)) != MPADEC_RETCODE_OK) { + _JFAud_LogMsg("mpadec_get_info error: %s\n",mpadec_error(r)); + return NotMpeg; + } + + // a tag might have supplied us with the proper length and frame count + if ((taginfo.flags & 2) && streamlen > taginfo.bytes) streamlen = taginfo.bytes; + if (taginfo.flags & 1) { + // VBR files will trigger this with the Xing tag, unless it's missing + streaminfo.frames = taginfo.frames; + + // we know the number of samples per frame, the length of the data, + // the sampling rate, and now the number of frames, so calculate + // the file's bitrate + // 125 = 8 (bits per byte, streamlen) / 1000 (bits per kilobit, bitrate) + if (streaminfo.frames > 0 && streaminfo.frame_samples) { + streaminfo.bitrate = (int32_t)(( (int64_t)streamlen * streaminfo.frequency ) / + ( (int64_t)streaminfo.frames * streaminfo.frame_samples * 125 )); + } + } else if (streaminfo.frame_samples > 0 && streaminfo.bitrate > 0) { + // knowing the length of the data, the sampling rate, the number of + // samples per frame, and the bitrate, we determine the number + // of frames in the file + streaminfo.frames = (int32_t)(( (int64_t)streamlen * streaminfo.frequency ) / + ( (int64_t)streaminfo.frame_samples * streaminfo.bitrate * 125 )); + } + +#ifdef DEBUG + { + char *spec; + if (streaminfo.frequency < 16000) spec = "2.5"; + else if (streaminfo.frequency < 32000) spec = "2"; + else spec = "1"; + _JFAud_LogMsg("File is MPEG %s Layer %d, %d chans, %d kbps, %d Hz, %d frames\n", + spec, streaminfo.layer, streaminfo.channels, + streaminfo.bitrate, streaminfo.frequency, + streaminfo.frames); + } +#endif + + return NoError; +} + +void WaveformFile_Mpeg::UninitDecoder() +{ + if (mpa) mpadec_uninit(mpa); + mpa = NULL; +} + +int WaveformFile_Mpeg::DecodeSome(int bytes, char *p) +{ + int r, rb = 0; + uint32_t inpos = 0, siz; + + while (bytes > 0) { + if (outsiz > 0) { + // consume data already decoded + siz = min(outsiz, bytes); + memcpy(p, outbuf + outpos, siz); + outpos += siz; + outsiz -= siz; + bytes -= siz; + p += siz; + rb += siz; + } else { + // top up the input buffer + if (insiz < sizeof(inbuf)) { + r = min(sizeof(inbuf) - insiz, streamlen - streampos); + if (r > 0) { + r = fh->Read(r, inbuf + insiz); + if (r < 0) return -1; + } + insiz += r; + streampos += r; + } + + // couldn't fill the input buffer at all + if (insiz == 0) break; + + // try and decode as much as possible direct into the user's buffer + outsiz = outpos = inpos = 0; + r = mpadec_decode(mpa, inbuf, insiz, (uint8_t*)p, bytes, &inpos, &siz); + p += siz; + bytes -= siz; + rb += siz; + if (r == MPADEC_RETCODE_BUFFER_TOO_SMALL) { + if (siz == 0) { + // decode some more into our spill area so we can pack up the user's buffer + // as much as possible + r = mpadec_decode(mpa, inbuf, insiz, outbuf, sizeof(outbuf), &inpos, &outsiz); + if (r != MPADEC_RETCODE_OK && + r != MPADEC_RETCODE_BUFFER_TOO_SMALL && + r != MPADEC_RETCODE_NEED_MORE_DATA) { + _JFAud_LogMsg("mpadec_decode(1) error: %s\n", mpadec_error(r)); + return -1; + } + } + } else if (r == MPADEC_RETCODE_NEED_MORE_DATA) { + // starved of data and unable to decode any more, so give up + if (siz == 0) { + insiz = 0; + break; + } + } else if (r != MPADEC_RETCODE_OK) { + _JFAud_LogMsg("mpadec_decode(2) error: %s\n", mpadec_error(r)); + return -1; + } + insiz -= inpos; + if (inpos > 0) memmove(inbuf, inbuf + inpos, insiz); + } + } + + return rb; +} + +int WaveformFile_Mpeg::LoadSamples(PcmBuffer *buf, bool loop) +{ + int bytes, bitstr; + unsigned int totalbytes = buf->GetMaxSamples() * buf->GetBlockSize(), readbytes = 0; + char *sp = (char*)buf->GetData(); + bool breakloop = false; + + while (totalbytes > 0) { + bytes = DecodeSome(totalbytes, sp); + + if (bytes < 0) return -1; // read failure + else if (bytes == 0) { + if (loop) { + if (breakloop) break; // to prevent endless loops + + fh->Seek(streamoffs, JFAudFile::Set); + streampos = 0; + + breakloop = true; + } else { + break; + } + } else { + sp += bytes; + readbytes += bytes; + totalbytes -= bytes; + breakloop = false; + } + } + + buf->SetNumSamples(readbytes / buf->GetBlockSize()); + + return 0; +} +//}}} + +//{{{ Public methods +WaveformFile_Mpeg::WaveformFile_Mpeg(JFAudFile *tfh) + : isvalid(false), WaveformFile(), fh(NULL), mpa(NULL) +{ + int r; + + if (!tfh) return; +#if !LINKMPADEC + if (!lib) return; +#endif + + if (InitDecoder(tfh) == NoError) { + fh = tfh; + isvalid = true; + } +} + +WaveformFile_Mpeg::~WaveformFile_Mpeg() +{ + UninitDecoder(); + if (fh) delete fh; +} + +PcmBuffer *WaveformFile_Mpeg::ReadSamples(unsigned int nsamps, bool loop) +{ + PcmBuffer *buf; + + if (!isvalid) return NULL; + + buf = new PcmBuffer(); + if (!buf) return NULL; + + if (nsamps == 0) { + nsamps = (unsigned int)(streaminfo.decoded_frame_samples * streaminfo.frames); + loop = false; + } + + if (!buf->Allocate(nsamps, streaminfo.decoded_frequency, streaminfo.decoded_channels, 2) || + LoadSamples(buf, loop) < 0 || + buf->GetNumSamples() == 0) { + delete buf; + return NULL; + } + + return buf; +} + +float WaveformFile_Mpeg::GetPlayTime(void) const +{ + if (!isvalid) return 0.0; + return (float)(streaminfo.decoded_frame_samples * streaminfo.frames) / (float)streaminfo.decoded_frequency; +} + +unsigned int WaveformFile_Mpeg::GetPCMLength(void) const +{ + if (!isvalid) return 0; + return (unsigned int)(streaminfo.decoded_frame_samples * streaminfo.frames); +} + +SoundFile::InitState WaveformFile_Mpeg::Init() +{ +#if !LINKMPADEC + if (lib) { refcount++; return SoundFile::InitOK; } + + _JFAud_LogMsg("Loading " MPADECDL "\n"); + lib = new DynamicLibrary(MPADECDL); + if (!lib) return SoundFile::InitDisabled; + if (!lib->IsOpen()) { + delete lib; + lib = NULL; + return SoundFile::InitDisabled; + } + + if (getallsyms()) refcount = 1; + else { + delete lib; + lib = NULL; + return SoundFile::InitDisabled; + } +#endif + return SoundFile::InitOK; +} + +bool WaveformFile_Mpeg::Uninit() +{ +#if !LINKMPADEC + if (refcount > 1) { refcount--; return true; } + if (refcount == 0 || !lib) return false; + refcount = 0; + delete lib; + lib = NULL; +#endif + return true; +} +//}}} + +#endif + +// vim:fdm=marker: + diff --git a/polymer/jfaud/src/waveformfile_mpeg.hpp b/polymer/jfaud/src/waveformfile_mpeg.hpp new file mode 100755 index 000000000..1366183b4 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_mpeg.hpp @@ -0,0 +1,57 @@ +#ifndef __waveformfile_mpeg_hpp__ +#define __waveformfile_mpeg_hpp__ + +#if USEMPADEC + +#include "waveformfile.hpp" + +#include "mpadec.h" + +class WaveformFile_Mpeg : public WaveformFile { +private: + JFAudFile *fh; + bool isvalid; + + enum { NoError = 0, Error = -1, NotMpeg = -2 }; + + mpadec_t mpa; + mpadec_info_t streaminfo; + mp3tag_info_t taginfo; + + // decoder state etc. + uint8_t inbuf[65536], outbuf[8*1152]; + uint32_t insiz, outsiz, outpos; + long streamoffs; // start of mpeg data (ID3v2 is skipped over on init) + long streamlen; // length of file following start + long streampos; // file position + int InitDecoder(JFAudFile *fh); + void UninitDecoder(); + + int DecodeSome(int bytes, char *p); + int LoadSamples(PcmBuffer *buf, bool loop); + +public: + WaveformFile_Mpeg(JFAudFile *); + virtual ~WaveformFile_Mpeg(); + virtual bool IsValid() const { return isvalid; } + + static InitState Init(); + static bool Uninit(); + + // these static versions retrieve the identifiers for this particular class + static Format GetClassFormat() { return FORMAT_MPEG; } + static const char *GetClassFormatName() { return "MPEG Audio"; } + // these virtual versions return the identifier based on whether the file is valid or not + virtual Format GetFormat() const { return isvalid ? FORMAT_MPEG : FORMAT_UNKNOWN; } + virtual const char *GetFormatName() const { return isvalid ? "MPEG Audio" : NULL; } + + virtual PcmBuffer *ReadSamples(unsigned int nsamps = 0, bool loop = false); + virtual float GetPlayTime(void) const; + virtual unsigned int GetPCMLength(void) const; +}; + +#endif //USEMPADEC + +#endif + + diff --git a/polymer/jfaud/src/waveformfile_oggvorbis.cpp b/polymer/jfaud/src/waveformfile_oggvorbis.cpp new file mode 100755 index 000000000..3ff80ab41 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_oggvorbis.cpp @@ -0,0 +1,263 @@ +#define JFAUD_INTERNAL +#if USEVORBIS + +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +# include "watcomhax/cerrno" +#else +# include +# include +#endif + +#include "log.h" +#include "pcmbuffer.hpp" +#include "waveformfile_oggvorbis.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +#if !LINKVORBIS +#include "dynlib.hpp" +#define GETDLSYM(sym,sig) if (( libsyms.sym = (sig) lib->Get( (const char *)#sym )) == NULL) return getdlsymerr( #sym ) +static bool getdlsymerr(const char *sym) { _JFAud_LogMsg(" Symbol %s not found. Vorbis disabled.\n", sym); return false; } +static DynamicLibrary *lib = NULL; +static int refcount = 0; + +static struct { + int (*ov_open_callbacks)(void *datasource, OggVorbis_File *vf, char *initial, long ibytes, ov_callbacks callbacks); + int (*ov_clear)(OggVorbis_File *vf); + vorbis_info *(*ov_info)(OggVorbis_File *vf,int link); + long (*ov_seekable)(OggVorbis_File *vf); + long (*ov_streams)(OggVorbis_File *vf); + long (*ov_read)(OggVorbis_File *vf,char *buffer,int length, int bigendianp,int word,int sgned,int *bitstream); + int (*ov_pcm_seek_lap)(OggVorbis_File *vf,ogg_int64_t pos); + double (*ov_time_total)(OggVorbis_File *vf,int i); + ogg_int64_t (*ov_pcm_total)(OggVorbis_File *vf,int i); + vorbis_comment *(*ov_comment)(OggVorbis_File *vf,int i); +} libsyms; + +static bool getallsyms() +{ + GETDLSYM(ov_open_callbacks, int (*)(void *,OggVorbis_File *,char *,long,ov_callbacks)); + GETDLSYM(ov_clear, int (*)(OggVorbis_File *)); + GETDLSYM(ov_info, vorbis_info *(*)(OggVorbis_File *,int)); + GETDLSYM(ov_seekable, long (*)(OggVorbis_File *)); + GETDLSYM(ov_streams, long (*)(OggVorbis_File *)); + GETDLSYM(ov_read, long (*)(OggVorbis_File *,char *,int,int,int,int,int *)); + GETDLSYM(ov_pcm_seek_lap, int (*)(OggVorbis_File *,ogg_int64_t)); + GETDLSYM(ov_time_total, double (*)(OggVorbis_File *,int)); + GETDLSYM(ov_pcm_total, ogg_int64_t (*)(OggVorbis_File *,int)); + GETDLSYM(ov_comment, vorbis_comment *(*)(OggVorbis_File *,int)); + return true; +} + +#define ov_open_callbacks libsyms.ov_open_callbacks +#define ov_clear libsyms.ov_clear +#define ov_info libsyms.ov_info +#define ov_seekable libsyms.ov_seekable +#define ov_streams libsyms.ov_streams +#define ov_read libsyms.ov_read +#define ov_pcm_seek_lap libsyms.ov_pcm_seek_lap +#define ov_time_total libsyms.ov_time_total +#define ov_pcm_total libsyms.ov_pcm_total +#define ov_comment libsyms.ov_comment + +#endif + +//{{{ VorbisFile callbacks +static size_t vorbisread(void *ptr, size_t size, size_t nmemb, void *datasource) +{ + int r; + JFAudFile *file = (JFAudFile*)datasource; + + r = file->Read((int)(size * nmemb), ptr); + + if (r < 0) errno = 1, r = 0; + else errno = 0; + + return (size_t)r; +} + +static int vorbisseek(void *datasource, ogg_int64_t offset, int w) +{ + JFAudFile *file = (JFAudFile*)datasource; + return file->Seek((int)offset, w==SEEK_CUR ? JFAudFile::Cur : (w==SEEK_SET ? JFAudFile::Set : JFAudFile::End)); +} + +static int vorbisclose(void *datasource) +{ + // deleting the fh in the destructor will close the file + return 0; +} + +static long vorbistell(void *datasource) +{ + JFAudFile *file = (JFAudFile*)datasource; + return (long)file->Tell(); +} +//}}} + +//{{{ Private methods +int WaveformFile_OggVorbis::LoadSamples(PcmBuffer *buf, bool loop) +{ + int bytes, bitstr; + unsigned int totalbytes = buf->GetMaxSamples() * buf->GetBlockSize(), readbytes = 0; + char *sp = (char*)buf->GetData(); + bool breakloop = false; + + while (totalbytes > 0) { + bytes = ov_read(&vfile, sp, totalbytes, B_BIG_ENDIAN, 2, 1, &bitstr); + + if (bytes == OV_HOLE) continue; // ignore holes + + if (bytes < 0) return -1; // read failure + else if (bytes == 0) { + if (loop) { + if (breakloop) break; // to prevent endless loops + + if (ov_pcm_seek_lap(&vfile, 0)) return -1; + breakloop = true; + } else { + break; + } + } else { + sp += bytes; + readbytes += bytes; + totalbytes -= bytes; + breakloop = false; + } + } + + buf->SetNumSamples(readbytes / buf->GetBlockSize()); + + return 0; +} +//}}} + +//{{{ Public methods +WaveformFile_OggVorbis::WaveformFile_OggVorbis(JFAudFile *tfh) + : isvalid(false), WaveformFile(), fh(NULL) +{ + int r; + vorbis_info *vi; + ov_callbacks vorbiscallbacks = { vorbisread, vorbisseek, vorbisclose, vorbistell }; + + if (!tfh) return; +#if !LINKVORBIS + if (!lib) return; +#endif + + tfh->Rewind(); + r = ov_open_callbacks((void*)tfh, &vfile, NULL, 0, vorbiscallbacks); + if (r < 0) return; + + vi = ov_info(&vfile, 0); + if (!vi) { + ov_clear(&vfile); + return; + } + + samplerate = vi->rate; + channels = vi->channels; + + fh = tfh; + isvalid = true; +} + +WaveformFile_OggVorbis::~WaveformFile_OggVorbis() +{ + if (isvalid) ov_clear(&vfile); + if (fh) delete fh; +} + +PcmBuffer *WaveformFile_OggVorbis::ReadSamples(unsigned int nsamps, bool loop) +{ + PcmBuffer *buf; + + if (!isvalid) return NULL; + + buf = new PcmBuffer(); + if (!buf) return NULL; + + if (nsamps == 0) { + nsamps = (unsigned int)ov_pcm_total(&vfile,-1); + loop = false; + } + + if (!buf->Allocate(nsamps, samplerate, channels, 2) || + LoadSamples(buf, loop) < 0 || + buf->GetNumSamples() == 0) { + delete buf; + return NULL; + } + + return buf; +} + +float WaveformFile_OggVorbis::GetPlayTime(void) const +{ + double r; + + if (!isvalid) return 0.0; + + r = ov_time_total(const_cast(&vfile),-1); + if (r == OV_EINVAL) return 0.0; + + return (float)r; +} + +unsigned int WaveformFile_OggVorbis::GetPCMLength(void) const +{ + ogg_int64_t r; + + if (!isvalid) return 0; + + r = ov_pcm_total(const_cast(&vfile),-1); + if (r == OV_EINVAL) return 0; + + return (unsigned int)r; +} + +SoundFile::InitState WaveformFile_OggVorbis::Init() +{ +#if !LINKVORBIS + if (lib) { refcount++; return SoundFile::InitOK; } + + _JFAud_LogMsg("Loading " VORBISDL "\n"); + lib = new DynamicLibrary(VORBISDL); + if (!lib) return SoundFile::InitDisabled; + if (!lib->IsOpen()) { + delete lib; + lib = NULL; + return SoundFile::InitDisabled; + } + + if (getallsyms()) refcount = 1; + else { + delete lib; + lib = NULL; + return SoundFile::InitDisabled; + } +#endif + return SoundFile::InitOK; +} + +bool WaveformFile_OggVorbis::Uninit() +{ +#if !LINKVORBIS + if (refcount > 1) { refcount--; return true; } + if (refcount == 0 || !lib) return false; + refcount = 0; + delete lib; + lib = NULL; +#endif + return true; +} +//}}} + +#endif + +// vim:fdm=marker: + diff --git a/polymer/jfaud/src/waveformfile_oggvorbis.hpp b/polymer/jfaud/src/waveformfile_oggvorbis.hpp new file mode 100755 index 000000000..03d4e1445 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_oggvorbis.hpp @@ -0,0 +1,53 @@ +#ifndef __waveformfile_oggvorbis_hpp__ +#define __waveformfile_oggvorbis_hpp__ + +#if USEVORBIS + +#include "waveformfile.hpp" + +#ifdef __APPLE__ +# include +#else +# ifdef __WATCOMC__ +# define __int16 short +# define __int32 int +# endif +# include "vorbis/vorbisfile.h" +#endif + +class WaveformFile_OggVorbis : public WaveformFile { +private: + JFAudFile *fh; + bool isvalid; + + OggVorbis_File vfile; + + int samplerate; + int channels; + + int LoadSamples(PcmBuffer *buf, bool loop); + +public: + WaveformFile_OggVorbis(JFAudFile *); + virtual ~WaveformFile_OggVorbis(); + virtual bool IsValid() const { return isvalid; } + + static InitState Init(); + static bool Uninit(); + + // these static versions retrieve the identifiers for this particular class + static Format GetClassFormat() { return FORMAT_OGGVORBIS; } + static const char *GetClassFormatName() { return "OggVorbis"; } + // these virtual versions return the identifier based on whether the file is valid or not + virtual Format GetFormat() const { return isvalid ? FORMAT_OGGVORBIS : FORMAT_UNKNOWN; } + virtual const char *GetFormatName() const { return isvalid ? "OggVorbis" : NULL; } + + virtual PcmBuffer *ReadSamples(unsigned int nsamps = 0, bool loop = false); + virtual float GetPlayTime(void) const; + virtual unsigned int GetPCMLength(void) const; +}; + +#endif //USEVORBIS + +#endif + diff --git a/polymer/jfaud/src/waveformfile_raw.cpp b/polymer/jfaud/src/waveformfile_raw.cpp new file mode 100755 index 000000000..d1358cf9a --- /dev/null +++ b/polymer/jfaud/src/waveformfile_raw.cpp @@ -0,0 +1,123 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +# include "watcomhax/cstring" +#else +# include +# include +#endif + +#include "log.h" +#include "waveformfile_raw.hpp" +#include "pcmbuffer.hpp" + +//using namespace std; + +//{{{ Private methods +int WaveformFile_Raw::LoadSamples(PcmBuffer *buf, bool loop) +{ + int bytes; + unsigned int totalbytes = buf->GetMaxSamples() * buf->GetBlockSize(), readbytes = 0; + char *sp = (char*)buf->GetData(); + bool breakloop = false; + + while (totalbytes > 0) { + bytes = datalen - datapos; + if (bytes > totalbytes) bytes = totalbytes; + + bytes = fh->Read(bytes, sp); + + if (bytes < 0) return -1; // read failure + else if (bytes == 0) { + if (loop) { + if (breakloop) break; // to prevent endless loops + + fh->Rewind(); + datapos = 0; + breakloop = true; + } else { + break; + } + } else { + sp += bytes; + datapos += bytes; + readbytes += bytes; + totalbytes -= bytes; + breakloop = false; + } + } + + if (readbytes > 0 && buf->GetBytesPerSample() == 2 && bigendian != B_BIG_ENDIAN) { + unsigned short *spp = (unsigned short *)buf->GetData(); + for (bytes=0; bytesSetNumSamples(readbytes / buf->GetBlockSize()); + + return 0; +} +//}}} + +//{{{ Public methods +WaveformFile_Raw::WaveformFile_Raw(JFAudFile *tfh, int samplerate, int channels, int bytespersample, bool bigendian) + : isvalid(false), WaveformFile(), fh(NULL), + samplerate(-1), channels(-1), bytespersample(-1), bigendian(false), + datalen(-1), datapos(-1) +{ + if (!tfh) return; + + if (samplerate <= 0) return; + if (channels < 1 || channels > 2) return; + if (bytespersample < 1 || bytespersample > 2) return; + + this->samplerate = samplerate; + this->channels = channels; + this->bytespersample = bytespersample; + this->bigendian = bigendian; + + fh = tfh; + this->datalen = fh->Seek(0, JFAudFile::End); + fh->Rewind(); + + isvalid = true; +} + +WaveformFile_Raw::~WaveformFile_Raw() +{ + // We're responsible for deleting the file handle if we acknowledged the file as being + // one of our own and it was usable by us in the constructor. Otherwise, the caller of + // the constructor cleans up the file handle. + if (fh) delete fh; +} + +PcmBuffer *WaveformFile_Raw::ReadSamples(unsigned int nsamps, bool loop) +{ + PcmBuffer *buf; + + if (!isvalid) return NULL; + + buf = new PcmBuffer(); + if (!buf) return NULL; + + if (nsamps == 0) { + nsamps = TotalSamples(); + loop = false; + } + + if (!buf->Allocate(nsamps, samplerate, channels, bytespersample) || + LoadSamples(buf, loop) < 0 || + buf->GetNumSamples() == 0) { + delete buf; + return NULL; + } + + return buf; +} +//}}} + +// vim:fdm=marker: + diff --git a/polymer/jfaud/src/waveformfile_raw.hpp b/polymer/jfaud/src/waveformfile_raw.hpp new file mode 100755 index 000000000..7d2921d6c --- /dev/null +++ b/polymer/jfaud/src/waveformfile_raw.hpp @@ -0,0 +1,42 @@ +#ifndef __waveformfile_raw_hpp__ +#define __waveformfile_raw_hpp__ + +#include "waveformfile.hpp" + +class WaveformFile_Raw : public WaveformFile { +private: + JFAudFile *fh; + bool isvalid; + + int samplerate; + int channels; + int bytespersample; + bool bigendian; + + long datalen, datapos; + + unsigned int TotalSamples() const { return datalen / (channels*bytespersample); } + int LoadSamples(PcmBuffer *buf, bool loop); + +public: + WaveformFile_Raw(JFAudFile *, int samplerate, int channels, int bytespersample, bool bigendian); + virtual ~WaveformFile_Raw(); + virtual bool IsValid() const { return isvalid; } + + static InitState Init() { return InitOK; } + static bool Uninit() { return true; } + + // these static versions retrieve the identifiers for this particular class + static Format GetClassFormat() { return FORMAT_RAW; } + static const char *GetClassFormatName() { return "Raw PCM"; } + // these virtual versions return the identifier based on whether the file is valid or not + virtual Format GetFormat() const { return isvalid ? FORMAT_RAW : FORMAT_UNKNOWN; } + virtual const char *GetFormatName() const { return isvalid ? "Raw PCM" : NULL; } + + virtual PcmBuffer *ReadSamples(unsigned int nsamps = 0, bool loop = false); + virtual float GetPlayTime(void) const { return isvalid ? (float)TotalSamples() / (float)samplerate : 0.0; } + virtual unsigned int GetPCMLength(void) const { return !isvalid ? 0 : TotalSamples(); } +}; + +#endif + diff --git a/polymer/jfaud/src/waveformfile_riffwave.cpp b/polymer/jfaud/src/waveformfile_riffwave.cpp new file mode 100755 index 000000000..824f35072 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_riffwave.cpp @@ -0,0 +1,167 @@ +#define JFAUD_INTERNAL +// format description: http://www.borg.com/~jglatt/tech/wave.htm + +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +#else +# include +#endif + +#include "log.h" +#include "waveformfile_riffwave.hpp" +#include "pcmbuffer.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +//{{{ Private methods +bool WaveformFile_RiffWave::ReadChunkHead(char type[4], int *len) +{ + if (fh->Read(4, type) != 4 || !fh->ReadLong(len, false)) + return false; + return true; +} + +bool WaveformFile_RiffWave::FindChunk(const char *type, int *start, int *len) +{ + char id[4]; + + fh->Seek(4+4+4, JFAudFile::Set); + + while (ReadChunkHead(id,len)) { + if (id[0] == type[0] && id[1] == type[1] && id[2] == type[2] && id[3] == type[3]) { + *start = fh->Tell(); + return true; + } + + fh->Seek(*len, JFAudFile::Cur); + } + + *start = *len = -1; + + return false; +} + +int WaveformFile_RiffWave::LoadSamples(PcmBuffer *buf, bool loop) +{ + int bytes; + unsigned int totalbytes = buf->GetMaxSamples() * buf->GetBlockSize(), readbytes = 0; + char *sp = (char*)buf->GetData(); + bool breakloop = false; + + while (totalbytes > 0) { + bytes = datalen - datapos; + if (bytes > totalbytes) bytes = totalbytes; + + bytes = fh->Read(bytes, sp); + + if (bytes < 0) return -1; // read failure + else if (bytes == 0) { + if (loop) { + if (breakloop) break; // to prevent endless loops + + fh->Seek(datastart, JFAudFile::Set); + datapos = 0; + breakloop = true; + } else { + break; + } + } else { + sp += bytes; + datapos += bytes; + readbytes += bytes; + totalbytes -= bytes; + breakloop = false; + } + } + +#if B_LITTLE_ENDIAN != 1 + if (readbytes > 0 && buf->GetBytesPerSample() == 2) { + unsigned short *spp = (unsigned short *)buf->GetData(); + for (bytes=0; bytesSetNumSamples(readbytes / buf->GetBlockSize()); + + return 0; +} +//}}} + +//{{{ Public methods +WaveformFile_RiffWave::WaveformFile_RiffWave(JFAudFile *tfh) + : isvalid(false), isusable(false), WaveformFile(), fh(NULL), + samplerate(-1), channels(-1), bytespersample(-1), + datastart(-1), datalen(-1), datapos(-1) +{ + int l,len; + char id[4]; + short s; + + if (!tfh) return; + + fh = tfh; + fh->Rewind(); + + if (!ReadChunkHead(id,&len)) return; + if (id[0] != 'R' || id[1] != 'I' || id[2] != 'F' || id[3] != 'F') return; + if (fh->Read(4, id) != 4) return; + if (id[0] != 'W' || id[1] != 'A' || id[2] != 'V' || id[3] != 'E') return; + isvalid = true; + + // read the format chunk + if (!FindChunk("fmt ",&l,&len) || len < (2+2+4+4+2+2)) return; + if (!fh->ReadShort(&s, false) || (s != 1)) return; // must be pcm + if (!fh->ReadShort(&s, false)) return; else channels = s; + if (!fh->ReadLong(&l, false)) return; else samplerate = l; + if (!fh->ReadLong(&l, false) || !fh->ReadShort(&s, false)) return; // skip avgbps and blkalign + if (!fh->ReadShort(&s, false) || (s != 8 && s != 16)) return; else bytespersample = s/8; + + // locate the data chunk and keep its properties + if (!FindChunk("data",(int*)&datastart,(int*)&datalen)) return; + if (datastart < 0 || datalen < 0) return; + datapos = 0; + + isusable = true; +} + +WaveformFile_RiffWave::~WaveformFile_RiffWave() +{ + // We're responsible for deleting the file handle if we acknowledged the file as being + // one of our own and it was usable by us in the constructor. Otherwise, the caller of + // the constructor cleans up the file handle. + if (fh && isvalid && isusable) delete fh; +} + +PcmBuffer *WaveformFile_RiffWave::ReadSamples(unsigned int nsamps, bool loop) +{ + PcmBuffer *buf; + + if (!isvalid) return NULL; + + buf = new PcmBuffer(); + if (!buf) return NULL; + + if (nsamps == 0) { + nsamps = TotalSamples(); + loop = false; + } + + if (!buf->Allocate(nsamps, samplerate, channels, bytespersample) || + LoadSamples(buf, loop) < 0 || + buf->GetNumSamples() == 0) { + delete buf; + return NULL; + } + + return buf; +} +//}}} + +// vim:fdm=marker: + diff --git a/polymer/jfaud/src/waveformfile_riffwave.hpp b/polymer/jfaud/src/waveformfile_riffwave.hpp new file mode 100755 index 000000000..6ddf202f1 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_riffwave.hpp @@ -0,0 +1,43 @@ +#ifndef __waveformfile_riffwave_hpp__ +#define __waveformfile_riffwave_hpp__ + +#include "waveformfile.hpp" + +class WaveformFile_RiffWave : public WaveformFile { +private: + JFAudFile *fh; + bool isvalid, isusable; + + int samplerate; + int channels; + int bytespersample; + + int datastart, datalen, datapos; + + bool ReadChunkHead(char type[4], int *len); + bool FindChunk(const char *type, int *start, int *len); + unsigned int TotalSamples() const { return datalen / (channels*bytespersample); } + int LoadSamples(PcmBuffer *buf, bool loop); + +public: + WaveformFile_RiffWave(JFAudFile *); + virtual ~WaveformFile_RiffWave(); + virtual bool IsValid() const { return isvalid; } + virtual bool IsUsable() const { return isusable; } + + static InitState Init() { return InitOK; } + static bool Uninit() { return true; } + + // these static versions retrieve the identifiers for this particular class + static Format GetClassFormat() { return FORMAT_RIFFWAV; } + static const char *GetClassFormatName() { return "RIFF WAVE"; } + // these virtual versions return the identifier based on whether the file is valid or not + virtual Format GetFormat() const { return isvalid ? FORMAT_RIFFWAV : FORMAT_UNKNOWN; } + virtual const char *GetFormatName() const { return isvalid ? "RIFF WAVE" : NULL; } + + virtual PcmBuffer *ReadSamples(unsigned int nsamps = 0, bool loop = false); + virtual float GetPlayTime(void) const { return isvalid ? (float)TotalSamples() / (float)samplerate : 0.0; } + virtual unsigned int GetPCMLength(void) const { return !isvalid ? 0 : TotalSamples(); } +}; + +#endif diff --git a/polymer/jfaud/src/waveformfile_voc.cpp b/polymer/jfaud/src/waveformfile_voc.cpp new file mode 100755 index 000000000..874ac4fdb --- /dev/null +++ b/polymer/jfaud/src/waveformfile_voc.cpp @@ -0,0 +1,303 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +# include "watcomhax/cstring" +#else +# include +# include +#endif + +#include "log.h" +#include "waveformfile_voc.hpp" + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +//{{{ Private methods +int WaveformFile_Voc::LoadSamples(PcmBuffer *buf, bool loop) +{ + int bytes; + unsigned int totalbytes = buf->GetMaxSamples() * buf->GetBlockSize(), readbytes = 0; + char *sp = (char*)buf->GetData(); + bool breakloop = false; + + while (totalbytes > 0) { + bytes = datalen - datapos; + if (bytes > totalbytes) bytes = totalbytes; + + bytes = ReadBlockData(bytes, sp); + + if (bytes < 0) return -1; // read failure + else if (bytes == 0) { + if (loop) { + if (breakloop) break; // to prevent endless loops + + fh->Seek(datastart, JFAudFile::Set); + datapos = 0; + breakloop = true; + } else { + break; + } + } else { + sp += bytes; + datapos += bytes; + readbytes += bytes; + totalbytes -= bytes; + breakloop = false; + } + } + +#if B_LITTLE_ENDIAN != 1 + if (readbytes > 0 && buf->GetBytesPerSample() == 2) { + unsigned short *spp = (unsigned short *)buf->GetData(); + for (bytes=0; bytesSetNumSamples(readbytes / buf->GetBlockSize()); + + return 0; +} + +int WaveformFile_Voc::ReadBlockData(int bytes, char *ptr) +{ + int bytesread = 0, skip; + while (bytes > 0) { + if (blockleft == 0) { + if (!ReadBlockHead() || block.type == blk_terminate) break; + skip = 0; + switch (block.type) { + case blk_sounddata: + blockleft = block.info.sounddata.len; + break; + case blk_soundcont: + blockleft = block.info.soundcont.len; + break; + case blk_type9: + blockleft = block.info.type9.len; + break; + + case blk_asciiz: + skip = block.info.asciiz.len; + break; + + default: break; + } + if (skip > 0) fh->Seek(skip, JFAudFile::Cur); + } else { + skip = fh->Read(min(bytes, blockleft), ptr); + if (skip < 0) return -1; + else if (skip == 0) { blockleft = 0; break; } // short read, truncated block + + ptr += skip; + bytesread += skip; + bytes -= skip; + blockleft -= skip; + } + } + return bytesread; +} + +int WaveformFile_Voc::ReadBlockHead() +{ + int len = 0; + int l; + unsigned short s; + unsigned char c; + + if (!fh->ReadByte(&block.type)) goto failure; + + if (block.type == blk_terminate) return 1; + + if (fh->Read(3, &len) != 3) goto failure; + len = B_LITTLE32(len); + + switch (block.type) { + case blk_sounddata: + if (len < 2) goto failure; + block.info.sounddata.len = len - 2; + if (!fh->ReadByte((char*)&c)) goto failure; block.info.sounddata.samplerate = 1000000/(256-c); + if (!fh->ReadByte(&block.info.sounddata.format)) goto failure; + break; + case blk_soundcont: + block.info.soundcont.len = len; + break; + case blk_silence: + if (len != 3) goto failure; + if (!fh->ReadShort((short*)&s, false)) goto failure; block.info.silence.len = (int)s+1; + if (!fh->ReadByte((char*)&c)) goto failure; block.info.silence.samplerate = 1000000/(256-c); + break; + case blk_marker: + if (len != 2) goto failure; + if (!fh->ReadShort((short*)&block.info.marker.value)) goto failure; + break; + case blk_asciiz: + block.info.asciiz.len = len; + break; + case blk_repeat: + if (len != 2) goto failure; + if (!fh->ReadShort((short*)&block.info.repeat.count)) goto failure; + break; + case blk_extended: + if (len != 4) goto failure; + if (!fh->ReadShort((short*)&s)) goto failure; + if (!fh->ReadByte((char*)&block.info.extended.format)) goto failure; + if (!fh->ReadByte((char*)&c)) goto failure; block.info.extended.channels = c+1; + block.info.extended.samplerate = 256000000/((c+1)*(65536-s)); + break; + case blk_type9: + if (len < 12) goto failure; + block.info.type9.len = len-12; + if (!fh->ReadLong(&block.info.type9.samplerate)) goto failure; + if (!fh->ReadByte((char*)&block.info.type9.bitspersample)) goto failure; + if (!fh->ReadByte((char*)&block.info.type9.channels)) goto failure; + if (!fh->ReadShort((short*)&block.info.type9.format)) goto failure; + if (!fh->ReadLong(&l)) goto failure; + break; + default: goto failure; + } + + return 1; + +failure: + block.type = blk_terminate; + return 0; +} +//}}} + +//{{{ Public methods +WaveformFile_Voc::WaveformFile_Voc(JFAudFile *tfh) + : isvalid(false), isusable(false), WaveformFile(), fh(NULL), + samplerate(-1), channels(-1), bytespersample(-1), + datastart(-1), datalen(-1), datapos(-1), blockleft(0) +{ + char id[20]; + + int l,len; + short s,s2; + + int srate = -1, skip; + short chans = -1, format = -1, bps = -1; + + if (!tfh) return; + + tfh->Rewind(); + + // header + if (tfh->Read(20, id) != 20) return; + if (memcmp(id, "Creative Voice File\x1a", 20)) return; + isvalid = true; // file passed the magic test + + if (!tfh->ReadShort(&s, false) || s < 26) return; else datastart = s; + if (!tfh->ReadShort(&s, false)) return; + if (!tfh->ReadShort(&s2, false) || ~s+0x1234 != s2) return; + + // scan the blocks and work out how long the sound is + tfh->Seek(datastart, JFAudFile::Set); + fh = tfh; // ReadBlockHead needs this + + datalen = datapos = blockleft = 0; + while (ReadBlockHead() && block.type != blk_terminate) { + skip = 0; + switch (block.type) { + case blk_sounddata: + if (srate < 0) { + srate = block.info.sounddata.samplerate; + chans = 1; + format = block.info.sounddata.format; + } else if (srate != block.info.sounddata.samplerate || + format != block.info.sounddata.format) return; // inconsistent format + skip = block.info.sounddata.len; + datalen += skip; + break; + case blk_soundcont: + if (srate < 0) return; // invalid format: can't continue sound with no format + skip = block.info.soundcont.len; + datalen += skip; + break; + case blk_extended: + if (srate < 0) { + srate = block.info.extended.samplerate; + chans = block.info.extended.channels; + format = block.info.extended.format; + } else if (srate != block.info.type9.samplerate || + chans != block.info.type9.channels || + format != block.info.type9.format) return; // inconsistent format + break; + case blk_type9: + if (srate < 0) { + srate = block.info.type9.samplerate; + bps = block.info.type9.bitspersample; + chans = block.info.type9.channels; + format = block.info.type9.format; + } else if (srate != block.info.type9.samplerate || + chans != block.info.type9.channels || + format != block.info.type9.format) return; // inconsistent format + skip = block.info.type9.len; + datalen += skip; + break; + + case blk_asciiz: + skip = block.info.asciiz.len; + break; + + default: break; + } + if (skip > 0) fh->Seek(skip, JFAudFile::Cur); + } + + if (srate < 0) return; // file has no sound blocks in it + + samplerate = srate; + switch (format) { + case fmt_pcm8: if (bps >= 0 && bps != 8) return; bytespersample = 1; break; + case fmt_pcm16: if (bps >= 0 && bps != 16) return; bytespersample = 2; break; + default: return; // unsupported format + } + channels = chans; + + fh->Seek(datastart, JFAudFile::Set); + + isusable = true; +} + +WaveformFile_Voc::~WaveformFile_Voc() +{ + // We're responsible for deleting the file handle if we acknowledged the file as being + // one of our own and it was usable by us in the constructor. Otherwise, the caller of + // the constructor cleans up the file handle. + if (fh && isvalid && isusable) delete fh; +} + +PcmBuffer *WaveformFile_Voc::ReadSamples(unsigned int nsamps, bool loop) +{ + PcmBuffer *buf; + + if (!isvalid) return NULL; + + buf = new PcmBuffer(); + if (!buf) return NULL; + + if (nsamps == 0) { + nsamps = TotalSamples(); + loop = false; + } + + if (!buf->Allocate(nsamps, samplerate, channels, bytespersample) || + LoadSamples(buf, loop) < 0 || + buf->GetNumSamples() == 0) { + delete buf; + return NULL; + } + + return buf; +} +//}}} + +// vim:fdm=marker: + diff --git a/polymer/jfaud/src/waveformfile_voc.hpp b/polymer/jfaud/src/waveformfile_voc.hpp new file mode 100755 index 000000000..e460c34b6 --- /dev/null +++ b/polymer/jfaud/src/waveformfile_voc.hpp @@ -0,0 +1,108 @@ +#ifndef __waveformfile_voc_hpp__ +#define __waveformfile_voc_hpp__ + +#include "waveformfile.hpp" + +class WaveformFile_Voc : public WaveformFile { +private: + JFAudFile *fh; + bool isvalid, isusable; + + int samplerate; + int channels; + int bytespersample; + + int datastart, datalen, datapos; + + enum { + blk_terminate, + blk_sounddata, + blk_soundcont, + blk_silence, + blk_marker, + blk_asciiz, + blk_repeat, + blk_endrepeat, + blk_extended, + blk_type9 + }; + + enum { + fmt_pcm8, + fmt_adpcm4_8, + fmt_adpcm3_8, + fmt_adpcm2_8, + fmt_pcm16, + fmt_alaw = 6, + fmt_ulaw, + fmt_adpcm4_16 = 0x2000 + }; + + struct { + char type; + union { + struct { + int len; + unsigned short samplerate; + char format; + } sounddata; + struct { + int len; + } soundcont; + struct { + int len; + unsigned short samplerate; + } silence; + struct { + unsigned short value; + } marker; + struct { + int len; + } asciiz; + struct { + unsigned short count; + } repeat; + struct { + unsigned short samplerate; + char format; + char channels; + } extended; + struct { + int len; + int samplerate; + char bitspersample; + char channels; + short format; + } type9; + } info; + } block; + int blockleft; + + int ReadBlockHead(); + int ReadBlockData(int bytes, char *ptr); + + unsigned int TotalSamples() const { return datalen / (channels*bytespersample); } + int LoadSamples(PcmBuffer *buf, bool loop); + +public: + WaveformFile_Voc(JFAudFile *); + virtual ~WaveformFile_Voc(); + virtual bool IsValid() const { return isvalid; } + virtual bool IsUsable() const { return isusable; } + + static InitState Init() { return InitOK; } + static bool Uninit() { return true; } + + // these static versions retrieve the identifiers for this particular class + static Format GetClassFormat() { return FORMAT_VOC; } + static const char *GetClassFormatName() { return "Creative VOC"; } + // these virtual versions return the identifier based on whether the file is valid or not + virtual Format GetFormat() const { return isvalid ? FORMAT_VOC : FORMAT_UNKNOWN; } + virtual const char *GetFormatName() const { return isvalid ? "Creative VOC" : NULL; } + + virtual PcmBuffer *ReadSamples(unsigned int nsamps = 0, bool loop = false); + virtual float GetPlayTime(void) const { return isvalid ? (float)TotalSamples() / (float)samplerate : 0.0; } + virtual unsigned int GetPCMLength(void) const { return !isvalid ? 0 : TotalSamples(); } +}; + +#endif diff --git a/polymer/jfaud/src/waveout.cpp b/polymer/jfaud/src/waveout.cpp new file mode 100755 index 000000000..b46771b27 --- /dev/null +++ b/polymer/jfaud/src/waveout.cpp @@ -0,0 +1,10 @@ +#define JFAUD_INTERNAL +#include "waveout.hpp" + +WaveOut::WaveOut(SoftwareMixer *) +{ +} + +WaveOut::~WaveOut() +{ +} diff --git a/polymer/jfaud/src/waveout.hpp b/polymer/jfaud/src/waveout.hpp new file mode 100755 index 000000000..1e1505769 --- /dev/null +++ b/polymer/jfaud/src/waveout.hpp @@ -0,0 +1,29 @@ +#ifndef __waveout_hpp__ +#define __waveout_hpp__ + +//#include "softwaremixer.hpp" + +class SoftwareMixer; + +class WaveOut { +private: +protected: +public: + WaveOut(SoftwareMixer *); + virtual ~WaveOut(); + + virtual bool Init(int samplerate, int channels, int bits) = 0; + virtual int GetSampleRate(void) const = 0; + virtual int GetChannels(void) const = 0; + virtual int GetBitsPerSample(void) const = 0; + virtual int GetMixBufferLen(void) const = 0; // returns bytes + + virtual bool Pause(bool onf) = 0; + virtual bool Lock(void) = 0; + virtual bool Unlock(void) = 0; + virtual bool SetVolume(float vol) = 0; + virtual float GetVolume(void) const = 0; +}; + +#endif + diff --git a/polymer/jfaud/src/waveout_dsound.cpp b/polymer/jfaud/src/waveout_dsound.cpp new file mode 100755 index 000000000..c1365a20a --- /dev/null +++ b/polymer/jfaud/src/waveout_dsound.cpp @@ -0,0 +1,385 @@ +#define JFAUD_INTERNAL +#define WIN32_LEAN_AND_MEAN +#define DIRECTSOUND_VERSION 0x0300 +#include +#include +#include + +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdio" +#else +# include +#endif + +#include "log.h" +#include "waveout_dsound.hpp" +#include "softwaremixer.hpp" +#include "dynlib.hpp" + +#define DSOUNDDL "dsound.dll" +#define CallbackRate 40 + +#ifndef SCREWED_UP_CPP +using namespace std; +#endif + +static DynamicLibrary *lib = NULL; +static int refcount = 0; +static HRESULT (WINAPI *libDirectSoundCreate)(LPGUID, LPDIRECTSOUND *, LPUNKNOWN) = NULL; + +static const char * const DSoundErr(HRESULT h); + +WaveOut_DSound::WaveOut_DSound(SoftwareMixer *m) + : WaveOut(m), + owner(m), inited(false), paused(true), + samplerate(0), channels(0), bits(0), buflen(0), + hwnd(0), dsound(NULL), bufprim(NULL), bufsec(NULL), notify(NULL) +{ + notifypoints[0] = notifypoints[1] = notifypoints[2] = NULL; + + if (lib) { refcount++; return; } + + _JFAud_LogMsg("Loading " DSOUNDDL "\n"); + lib = new DynamicLibrary(DSOUNDDL); + if (!lib) return; + if (!lib->IsOpen()) { + delete lib; + lib = NULL; + return; + } + + libDirectSoundCreate = (HRESULT(WINAPI*)(LPGUID,LPDIRECTSOUND*,LPUNKNOWN))lib->Get("DirectSoundCreate"); + + if (libDirectSoundCreate) refcount = 1; + else { + delete lib; + lib = NULL; + } + + InitializeCriticalSection(&mutex); +} + +WaveOut_DSound::~WaveOut_DSound() +{ + if (mixthread) { + SetEvent(notifypoints[0]); + switch (WaitForSingleObject(mixthread, 1000)) { + case WAIT_OBJECT_0: { + DWORD d = 0; + GetExitCodeThread(mixthread, &d); + _JFAud_LogMsg("WaveOut_DSound::~WaveOut_DSound(): Mixer thread exited with code %d\n", d); + } break; + default: _JFAud_LogMsg("WaveOut_DSound::~WaveOut_DSound(): Mixer thread failed to exit\n"); break; + } + CloseHandle(mixthread); + } + if (notify) { notify->Release(); } + if (bufsec) { bufsec->Release(); } + if (bufprim) { bufprim->Release(); } + if (dsound) { dsound->Release(); } + if (notifypoints[0]) { CloseHandle(notifypoints[0]); } + if (notifypoints[1]) { CloseHandle(notifypoints[1]); } + if (notifypoints[2]) { CloseHandle(notifypoints[2]); } + + DeleteCriticalSection(&mutex); + + if (refcount > 1) { refcount--; return; } + if (refcount == 0 || !lib) return; + refcount = 0; + delete lib; + lib = NULL; + libDirectSoundCreate = NULL; +} + +bool WaveOut_DSound::SetWindowHandle(HWND h) +{ + hwnd = h; + return true; +} + +bool WaveOut_DSound::Init(int samplerate, int channels, int bits) +{ + DSBUFFERDESC desc; + DSBPOSITIONNOTIFY posn[2]; + WAVEFORMATEX wfx; + HRESULT hr; + DWORD threadid; + int i; + + if (inited || !lib || !owner) return false; + + dsound = NULL; + bufprim = NULL; + bufsec = NULL; + notify = NULL; + notifypoints[0] = notifypoints[1] = notifypoints[2] = NULL; + mixthread = NULL; + paused = true; + + // 0. Create Windows objects needed later on + notifypoints[0] = CreateEvent(NULL,FALSE,FALSE,NULL); + notifypoints[1] = CreateEvent(NULL,FALSE,FALSE,NULL); + notifypoints[2] = CreateEvent(NULL,FALSE,FALSE,NULL); + if (!notifypoints[0] || !notifypoints[1] || !notifypoints[2]) { + _JFAud_LogMsg("WaveOut_DSound::Init(): CreateEvent() failed with error 0x%x\n", GetLastError()); + goto failure; + } + + // 1. Create the DirectSound object + if FAILED(hr = libDirectSoundCreate(NULL, &dsound, NULL)) { + _JFAud_LogMsg("WaveOut_DSound::Init(): DirectSoundCreate() failed with error %s\n", DSoundErr(hr)); + goto failure; + } + + // 2. Set the cooperative level + if (!hwnd) hwnd = GetForegroundWindow(); + if (!hwnd) hwnd = GetDesktopWindow(); + if FAILED(hr = dsound->SetCooperativeLevel(hwnd, DSSCL_PRIORITY)) + { + _JFAud_LogMsg("WaveOut_DSound::Init(): IDirectSound::SetCooperativeLevel() failed with error %s\n", DSoundErr(hr)); + goto failure; + } + + // 3. Create the primary buffer + ZeroMemory(&desc, sizeof(desc)); + desc.dwSize = sizeof(DSBUFFERDESC); + desc.dwFlags = DSBCAPS_PRIMARYBUFFER; + if FAILED(hr = dsound->CreateSoundBuffer(&desc, &bufprim, NULL)) { + _JFAud_LogMsg("WaveOut_DSound::Init(): IDirectSound::CreateSoundBuffer() failed with error %s\n", DSoundErr(hr)); + goto failure; + } + + // 4. Set the primary buffer format to what is requested + ZeroMemory(&wfx, sizeof(wfx)); + wfx.wFormatTag = WAVE_FORMAT_PCM; + wfx.nChannels = channels; + wfx.nSamplesPerSec = samplerate; + wfx.wBitsPerSample = bits; + wfx.nBlockAlign = bits/8*channels; + wfx.nAvgBytesPerSec = samplerate*wfx.nBlockAlign; + if FAILED(hr = bufprim->SetFormat(&wfx)) { + _JFAud_LogMsg("WaveOut_DSound::Init(): IDirectSoundBuffer::SetFormat() failed with error %s\n", DSoundErr(hr)); + goto failure; + } + + // 5. Fetch back what DirectSound actually set up + ZeroMemory(&wfx, sizeof(wfx)); + if FAILED(hr = bufprim->GetFormat(&wfx, sizeof(wfx), NULL)) { + _JFAud_LogMsg("WaveOut_DSound::Init(): IDirectSoundBuffer::GetFormat() failed with error %s\n", DSoundErr(hr)); + goto failure; + } + this->samplerate = wfx.nSamplesPerSec; + this->channels = wfx.nChannels; + this->bits = wfx.wBitsPerSample; + for (i=1; i <= wfx.nSamplesPerSec / CallbackRate; i+=i) this->buflen = i; + + _JFAud_LogMsg("WaveOut_DSound::Init(): got %dHz %d-bit %d-channel with %d-sample buffer\n", + this->samplerate, this->bits, this->channels, this->buflen); + + // 6. Create our secondary mixing buffer + ZeroMemory(&desc, sizeof(desc)); + desc.dwSize = sizeof(DSBUFFERDESC); + desc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLPOSITIONNOTIFY | DSBCAPS_LOCSOFTWARE; + desc.dwBufferBytes = wfx.nBlockAlign * this->buflen * 2; + desc.lpwfxFormat = &wfx; + if FAILED(hr = dsound->CreateSoundBuffer(&desc, &bufsec, NULL)) { + _JFAud_LogMsg("WaveOut_DSound::Init(): IDirectSound::CreateSoundBuffer() failed with error %s\n", DSoundErr(hr)); + goto failure; + } + + // 7. Setup the playback notification objects + if FAILED(hr = bufsec->QueryInterface(IID_IDirectSoundNotify, (VOID**)¬ify)) { + _JFAud_LogMsg("WaveOut_DSound::Init(): IDirectSoundBuffer::QueryInterface() failed with error %s\n", DSoundErr(hr)); + goto failure; + } + + // when notifypoints[1] is tripped, the cursor is beyond the half way mark and the first half gets filled + posn[0].dwOffset = wfx.nBlockAlign * this->buflen; + posn[0].hEventNotify = notifypoints[1]; + posn[1].dwOffset = 0; + posn[1].hEventNotify = notifypoints[2]; + + if FAILED(hr = notify->SetNotificationPositions(2, posn)) { + _JFAud_LogMsg("WaveOut_DSound::Init(): IDirectSoundNotify::SetNotificationPositions() failed with error %s\n", DSoundErr(hr)); + goto failure; + } + + // 8. Set the primary buffer playing. Our mixing buffer is still paused + if FAILED(hr = bufprim->Play(0,0,DSBPLAY_LOOPING)) { + _JFAud_LogMsg("WaveOut_DSound::Init(): IDirectSoundBuffer::Play() failed with error %s\n", DSoundErr(hr)); + goto failure; + } + + // 9. Spawn the mix thread + mixthread = CreateThread(NULL, 4096, (LPTHREAD_START_ROUTINE)MixThread, (LPVOID)this, 0, &threadid); + if (!mixthread) { + _JFAud_LogMsg("WaveOut_DSound::Init(): CreateThread() failed with error 0x%x\n", GetLastError()); + goto failure; + } else _JFAud_LogMsg("WaveOut_DSound::Init(): Spawned mixer thread %d\n", threadid); + + inited = true; + return true; + +failure: + if (notify) bufsec->Release(); notify = NULL; + if (bufsec) bufsec->Release(); bufsec = NULL; + if (bufprim) bufprim->Release(); bufprim = NULL; + if (dsound) dsound->Release(); dsound = NULL; + if (notifypoints[0]) CloseHandle(notifypoints[0]); notifypoints[0] = NULL; + if (notifypoints[1]) CloseHandle(notifypoints[1]); notifypoints[1] = NULL; + if (notifypoints[2]) CloseHandle(notifypoints[2]); notifypoints[2] = NULL; + return false; +} + +int WaveOut_DSound::GetSampleRate(void) const { return inited ? samplerate : -1; } +int WaveOut_DSound::GetChannels(void) const { return inited ? channels : -1; } +int WaveOut_DSound::GetBitsPerSample(void) const { return inited ? bits : -1; } +int WaveOut_DSound::GetMixBufferLen(void) const { return inited ? buflen : -1; } + +bool WaveOut_DSound::Pause(bool onf) +{ + HRESULT hr; + if (!inited) return false; + if (paused && !onf) { + if FAILED(hr = bufsec->Play(0,0,DSBPLAY_LOOPING)) { + if (hr == DSERR_BUFFERLOST) { + if (FAILED(hr = bufsec->Restore())) { + _JFAud_LogMsg("WaveOut_DSound::Pause() failed to restore with error %s\n", DSoundErr(hr)); + return false; + } + + hr = bufsec->Play(0,0,DSBPLAY_LOOPING); + } + if (FAILED(hr)) { + _JFAud_LogMsg("WaveOut_DSound::Pause() failed to play with error %s\n", DSoundErr(hr)); + return false; + } + } else paused = false; + } else if (!paused && onf) { + if FAILED(hr = bufsec->Stop()) { + _JFAud_LogMsg("WaveOut_DSound::Pause() failed to stop with error %s\n", DSoundErr(hr)); + return false; + } else paused = true; + } + + return true; +} + +bool WaveOut_DSound::Lock(void) +{ + if (!inited) return false; + EnterCriticalSection(&mutex); + return true; +} + +bool WaveOut_DSound::Unlock(void) +{ + if (!inited) return false; + LeaveCriticalSection(&mutex); + return true; +} + +bool WaveOut_DSound::SetVolume(float vol) +{ + return true; +} + +float WaveOut_DSound::GetVolume(void) const +{ + return 0.0; +} + +DWORD WINAPI WaveOut_DSound::MixThread(WaveOut_DSound *myself) +{ + LPVOID lockptr, lockptr2; + DWORD lockbytes, lockbytes2; + DWORD rv; + HRESULT hr; + int blocksize = myself->buflen * (myself->bits / 8) * myself->channels; + + while (1) { + rv = WaitForMultipleObjects(3, myself->notifypoints, FALSE, INFINITE); + if (rv == WAIT_OBJECT_0) { + // shutdown semaphore was signalled + _JFAud_LogMsg("WaveOut_DSound::MixThread(): shutdown event signalled\n"); + return 0; + } else if (rv > WAIT_OBJECT_0) { + // a notification point was passed + DWORD p = blocksize * (rv-WAIT_OBJECT_0-1); + + //_JFAud_LogMsg("WaveOut_DSound::MixThread(): notification point %d reached\n", rv-WAIT_OBJECT_0-1); + EnterCriticalSection(&myself->mutex); + + lockptr = lockptr2 = NULL; + lockbytes = lockbytes2 = 0; + if FAILED(hr = myself->bufsec->Lock(p, blocksize, &lockptr, &lockbytes, &lockptr2, &lockbytes2, 0)) { + if (hr == DSERR_BUFFERLOST) { + if (FAILED(hr = myself->bufsec->Restore())) { + _JFAud_LogMsg("WaveOut_DSound::MixThread() failed to restore with error %s\n", + DSoundErr(hr)); + LeaveCriticalSection(&myself->mutex); + continue; + } + + hr = myself->bufsec->Lock(p, blocksize, &lockptr, &lockbytes, &lockptr2, &lockbytes2, 0); + } + if FAILED(hr) { + _JFAud_LogMsg("WaveOut_DSound::MixThread() failed to lock buffer with error %s\n", DSoundErr(hr)); + LeaveCriticalSection(&myself->mutex); + continue; + } + } + + + myself->owner->MixSome(lockptr, lockbytes); + if (lockptr2) { + _JFAud_LogMsg("WaveOut_DSound::MixThread() got split buffer\n"); + myself->owner->MixSome(lockptr2, lockbytes2); + } + + if FAILED(hr = myself->bufsec->Unlock(lockptr,lockbytes,lockptr2,lockbytes2)) { + _JFAud_LogMsg("WaveOut_DSound::MixThread() failed to unlock buffer with error %s\n", DSoundErr(hr)); + } + + LeaveCriticalSection(&myself->mutex); + } else if (rv == WAIT_FAILED) { + _JFAud_LogMsg("WaveOut_DSound::MixThread(): wait failed\n"); + return 1; + } else { + _JFAud_LogMsg("WaveOut_DSound::MixThread(): other error\n"); + // WAIT_ABANDONED_x, WAIT_TIMEOUT + } + } +} + +static const char * const DSoundErr(HRESULT h) +{ + static char e[32]; + switch (h) { + case DS_OK: return "DS_OK"; +#ifdef DS_NO_VIRTUALIZATION + case DS_NO_VIRTUALIZATION: return "DS_NO_VIRTUALIZATION"; +#endif + case DSERR_ALLOCATED: return "DSERR_ALLOCATED"; + case DSERR_CONTROLUNAVAIL: return "DSERR_CONTROLUNAVAIL"; + case DSERR_INVALIDPARAM: return "DSERR_INVALIDPARAM"; + case DSERR_INVALIDCALL: return "DSERR_INVALIDCALL"; + case DSERR_GENERIC: return "DSERR_GENERIC"; + case DSERR_PRIOLEVELNEEDED: return "DSERR_PRIOLEVELNEEDED"; + case DSERR_OUTOFMEMORY: return "DSERR_OUTOFMEMORY"; + case DSERR_BADFORMAT: return "DSERR_BADFORMAT"; + case DSERR_UNSUPPORTED: return "DSERR_UNSUPPORTED"; + case DSERR_NODRIVER: return "DSERR_NODRIVER"; + case DSERR_ALREADYINITIALIZED: return "DSERR_ALREADYINITIALIZED"; + case DSERR_NOAGGREGATION: return "DSERR_NOAGGREGATION"; + case DSERR_BUFFERLOST: return "DSERR_BUFFERLOST"; + case DSERR_OTHERAPPHASPRIO: return "DSERR_OTHERAPPHASPRIO"; + case DSERR_UNINITIALIZED: return "DSERR_UNINITIALIZED"; + case DSERR_NOINTERFACE: return "DSERR_NOINTERFACE"; +#ifdef DSERR_ACCESSDENIED + case DSERR_ACCESSDENIED: return "DSERR_ACCESSDENIED"; +#endif + default: sprintf(e,"%X",h); return e; + } +} diff --git a/polymer/jfaud/src/waveout_dsound.hpp b/polymer/jfaud/src/waveout_dsound.hpp new file mode 100755 index 000000000..ed8f78937 --- /dev/null +++ b/polymer/jfaud/src/waveout_dsound.hpp @@ -0,0 +1,40 @@ +#ifndef __waveout_dsound_hpp__ +#define __waveout_dsound_hpp__ + +#include "waveout.hpp" + +class WaveOut_DSound : public WaveOut { +private: + SoftwareMixer *owner; + bool inited, paused; + int samplerate, channels, bits, buflen; + + HWND hwnd; + LPDIRECTSOUND dsound; + LPDIRECTSOUNDBUFFER bufprim, bufsec; + LPDIRECTSOUNDNOTIFY notify; + HANDLE notifypoints[3], mixthread; // notifypoint[0] is the shutdown signal for the mix thread + CRITICAL_SECTION mutex; + + static DWORD WINAPI MixThread(class WaveOut_DSound *myself); +protected: +public: + WaveOut_DSound(SoftwareMixer *); + virtual ~WaveOut_DSound(); + + virtual bool SetWindowHandle(HWND h); + virtual bool Init(int samplerate, int channels, int bits); + virtual int GetSampleRate(void) const; + virtual int GetChannels(void) const; + virtual int GetBitsPerSample(void) const; + virtual int GetMixBufferLen(void) const; + + virtual bool Pause(bool onf); + virtual bool Lock(void); + virtual bool Unlock(void); + virtual bool SetVolume(float vol); + virtual float GetVolume(void) const; +}; + +#endif + diff --git a/polymer/jfaud/src/waveout_sdl.cpp b/polymer/jfaud/src/waveout_sdl.cpp new file mode 100755 index 000000000..798219b54 --- /dev/null +++ b/polymer/jfaud/src/waveout_sdl.cpp @@ -0,0 +1,121 @@ +#define JFAUD_INTERNAL +#include "sysdefs.h" +#ifdef SCREWED_UP_CPP +# include "watcomhax/cstdlib" +#else +# include +#endif + +#include "log.h" +#include "waveout_sdl.hpp" +#include "softwaremixer.hpp" +#if defined __APPLE__ +# include +#else +# include "SDL.h" +#endif + +//using namespace std; + +#define CallbackRate 40 + +void WaveOut_SDL::sdlcallback(WaveOut_SDL *dev, void *buffer, int len) +{ + dev->owner->MixSome(buffer, len); +} + +WaveOut_SDL::WaveOut_SDL(SoftwareMixer *mix) + : owner(mix), inited(false), + WaveOut(mix), + samplerate(0), channels(0), bits(0), buflen(0) +{ +} + +WaveOut_SDL::~WaveOut_SDL() +{ + if (inited) SDL_CloseAudio(); +} + +bool WaveOut_SDL::Init(int samplerate, int channels, int bits) +{ + SDL_AudioSpec desired, achieved; + int targetlen, buflen, i; + + if (inited) return false; + + if (!SDL_WasInit(SDL_INIT_AUDIO)) return false; + + // find the nearest power-of-two buffer size that will give + // at least a callback rate of CallbackRate + targetlen = samplerate / CallbackRate; + for (i=1; i<=targetlen; i+=i) buflen = i; + + desired.freq = samplerate; + switch (bits) { + case 8: desired.format = AUDIO_S8; break; + case 16: desired.format = AUDIO_S16SYS; break; // the mixer shall mix in native byte order + default: return false; + } + desired.channels = channels; + desired.samples = buflen; + desired.callback = (void(*)(void*,Uint8*,int))sdlcallback; + desired.userdata = (void*)this; + + _JFAud_LogMsg("WaveOut_SDL::Init(): asked for %dHz %d-format %d-channel with %d-sample buffer\n", + samplerate, AUDIO_S16SYS, channels, buflen); + + if (SDL_OpenAudio(&desired, &achieved)) return false; // failure + + _JFAud_LogMsg("WaveOut_SDL::Init(): got %dHz %d-format %d-channel with %d-sample buffer\n", + achieved.freq, achieved.format, achieved.channels, achieved.samples); + + this->samplerate = achieved.freq; + this->channels = achieved.channels; + switch (achieved.format) { + case AUDIO_S8: this->bits = 8; break; + case AUDIO_S16SYS: this->bits = 16; break; + default: + SDL_CloseAudio(); + return false; + } + this->buflen = achieved.samples; + + inited = true; + return true; +} + +int WaveOut_SDL::GetSampleRate(void) const { return inited ? samplerate : -1; } +int WaveOut_SDL::GetChannels(void) const { return inited ? channels : -1; } +int WaveOut_SDL::GetBitsPerSample(void) const { return inited ? bits : -1; } +int WaveOut_SDL::GetMixBufferLen(void) const { return inited ? buflen : -1; } + +bool WaveOut_SDL::Pause(bool onf) +{ + if (!inited) return false; + SDL_PauseAudio(onf); + return true; +} + +bool WaveOut_SDL::Lock(void) +{ + if (!inited) return false; + SDL_LockAudio(); + return true; +} + +bool WaveOut_SDL::Unlock(void) +{ + if (!inited) return false; + SDL_UnlockAudio(); + return true; +} + +bool WaveOut_SDL::SetVolume(float vol) +{ + return false; +} + +float WaveOut_SDL::GetVolume(void) const +{ + return 0; +} diff --git a/polymer/jfaud/src/waveout_sdl.hpp b/polymer/jfaud/src/waveout_sdl.hpp new file mode 100755 index 000000000..ddf471b86 --- /dev/null +++ b/polymer/jfaud/src/waveout_sdl.hpp @@ -0,0 +1,31 @@ +#ifndef __waveout_sdl_hpp__ +#define __waveout_sdl_hpp__ + +#include "waveout.hpp" + +class WaveOut_SDL : public WaveOut { +private: + SoftwareMixer *owner; + bool inited; + int samplerate, channels, bits, buflen; + static void sdlcallback(class WaveOut_SDL *, void *, int); +protected: +public: + WaveOut_SDL(SoftwareMixer *); + virtual ~WaveOut_SDL(); + + virtual bool Init(int samplerate, int channels, int bits); + virtual int GetSampleRate(void) const; + virtual int GetChannels(void) const; + virtual int GetBitsPerSample(void) const; + virtual int GetMixBufferLen(void) const; + + virtual bool Pause(bool onf); + virtual bool Lock(void); + virtual bool Unlock(void); + virtual bool SetVolume(float vol); + virtual float GetVolume(void) const; +}; + +#endif + diff --git a/polymer/jfaud/testsnd/fishpolk.mid b/polymer/jfaud/testsnd/fishpolk.mid new file mode 100755 index 0000000000000000000000000000000000000000..e6a148559dd6e73f4ca736dbd16dc62f5c2b7836 GIT binary patch literal 4043 zcmeHJTW=Fb7(HVL+(H3aE;5n8*=9VObcIMQ6my` zbuzi!=gvZ-;oMkV-|Vzozpx}Rv$f^aw4~$I8lA@WHw{8>0ya|gSM)v+93XmjW_`WA zO&jf&bDh=r?L1z@x_EJ_fSw41#j_<6J#lvJNiY&Kf0GL@h#Dnp z$QZ1aD7l2p0?7rac}mVBGe>d`%uCiUl3awa*xFib^kSamJVb?L1&8W;4 zB+Gt6VP%ctwZXJZ@!Yb5bKHY}uUmRbgZuuL`WbVFVJ56qnx ztgOcx=Mk6n;w6s3WJ4M~LH1)eoc-|rgc!ZOGg=mB!Hkae4|d*K@oQqMX|sox;k2ib z2r+ucn6%qFZMHYWtc2$kW;ka<#?3?K=vlrpnJ3NgJ1ye9*3L~f#p-!+UFD-{=L}7; zaZ|Yd{)B2j+{_BaE4l>!BI$i*!yr=`teutp|MZA&{qN?7%R6hUPI0xI35nrRni$2fLlX{$Q#6sn@bPV} z-uMa3;yZs9r}Y?|a(icOtARg9@jBMRYo5l>|4-w+O(Xh+KaCUR?VbA_yoo);8y>>* zTnp|l(rw`)ng(+C$i2h(oconIm(5w@^Q>Dn=MtZ1+`S* zjR0;K+%o*S!DR4VgEs>BA>*>~U-tG4);`N#$6)QJ>~$GmOW$K$I@D|$yx-@2Tdnc+ zMx*xO?Xaw*AkxOOX0)MUbX{f5JoTBrrf;QNXEZtuW2GxCdAouQ(;HF#c=0vl-%F3{Pbk#O1 zVH!T7kPi4qZZ(qb^3ZwoBX44l;<1N`=L5dmeta`n1=y^;$AKJm|4IW)->P4|UeAHb abR%`SynsR>8s5+x3l5j`;B?OXb@>aiI`QKG literal 0 HcmV?d00001 diff --git a/polymer/jfaud/testsnd/jt_strng.xm b/polymer/jfaud/testsnd/jt_strng.xm new file mode 100755 index 0000000000000000000000000000000000000000..c74db8ead8b04112f8a0ed0a085e0bcdf0354af0 GIT binary patch literal 14622 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 literal 0 HcmV?d00001 diff --git a/polymer/jfaud/testsnd/pop.wav b/polymer/jfaud/testsnd/pop.wav new file mode 100755 index 0000000000000000000000000000000000000000..b024a281e60e35260427a563dc626841bf902787 GIT binary patch literal 9886 zcmXw;4Sdhl{=m;U-~G1VY;Cr+F}Aze*qVn$+ht8;8m74(LnW}@iAr&~DoRg^e~DB=6qk(6X20z>zjOZY&sYDQ*LnIppU*kxb3WhShW78}yS};eozZo$F6;69oEQJR`rPL6 zU&a4=Pvok!6&;@{+cor?F>5EzoABw_!qH1^`fSjeo;y2?NZsaMIz9Wqf{)j3I<yzl(F!2TBDycI=(o^SNoR`Eam{?dC(NlnMhtmx*O)%2P_ z9c%mDPoH=D=)GI#v)`J#Pq96fyQ0k`(nOL>W1c@1m-n8RmX6J@{6`z`Bao6`@Tt*w2c@lNNWo`~IW z*{Y;{DK#m}lV>y^f7!g)@<6q!y7+YCXZ4TPjj5ekJEyL7{o@T+HMOvZ)FJQh(IbO{ zW8aItFSc#)h3J)0-OLgfjEoGQ4?R`ixxVp2QvLAI^^LDL727_#Wz@dt;@JGSYvaF& zPrR&i{DNlJ1YZuUH&fhG7tb~B2wl9eu`a(Zqwa&c(1p#R_ZnYldMomrdr(jDzKr^N zKt&fse;jBLxH{^hnXOx^*)}>7eQ`+Bi{Ya1mEj@bpTkc!jlVcOGTn}G!rZrn z`McR}_M1cIeKXHoVLsL)^eMGaMXA@^2v^_&&e;Oj+l_Z0xMDR&?NVL!QvI=Rg!3ws zV`}xgdc3||?^KiES>*=06jx`D+TU&1wsN<*^)6nGRx8vom7sHVd#&{$^@bX%PPiGa zxm#-o+HmB($m5ZTk%uDBM?Q_TvJcrGZJAr^!meCB2JI{AX*ErCRwvyOSLBY``)ntB zA+k5JCGvITR3yvZVRzbGx6mmyN^Mhdx~KlDo~@^0RjFRoD<>aIfWO*g^iyC(aC{SfJU?FpOeM!A>WQCFyDs153< zN@O)%C>eNbJzPCigWK+AxeAw!&o0=IO>h~mySo!#f8iQjdvyzztW#gA1L}x6r1q+< zXn#XJr5*3<9Y|TCUdH0j)Cm<)&2$ipBC1~PLBkxp*h^V=(tYCAxMfIPhCkkP zdt9xHRfTG-nx|H)o$5DL14l^3!+TWiQ11f2QI)IKDyR;+-R?8D5&li^{Y0s8Q7Tz= z#Y2XLs*liTk1Tx2f=fTo~q~RvHDhKqwsq&{yVMqtBvgR3N;fi zma8&VqS~@MJypIMp@yqrcustGm-;If&csL0s8woUiTY1r_ro<;v4u=)BW{V(bU_`lTuMS^FVnf9i$ zNi+S-^`_JmaZ|HQj0x!){e%9R`}m38r9aa9^(MVuuSL(lk-q}zbFgEcUWlak^*5|X zWTlyI$hrziH<+R3FJ_b(X}X&VMm?!l`I?GNA5%^lNG&s!rU&rOXl{qz>!2$)x0!p* z7{zjypCQQFN4y|`xBBcf<14l%rEA0F9KZ_80{q@_i``E zQ{b)9UbRVtHx*otSLzjeWnQIM?p1iBy!*Xr-VNSF?_Tdd?>g^R?{D7qKnGJQy)oVt zZ=5&T8}HrD_k`nf< z@Vo@D)}+$5!Nz22y@~T$V`oe63M60YU5%C=$m@$W6QCk~y!x5>+8o2Thw$7PbJ*-Q zp7)FS9#7Wc&vWcZEj|}(gRG<(D-!FI@o66OcK$5EJIKD)BIhS_9L_y(96@d^yY~xw zxEJZ4at=PHe2IpSD4(Kvx7lbupnadSwvJP>jfwq zkv^jja09nd>wty0+lPq^hxIX{LzVuGd;A@v|LSky|BmP(^);fz2JY~K#HdBYpt+33 z=t;bAw-QaK5SMQx;*}Bm#_LLE!)Zqm`>rO!4y3=HXw`#SO52(E*N14BP9$ti>`kJk z6C)#}=q-7}o9Td#(uP>zb3@8*l@ zP2QR{YB`a71M&H3-hrh=>KSSoFWl2a?ODw4qF>6pyTpHK9wVyHVKzri=lz+Z?pKqE z@%K}E(cVbZA4vQk$m=wWGD3A?e6wn=`lx=Yh*}1wi|Vb4RVlA_CgUzZa#VuKRw=56 zH$Fwh(uZBWJMOHja>ppgdHwggpWOl8zk`epxqXa}@;2@Sy48Kd_zTKD-t$kO+2OWO z-z6jYfcN%w_Zsz0x7@wrR+AAdCa-wLEuvlQ7SPUc^WBr~G50j}K4!DrBW^nVRCfpU z9@=Scva58X-6Yz zb!qfzE(=HwZJJ9bn@V$uE{fVj_7QXu8|T6{hS^yg0n*BSWvi@q`>nOLz>d(@(N@`$ zE?GMbpwOhe#wwsuLK{oWZ{nYNDY+<&|zG*jtTMPDWMr(ks zXS~tAY~Qo5+NJh6u*>aA`=WgUs@Lo*K$hBNcCmfZ&a*4*0z23KgZ3Yk<?AwhK4R~pp9y>%8Q>(!1Us1VC_BOqwRhT^>}Y5Q z*g?z%HrV#IeeEsw8avF61zt(!d6VtVsK4!LuO+7(Y|DX_+u_jkhpG$XzO>z$=i3UT zl-O=SDwtP5-w9kd+nG{~gi>1oWhs>9Hj})&z-HNOW}RreGtQ*VWSnZ#Z31ncO}1^Q zxwHarYn$7EO#>2Smf~Yl!DiW3RN=9abYHRo(g8?YAJ@XhGS+anfGbGffnKB~AUO)I zD5Sbbw2kxiHitV7Xf(J`q$v_>t0NboiMH{SSSSNv!x6zX@x9PMO#s{6CfcTmM#IHO zHQd$kXsA=smg;i_p$Y;Qs#wM@lIYtcBf~rZu8xs~qB&Azy&OzRls%8klkhb`5lb6H zwpd_+*F?@os(jA6h>OJWy+DvfrUQQ=@;kPQynwBXq_Cy{tK;aiCXsLvOI;+*_e&6K z;=xBFKf(Tv)^x_=op`*Rg+B+n;wCyH4CB@ewqv*_6S!Za?B6JZ8Q%%@EsQ4so5H=CL_3~)cMtspIHytW zqTI)gonjw_avbC7K&Nm=XHyq2e~24B7szb8h+F&s&?o&e&pu|CP!>@CL3CISehD{x z1)~Mr{#S?{j}TMVFnSftO8SlVd9be&f!-s!tg)+^Z>BC`z6IzSqSIDJTkQWpyPfuR zBGV=!*L#dVw7aOgiCXUw<+i|i(2r|-px9{-_~Q?Vf%}MhpArL4+OHVzWps*oxf5uJ z`7yq8zaWC1CQk0PH8$XW=S%SfarJ@^{eiFGTIdgQ$Yb3}>ufbt2`&Wu0x*jdm}z{S_k;EppT8WsF+fHExsA7W zk{in_I|b}$c!n{*4Zgv=#`o~;Kc0RjQm63i#$8a~hP`7U&h-%AGx#XX9B&;mo%OElfajf13XN>4BR7bF8GCR z9+*XLCAb;n5X<44js8W*mi%FbdyYI~6{A(;7t7H+4Zi2dIfQEyur=fy&(prh*Z(7M zucEA=tf8!hZUyt_!ObT}S&bHvw#Kcae-Z2&APcE)y0@Wug?j0 z{}ZsiSaN{e?Q=4=o!It1TE2zqTe7*M*tw6KCcN5~cTV}*?O!}Trwukh}7r{Fq+T#@<%^UskZ8Ktxh{1$Tp{3+(g!0+ML zn&U`6iL^SfRlejp@CV>M?LxG_x@zF{?kt=KfK~Z=4)VK9J>yf(@ca33Gzy)_IswfQ zez!5I)@gnZ5}nn|h5u(H*84i+!JJ_h@pIoga6%WSnt(-ti&3Y6oMqMk_i5--RM-W` zmg7{s3ZT2%HGw~l-A&NQ@Aio*hTrj1pwP_f$)_V!jZDEMz~96#Q8D}uCe%Td#5fjA zBEK-Dp)(9!Jv3GHNx%}2m7`KAiQvQ7mB5;6>C>5|flG%fiC?agk<;XIp%R*SGW}HK z$1{%ul1PoXEY*=&4!?wD(IOAEb(g6d-xPIzpEZ zMIw+)X6Y&yX}#b`V4MzBka0Y+a{20L3r{&;9wkWVf}9lK8r}lnxqPAIfhnQS@xN2D z;TK#!k_%NgxU>0gNda0w>Bx6YDPK4p;ppM_d1%UGd!Y(F{4~4N|D$}RRGENzm!VAlmN*?a{;t%!S&<&Y6P_1`3xqYYvZ8M2>5ar8^!-#N`Z`kE zB3taL08+v4l#^M-5G0pjX8}69z}+24e>I3NzF}Z1n3d3WMSc%z37COM9^q>$gs%^{ zGGL>yuhN$_0Qzz$i&%qruou>kQRDetb-4cxSps(-*3c7Kl~4?2K3d(z_vFoR_CtF) zJcF>W6275u4+q+lI?!KbIrx5jrH%!Dv#+-Vco){(9ZM>yvZmYM9L1OGAZRPl(iI7P z&@%+c7*;2`hqIDFK186yfKP<@fr-i$j48^Vd@Wz3g*$IAu2~D1)GvZ}@V&Rf@K5?2q`lpKncnC~gGX z1AHIw!Y|gB`yP?C^#@)KMITCk=3~$$-Wl}=OwNv+x_-b0qH7R4&<71Yu};=4wb+*` zH?Lxp`HZ^*lix5p0+CzVi5Sox z-eSguzGbD*7cy@PRS`V-zFqB+Clb3rBhdDY3gIq9Vjj|ZGS2m7%N_6J-|>!&L_{RB0ZAom;W|jy} zC^DclU^4u;FBHkdytM&rjHM*= zh6R0$yrJ^K3VrM!no^miGLG(GKP{z~CTN;IqSXy}tWgNpu12MD#+C=0< zK^^aF6UqQ%#s9jRpqCe2sO7y*rA_iB$MKe1UUN%Up@0fiJaS}}Vx!n6>u++2%oG^O zNt)mZVPi5dS#1*3k~@e7$t7z144@uLu`CYTTLMpjuAa3w!6{n9WEUaUt5{DEsPXlr z`0EP#D{sQ82C^Kb&XP4qt|R$|V#O~vY3V3OmU{3Dx@%p~aBk;u9OjAdO4tHWqK z$@mQPb>u@a$Q0|eFGp4^zONw*tD>CsGdfv;#WwN8rCdYgM4$;lQ;VEBW|ARE8xNK2 zw^$&OEmCTIjb~WLDfU1xa@x}Hmh4+li3G9!3_g?m?UDpJRdQB>&|Q*TgZw6FYp`3h zXP0(bJSyio%|Futc05W|v+6L`X~we0au1Wap*f5c)Uu}`G)19139rY%9R;o>D~!h% zawCLOBSkz?kL@8=5nx}^;Y|gX#z@Yofl^iw_AR?~A`^g1ww1)4jKc>hXq8`Q>(SVN zRhm^rI0cDFOo3lkDz`@@$@*)2&&!@h`DabAf|tBkvu7v${P+a^Jn8S`S=L)ejiGJA z;xIm{#-CN}aV^=m>~<5S8V`!kW#zIO@j(b^HF9dm_RoS9PK8A>vYhTy(A1#m2(<=z zG7rc=?4nIlcvre+) zpnr$tmJ783Dt?NBUpz1IN+OzgtO0tFR}Y;~%Wlg(llzedK8d+Sf`O_5I{6>4*ev@e z=PC_35_#jH3qURBUm}R;lUOC0u(X-rBp+`LolwcSmYiB{vp^-Dq`)IPeJQ40y0fwm z5+x$+jQAjgm9odRz~tuF;b}SVvSXJ{MHAM=K_m1bXoN>jysSgK(Le+eZ;Ov4(nuT; z-^8DB6}w%uL`aPqzYE{ zPtK2g@rVcIR*UClN5$*%C%wD|63Z^d*)ZG^oi42qt50Gc_lL#+dntdigR+NFct&nw61}`_5-H@>lJ`UTRip|| ztSl54)i^a{3SKJE;G#zBl}talgAKPZ&Aw{=a5laa}?7b+_Mp q$F%HWh1u8LJMNB29kXwrK7DHGl~>M~F{5x2bTgnU9Dnx|rT!1U$D?Kd literal 0 HcmV?d00001 diff --git a/polymer/jfaud/testsnd/relaxation.aiff b/polymer/jfaud/testsnd/relaxation.aiff new file mode 100755 index 0000000000000000000000000000000000000000..90aa10a10c2ea33a188252fb7815ab96f8cdb988 GIT binary patch literal 498382 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¬o=@>X}70sE9w51$X2D=%M<` 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¥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

  • --PvYAM0L63ZKW8*RUp&YI&vyGj*eMG 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ơ$#QRR$NV8S#RqsV&Zk);q#pxAZ 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
  • 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≻iSI3PjeHU@e&e4uxTurWgvW_;=6` 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 bF;);-7ix{X&q|?oxPjM%{=?hQoY?e#X%7I8 literal 0 HcmV?d00001 diff --git a/polymer/jfaud/testsnd/relaxation.flac b/polymer/jfaud/testsnd/relaxation.flac new file mode 100755 index 0000000000000000000000000000000000000000..f67059c5ea2378ae953e251b16a756d9c45135fc GIT binary patch literal 280278 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%0ASio~#P&Zv?&-;bB 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