home *** CD-ROM | disk | FTP | other *** search
- //***************************************************************************
- //
- // this file is (c) '94-'96 Niklas Beisert
- //
- // this file is part of the cubic player development kit.
- // you may only use/modify/spread this file under the terms stated
- // in the cubic player development kit accompanying documentation.
- //
- //***************************************************************************
-
- //[general]
- // link=playwav
- //[fileselector]
- // modextensions=WAV
- // readinfos=_wavReadInfoReg
- //[filetype 28]
- // color=6
- // name=WAV
- // interface=_plCubicPlayer
- // player=_wavPlayer
-
-
- // interface example
-
- #include <ctype.h>
- #include <stdlib.h>
- #include <string.h>
- #include <conio.h>
- #include <time.h>
- #include "pfilesel.h"
- #include "poutput.h"
- #include "player.h"
- #include "psetting.h"
- #include "binfile.h"
- #include "wave.h"
- #include "sets.h"
- #include "deviplay.h"
- #include "cpiface.h"
-
- extern char plPause;
-
- extern int plLoopMods;
-
- static binfile *wavefile;
- static unsigned long wavelen;
- static unsigned long waverate;
-
- static long starttime;
- static long pausetime;
- static char currentmodname[_MAX_FNAME];
- static char currentmodext[_MAX_EXT];
- static char *modname;
- static char *composer;
- static short vol;
- static short bal;
- static short pan;
- static char srnd;
- static long amp;
- static short speed;
- static short reverb;
- static short chorus;
- static char finespeed=8;
-
-
- static void wavDrawGStrings(short (*buf)[132])
- {
- if (plScrWidth==80)
- {
- writestring(buf[0], 0, 0x09, " vol: ········ ", 15);
- writestring(buf[0], 15, 0x09, " srnd: · pan: l···m···r bal: l···m···r ", 41);
- writestring(buf[0], 56, 0x09, " spd: ---% \x1D ptch: ---% ", 24);
- writestring(buf[0], 6, 0x0F, "■■■■■■■■", (vol+4)>>3);
- writestring(buf[0], 22, 0x0F, srnd?"x":"o", 1);
- if (((pan+70)>>4)==4)
- writestring(buf[0], 34, 0x0F, "m", 1);
- else
- {
- writestring(buf[0], 30+((pan+70)>>4), 0x0F, "r", 1);
- writestring(buf[0], 38-((pan+70)>>4), 0x0F, "l", 1);
- }
- writestring(buf[0], 46+((bal+70)>>4), 0x0F, "I", 1);
- writenum(buf[0], 62, 0x0F, speed*100/256, 10, 3);
- writenum(buf[0], 75, 0x0F, speed*100/256, 10, 3);
-
- writestring(buf[1], 57, 0x09, "amp: ...% filter: ... ", 23);
- writenum(buf[1], 62, 0x0F, amp*100/64, 10, 3);
- writestring(buf[1], 75, 0x0F, "off", 3);
-
- waveinfo inf;
- wpGetInfo(inf);
- long tim;
-
- tim=inf.len/inf.rate;
- writestring(buf[1], 0, 0x09, " pos: ...% / ......k size: ......k len: ..:..", 57);
- writenum(buf[1], 7, 0x0F, (inf.pos*100+(inf.len>>1))/inf.len, 10, 3);
- writenum(buf[1], 43, 0x0F, (tim/60)%60, 10, 2, 1);
- writestring(buf[1], 45, 0x0F, ":", 1);
- writenum(buf[1], 46, 0x0F, tim%60, 10, 2, 0);
- writenum(buf[1], 29, 0x0F, (inf.len>>(10-inf.stereo-inf.bit16)), 10, 6, 1);
- writenum(buf[1], 14, 0x0F, (inf.pos>>(10-inf.stereo-inf.bit16)), 10, 6, 1);
-
- if (plPause)
- tim=(pausetime-starttime)/CLK_TCK;
- else
- tim=(clock()-starttime)/CLK_TCK;
-
- writestring(buf[2], 0, 0x09, " wave ········.···: ............................... time: ..:.. ", 80);
- writestring(buf[2], 8, 0x0F, currentmodname, 8);
- writestring(buf[2], 16, 0x0F, currentmodext, 4);
- writestring(buf[2], 22, 0x0F, modname, 31);
- if (plPause)
- writestring(buf[2], 58, 0x0C, "paused", 6);
- writenum(buf[2], 74, 0x0F, (tim/60)%60, 10, 2, 1);
- writestring(buf[2], 76, 0x0F, ":", 1);
- writenum(buf[2], 77, 0x0F, tim%60, 10, 2, 0);
- }
- else
- {
- writestring(buf[0], 0, 0x09, " volume: ················ ", 30);
- writestring(buf[0], 30, 0x09, " surround: · panning: l·······m·······r balance: l·······m·······r ", 72);
- writestring(buf[0], 102, 0x09, " speed: ---% \x1D pitch: ---% ", 30);
- writestring(buf[0], 12, 0x0F, "■■■■■■■■■■■■■■■■", (vol+2)>>2);
- writestring(buf[0], 41, 0x0F, srnd?"x":"o", 1);
- if (((pan+68)>>3)==8)
- writestring(buf[0], 62, 0x0F, "m", 1);
- else
- {
- writestring(buf[0], 54+((pan+68)>>3), 0x0F, "r", 1);
- writestring(buf[0], 70-((pan+68)>>3), 0x0F, "l", 1);
- }
- writestring(buf[0], 83+((bal+68)>>3), 0x0F, "I", 1);
- writenum(buf[0], 110, 0x0F, speed*100/256, 10, 3);
- writenum(buf[0], 124, 0x0F, speed*100/256, 10, 3);
-
- waveinfo inf;
- wpGetInfo(inf);
- long tim;
- tim=inf.len/inf.rate;
- writestring(buf[1], 0, 0x09, " position: ...% / ......k size: ......k length: ..:.. opt: .....Hz, .. bit, ......", 92);
- writenum(buf[1], 14, 0x0F, (inf.pos*100+(inf.len>>1))/inf.len, 10, 3);
- writenum(buf[1], 53, 0x0F, (tim/60)%60, 10, 2, 1);
- writestring(buf[1], 55, 0x0F, ":", 1);
- writenum(buf[1], 56, 0x0F, tim%60, 10, 2, 0);
- writenum(buf[1], 36, 0x0F, (inf.len>>(10-inf.stereo-inf.bit16)), 10, 6, 1);
- writenum(buf[1], 21, 0x0F, (inf.pos>>(10-inf.stereo-inf.bit16)), 10, 6, 1);
- writenum(buf[1], 65, 0x0F, inf.rate, 10, 5, 1);
- writenum(buf[1], 74, 0x0F, 8<<inf.bit16, 10, 2, 1);
- writestring(buf[1], 82, 0x0F, inf.stereo?"stereo":"mono", 6);
-
- writestring(buf[1], 92, 0x09, " amplification: ...% filter: ... ", 40);
- writenum(buf[1], 110, 0x0F, amp*100/64, 10, 3);
- writestring(buf[1], 124, 0x0F, "off", 3);
-
- if (plPause)
- tim=(pausetime-starttime)/CLK_TCK;
- else
- tim=(clock()-starttime)/CLK_TCK;
-
- writestring(buf[2], 0, 0x09, " wave ········.···: ............................... composer: ............................... time: ..:.. ", 132);
- writestring(buf[2], 11, 0x0F, currentmodname, 8);
- writestring(buf[2], 19, 0x0F, currentmodext, 4);
- writestring(buf[2], 25, 0x0F, modname, 31);
- writestring(buf[2], 68, 0x0F, composer, 31);
- if (plPause)
- writestring(buf[2], 100, 0x0C, "playback paused", 15);
- writenum(buf[2], 123, 0x0F, (tim/60)%60, 10, 2, 1);
- writestring(buf[2], 125, 0x0F, ":", 1);
- writenum(buf[2], 126, 0x0F, tim%60, 10, 2, 0);
- }
- }
-
- static void normalize()
- {
- speed=set.speed;
- pan=set.pan;
- bal=set.bal;
- vol=set.vol;
- amp=set.amp;
- srnd=set.srnd;
- reverb=set.reverb;
- chorus=set.chorus;
- wpSetAmplify(1024*amp);
- wpSetVolume(vol, bal, pan, srnd);
- wpSetSpeed(speed);
- // wpSetMasterReverbChorus(reverb, chorus);
- }
-
- static void wavCloseFile()
- {
- wpClosePlayer();
- wavefile->close();
- }
-
- static int wavProcessKey(unsigned short key)
- {
- int i;
- switch (key)
- {
- case 'p': case 'P': case 0x10:
- if (plPause)
- starttime=starttime+clock()-pausetime;
- else
- pausetime=clock();
- plPause=!plPause;
- wpPause(plPause);
- break;
- case 0x8D00: //ctrl-up
- wpSetPos(wpGetPos()-waverate);
- break;
- case 0x9100: //ctrl-down
- wpSetPos(wpGetPos()+waverate);
- break;
- case 0x7300: //ctrl-left
- wpSetPos(wpGetPos()-(wavelen>>5));
- break;
- case 0x7400: //ctrl-right
- wpSetPos(wpGetPos()+(wavelen>>5));
- break;
- case 0x7700: //ctrl-home
- wpSetPos(0);
- break;
- case '-':
- if (vol>=2)
- vol-=2;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case '+':
- if (vol<=62)
- vol+=2;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case '/':
- if ((bal-=4)<-64)
- bal=-64;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case '*':
- if ((bal+=4)>64)
- bal=64;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case ',':
- if ((pan-=4)<-64)
- pan=-64;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case '.':
- if ((pan+=4)>64)
- pan=64;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case 0x3c00: //f2
- if ((vol-=8)<0)
- vol=0;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case 0x3d00: //f3
- if ((vol+=8)>64)
- vol=64;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case 0x3e00: //f4
- wpSetVolume(vol, bal, pan, srnd=srnd?0:2);
- break;
- case 0x3f00: //f5
- if ((pan-=16)<-64)
- pan=-64;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case 0x4000: //f6
- if ((pan+=16)>64)
- pan=64;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case 0x4100: //f7
- if ((bal-=16)<-64)
- bal=-64;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case 0x4200: //f8
- if ((bal+=16)>64)
- bal=64;
- wpSetVolume(vol, bal, pan, srnd);
- break;
- case 0x4300: //f9
- case 0x8500: //f11
- if ((speed-=finespeed)<16)
- speed=16;
- wpSetSpeed(speed);
- break;
- case 0x4400: //f10
- case 0x8600: //f12
- if ((speed+=finespeed)>2048)
- speed=2048;
- wpSetSpeed(speed);
- break;
- case 0x5f00: // ctrl f2
- if ((amp-=4)<4)
- amp=4;
- wpSetAmplify(1024*amp);
- break;
- case 0x6000: // ctrl f3
- if ((amp+=4)>252)
- amp=252;
- wpSetAmplify(1024*amp);
- break;
- case 0x8900: // ctrl f11
- finespeed=(finespeed==8)?1:8;
- break;
- case 0x6a00:
- normalize();
- break;
- case 0x6900:
- set.pan=pan;
- set.bal=bal;
- set.vol=vol;
- set.speed=speed;
- set.amp=amp;
- set.srnd=srnd;
- break;
- case 0x6b00:
- pan=64;
- bal=0;
- vol=64;
- speed=256;
- amp=64;
- wpSetVolume(vol, bal, pan, srnd);
- wpSetSpeed(speed);
- wpSetAmplify(1024*amp);
- break;
- default:
- if (plrProcessKey)
- {
- int ret=plrProcessKey(key);
- if (ret==2)
- cpiResetScreen();
- if (ret)
- return 1;
- }
- return 0;
- }
- return 1;
- }
-
-
- static int wavLooped()
- {
- wpSetLoop(plLoopMods);
- wpIdle();
- if (plrIdle)
- plrIdle();
- return !plLoopMods&&wpLooped();
- }
-
-
- static int wavOpenFile(const char *path, moduleinfostruct &info, binfile *wavf)
- {
- if (!wavf)
- return -1;
-
- _splitpath(path, 0, 0, currentmodname, currentmodext);
- modname=info.modname;
- composer=info.composer;
-
- cputs("preloading ");
- cputs(currentmodname);
- cputs(currentmodext);
- cputs("...\r\n");
-
- wavefile=wavf;
-
- plIsEnd=wavLooped;
- plProcessKey=wavProcessKey;
- plDrawGStrings=wavDrawGStrings;
- plGetMasterSample=plrGetMasterSample;
- plGetRealMasterVolume=plrGetRealMasterVolume;
-
- if (!wpOpenPlayer(*wavefile, cfGetProfileBool2(cfSoundSec, "sound", "wavetostereo", 1, 1)))
- return -1;
-
- starttime=clock();
- normalize();
-
- waveinfo inf;
- wpGetInfo(inf);
- wavelen=inf.len;
- waverate=inf.rate;
-
- return 0;
- }
-
- extern "C"
- {
- cpifaceplayerstruct wavPlayer = {wavOpenFile, wavCloseFile};
- };
-