home *** CD-ROM | disk | FTP | other *** search
- OPT OSVERSION=37
-
- MODULE 'devices/audio',
- 'dos/dos',
- 'exec/memory',
- 'exec/types',
- 'exec/io'
-
- MODULE 'exec/libraries',
- 'exec/nodes',
- 'exec/ports',
- 'graphics/gfxbase'
-
- /* Offsets required for beginIO() */
- CONST IO_DEVICE=20,
- DEV_BEGINIO=-30
-
- DEF gfxBase:PTR TO gfxbase, deviceerror,
- audiomp=NIL:PTR TO mp, audiomsg=NIL:PTR TO mn, audioio: PTR TO ioaudio,
- waveptr:PTR TO CHAR, clock=3579545
-
- PROC beginIO(iorequestptr:PTR TO ioaudio)
- MOVE.L iorequestptr,A1
- MOVE.L IO_DEVICE(A1),A6
- JSR DEV_BEGINIO(A6)
- ENDPROC
-
- PROC main ()
- DEF frequency=440, duration=3, samples=2, samcyc=1,
- request:PTR TO iostd, message:PTR TO mn, node:PTR TO ln
-
- gfxBase:=gfxbase
- IF gfxBase.displayflags AND PAL THEN clock:=3546895
- IF (audioio:=AllocMem(SIZEOF ioaudio,
- MEMF_PUBLIC+MEMF_CLEAR))=NIL THEN JUMP killaudio
- WriteF('IO block created...\n')
-
- IF (audiomp:=CreateMsgPort())=NIL THEN JUMP killaudio
- WriteF('Port created...\n')
-
- request:=audioio.io /* .request */
- message:=request.mn /* .message */
- message.replyport:=audiomp
- node:=message.ln /* .node */
- node.pri:=0
- request.command:=ADCMD_ALLOCATE
- request.flags:=ADIOF_NOWAIT
- audioio.allockey:=0
- audioio.data:=[1,2,4,8]:CHAR
- audioio.length:=4
- WriteF('I/O block initialized for channel allocation...\n')
-
- IF deviceerror:=OpenDevice('audio.device', 0, audioio, 0) THEN JUMP killaudio
- WriteF('Audio device opened, channel allocated...\n')
- IF (waveptr:=AllocMem(samples, MEMF_CHIP+MEMF_PUBLIC))=NIL THEN JUMP killaudio
- waveptr[0]:= 127
- waveptr[1]:=-127
- WriteF('Wave data ready...\n')
-
- request:=audioio.io
- message:=request.mn
- message.replyport:=audiomp
- request.command:=CMD_WRITE
- request.flags:=ADIOF_PERVOL OR IOF_QUICK
- audioio.data:=waveptr
- audioio.length:=samples
- audioio.period:=clock*samcyc/(samples*frequency)
- audioio.volume:=64
- audioio.cycles:=frequency*duration/samcyc
- WriteF('I/O block initialized to play tone...\n')
-
- WriteF('Starting tone now...\n')
- beginIO(audioio)
- WaitPort(audiomp)
- audiomsg:=GetMsg(audiomp)
-
- WriteF('Sound finished...\n')
-
- killaudio:
- WriteF('Killing audio device...\n')
- IF waveptr THEN FreeMem(waveptr, 2)
- IF deviceerror=0 THEN CloseDevice(audioio)
- IF audiomp THEN DeleteMsgPort(audiomp)
- IF audioio THEN FreeMem(audioio, SIZEOF ioaudio)
- ENDPROC
-
-