home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0682.ZIP / CCE_0682.PD / SAMPLING / SAMPLER.C < prev    next >
C/C++ Source or Header  |  1993-06-28  |  9KB  |  382 lines

  1. /*          SAMPLER.TOS
  2.  
  3.           EENVOUDIGE SAMPLER
  4.  
  5.  
  6.  
  7.           (c) Jos van Roosmalen
  8.  
  9.  
  10.           Datum: 12 mei 1993
  11.           UPDATED: 28 juni 1993 Error find!
  12.           Compiler: PURE C
  13.  
  14.  
  15.     Met dank aan: W.F. Kilwinger
  16.  
  17.                                            */
  18.  
  19.  
  20. #include <stdio.h>
  21. #include <tos.h>
  22. #include <ext.h>
  23. #include <stdlib.h>
  24. #include <string.h>
  25. #include <sndbind.h>   /* Zie listing 3 */
  26. #include <aes.h>
  27.  
  28. long leng;
  29.  
  30. long sample(int freq, int mode, int track, int sec);
  31. int speel(char *buffer,int freq,int mode,int track);
  32.  
  33. void main()
  34. {
  35.  int sec,mode,track,freq,error;
  36.  long buffer;
  37.  
  38.  /* Copyright melding */
  39.  
  40.  printf("Sound Sampler voor de Falcon030\n");
  41.  printf("(c) Jos van Roosmalen 11/5/1993\n\n");
  42.  
  43.  printf("Hoeveel seconden samplen? ");
  44.  
  45.  scanf("%d",&sec);
  46.  
  47.  printf("\nMet welke freq samplen? 1 = 50 , 2 = 25  , 3 = 8 KHZ ");
  48.  
  49.  scanf("%d",&freq);
  50.  
  51.  printf("\nMet welke kwaliteit samplen? 0 = 8 bit st, 1 = 16 bt st, 2 = 8 bt mono ");
  52.  
  53.  scanf("%d",&mode);
  54.  
  55.  printf("\nTrack mode?  0 = 1 track, 1 = 2 tracks, 2 = 3 tracks, 3 = 4 tracks ");
  56.  
  57.  scanf("%d",&track);
  58.  
  59.  printf("\nDruk op een toets om met samplen te beginnen.....");
  60.  
  61.  getch();
  62.  
  63.  if (freq == 1)
  64.   freq = CLK50K;
  65.  if (freq == 2)
  66.   freq = CLK25K;
  67.  if (freq == 3)
  68.   freq = CLK8K;
  69.  
  70.  printf("\n\n Bezig met opnemen.......");
  71.  
  72.   buffer =  sample(freq,mode,track,sec);
  73.  
  74.  if (buffer == -1L)
  75.  {
  76.   printf("\n\n\n Soundsystem gesloten, of niet voldoende vrij geheugen. Druk op een toets");
  77.   getch();
  78.   gemdos(0);
  79.  }
  80.  printf("\n\n Klaar met opnemen.......\n");
  81.  
  82.  printf("\nDruk op een toets om het weer af te spelen.....");
  83.  
  84.  getch();
  85.  
  86.  error = speel((char *) buffer,freq,mode,track);
  87.  
  88.  if (error == -1)
  89.  {
  90.   printf("\n\n\n Soundsystem gesloten. Druk op een toets");
  91.   getch();
  92.   gemdos(0);
  93.  }
  94.  printf("\n\n Dat was het.....");
  95.  
  96.  getch();
  97. }
  98.  
  99.  
  100. /*********************************
  101.  *  BIBLIOTHEEK VOOR SAMPLING.   *
  102.  *                               *
  103.  * freq -> sample rate:          *
  104.  *                               *
  105.  *          1 = 50 KHZ           *
  106.  *          2 = 33 KHZ           *
  107.  *          3 = 25 KHZ           *
  108.  *          4 = 20 KHZ           *
  109.  *          5 = 16 KHZ           *
  110.  *          7 = 12 KHZ           *
  111.  *          9 = 10 KHZ           *
  112.  *         11 =  8 KHZ           *
  113.  *                               *
  114.  * mode -> kwaliteit:            *
  115.  *                               *
  116.  *      0 = 8 bit stereo         *
  117.  *      1 = 16 bit stereo        *
  118.  *      2 = 8 bit mono           *
  119.  *                               *
  120.  * track -> track mode:          *
  121.  *                               *
  122.  *      0 = 1 track              *
  123.  *      1 = 2 tracks             *
  124.  *      2 = 3 tracks             *
  125.  *      3 = 4 tracks             *
  126.  *                               *
  127.  * sec: Aantal te samplen sec    *
  128.  *                               *
  129.  * Teruggave:                    *
  130.  *                               *
  131.  *    -1L = niet genoeg          *
  132.  *           geheugen            *
  133.  *         anders pointer        *
  134.  *         naar buffer           *
  135.  *                               *
  136.  ********************************* */
  137.  
  138. long sample(int freq,int mode,int track,int sec)
  139. {
  140.  int teller;
  141.  long like[7];
  142.  char *buffer;
  143.  char *end;
  144.  long close;
  145.  long bytes;
  146.  
  147.  /* Benodigde bytes uitrekenen */
  148.  
  149.   if (freq == CLK50K)
  150.   bytes = (long) ACT_CLK50K * 4 * sec; 
  151.  if (freq == CLK33K)
  152.   bytes = (long) ACT_CLK33K * 4 * sec;
  153.  if (freq == CLK25K)
  154.   bytes = (long) ACT_CLK25K * 4 * sec;
  155.  if (freq == CLK20K)
  156.   bytes = (long) ACT_CLK20K * 4 * sec;
  157.  if (freq == CLK16K)
  158.   bytes = (long) ACT_CLK16K * 4 * sec;
  159.  if (freq == CLK12K)
  160.   bytes = (long)ACT_CLK12K * 4 * sec;
  161.  if (freq ==  CLK10K)
  162.   bytes = (long) ACT_CLK10K * 4 * sec;
  163.  if (freq == CLK8K)
  164.   bytes = (long) ACT_CLK8K * 4 * sec;
  165.  
  166.  /* kijken of wij gebruik kunnen maken
  167.     van Codec */
  168.  
  169.  close = locksnd();
  170.  
  171.  /* Local naar globaal */
  172.  
  173.  leng = bytes;
  174.  
  175.  /* Geheugen (proberen te) reserveren */
  176.  
  177.  
  178.  
  179.  buffer = (char *) malloc(bytes);
  180.  
  181.  
  182.  /* Als er geen geheugen meer is */
  183.  /* Of we niet in het systeem kunnen */
  184.  
  185.  
  186.  if (buffer == 0L || close < 0L)
  187.   return -1L; /* Dan -1 retorneren */
  188.  else
  189.  {    /* Anders */
  190.  
  191.   /* Oude instellingen bewaren */
  192.  
  193.   for (teller = 0 ; teller < 7 ; teller ++)
  194.    like[teller] = soundcmd(teller,-1);
  195.  
  196.   /* Reset Codec */
  197.  
  198.   sndstatus(1);
  199.  
  200.   /* Oude instellingen terug */
  201.  
  202.   soundcmd(LTATTEN,like[LTATTEN]);
  203.   soundcmd(RTATTEN,like[RTATTEN]);
  204.   soundcmd(LTGAIN, like[LTGAIN]);
  205.   soundcmd(RTGAIN, like[RTGAIN]);
  206.   soundcmd(ADDERIN,0x01);
  207.   soundcmd(ADCINPUT,0x00);
  208.  
  209.   /* Gebied vullen */
  210.  
  211.   memset(buffer,0xAA,bytes + 1000);
  212.  
  213.   /* Buffereinde bepalen */
  214.  
  215.   end = &buffer[bytes];
  216.  
  217.   /* Tracks vastleggen */
  218.  
  219.   settracks(track,track);
  220.  
  221.   setmontrack(0);
  222.   
  223.   /* Telefoonverbinding maken */
  224.  
  225.   devconnect(ADC,DMAREC,CLK_25M,freq,1);
  226.   
  227.  
  228.   /* Fifo legen als moet */
  229.  
  230.   if (buffoper(-1) & 0x04)
  231.   buffoper(0);
  232.  
  233.   /* Geheugengebied als Sample geheugen vastleggen */
  234.  
  235.   setbuffer(1, (long) buffer, (long) end);
  236.  
  237.   /* kwaliteit instellen */
  238.  
  239.   setmode(mode);
  240.  
  241.   /* Hinderlijke klik niet meenemen */
  242.  
  243.   for (teller = 1; teller < 32000; teller++);
  244.  
  245.   /* En opnemen maar */
  246.  
  247.   buffoper(4);
  248.  
  249.   do
  250.   {
  251.    if(kbhit()) /* Stop als er op een toets wordt gedrukt */
  252.    break;
  253.   }
  254.   while ((buffoper(-1L) &0x4) != 0); /* Net zolang totdat buffer vol is */
  255.  
  256.   buffoper(0);   /* Zeker van zijn samplen is gestopt */
  257.  
  258.   sndstatus(1);  /* Reset codec */
  259.  
  260.    /* oude instellingen terug */
  261.  
  262.   for (teller = 0 ; teller < 7 ; teller++)
  263.    soundcmd(teller,like[teller]);
  264.  
  265.   unlocksnd();  /* Weer vrij */
  266.  
  267.   return (long) buffer;
  268.  }
  269. }
  270. /*********************************
  271.  *  BIBLIOTHEEK VOOR SAMPLING.   *
  272.  *                               *
  273.  * buffer -> pointernaar buffer  *
  274.  *          waar sample staat    *
  275.  *                               *
  276.  * freq -> sample rate:          *
  277.  *                               *
  278.  *          1 = 50 KHZ           *
  279.  *          2 = 33 KHZ           *
  280.  *          3 = 25 KHZ           *
  281.  *          4 = 20 KHZ           *
  282.  *          5 = 16 KHZ           *
  283.  *          7 = 12 KHZ           *
  284.  *          9 = 10 KHZ           *
  285.  *         11 =  8 KHZ           *
  286.  *                               *
  287.  * mode -> kwaliteit:            *
  288.  *                               *
  289.  *      0 = 8 bit stereo         *
  290.  *      1 = 16 bit stereo        *
  291.  *      2 = 8 bit mono           *
  292.  *                               *
  293.  * track -> track mode:          *
  294.  *                               *
  295.  *      0 = 1 track              *
  296.  *      1 = 2 tracks             *
  297.  *      2 = 3 tracks             *
  298.  *      3 = 4 tracks             *
  299.  *                               *
  300.  *                               *
  301.  * Teruggave:                    *
  302.  *                               *
  303.  *    -1 = Geen toegang          *
  304.  *     0 = OK                    *
  305.  *                               *
  306.  *                               *
  307.  ********************************* */  
  308. int speel(char *buffer,int freq,int mode,int track)
  309. {
  310.  int teller;
  311.  char *end;
  312.  long like[7];
  313.  
  314.  /* kijken of we wel kunnen gaan spelen */
  315.  
  316.  if(locksnd() < 0L)
  317.  {
  318.   return -1;    /* Nee, gaat niet! */
  319.  }
  320.  else
  321.  {
  322.   /* Instellingen redden */
  323.  
  324.   for (teller = 0 ; teller < 7 ; teller++)
  325.    like[teller] = soundcmd(teller,-1);
  326.  
  327.   soundcmd(ADDERIN,0x2);
  328.  
  329.   /* DSP van matrix gooien */
  330.  
  331.   dsptristate(0,0);
  332.  
  333.   /* Tracks setten */
  334.  
  335.   settracks(track,track);
  336.   setmontrack(0);
  337.  
  338.   /* Telefoonverbinding maken */
  339.  
  340.   devconnect(DMAPLAY,DAC,CLK_25M,freq,1);
  341.  
  342.   /* Einde sample bepalen */
  343.  
  344.   end =  &buffer[leng];
  345.  
  346.   /* Adressen setten */
  347.  
  348.   setbuffer(0, (long) buffer, (long) end);
  349.   
  350.   /* Kwaliteit van sampler door spelen */
  351.   setmode(mode);
  352.  
  353.   /* Kom maar op met de herrie */
  354.  
  355.   buffoper(1);
  356.  
  357.   do
  358.   {
  359.    if (kbhit())    /* Stoppen als er op een toets is gedrukt... */
  360.     break;
  361.   }
  362.   while ((buffoper(-1L) & 0x1) != 0);  /* of als de sample is afgelopen */
  363.   buffoper(0);   /* Er zeker van zijn dat de sample is gestopt */
  364.  
  365.   /* Codec resetten */
  366.  
  367.   sndstatus(1); 
  368.  
  369.   /* Instellingen weer saven */
  370.  
  371.   for (teller = 0 ; teller < 7 ;  teller++)
  372.    soundcmd(teller,like[teller]);
  373.  
  374.   /* Weer vrij */
  375.   unlocksnd();
  376.    
  377.   /* Geen fout opgetreden */
  378.  
  379.   return 0;
  380.  }
  381. }
  382.