home *** CD-ROM | disk | FTP | other *** search
/ M.u.C.S. Disc 2000 / MUCS2000.iso / sound / mp2 / src / gem / mp2init.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-12-01  |  3.7 KB  |  187 lines

  1. #include <tos.h>
  2. #include <aes.h>
  3. #include <ext.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6.  
  7. #include "snddefs.h"
  8. #include "mp2audio.h"
  9. #include "mp2wind.h"
  10. #include "mp2info.h"
  11.  
  12. /* Functions in this module */
  13. int external_clock(void);
  14. void init_replay(void);
  15. void continue_replay(void);
  16. void cont_stream(void);
  17. void init_stream1(void);
  18. void init_stream2(void);
  19.  
  20. /* global variables */
  21. int buf_init=0,first_init=1;
  22. long first_buf,o_filepos;
  23.  
  24. /* global variables from mp2audio.c */
  25. extern int quit,replay,fd,ext;
  26. extern long block;
  27. extern WINDFORM windforms[5];
  28. #ifdef STATIC_BUFFER
  29. extern char buffer_mem[(long)BLOCK_SIZE];
  30. #else
  31. extern char *buffer_mem;
  32. #endif
  33.  
  34. /* global variable from mp2info.c */
  35. extern MP2INFO mp2info;
  36.  
  37. /* global variable from mp2file.c */
  38. extern long filepos;
  39.  
  40. /* Function from mp2dsp.s */
  41. extern void ass_init_stream1(void);
  42. extern long do_devc_e44(void);
  43. extern long do_devc_e22(void);
  44. extern long do_devc_i48(void);
  45. extern long do_devc_i32(void);
  46. extern long do_devc_i24(void);
  47. extern long do_devc_i16(void);
  48.  
  49. /* Function from mp2extra.c */
  50. extern void mute(int mode);
  51.  
  52. /* Function from mp2event.c */
  53. extern void load(int q);
  54. extern void update_objects(WINDFORM *,int,int,int *);
  55.  
  56.  
  57. /* Function from mp2dsp.c */
  58. extern void bootdsp(void);
  59.  
  60. void init_replay()
  61. {
  62.     long ptr[4];
  63.  
  64.     quit = 0;
  65.  
  66.     o_filepos = filepos;
  67.  
  68.     load(0);
  69.     mute(MUTE);
  70.     init_stream1();
  71.     buf_init=1;
  72.     bootdsp();            /* Reset, bootstrap, execute, upload data */
  73.     mute(MUTE_RESTORE);
  74.     init_stream2();
  75.         
  76.     buffptr(ptr);
  77.     first_buf=ptr[0];
  78.     first_init=1;
  79.     
  80.     replay = 1;
  81. }
  82.  
  83. void continue_replay()
  84. {
  85.     Dsp_Hf0(0);                /* tell DSP to depause */
  86.     replay=1;
  87. }
  88.  
  89. void cont_stream()
  90. {
  91.     switch((int)(mp2info.sample_frequency/10))
  92.     {
  93.         case 1600:
  94.             Supexec(do_devc_i16); /* use 16390 Hz */
  95.             break;
  96.         case 2205:
  97.             if(ext)
  98.                 Supexec(do_devc_e22); /* external 22.05 KHz clock */
  99.             else
  100.                 Supexec(do_devc_i24); /* use 24585 Hz (interpolate?) */            
  101.             break;
  102.         case 2400:
  103.             Supexec(do_devc_i24); /* use 24585 Hz */
  104.             break;
  105.         case 3200:
  106.             Supexec(do_devc_i32); /* use 32780 Hz */
  107.             break;
  108.         case 4410:
  109.             if(ext)
  110.                 Supexec(do_devc_e44); /* external 44.1 Khz clock */
  111.             else
  112.                 Supexec(do_devc_i48); /* interpolate 44.1 KHz to 49Khz */
  113.             break;
  114.         case 4800:
  115.             Supexec(do_devc_i48); /* use 49170 Hz */
  116.             break;
  117.     }
  118. }
  119.  
  120. void init_stream1()
  121. {
  122.     sndstatus(SND_RESET);
  123.     setmode(STEREO16);
  124.     soundcmd(ADDERIN,MATIN);
  125.     dsptristate(ENABLE,ENABLE);
  126.  
  127.  
  128.     setbuffer(SR_PLAY,(void *)buffer_mem,(void *)((long)buffer_mem+block));
  129.  
  130.     switch((int)(mp2info.sample_frequency/10))
  131.     {
  132.         case 1600:
  133.             Supexec(do_devc_i16); /* use 16390 Hz */
  134.             break;
  135.         case 2205:
  136.             if(ext)
  137.                 Supexec(do_devc_e22); /* external 22.05 KHz clock */
  138.             else
  139.                 Supexec(do_devc_i24); /* use 24585 Hz (interpolate?) */            
  140.             break;
  141.         case 2400:
  142.             Supexec(do_devc_i24); /* use 24585 Hz */
  143.             break;
  144.         case 3200:
  145.             Supexec(do_devc_i32); /* use 32780 Hz */
  146.             break;
  147.         case 4410:
  148.             if(ext)
  149.                 Supexec(do_devc_e44); /* external 44.1 Khz clock */
  150.             else
  151.                 Supexec(do_devc_i48); /* interpolate 44.1 KHz to 49Khz */
  152.             break;
  153.         case 4800:
  154.             Supexec(do_devc_i48); /* use 49170 Hz */
  155.             break;
  156.     }
  157.  
  158.  
  159. }
  160.  
  161. void init_stream2()
  162. {
  163.     buffoper(SB_PLA_ENA | SB_PLA_RPT);
  164. }
  165.  
  166. int external_clock()
  167. {
  168.     int n;
  169.     int src[] = { 42, 43, 44, 45, 46, 0 };
  170.     int dst[] = {  0,  0,  0,  0,  0, 0 };
  171.  
  172.     mute(MUTE);
  173.     sndstatus(SND_RESET); /* Reset sound system */
  174.     setbuffer(SR_PLAY, src, src+sizeof(src));
  175.     setbuffer(SR_RECORD, dst, dst+sizeof(dst));
  176.     devconnect(0x0, 0x1, 1, 1, 0);
  177.     devconnect(0x1, 0x0, 1, 1, 0);
  178.     devconnect(0x2, 0x0, 1, 1, 0);
  179.     devconnect(0x3, 0x0, 1, 1, 0);
  180.     buffoper(0x5); delay(100); buffoper(0x0);
  181.     for (n = 0; (src[n] != 0) && (src[n] == dst[n]); n++);
  182.     mute(MUTE_RESTORE);
  183.     if (src[n]) return 0;
  184.     return 1;
  185. }
  186.  
  187.