File: SOUND.C | Size: 5,905 bytes | Download file | Back to directory listing | BWPOW's homepage
#include <mikmod.h>
#include <allegro.h>
#include <libamp.h>
#include <easymik.h>
#include <tdgui.h>
#include <audlib.h>
#include "pp.h"
 
MIDI *midi;
SAMPLE *samp;
BITMAP *bmpp,*pred,*poza;
UNIMOD *mf;
 
/*
0 - midi
1 - wav,voc
2 - mp3
3 - mikmod
4 - aud
*/
 
void init_player()
{
  poza=create_bitmap(640,480);
  bmpp=create_bitmap(250,100);
  pred=create_bitmap(250,100);
 
  text_mode(0);
  tdbox1(pred,0,0,250,100,6);
 
  stretch_blit(data_pp,pred,0,0,205,55,2,2,246,25);
  //195,190
 
  rectfill(pred,5,30,245,70,0);
  tdbox1(pred,5,30,240,40,1);
 
  blit(data_but1,pred,0,0,18,76,214,18);
}
static char *monoster[]={"STEREO","MONO"};
 
void nicer_player(char filename[45],char t,BITMAP *pozz)
{
  char k=0,timm=0,tims=0,tbuf[30],c=1,pres=-1,i,m=0,pause=0;
  int x=195,y=190,mx,my,ox,oy;
 
  rectfill(pred,5,30,245,70,0);
  tdbox1(pred,5,30,240,40,1);
  textout(pred,font,filename,10,35,255);
 
  if(t==0){
    sprintf(tbuf,"%dkbps %dHz %s",amp_bitrate,amp_samprat,monoster[!amp_stereo]);
    textout(pred,font,tbuf,10,55,255);
  }
  if(t==1){
    sprintf(tbuf,"%dHz %s",aud_freq,monoster[!aud_stereo]);
    textout(pred,font,tbuf,10,55,255);
  }
 
  if(t==2){
    sprintf(tbuf,"BPM %d",mp_bpm);
    textout(pred,font,tbuf,10,55,255);
  }
 
  if(t==3){
    textout(pred,font,"MIDI",10,55,255);
  }
 
  while(k!=1){
    if(c==1){
      blit(pozz,poza,0,0,0,0,640,480);
 
      blit(pred,bmpp,0,0,0,0,250,100);
      sprintf(tbuf,"TIME %02d:%02d",timm,tims);
      textout(bmpp,font,tbuf,10,45,255);
 
      if(pause==1)
        textout(bmpp,font,"PAUSE",110,45,155);
 
      if(pres>=0)
        blit(data_but2,bmpp,23*pres,0,18+23*pres,76,23,18);
      blit(bmpp,poza,0,0,x,y,250,100);
 
      show_mouse(0);
      blit(poza,screen,0,0,0,0,640,480);
      show_mouse(screen);
      c=0;
    }
 
    if(pres>=0){
      pres=-1;c=1;
      while(mouse_b);
    }
 
    i=-1;
    if(mouse_b==1&&m==0&&pres==-1){
      mx=mouse_x-x;
      my=mouse_y-y;
      if(mx>=0&&my>=0&&mx<250&&my<100){
        if(my<17){
          ox=mx;
          oy=my;
          m=1;
          c=1;
        }
        if(mx>18&&mx<232&&my>76&&my<94)
          i=(mx-18)/23;
 
      }
    }
    if(m==1){
      mx=mouse_x;
      my=mouse_y;
      if(mouse_b){
        if((x+ox!=mx)||(y+oy!=my)){
          x=mx-ox;
          y=my-oy;
          c=1;
        }
      }
      else{
        m=0;
        c=1;
      }
    }
 
 
    if(key[KEY_Z]) i=0;
    if(key[KEY_X]) i=1;
    if(key[KEY_C]) i=2;
    if(key[KEY_V]) i=3;
    if(key[KEY_B]) i=4;
 
/*
0 - rewind
1 - play
2 - pause
3 - exit
4 - ffwd
*/
    pres=i;
    if(i>=0) c=1;
 
    if(i==3) k=1;
 
    if(t==0){
      if(poll_amp()<=0) __dpmi_yield();
 
      if(i==4) seek_amp_rel(4*amp_samprat/amp_pollsize); /* seek 4 seconds */
      if(i==0) seek_amp_rel(-4*amp_samprat/amp_pollsize); /* seek 4 seconds */
      if(i==1) replay_amp();
 
      if(amp_dec_time!=timm*60+tims){
        timm=amp_dec_time/60;
        tims=amp_dec_time%60;
        c=1;
      }
    }
 
    if(t==1){
      if(poll_aud()<0) k=1;
 
      if(i==1){restart_aud();}
      if(i==2){
        if(pause==0){
          pause_aud();
          pause=1;
        }
        else{
          resume_aud();
          pause=0;
        }
      }
 
    }
 
    if(t==2){
      if(i==0) MP_PrevPosition();
      if(i==4) MP_NextPosition();
 
      if(i==1) MP_SetPosition(0);
 
      if(mp_patpos!=tims){
        tims=mp_patpos;
        c=1;
      }
      if(mp_sngpos!=timm){
        timm=mp_sngpos;
        c=1;
      }
    }
 
    if(t==3){
      if(i==0) midi_seek(midi_pos-1);
      if(i==4) midi_seek(midi_pos+1);
      if(i==2){
        if(pause==0){
          midi_pause();
          pause=1;
        }
        else{
          midi_resume();
          pause=0;
        }
        c=1;
      }
 
      if(i==1) midi_seek(0);
 
      if(midi_pos!=timm*60+tims){
        timm=midi_pos/60;
        tims=midi_pos%60;
        c=1;
      }
 
    }
 
 
 
    /*******************************************/
 
 
    if(key[KEY_ESC]) k=1;
  }
 
  clear_keybuf();
  text_mode(-1);
}
 
 
 
