home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / OB3.2D4.DMS / in.adf / Beispiele / AudioDemo.mod < prev    next >
Encoding:
Text File  |  1992-10-10  |  1.6 KB  |  80 lines

  1. MODULE AudioDemo;
  2.  
  3. IMPORT Exec,
  4.        Audio,
  5.        ExecSupport,
  6.        OberonLib;
  7.  
  8. VAR
  9.   Port: Exec.MsgPortPtr;
  10.   IO:  Audio.IOAudioPtr;
  11.   Open: BOOLEAN;
  12.  
  13.   PROCEDURE OpenAudio(): BOOLEAN;
  14.   TYPE Map = ARRAY 4 OF SHORTSET;
  15.   VAR map: UNTRACED POINTER TO Map;
  16.   BEGIN
  17.     Port := ExecSupport.CreatePort("",0);
  18.     IF Port=NIL THEN RETURN FALSE END;
  19.  
  20.     NEW(IO);
  21.     IO.request.message.node.pri  := -40;
  22.     IO.request.message.replyPort := Port;
  23.     NEW(map);
  24.     map^ := Map(SHORTSET{0},SHORTSET{3},
  25.                      SHORTSET{1},SHORTSET{2});
  26.     IO.data   := map;
  27.     IO.length := 4;
  28.   
  29.     Open := (Exec.OpenDevice("audio.device",0,IO,LONGSET{})=0) &
  30.                  (IO.request.error = 0);
  31.     RETURN Open;
  32.   END OpenAudio;
  33.  
  34.   PROCEDURE CloseAudio();
  35.   BEGIN
  36.     IF Open THEN
  37.       Exec.CloseDevice(IO);
  38.       Open := FALSE;
  39.     END;
  40.     IF Port#NIL THEN
  41.       ExecSupport.DeletePort(Port)
  42.     END;
  43.   END CloseAudio;
  44.  
  45. TYPE
  46.   Table = ARRAY 2 OF SHORTINT;
  47. VAR
  48.   table: UNTRACED POINTER TO Table;
  49.  
  50.   PROCEDURE Sound(period: INTEGER);
  51.   BEGIN
  52.     IF table=NIL THEN
  53.       INCL(OberonLib.MemReqs,Exec.chip);
  54.       NEW(table);
  55.       EXCL(OberonLib.MemReqs,Exec.chip);
  56.       table^ := Table(127,-128);
  57.     END;
  58.     IO.request.command := Exec.write;
  59.     IO.request.flags   := SHORTSET{Audio.pervol};
  60.     IO.data            := table;
  61.     IO.length          := 2;
  62.     IO.volume          := 64;
  63.     IO.period          := period;
  64.     IO.cycles          := SHORT(500000 DIV period);
  65.     ExecSupport.BeginIO(IO);
  66.     IF Exec.WaitIO(IO)=0 THEN END;
  67.   END Sound;
  68.  
  69. BEGIN
  70.  
  71.   IF OpenAudio() THEN
  72.     Sound(3000);
  73.     Sound(3367);
  74.     Sound(3780);
  75.   END;
  76.   CloseAudio;
  77.  
  78. END AudioDemo.
  79.  
  80.