home *** CD-ROM | disk | FTP | other *** search
- ******************************************
-
- * Voice Recognition Demo by Richard Horne
-
- * December 1992
-
- * Requires voice.library (V 6.4) in sys:libs
-
- ******************************************
-
- INCLUDE "exec/types.i"
- INCLUDE "intuition/intuition.i"
- INCLUDE "libraries/dos.i"
-
- *********** external references **********
-
- XREF _AbsExecBase
- XREF _LVOOpenLibrary
- XREF _LVOCloseLibrary
- XREF _LVOOpenWindow
- XREF _LVOCloseWindow
- XREF _LVOOpenScreen
- XREF _LVOCloseScreen
- XREF _LVOSetMenuStrip
- XREF _LVOClearMenuStrip
- XREF _LVODisplayBeep
- XREF _LVOWait
- XREF _LVOGetMsg
- XREF _LVOReplyMsg
- XREF _LVOLoadRGB4
- XREF _LVOSetAPen
- XREF _LVOText
- XREF _LVOMove
- XREF _LVOOpen
- XREF _LVOClose
- XREF _LVORead
- XREF _LVOWrite
- XREF _LVOExecute
-
- XDEF _main
-
- ******* Voice.library Functions ********
-
- _LVOLearn EQU -30
- _LVORecognize EQU -36
- _LVOAddVoiceTask EQU -42
- _LVORemVoiceTask EQU -48
- _LVOGainUp EQU -54
- _LVOGainDown EQU -60
- _LVORecDataAddress EQU -66
- _LVORecMapAddress EQU -72
- _LVOWordScore EQU -78
- _LVOPickSampler EQU -84
- _LVOSetVoicePri EQU -90
- _LVOPickTimer EQU -96
-
- *********** Begin Program **************
-
- _main:
- movea.l _AbsExecBase,a6 ;Open DOS Llibrary
- movea.l #DOS_Name,a1
- moveq.l #0,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,DOS_Base
- beq Close50
-
- movea.l DOS_Base,a6 ;Open NIL
- move.l #NILFileName,d1
- move.l #MODE_NEWFILE,d2
- jsr _LVOOpen(a6)
- move.l d0,NIL_Handle
- beq Close40
-
- movea.l _AbsExecBase,a6 ;Open Intuition Library
- movea.l #INTUITION_Name,a1
- moveq.l #0,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,Intuition_Base
- beq Close30
-
- movea.l #GRAPHICS_Name,a1 ;Open Graphics Library
- moveq.l #0,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,Graphics_Base
- beq Close20
-
- movea.l #VOICE_Name,a1 ;Open Voice Library
- moveq.l #6,d0
- jsr _LVOOpenLibrary(a6) ;Version 6 Only
- move.l d0,Voice_Base
- beq Close10
-
- ****** Open Info Screen and Window *******
-
- movea.l #InfoScreen,a0 ;Open Info Screen
- movea.l Intuition_Base,a6
- jsr _LVOOpenScreen(a6)
- move.l d0,InfoScr
- beq Close8
-
- add.l #sc_RastPort,d0
- move.l d0,InfoRastPort
-
- move.l InfoScr,d0
- add.l #sc_ViewPort,d0
- move.l d0,InfoViewPort
-
- movea.l Graphics_Base,a6 ;Set Colors
- movea.l InfoViewPort,a0
- move.l #Colors,a1
- move.l #4,d0
- jsr _LVOLoadRGB4(a6)
-
- movea.l #InfoWindow,a0 ;Open Info Window
- move.l InfoScr,nw_Screen(a0)
- movea.l Intuition_Base,a6
- jsr _LVOOpenWindow(a6)
- move.l d0,InfoWdw
- beq Close4
-
- bsr WriteInfoText ;Write Information
-
- movea.l Intuition_Base,a6
- movea.l InfoWdw,a0
- movea.l #ProjectMenu,a1
- jsr _LVOSetMenuStrip(a6)
-
- InfoPause:
- movea.l InfoWdw,a0
- movea.l wd_UserPort(a0),a0
- move.b MP_SIGBIT(a0),d1
- moveq.l #1,d0
- lsl.l d1,d0
- movea.l _AbsExecBase,a6
- jsr _LVOWait(a6)
-
- GetInfoMessage:
- movea.l InfoWdw,a0
- movea.l wd_UserPort(a0),a0
- movea.l _AbsExecBase,a6
- jsr _LVOGetMsg(a6)
- move.l d0,IDCMPMessage
- beq InfoPause
-
- movea.l d0,a0 ;Get Message Class and Code
- move.l im_Class(a0),MessageClass
- move.w im_Code(a0),MessageCode
-
- movea.l _AbsExecBase,a6 ;Reply
- move.l d0,a1
- jsr _LVOReplyMsg(a6)
-
- cmpi.l #CLOSEWINDOW,MessageClass ;Close and quit?
- beq Close
-
- cmpi.l #MENUPICK,MessageClass ;Menu Selection?
- bne GetInfoMessage
-
- MenuSelect:
- moveq.l #0,d0
- move.w MessageCode,d0
- and.w #$1F,d0
- move.w d0,MenuNumber
-
- moveq.l #0,d0
- move.w MessageCode,d0
- move.w #5,d1
- lsr.w d1,d0
- and.w #$3F,d0
- move.w d0,ItemNumber
-
- cmpi.w #1,MenuNumber ;Learn Menu Chosen?
- beq LearnRoutine
-
- cmpi.w #2,MenuNumber ;Options Chosen?
- beq GetInfoMessage
-
- cmpi.w #0,ItemNumber ;Project Menu Chosen
- beq SaveFileRoutine
- cmpi.w #1,ItemNumber
- beq LoadFileRoutine
- cmpi.w #2,ItemNumber
- beq RecognizeRoutine
- cmpi.w #3,ItemNumber
- beq Close
- bra GetInfoMessage
-
- SaveFileRoutine:
- movea.l DOS_Base,a6
- move.l #VoiceFileName,d1
- move.l #MODE_NEWFILE,d2
- jsr _LVOOpen(a6)
- move.l d0,File_Handle
-
- move.l File_Handle,d1
- move.l #MapBuffer,d2
- move.l #1824,d3
- jsr _LVOWrite(a6)
-
- move.l File_Handle,d1
- jsr _LVOClose(a6)
-
- bra GetInfoMessage
-
- LoadFileRoutine:
- movea.l DOS_Base,a6
- move.l #VoiceFileName,d1
- move.l #MODE_OLDFILE,d2
- jsr _LVOOpen(a6)
- move.l d0,File_Handle
- beq 1$
-
- moveq.l #0,d0
- move.l File_Handle,d1
- move.l #MapBuffer,d2
- move.l #1824,d3
- jsr _LVORead(a6)
-
- cmpi.l #-1,d0
- bne 2$
-
- 1$
- movea.l Intuition_Base,a6 ;Beep if no voice.dat
- movea.l InfoScr,a0
- jsr _LVODisplayBeep(a6)
- bra 6$
-
- 2$
- movea.l #OneLearnItem,a0 ;Erase all checkmarks
- move.l #5,d7
- 4$
- move.w #ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT,mi_Flags(a0)
- move.l mi_NextItem(a0),a0
- dbra d7,4$
-
- 6$
- movea.l DOS_Base,a6
- move.l File_Handle,d1
- jsr _LVOClose(a6)
-
- 8$
- bra GetInfoMessage
-
- ******************************************
-
- RecognizeRoutine:
- movea.l #VoiceWindow,a0 ;Open VoiceTask Window
- move.l InfoScr,nw_Screen(a0)
- movea.l Intuition_Base,a6
- jsr _LVOOpenWindow(a6)
- move.l d0,VoiceWdw ;Intuition Window
- beq Close
-
- add.l #wd_RPort,d0
- move.l d0,a0
- move.l (a0),VoiceRastPort
-
- movea.l VoiceRastPort,a0
- move.l rp_BitMap(a0),VoiceBitMap
- movea.l VoiceBitMap,a0
- move.l bm_Planes(a0),VoiceBitPlane
-
- movea.l #PS3SubItem,a0 ;What digitizer?
- move.w mi_Flags(a0),d0
- btst #8,d0
- beq 0$
- movea.l VoiceWdw,a0
- movea.l #RecProjectMenu,a1
- jsr _LVOSetMenuStrip(a6)
-
- 0$
- movea.l Voice_Base,a6
- bsr ChooseDigitizer
-
- movea.l #ResHighSubItem,a0 ;What resolution?
- move.w mi_Flags(a0),d0
- btst #8,d0
- bne 2$
- move.l #1,Resolution ;Low
- bra.s 4$
- 2$
- move.l #0,Resolution ;High
- 4$
- movea.l #MapBuffer,a0 ;User's voice map buffer
- movea.l VoiceWdw,a1
- movea.l wd_UserPort(a1),a1 ;User's message port
- move.l #6,d0 ;Number words in vocabulary
- move.l Resolution,d1 ;Resolution
- jsr _LVOAddVoiceTask(a6)
-
- movea.l Intuition_Base,a6 ;Clear Info Menu
- movea.l InfoWdw,a0
- movea.l #ProjectMenu,a1
- jsr _LVOClearMenuStrip(a6)
-
- VoicePause:
- movea.l _AbsExecBase,a6 ;Wait IntuiMessages
- movea.l VoiceWdw,a0 ;or Message from VoiceTask
- movea.l wd_UserPort(a0),a0
- move.b MP_SIGBIT(a0),d1
- moveq.l #1,d0
- lsl.l d1,d0
- jsr _LVOWait(a6)
-
- GetVoiceMessage:
- movea.l _AbsExecBase,a6
- movea.l VoiceWdw,a0
- movea.l wd_UserPort(a0),a0
- jsr _LVOGetMsg(a6)
- move.l d0,IDCMPMessage
- beq VoicePause
-
- movea.l IDCMPMessage,a0
- move.l im_Class(a0),MessageClass
- move.w im_Code(a0),MessageCode
-
- cmp.l #0,MessageClass ;A Reply from VoiceTask?
- beq ReceiveVoiceMsg
-
- movea.l _AbsExecBase,a6 ;Reply if not from VoiceTask
- movea.l IDCMPMessage,a1
- jsr _LVOReplyMsg(a6)
-
- cmpi.l #CLOSEWINDOW,MessageClass ;Close and Exit?
- beq CloseVoiceTask
-
- cmpi.l #MENUPICK,MessageClass
- bne GetVoiceMessage
-
- moveq.l #0,d0 ;Menu Selected
- move.w MessageCode,d0
- move.w #5,d1
- lsr.w d1,d0
- and.w #$3F,d0
- move.w d0,ItemNumber
-
- cmpi.w #0,ItemNumber ;Volume Up?
- bne 2$
- movea.l Voice_Base,a6
- jsr _LVOGainUp(a6)
- bra GetVoiceMessage
-
- 2$
- cmpi.w #1,ItemNumber ;Volume Down?
- bne 4$
- movea.l Voice_Base,a6
- jsr _LVOGainDown(a6)
- bra GetVoiceMessage
-
- 4$
- cmpi.w #2,ItemNumber ;Quit?
- bne GetVoiceMessage
-
- CloseVoiceTask:
- movea.l Voice_Base,a6 ;Remove Voice Task
- jsr _LVORemVoiceTask(a6)
-
- movea.l Intuition_Base,a6
- movea.l VoiceWdw,a0
- jsr _LVOCloseWindow(a6)
-
- movea.l Intuition_Base,a6 ;Set Info Menu
- movea.l InfoWdw,a0
- movea.l #ProjectMenu,a1
- jsr _LVOSetMenuStrip(a6)
-
- bra GetInfoMessage
-
- ReceiveVoiceMsg: ;Process Message From VoiceTask
- move.w MessageCode,d7
-
- btst #15,d7 ;Match Error?
- beq MatchFound
-
- movea.l Graphics_Base,a6
- movea.l VoiceRastPort,a1
- move.l #24,d0
- move.l #60,d1
- jsr _LVOMove(a6)
-
- movea.l VoiceRastPort,a1
- move.l #2,d0
- jsr _LVOSetAPen(a6)
-
- cmpi.w #-1,d7 ;No Matches?
- bne.s 2$
- movea.l Graphics_Base,a6
- movea.l VoiceRastPort,a1
- movea.l #NegMatchWord,a0
- move.l #9,d0
- jsr _LVOText(a6)
- bra EndRec
-
- 2$
- cmpi.w #-2,d7 ;Clip?
- bne.s 4$
- movea.l Graphics_Base,a6
- movea.l VoiceRastPort,a1
- movea.l #ClipWord,a0
- move.l #9,d0
- jsr _LVOText(a6)
- bra EndRec
-
- 4$
- cmpi.w #-3,d7 ;Low Volume?
- bne 6$
- movea.l Graphics_Base,a6
- movea.l VoiceRastPort,a1
- movea.l #LowVolWord,a0
- move.l #9,d0
- jsr _LVOText(a6)
- bra EndRec
-
- 6$
- cmpi.w #-4,d7 ;Noisy?
- bne GetVoiceMessage
- movea.l Graphics_Base,a6
- movea.l VoiceRastPort,a1
- movea.l #NoiseWord,a0
- move.l #9,d0
- jsr _LVOText(a6)
- bra EndRec
-
- MatchFound:
- bsr PlotMap ;Plot Word Map
-
- movea.l Graphics_Base,a6
- movea.l VoiceRastPort,a1
- move.l #24,d0
- move.l #60,d1
- jsr _LVOMove(a6)
-
- movea.l VoiceRastPort,a1
- move.l #1,d0
- jsr _LVOSetAPen(a6)
-
- movea.l Graphics_Base,a6 ;Write recognized word
- movea.l VoiceRastPort,a1
- movea.l #MapBuffer,a0
- move.w MessageCode,d5
- mulu #304,d5 ;304 bytes for each map in sequence
- adda.l d5,a0
- move.l #9,d0
- jsr _LVOText(a6)
-
- movea.l #SayOnSubItem,a0 ;Say On?
- move.w mi_Flags(a0),d0
- btst #8,d0
- beq EndRec
-
- movea.l #SayString,a0 ;Load Say String
- adda.l #18,a0
- movea.l #MapBuffer,a1
- move.w MessageCode,d0
- mulu #304,d0 ;304 bytes for each map in sequence
- adda.l d0,a1
- move.l (a1)+,(a0)+ ;Insert Say String
- move.l (a1)+,(a0)+
- move.l (a1)+,(a0)+
-
- movea.l DOS_Base,a6 ;Say
- move.l #SayString,d1
- moveq.l #0,d2
- move.l NIL_Handle,d3
- jsr _LVOExecute(a6)
-
- EndRec:
- movea.l _AbsExecBase,a6 ;Now Reply to VoiceTask
- movea.l IDCMPMessage,a1 ;in order to listen for
- jsr _LVOReplyMsg(a6) ;the next word.
-
- bra GetVoiceMessage ;Return and wait for message
-
- ******************************************
-
- LearnRoutine:
- movea.l Voice_Base,a6
- bsr ChooseDigitizer
-
- movea.l #MapBuffer,a0 ;MapBuffer address in a0
- movea.l #WordList,a1 ;Start of Word List
- move.w ItemNumber,d0 ;Sequence Number of Word
- lsl.w #4,d0 ;16 bytes per word
- adda.w d0,a1 ;ASCII text string in a1
-
- movea.l InfoScr,a2 ;Screen for Learn Window
- move.w ItemNumber,d0 ;Sequence Number of Word
- move.l #130,d1 ;X Position of Learn Window
- move.l #40,d2 ;Y Position of Learn Window
- jsr _LVOLearn(a6)
-
- cmpi.l #0,d0 ;Intentionally Cancelled?
- bne GetInfoMessage
-
- movea.l #OneLearnItem,a0 ;If Cancelled, erase checkmark
- move.w ItemNumber,d0
- subq.w #1,d0
- 2$
- cmpi.w #-1,d0
- beq 4$
- move.l mi_NextItem(a0),a0
- subq.w #1,d0
- bra.s 2$
- 4$
- move.w #ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT,mi_Flags(a0)
-
- bra GetInfoMessage
-
- *********** Close and Exit ****************
-
- Close:
- movea.l Intuition_Base,a6
- movea.l InfoWdw,a0
- jsr _LVOCloseWindow(a6)
-
- Close4:
- movea.l Intuition_Base,a6
- movea.l InfoScr,a0
- jsr _LVOCloseScreen(a6)
-
- Close8: ;Close Libraries
- movea.l _AbsExecBase,a6
- movea.l Voice_Base,a1
- jsr _LVOCloseLibrary(a6)
-
- Close10:
- movea.l _AbsExecBase,a6
- movea.l Graphics_Base,a1
- jsr _LVOCloseLibrary(a6)
-
- Close20:
- movea.l _AbsExecBase,a6
- movea.l Intuition_Base,a1
- jsr _LVOCloseLibrary(a6)
-
- Close30:
- movea.l DOS_Base,a6
- move.l NIL_Handle,d1
- jsr _LVOClose(a6)
-
- Close40:
- movea.l _AbsExecBase,a6
- movea.l DOS_Base,a1
- jsr _LVOCloseLibrary(a6)
-
- Close50:
-
- rts
-
- ************ SubRoutines *****************
-
- ChooseDigitizer:
- movea.l #PS3SubItem,a0 ;What digitizer?
- move.w mi_Flags(a0),d0
- btst #8,d0
- beq 2$
- moveq.l #0,d0 ;PS3 Chosen
- bra.s 6$
- 2$
- movea.l #SMSubItem,a0
- move.w mi_Flags(a0),d0
- btst #8,d0
- beq 4$
- moveq.l #1,d0 ;SoundMaster Chosen
- bra.s 6$
- 4$
- moveq.l #2,d0 ;Generic Chosen
- 6$
- jsr _LVOPickSampler(a6)
-
- rts
-
- **************** Plot Map ***************
-
- PlotMap:
- movem.l d2-d7/a4-a5,-(a7)
-
- movea.l Voice_Base,a6 ;Find Map Address
- jsr _LVORecMapAddress(a6)
- move.l d0,a5
-
- move.w #20,d0 ;Starting X in d7
- movea.l VoiceWdw,a0
- add.w wd_LeftEdge(a0),d0
- ext.l d0
- move.l d0,d7
-
- move.l #71,d5 ;Loop counter (72 frequency Points)
- PMLoop:
- move.w #18,d0 ;Starting Y in d6
- movea.l VoiceWdw,a0
- add.w wd_TopEdge(a0),d0
- ext.l d0
- move.l d0,d6
-
- move.l (a5)+,d3 ;32 bit word from map
-
- move.l d7,d2
- divu #8,d2 ;X/8 Bytes
-
- move.l #31,d4 ;Loop counter (32 bits per frequency)
- PFLoop:
- move.l d6,d0
- mulu #80,d0 ;Y*80 Bytes per line
-
- add.w d2,d0 ;Byte Position in d0
-
- move.l d2,d1
- swap d1 ;7 - (Remainder of X/8)
- sub.w #7,d1
- neg.w d1 ;Bit Position in d1
-
- movea.l VoiceBitPlane,a4
- btst d4,d3
- beq 10$
- bset d1,0(a4,d0.w)
- bra.s 12$
- 10$
- bclr d1,0(a4,d0.w)
- 12$
- addq.w #1,d6
- dbra d4,PFLoop
-
- addq.l #1,d7
- dbra d5,PMLoop
-
- movem.l (a7)+,d2-d7/a4-a5
- rts
-
- ************** Info Text *****************
-
- WriteInfoText:
- movea.l Graphics_Base,a6
- movea.l InfoRastPort,a1
- move.l #1,d0
- jsr _LVOSetAPen(a6)
-
- movea.l #InfoText,a5
- move.l #21,d7 ;Loop Counter, 22 lines
- move.l #24,d6 ;Starting X
- move.l #22,d5 ;Starting Y
-
- WILoop:
- movea.l InfoRastPort,a1
- move.l d6,d0
- move.l d5,d1
- jsr _LVOMove(a6)
-
- movea.l InfoRastPort,a1
- movea.l a5,a0
- move.l #71,d0
- jsr _LVOText(a6)
-
- adda.l #72,a5
- add.l #8,d5
- dbra d7,WILoop
-
- rts
-
- ***************** Data *******************
-
- SECTION data,DATA
-
- DOS_Name:
- dc.b 'dos.library',0
-
- INTUITION_Name:
- dc.b 'intuition.library',0
-
- GRAPHICS_Name:
- dc.b 'graphics.library',0,0
-
- VOICE_Name:
- dc.b 'voice.library',0
-
- VoiceFileName:
- dc.b 'Voice.dat',0
-
- NILFileName:
- dc.b 'NIL:',0,0
-
- WordList: ;16 bytes each
- dc.b 'Peter ',0
- dc.b 'Piper ',0
- dc.b 'Picked ',0
- dc.b 'A Peck Of ',0
- dc.b 'Pickled ',0
- dc.b 'Peppers ',0
-
- NegMatchWord:
- dc.b 'No Match ',0
-
- LowVolWord:
- dc.b 'Low Vol ',0
-
- ClipWord:
- dc.b 'Clipping ',0
-
- NoiseWord:
- dc.b 'Noisy ',0
-
- SayString:
- dc.b 'sys:utilities/Say ',0
-
- InfoScreen:
- dc.w 0,0,640,200,2
- dc.b 0,1
- dc.w V_HIRES,CUSTOMSCREEN!NS_EXTENDED
- dc.l MyFont,0,0,0,ScreenTagList
-
- MyFont:
- dc.l MyFontName ;pointer to font name
- dc.w 8 ;size
- dc.w 0
-
- MyFontName:
- dc.b 'topaz.font',0,0
-
- ScreenTagList:
- dc.l SA_Pens,MyPenArray
- dc.l TAG_DONE
-
- ScreenTitle:
- dc.b 'InfoScreen',0,0
-
- MyPenArray:
- dc.w 0 ;Detail Pen
- dc.w 1 ;Block Pen
- dc.w 1 ;Text Pen
- dc.w 2 ;Shine Pen
- dc.w 1 ;Shadow Pen
- dc.w 3 ;Hifill Pen
- dc.w 1 ;Text over Hifill
- dc.w 0 ;Background Pen
- dc.w 1 ;Hilight text Pen
-
- ******************************************
-
- InfoWindow:
- dc.w 0,0,640,200
- dc.b 0,1
- dc.l CLOSEWINDOW!RAWKEY!MENUPICK
- dc.l WINDOWCLOSE!WINDOWDEPTH!WINDOWDRAG!WINDOWSIZING!ACTIVATE
- dc.l 0,0,InfoWindowTitle,0,0
- dc.w 320,100,0,0,CUSTOMSCREEN
-
- InfoWindowTitle:
- dc.b ' VoiceDemo Information',0
- cnop 0,2
-
- ******************************************
-
- VoiceWindow:
- dc.w 160,30,112,65
- dc.b 0,1
- dc.l CLOSEWINDOW!MENUPICK,WINDOWCLOSE!WINDOWDRAG!ACTIVATE
- dc.l 0,0,VoiceWindowTitle,0,0
- dc.w 160,30,0,0,CUSTOMSCREEN
-
- VoiceWindowTitle:
- dc.b 'VoiceWdw ',0
- cnop 0,2
-
- Colors:
- dc.w $0999,$0000,$0eee,$0679 ;gray, black, white, blue
-
- ************ Project Menu ****************
-
- ProjectMenu:
- dc.l LearnMenu
- dc.w 5,0,70,0,MENUENABLED
- dc.l ProjectMenuTitle,SaveVoiceFileItem
- dc.w 0,0,0,0
-
- ProjectMenuTitle:
- dc.b 'PROJECT',0
-
- SaveVoiceFileItem:
- dc.l LoadVoiceFileItem
- dc.w 0,0,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
- dc.l 0,SaveVoiceFileItemText,0,0,0
-
- SaveVoiceFileItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w 0,0
- dc.l 0,SaveVoiceFileItemTitle,0
-
- SaveVoiceFileItemTitle:
- dc.b 'Save Voice File',0
-
- LoadVoiceFileItem:
- dc.l RecognizeItem
- dc.w 0,10,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
- dc.l 0,LoadVoiceFileItemText,0,0,0
-
- LoadVoiceFileItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w 0,0
- dc.l 0,LoadVoiceFileItemTitle,0
-
- LoadVoiceFileItemTitle:
- dc.b 'Load Voice File',0
- cnop 0,2
-
- RecognizeItem:
- dc.l QuitItem
- dc.w 0,20,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
- dc.l 0,RecognizeItemText,0,0,0
-
- RecognizeItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w 0,0
- dc.l 0,RecognizeItemTitle,0
-
- RecognizeItemTitle:
- dc.b 'Recognize Voice',0
-
- QuitItem:
- dc.l 0
- dc.w 0,30,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
- dc.l 0,QuitItemText,0,0,0
-
- QuitItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w 0,0
- dc.l 0,QuitItemTitle,0
-
- QuitItemTitle:
- dc.b 'Quit',0,0
-
- ************ Learn Menu ******************
-
- LearnMenu:
- dc.l OptionMenu
- dc.w 120,0,60,0,MENUENABLED
- dc.l LearnMenuTitle,OneLearnItem
- dc.w 0,0,0,0
-
- LearnMenuTitle:
- dc.b 'LEARN',0
-
- OneLearnItem:
- dc.l TwoLearnItem
- dc.w 0,0,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
- dc.l 0,OneLearnItemText,0,0,0
-
- OneLearnItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,OneLearnItemTitle,0
-
- OneLearnItemTitle:
- dc.b '"Peter"',0
-
- TwoLearnItem:
- dc.l ThreeLearnItem
- dc.w 0,10,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
- dc.l 0,TwoLearnItemText,0,0,0
-
- TwoLearnItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,TwoLearnItemTitle,0
-
- TwoLearnItemTitle:
- dc.b '"Piper"',0
-
- ThreeLearnItem:
- dc.l FourLearnItem
- dc.w 0,20,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
- dc.l 0,ThreeLearnItemText,0,0,0
-
- ThreeLearnItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,ThreeLearnItemTitle,0
-
- ThreeLearnItemTitle:
- dc.b '"Picked"',0,0
-
- FourLearnItem:
- dc.l FiveLearnItem
- dc.w 0,30,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
- dc.l 0,FourLearnItemText,0,0,0
-
- FourLearnItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,FourLearnItemTitle,0
-
- FourLearnItemTitle:
- dc.b '"A Peck Of"',0
-
- FiveLearnItem:
- dc.l SixLearnItem
- dc.w 0,40,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
- dc.l 0,FiveLearnItemText,0,0,0
-
- FiveLearnItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,FiveLearnItemTitle,0
-
- FiveLearnItemTitle:
- dc.b '"Pickeled"',0,0
-
- SixLearnItem:
- dc.l 0
- dc.w 0,50,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
- dc.l 0,SixLearnItemText,0,0,0
-
- SixLearnItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,SixLearnItemTitle,0
-
- SixLearnItemTitle:
- dc.b '"Peppers"',0
-
- ************ Option Menu *****************
-
- OptionMenu:
- dc.l 0
- dc.w 240,0,60,0,MENUENABLED
- dc.l OptionMenuTitle,DigitizerOptionItem
- dc.w 0,0,0,0
-
- OptionMenuTitle:
- dc.b 'OPTIONS',0
-
- *************************************
-
- DigitizerOptionItem:
- dc.l ResOptionItem
- dc.w 0,0,100,10,ITEMTEXT!ITEMENABLED!HIGHCOMP
- dc.l 0,DigitizerOptionItemText,0
- dc.w 0
- dc.l PS3SubItem
- dc.w 0
-
- DigitizerOptionItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w 0,0
- dc.l 0,DigitizerOptionItemTitle,0
-
- DigitizerOptionItemTitle:
- dc.b 'Digitizer',0
-
- PS3SubItem:
- dc.l SMSubItem
- dc.w 98,4,108+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT!CHECKED
- dc.l 6,PS3SubItemText
- dc.l 0,0,0
-
- PS3SubItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,PS3SubItemTitle,0
-
- PS3SubItemTitle:
- dc.b 'PerfectSound3',0
-
- SMSubItem:
- dc.l GenSubItem
- dc.w 98,14,108+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
- dc.l 5,SMSubItemText
- dc.l 0,0,0
-
- SMSubItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,SMSubItemTitle,0
-
- SMSubItemTitle:
- dc.b 'SoundMaster',0
-
- GenSubItem:
- dc.l 0
- dc.w 98,24,108+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
- dc.l 3,GenSubItemText
- dc.l 0,0,0
-
- GenSubItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,GenSubItemTitle,0
-
- GenSubItemTitle:
- dc.b 'Generic',0
-
- *************************************
-
- ResOptionItem:
- dc.l SayOptionItem
- dc.w 0,10,100,10,ITEMTEXT!ITEMENABLED!HIGHCOMP
- dc.l 0,ResOptionItemText,0
- dc.w 0
- dc.l ResHighSubItem
- dc.w 0
-
- ResOptionItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w 0,0
- dc.l 0,ResOptionItemTitle,0
-
- ResOptionItemTitle:
- dc.b 'Resolution',0,0
-
- ResHighSubItem:
- dc.l ResLowSubItem
- dc.w 98,4,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
- dc.l 2,ResHighSubItemText,0,0,0
-
- ResHighSubItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,ResHighSubItemTitle,0
-
- ResHighSubItemTitle:
- dc.b 'High',0,0
-
- ResLowSubItem:
- dc.l 0
- dc.w 98,14,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT!CHECKED
- dc.l 1,ResLowSubItemText,0,0,0
-
- ResLowSubItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,ResLowSubItemTitle,0
-
- ResLowSubItemTitle:
- dc.b 'Low',0
-
- ******************************************
-
- SayOptionItem:
- dc.l 0
- dc.w 0,20,100,10,ITEMTEXT!ITEMENABLED!HIGHCOMP
- dc.l 0,SayOptionItemText,0
- dc.w 0
- dc.l SayOnSubItem
- dc.w 0
-
- SayOptionItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w 0,0
- dc.l 0,SayOptionItemTitle,0
-
- SayOptionItemTitle:
- dc.b 'Say',0
-
- SayOnSubItem:
- dc.l SayOffSubItem
- dc.w 98,4,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
- dc.l 2,SayOnSubItemText
- dc.l 0,0,0
-
- SayOnSubItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,SayOnSubItemTitle,0
-
- SayOnSubItemTitle:
- dc.b 'On',0,0
-
- SayOffSubItem:
- dc.l 0
- dc.w 98,14,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT!CHECKED
- dc.l 1,SayOffSubItemText
- dc.l 0,0,0
-
- SayOffSubItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w CHECKWIDTH,0
- dc.l 0,SayOffSubItemTitle,0
-
- SayOffSubItemTitle:
- dc.b 'Off',0
-
- ******** Recognize Project Menu **********
-
- RecProjectMenu:
- dc.l 0
- dc.w 5,0,70,0,MENUENABLED
- dc.l RecProjectMenuTitle,VolumeUpItem
- dc.w 0,0,0,0
-
- RecProjectMenuTitle:
- dc.b 'PROJECT',0
-
- VolumeUpItem:
- dc.l VolumeDownItem
- dc.w 0,0,80,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
- dc.l 0,VolumeUpItemText,0,0,0
-
- VolumeUpItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w 0,0
- dc.l 0,VolumeUpItemTitle,0
-
- VolumeUpItemTitle:
- dc.b 'Volume Up',0
-
- VolumeDownItem:
- dc.l RecQuitItem
- dc.w 0,10,80,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
- dc.l 0,VolumeDownItemText,0,0,0
-
- VolumeDownItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w 0,0
- dc.l 0,VolumeDownItemTitle,0
-
- VolumeDownItemTitle:
- dc.b 'Volume Dn',0
- cnop 0,2
-
- RecQuitItem:
- dc.l 0
- dc.w 0,20,80,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
- dc.l 0,RecQuitItemText,0,0,0
-
- RecQuitItemText:
- dc.b 0,1,RP_JAM1,0
- dc.w 0,0
- dc.l 0,RecQuitItemTitle,0
-
- RecQuitItemTitle:
- dc.b 'Quit',0
- cnop 0,2
-
- *************************** Information Text ************************************
-
- InfoText:
- dc.b ' This program utilizes the PerfectSound3, SoundMaster, or Generic ',0
- dc.b 'audio digitizer and the public domain disk-based voice.library to learn',0
- dc.b 'and recognize six simple spoken phrases. The phrases are "Peter ... ',0
- dc.b 'Piper... Picked ... A Peck Of ... Pickled ... Peppers." ',0
- dc.b ' First, the program must learn each phrase. To do this, select ',0
- dc.b 'the desired phrase from the "Learn" menu. You will then be prompted to',0
- dc.b 'speak this phrase to produce three acceptable digital samples. Choose ',0
- dc.b 'the "Sample" gadget to record, and the "Accept" gadget to save each of ',0
- dc.b 'the THREE REQUIRED SAMPLES for each phrase. You may need to increase ',0
- dc.b 'or decrease volume by moving your microphone or by choosing the ',0
- dc.b 'appropriate volume adjustment gadget. Speak each phrase slowly and ',0
- dc.b 'forcefully, pronouncing each syllable distinctly. After learning all ',0
- dc.b 'six phrases, you may save a complete file of voice data as voice.dat. ',0
- dc.b ' After learning is complete, you may proceed to recognize any ',0
- dc.b 'phrase at random. Choose "Recognize Voice" from the Project Menu to ',0
- dc.b 'start a separate task that listens to the audio digitizer and ',0
- dc.b 'recognizes each phrase based on an audio frequency analysis. When a ',0
- dc.b 'phrase is recognized, it will be spoken back to you using the Amiga ',0
- dc.b 'speach capability. A voice map showing a frequency range of 3200 Hz ',0
- dc.b 'versus 3/4 second of time will also be plotted. Digitizer volume may ',0
- dc.b 'be changed by menu selection. "Clipping" indicates volume is too high.',0
- dc.b '"Low Vol" indicates volume is too low. ',0
- dc.b ' ',0
-
- **********************************************************************************
-
- SECTION Memory,BSS
-
- DOS_Base:
- ds.l 1
-
- Intuition_Base:
- ds.l 1
-
- Graphics_Base:
- ds.l 1
-
- Voice_Base:
- ds.l 1
-
- InfoScr:
- ds.l 1
-
- InfoWdw:
- ds.l 1
-
- InfoRastPort:
- ds.l 1
-
- InfoViewPort:
- ds.l 1
-
- VoiceWdw:
- ds.l 1
-
- VoiceRastPort:
- ds.l 1
-
- VoiceBitMap:
- ds.l 1
-
- VoiceBitPlane:
- ds.l 1
-
- Resolution:
- ds.l 1
-
- File_Handle:
- ds.l 1
-
- NIL_Handle:
- ds.l 1
-
- MessageClass
- ds.l 1
-
- MessageCode:
- ds.w 1
-
- IDCMPMessage:
- ds.l 1
-
- MenuNumber:
- ds.w 1
-
- ItemNumber:
- ds.w 1
-
- MapBuffer:
- ds.b 1824 ;6 word maps, (72*4 + 16) bytes each
-
- END
-