home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 3 / FREEWARE.BIN / towns_os / pon_tool / play.c < prev    next >
Text File  |  1980-01-02  |  3KB  |  139 lines

  1. #include    <stdio.h>
  2. #include    <stdlib.h>
  3. #include    <string.h>
  4. #include    <fmc.h>
  5. #include    <snd.h>
  6.  
  7. extern void dsp_msg();
  8.  
  9. static char    swork[16384];
  10.  
  11. int    kbhit(void)
  12. {
  13.     unsigned ec;
  14.  
  15.     if ( KYB_read(1,&ec) != 0xFFFF )
  16.         return 1;
  17.     else
  18.         return 0;
  19. }
  20.  
  21. char    *getins(env,file)
  22. char    *env,*file;
  23. {
  24.     static char tmp[128];
  25.     char *p;
  26.  
  27.     if ( (p = getenv(env)) == NULL )
  28.     return NULL;
  29.     sprintf(tmp,"%s\\%s",p,file);
  30.     return tmp;
  31. }
  32.  
  33. void    play_misc(buf)
  34. char    *buf;
  35. {
  36.     int     i,n;
  37.     int     err,size,signa,tempo;
  38.     char    *p;
  39.     char    tmp[16];
  40.     char    dmy[16];
  41.  
  42.     dsp_msg("Euphony Music Play Start\n");
  43.  
  44.     SND_init(swork);
  45.     SND_eup_init(swork);
  46.     SND_elevol_mute(0x03);
  47.  
  48.     p = &buf[852];        /* trk mute */
  49.     for( i = 0 ; i < 32 ; i++ )
  50.     err = SND_eup_mute_set(i,*(p++));
  51.  
  52.     p = &buf[884];        /* trk port */
  53.     for( i = 0 ; i < 32 ; i++ )
  54.     err = SND_eup_port_set(i,*(p++));
  55.  
  56.     p = &buf[916];        /* trk midi ch */
  57.     for( i = 0 ; i < 32 ; i++ )
  58.     err = SND_eup_midi_ch_set(i,*(p++));
  59.  
  60.     p = &buf[948];        /* trk key bias */
  61.     for( i = 0 ; i < 32 ; i++ )
  62.     err = SND_eup_bias_set(i,*(p++));
  63.  
  64.     p = &buf[980];        /* trk transpose */
  65.     for( i = 0 ; i < 32 ; i++ )
  66.     err = SND_eup_transpose_set(i,*(p++));
  67.  
  68. /********************
  69.     channel assign
  70. *********************/
  71.  
  72.     p = &buf[1748];        /* fm midi ch */
  73.     for( i = 0 ; i < 6 ; i++ )
  74.     err = SND_midi_ch_assign(i,*(p++));
  75.  
  76.     p = &buf[1754];        /* pcm midi ch */
  77.     for( i = 0 ; i < 8 ; i++ )
  78.     err = SND_midi_ch_assign(i+64,*(p++));
  79.  
  80. /****************
  81.     bank load
  82. *****************/
  83.  
  84.     SND_pcm_mode_set(0);
  85.  
  86.     tmp[8] = '\0';
  87.     strncpy(tmp,&buf[1762],8);    /* fm file name */
  88.     if ( tmp[0] != '\0' ) {
  89.     strcat(tmp,".FMB");
  90.         if ( SND_fm_bank_load(tmp,dmy) != 0 ) {
  91.         if ( (p = getins("FMINST",tmp)) == NULL ||
  92.          SND_fm_bank_load(p,dmy) != 0 )
  93.         fprintf(stderr,"can't open '%s'\n",tmp);
  94.     }
  95.     }
  96.  
  97.     tmp[8] = '\0';
  98.     strncpy(tmp,&buf[1770],8);    /* pcm file name */
  99.     if ( tmp[0] != '\0' ) {
  100.     strcat(tmp,".PMB");
  101.         if ( SND_pcm_bank_load(tmp,dmy) != 0 ) {
  102.         if ( (p = getins("PCMINST",tmp)) == NULL ||
  103.          SND_pcm_bank_load(p,dmy) != 0 )
  104.         fprintf(stderr,"can't open '%s'\n",tmp);
  105.     }
  106.     }
  107.  
  108. /*******************
  109.     play eup file
  110. ********************/
  111.  
  112.     p = &buf[2048];        /* data top */
  113.     size = *((int *)p); p += 4;
  114.     signa = *(p++);
  115.     tempo = *(p++);
  116.  
  117.     SND_eup_loop_set(0);
  118.     SND_eup_tempo_set(tempo);
  119.     SND_eup_play_start(p,size,signa);
  120.  
  121.     i = (-1);
  122.     while ( SND_eup_stat_flag() ) {
  123.     if ( (n = SND_eup_stat_meas()) != i ) {
  124.         dsp_msg("\rNow Play %d meas",n);
  125.         i = n;
  126.     }
  127.     if ( kbhit() ) {
  128.         dsp_msg(" Abort");
  129.         break;
  130.     }
  131.     }
  132.  
  133.     SND_eup_play_stop();
  134.     SND_eup_end();
  135.     SND_end();
  136.  
  137.     dsp_msg(" End of Play\n");
  138. }
  139.