Esempio n. 1
0
static void MIDAS_start(struct mpxplay_audioout_info_s *aui)
{
 if(midashandle){
  MIDASresumeStream(midashandle);
 }else{
  midashandle=MIDASplayStreamPolling(4,aui->freq_card,1000);
  if(midashandle==NULL){
   pds_textdisplay_printf("MIDAS error: ");
   pds_textdisplay_printf(MIDASgetErrorMessage(MIDASgetLastError()));
   MIDASclose();
   exit(0);
  }
  MIDAS_setvol();
 }
 aui->card_infobits|=AUINFOS_CARDINFOBIT_PLAYING;
}
Esempio n. 2
0
static int MIDAS_detect(struct mpxplay_audioout_info_s *aui)
{
 unsigned int iscard,len;
 char midascnffile[300];
 pds_getpath_from_fullname(midascnffile,freeopts[OPT_PROGNAME]);
 len=pds_strlen(midascnffile);
 if(len && (midascnffile[len-1]!=PDS_DIRECTORY_SEPARATOR_CHAR))
  len+=pds_strcpy(&midascnffile[len],PDS_DIRECTORY_SEPARATOR_STR);
 pds_strcpy(&midascnffile[len],"mpxmidas.ini");
 MIDASstartup();
 MIDASsetOption(MIDAS_OPTION_MIXING_MODE,1);
 if(aui->card_controlbits&AUINFOS_CARDCNTRLBIT_MIDASMANUALCFG){
  iscard=MIDASconfig();
  MIDASsaveConfig(midascnffile);
 }else{
  iscard=MIDASloadConfig(midascnffile);
  if(!iscard)
   iscard=MIDASdetectSoundCard();
 }
 iscard+=MIDASinit();
 iscard+=MIDASopenChannels(2);
 if(iscard==3){
  midashandle=MIDASplayStreamPolling(4,aui->freq_card,1000);
  if(midashandle){
   MIDASpauseStream(midashandle);
   iscard++;
  }
 }
 if(iscard<4){
  pds_textdisplay_printf("MIDAS error: ");
  pds_textdisplay_printf(MIDASgetErrorMessage(MIDASgetLastError()));
  MIDASclose();
  return 0;
 }
 return 1;
}
Esempio n. 3
0
static void soundPlay(struct Sound *s,char *filename,int fileofs,int filesize,int loop)
{
    // read sound file header
    int err;
    fileHandle fh=0;
    long fsize;
    #define HEADSIZE 78
    unsigned char buf[HEADSIZE];
    memset(buf,0,HEADSIZE);
#ifdef EXTENDFILE
    rfSuperStart=fileofs;
    rfSuperSize=filesize;
#endif
    s->loop=loop;
    #define MCALL1(f) err=f;if(err) {reportErr(err); return;}
    #define MCALL2(f) err=f;if(err) {reportErr(err); err=fileClose(fh); if(err) reportErr(err); return;}
    MCALL1(fileOpen(filename,fileOpenRead,&fh));
    MCALL2(fileGetSize(fh,&fsize));
    MCALL2(fileRead(fh,buf,fsize<HEADSIZE?fsize:HEADSIZE));
    MCALL1(fileClose(fh));
    // analyze sound file header
    // waw sample? starts with "RIFF" with fmt!=55h
    if (buf[0]=='R' && buf[1]=='I' && buf[2]=='F' && buf[3]=='F' /*&& buf[8]=='W' && buf[9]=='A' && buf[10]=='V' && buf[11]=='E'*/  && buf[20]!=0x55)
    {
        extern int lastWAVfreq;
        s->type=Sample;
        s->datahandle=(int)MIDASloadWaveSample(filename,loop?MIDAS_LOOP_YES:MIDAS_LOOP_NO);
        if(s->datahandle) s->playhandle=(int)MIDASplaySample((MIDASsample)s->datahandle,MIDAS_CHANNEL_AUTO,0/*priority*/,lastWAVfreq,64,MIDAS_PAN_MIDDLE);
    }
#ifdef EXTENDFILE
    // iff sample with 0x16 characters long name? (FT2 makes them)
    // it isn't ment as IFF support, just quick 99% working hack
    else if (buf[0]=='F' && buf[1]=='O' && buf[2]=='R' && buf[3]=='M' && buf[8]=='8' && buf[9]=='S' && buf[10]=='V' && buf[11]=='X' && buf[12]=='N' && buf[13]=='A' && buf[14]=='M' && buf[15]=='E' && buf[16]==0 && buf[17]==0 && buf[18]==0 && buf[19]==0x16)
    {
        int rate=(buf[62]<<8)+buf[63];
        rfSuperStart+=78;
        rfSuperSize=MIN(fsize-78,(buf[74]<<24)+(buf[75]<<16)+(buf[76]<<8)+buf[77]);
        rfSuperXor=128;
        s->type=Sample;
        s->datahandle=(int)MIDASloadRawSample(filename,MIDAS_SAMPLE_8BIT_MONO,loop?MIDAS_LOOP_YES:MIDAS_LOOP_NO);
        if(s->datahandle) s->playhandle=(int)MIDASplaySample((MIDASsample)s->datahandle,MIDAS_CHANNEL_AUTO,0/*priority*/,rate,64,MIDAS_PAN_MIDDLE);
    }
#endif
    // mp3 stream? starts with FF Fx or FF Ex or "ID3" or "RIFF" with fmt=55h
    else if ( (buf[0]==0xff && (buf[1] & 0xe0)==0xe0)
           || (buf[0]=='I' && buf[1]=='D' && buf[2]=='3')
           || (buf[0]=='R' && buf[1]=='I' && buf[2]=='F' && buf[3]=='F' && buf[20]==0x55) )
    {
        int rate,stereo;
        s->type=Stream;
        s->datahandle=(int)MP3open(filename,fileofs,filesize,&rate,&stereo,errAdd);
        if(s->datahandle) s->playhandle=(int)MIDASplayStreamPolling(stereo?MIDAS_SAMPLE_16BIT_STEREO:MIDAS_SAMPLE_16BIT_MONO,rate,1000*MP3PRECALCSEC);
        s->bufferbytes=rate*(stereo?4:2)*MP3PRECALCSEC;
    }
    // maybe module?
    else
    {
        s->type=Module;
        s->datahandle=(int)MIDASloadModule(filename);
        if(s->datahandle) s->playhandle=(int)MIDASplayModule((MIDASmodule)s->datahandle,loop);
    }
#ifdef EXTENDFILE
    rfSuperStart=0;
    rfSuperSize=0;
    rfSuperXor=0;
#endif
    MIDASreportErr();
}