home *** CD-ROM | disk | FTP | other *** search
- MODULE AudioDemo;
-
- IMPORT Exec,
- Audio,
- ExecSupport,
- OberonLib;
-
- VAR
- Port: Exec.MsgPortPtr;
- IO: Audio.IOAudioPtr;
- Open: BOOLEAN;
-
- PROCEDURE OpenAudio(): BOOLEAN;
- TYPE Map = ARRAY 4 OF SHORTSET;
- VAR map: UNTRACED POINTER TO Map;
- BEGIN
- Port := ExecSupport.CreatePort("",0);
- IF Port=NIL THEN RETURN FALSE END;
-
- NEW(IO);
- IO.request.message.node.pri := -40;
- IO.request.message.replyPort := Port;
- NEW(map);
- map^ := Map(SHORTSET{0},SHORTSET{3},
- SHORTSET{1},SHORTSET{2});
- IO.data := map;
- IO.length := 4;
-
- Open := (Exec.OpenDevice("audio.device",0,IO,LONGSET{})=0) &
- (IO.request.error = 0);
- RETURN Open;
- END OpenAudio;
-
- PROCEDURE CloseAudio();
- BEGIN
- IF Open THEN
- Exec.CloseDevice(IO);
- Open := FALSE;
- END;
- IF Port#NIL THEN
- ExecSupport.DeletePort(Port)
- END;
- END CloseAudio;
-
- TYPE
- Table = ARRAY 2 OF SHORTINT;
- VAR
- table: UNTRACED POINTER TO Table;
-
- PROCEDURE Sound(period: INTEGER);
- BEGIN
- IF table=NIL THEN
- INCL(OberonLib.MemReqs,Exec.chip);
- NEW(table);
- EXCL(OberonLib.MemReqs,Exec.chip);
- table^ := Table(127,-128);
- END;
- IO.request.command := Exec.write;
- IO.request.flags := SHORTSET{Audio.pervol};
- IO.data := table;
- IO.length := 2;
- IO.volume := 64;
- IO.period := period;
- IO.cycles := SHORT(500000 DIV period);
- ExecSupport.BeginIO(IO);
- IF Exec.WaitIO(IO)=0 THEN END;
- END Sound;
-
- BEGIN
-
- IF OpenAudio() THEN
- Sound(3000);
- Sound(3367);
- Sound(3780);
- END;
- CloseAudio;
-
- END AudioDemo.
-
-