home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / dev / e / amiga_e / src / pd / sound.e < prev    next >
Text File  |  1992-09-02  |  2KB  |  87 lines

  1. OPT OSVERSION=37
  2.  
  3. MODULE 'devices/audio',
  4.        'dos/dos',
  5.        'exec/memory',
  6.        'exec/types',
  7.        'exec/io'
  8.  
  9. MODULE 'exec/libraries',
  10.        'exec/nodes',
  11.        'exec/ports',
  12.        'graphics/gfxbase'
  13.  
  14. /* Offsets required for beginIO() */
  15. CONST IO_DEVICE=20,
  16.       DEV_BEGINIO=-30
  17.  
  18. DEF gfxBase:PTR TO gfxbase, deviceerror,
  19.     audiomp=NIL:PTR TO mp, audiomsg=NIL:PTR TO mn, audioio: PTR TO ioaudio,
  20.     waveptr:PTR TO CHAR, clock=3579545
  21.  
  22. PROC beginIO(iorequestptr:PTR TO ioaudio)
  23.   MOVE.L  iorequestptr,A1
  24.   MOVE.L  IO_DEVICE(A1),A6
  25.   JSR     DEV_BEGINIO(A6)
  26. ENDPROC
  27.  
  28. PROC main ()
  29.   DEF frequency=440, duration=3, samples=2, samcyc=1,
  30.       request:PTR TO iostd, message:PTR TO mn, node:PTR TO ln
  31.  
  32.   gfxBase:=gfxbase
  33.   IF gfxBase.displayflags AND PAL THEN clock:=3546895
  34.   IF (audioio:=AllocMem(SIZEOF ioaudio,
  35.                         MEMF_PUBLIC+MEMF_CLEAR))=NIL THEN JUMP killaudio
  36.   WriteF('IO block created...\n')
  37.  
  38.   IF (audiomp:=CreateMsgPort())=NIL THEN JUMP killaudio
  39.   WriteF('Port created...\n')
  40.  
  41.   request:=audioio.io  /* .request */
  42.   message:=request.mn  /* .message */
  43.   message.replyport:=audiomp
  44.   node:=message.ln  /* .node */
  45.   node.pri:=0
  46.   request.command:=ADCMD_ALLOCATE
  47.   request.flags:=ADIOF_NOWAIT
  48.   audioio.allockey:=0
  49.   audioio.data:=[1,2,4,8]:CHAR
  50.   audioio.length:=4
  51.   WriteF('I/O block initialized for channel allocation...\n')
  52.  
  53.   IF deviceerror:=OpenDevice('audio.device', 0, audioio, 0) THEN JUMP killaudio
  54.   WriteF('Audio device opened, channel allocated...\n')
  55.   IF (waveptr:=AllocMem(samples, MEMF_CHIP+MEMF_PUBLIC))=NIL THEN JUMP killaudio
  56.   waveptr[0]:= 127
  57.   waveptr[1]:=-127
  58.   WriteF('Wave data ready...\n')
  59.  
  60.   request:=audioio.io
  61.   message:=request.mn
  62.   message.replyport:=audiomp
  63.   request.command:=CMD_WRITE
  64.   request.flags:=ADIOF_PERVOL OR IOF_QUICK
  65.   audioio.data:=waveptr
  66.   audioio.length:=samples
  67.   audioio.period:=clock*samcyc/(samples*frequency)
  68.   audioio.volume:=64
  69.   audioio.cycles:=frequency*duration/samcyc
  70.   WriteF('I/O block initialized to play tone...\n')
  71.  
  72.   WriteF('Starting tone now...\n')
  73.   beginIO(audioio)
  74.   WaitPort(audiomp)
  75.   audiomsg:=GetMsg(audiomp)
  76.  
  77.   WriteF('Sound finished...\n')
  78.  
  79. killaudio:
  80.   WriteF('Killing audio device...\n')
  81.   IF waveptr THEN FreeMem(waveptr, 2)
  82.   IF deviceerror=0 THEN CloseDevice(audioio)
  83.   IF audiomp THEN DeleteMsgPort(audiomp)
  84.   IF audioio THEN FreeMem(audioio, SIZEOF ioaudio)
  85. ENDPROC
  86.  
  87.