void paceplay_play(char t,char filename[45],BITMAP *pozz)
{
  default_gfx();
  if(t==0)
  {
    install_sound(0,-1,0);
    midi=load_midi(filename);
    if(midi==NULL){
      remove_sound();
      billalert("ERROR","Error in MIDI!",0,"&OK",0,'o',0);
      return;
    }
    play_midi(midi,1);
 
    nicer_player(filename,3,pozz);
 
    stop_midi();
    destroy_midi(midi);
    remove_sound();
  }
 
  if(t==1)
  {
    install_sound(-1,0,0);
    samp=load_sample(filename);
    if(samp==NULL){
      remove_sound();
      billalert("ERROR","Error in WAVE!",0,"&OK",0,'o',0);
      return;
    }
    play_sample(samp,255,128,1000,1);
    billalert("DIGI player",filename,digi_driver->desc,"&Stop",0,'s',0);
    // todo: this shity function (play wave)
    stop_sample(samp);
    destroy_sample(samp);
    remove_sound();
  }
 
  if(t==2){
    install_sound(-1,0,0);
    install_amp();
    load_amp(filename,0);
 
    nicer_player(filename,0,pozz);
 
    unload_amp();
    remove_sound();
  }
 
  if(t==3){
    init_mikmod(DEVICE_AUTODETECT);
    mf=init_mod(filename);
    if(mf==NULL){
      end_mikmod();
      billalert("ERROR","Error in module!",0,"&OK",0,'o',0);
      return;
    }
    play_mod(mf,1);
 
    nicer_player(filename,2,pozz);
 
    stop_mod();
    free_mod(mf);
    end_mikmod();
  }
 
  if(t==5){
    install_sound(-1,0,0);
    if(load_aud_stream(filename,1)!=TRUE){
      remove_sound();
      billalert("ERROR","Error in AUD file!",0,"&OK",0,'o',0);
      return;
    }
 
    nicer_player(filename,1,pozz);
 
    unload_aud_stream();
    remove_sound();
  }
 
}