home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / dev / m2 / CycloneModules.lha / modules / txt / Beep.mod < prev    next >
Text File  |  1995-05-13  |  2KB  |  102 lines

  1. (*#
  2. *   Program         :   Beep
  3. *   Author          :   Marcel Timmermans
  4. *   Address         :   A. Dekenstr 22, 6836 RM , ARNHEM, HOLLAND.
  5. *   Creation Date   :   30-dec-1994
  6. *   Current version :   1.1
  7. *   Language        :   Modula-2
  8. *   Translator      :   AMC V0.42
  9. *
  10. *   REVISION HISTORY
  11. *
  12. *   Date          Version         Comment
  13. *   ---------     -------         ------------------------------------------
  14. *
  15. **)
  16.  
  17. IMPLEMENTATION MODULE Beep;
  18.  
  19. FROM SYSTEM IMPORT CAST,ADDRESS,ADR,LONGSET;
  20. IMPORT el:ExecL,
  21.        ed:ExecD,
  22.        au:Audio,
  23.        es:ExecSupport,
  24.        h:Heap,
  25.        ml:ModulaLib;
  26.  
  27.  
  28. CONST
  29.   AllocationMap = "\x01\x02\x04\x08";
  30.   Clock = 3546895;
  31.   samples = 6;
  32.   samsyc = 1;
  33.  
  34. TYPE
  35.   wave = POINTER TO ARRAY[0..samples-1] OF SHORTINT;
  36.  
  37. VAR
  38.   AllocPort: ed.MsgPortPtr;
  39.   Audio    : au.IOAudioPtr;
  40.   AudioOpen: BOOLEAN;
  41.   waveptr  : wave;
  42.  
  43. PROCEDURE Sound(frequency,time:CARDINAL);
  44. BEGIN
  45.   h.AllocMem(Audio,SIZE(au.IOAudio),FALSE);
  46.   ml.Assert(Audio#NIL,ADR("Out of memory"));
  47.   
  48.   WITH Audio^ DO
  49.    request.message.replyPort := AllocPort;
  50.    request.message.node.pri  := 0;
  51.    request.command := au.allocate;
  52.    request.flags   := au.noWait;
  53.    allocKey := 0;
  54.    data   := ADR(AllocationMap);
  55.    length := 4;
  56.   END;
  57.  
  58.   el.OpenDevice(ADR(au.audioName),0,Audio,LONGSET{});
  59.   IF (Audio^.request.error = 0) THEN
  60.  
  61.     AudioOpen:=TRUE;
  62.  
  63.     h.AllocMem(waveptr,SIZE(samples),TRUE);
  64.     ml.Assert(waveptr#NIL,ADR("Out of memory"));  
  65.  
  66.     waveptr^[0]:=60;
  67.     waveptr^[1]:=127;
  68.     waveptr^[2]:=60;
  69.     waveptr^[3]:=-60;
  70.     waveptr^[4]:=-127;
  71.     waveptr^[5]:=-60;
  72.  
  73.     WITH Audio^ DO
  74.       request.message.replyPort := AllocPort;
  75.       request.command := ed.write;
  76.       request.flags   := au.pervol;
  77.       data            := waveptr;
  78.       length          := samples;
  79.       period          := Clock*samsyc/(samples*frequency);
  80.       cycles          := time;
  81.       volume          := 64;
  82.     END;
  83.  
  84.     es.BeginIO(CAST(ADDRESS,Audio));
  85.     el.WaitIO(CAST(ADDRESS,Audio));
  86.  
  87.     AudioOpen:=FALSE;
  88.     el.CloseDevice(CAST(ADDRESS,Audio));
  89.   END;
  90. END Sound;
  91.  
  92.  
  93. BEGIN
  94.   AudioOpen := FALSE;
  95.   AllocPort := es.CreatePort(NIL,0);
  96.   ml.Assert(AllocPort#NIL,ADR("No port available for beep"));
  97. CLOSE
  98.   IF AudioOpen THEN el.CloseDevice(CAST(ADDRESS,Audio)) END;
  99.   IF AllocPort#NIL THEN es.DeletePort(AllocPort); END;
  100. END Beep.
  101.  
  102.