home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 1 / FFMCD01.bin / bbs / libdisks / d600t699 / disk618.lha / VoiceDemo / VoiceDemo.asm < prev    next >
Encoding:
Assembly Source File  |  1992-03-11  |  27.0 KB  |  1,199 lines

  1. ******************************************
  2.  
  3. *  Voice Recognition Demo by Richard Horne
  4.  
  5. *  Requires voice.library (V 4.0) in sys:libs
  6.  
  7. ******************************************
  8.  
  9.    INCLUDE     "exec/types.i"
  10.    INCLUDE     "intuition/intuition.i"
  11.    INCLUDE     "libraries/dos.i"
  12.  
  13. *********** external references **********
  14.  
  15.    XREF  _AbsExecBase
  16.    XREF  _LVOOpenLibrary
  17.    XREF  _LVOCloseLibrary
  18.    XREF  _LVOOpenWindow
  19.    XREF  _LVOCloseWindow
  20.    XREF  _LVOOpenScreen
  21.    XREF  _LVOCloseScreen
  22.    XREF  _LVOSetMenuStrip
  23.    XREF  _LVOClearMenuStrip
  24.    XREF  _LVODisplayBeep
  25.    XREF  _LVOWait
  26.    XREF  _LVOGetMsg
  27.    XREF  _LVOReplyMsg
  28.    XREF  _LVOLoadRGB4
  29.    XREF  _LVOSetAPen
  30.    XREF  _LVOText
  31.    XREF  _LVOMove
  32.    XREF  _LVOOpen
  33.    XREF  _LVOClose
  34.    XREF  _LVORead
  35.    XREF  _LVOWrite
  36.    XREF  _LVOExecute
  37.  
  38.    XDEF  _main
  39.  
  40. *******  Voice.library Functions ********
  41.  
  42. _LVOLearn            EQU   -30
  43. _LVORecognize        EQU   -36
  44. _LVOAddVoiceTask     EQU   -42
  45. _LVORemVoiceTask     EQU   -48
  46. _LVOGainUp           EQU   -54
  47. _LVOGainDown         EQU   -60
  48. _LVORecDataAddress   EQU   -66
  49. _LVORecMapAddress    EQU   -72
  50. _LVOWordScore        EQU   -78
  51. _LVOPickSampler      EQU   -84
  52.  
  53. *********** Begin Program  **************
  54.  
  55. _main:
  56.    movea.l  _AbsExecBase,a6      ;Open DOS Llibrary
  57.    movea.l  #DOS_Name,a1
  58.    moveq.l  #0,d0
  59.    jsr      _LVOOpenLibrary(a6)
  60.    move.l   d0,DOS_Base
  61.    beq      Close50
  62.  
  63.    movea.l  DOS_Base,a6          ;Open NIL
  64.    move.l   #NILFileName,d1
  65.    move.l   #MODE_NEWFILE,d2
  66.    jsr      _LVOOpen(a6)
  67.    move.l   d0,NIL_Handle
  68.    beq      Close40
  69.  
  70.    movea.l  _AbsExecBase,a6      ;Open Intuition Library
  71.    movea.l  #INTUITION_Name,a1
  72.    moveq.l  #0,d0
  73.    jsr      _LVOOpenLibrary(a6)
  74.    move.l   d0,Intuition_Base
  75.    beq      Close30
  76.  
  77.    movea.l  #GRAPHICS_Name,a1    ;Open Graphics Library
  78.    moveq.l  #0,d0
  79.    jsr      _LVOOpenLibrary(a6)
  80.    move.l   d0,Graphics_Base
  81.    beq      Close20
  82.  
  83.    movea.l  #VOICE_Name,a1       ;Open Voice Library
  84.    moveq.l  #4,d0
  85.    jsr      _LVOOpenLibrary(a6)  ;Version 4 Only
  86.    move.l   d0,Voice_Base
  87.    beq      Close10
  88.  
  89. ****** Open Info Screen and Window *******
  90.  
  91.    movea.l  #InfoScreen,a0       ;Open Info Screen
  92.    movea.l  Intuition_Base,a6
  93.    jsr      _LVOOpenScreen(a6)
  94.    move.l   d0,InfoScr
  95.    beq      Close8
  96.  
  97.    add.l    #sc_RastPort,d0
  98.    move.l   d0,InfoRastPort
  99.  
  100.    move.l   InfoScr,d0
  101.    add.l    #sc_ViewPort,d0
  102.    move.l   d0,InfoViewPort
  103.  
  104.    movea.l  Graphics_Base,a6     ;Set Colors
  105.    movea.l  InfoViewPort,a0
  106.    move.l   #Colors,a1
  107.    move.l   #4,d0
  108.    jsr      _LVOLoadRGB4(a6)
  109.  
  110.    movea.l  #InfoWindow,a0       ;Open Info Window
  111.    move.l   InfoScr,nw_Screen(a0)
  112.    movea.l  Intuition_Base,a6
  113.    jsr      _LVOOpenWindow(a6)
  114.    move.l   d0,InfoWdw
  115.    beq      Close4
  116.  
  117.    bsr      WriteInfoText        ;Write Information
  118.  
  119.    movea.l  Intuition_Base,a6
  120.    movea.l  InfoWdw,a0
  121.    movea.l  #ProjectMenu,a1
  122.    jsr      _LVOSetMenuStrip(a6)
  123.  
  124. InfoPause:
  125.    movea.l  InfoWdw,a0
  126.    movea.l  wd_UserPort(a0),a0
  127.    move.b   MP_SIGBIT(a0),d1
  128.    moveq.l  #1,d0
  129.    lsl.l    d1,d0
  130.    movea.l  _AbsExecBase,a6
  131.    jsr      _LVOWait(a6)
  132.  
  133. GetInfoMessage:
  134.    movea.l  InfoWdw,a0
  135.    movea.l  wd_UserPort(a0),a0
  136.    movea.l  _AbsExecBase,a6
  137.    jsr      _LVOGetMsg(a6)
  138.    move.l   d0,IDCMPMessage
  139.    beq      InfoPause
  140.  
  141.    movea.l  d0,a0                ;Get Message Class and Code
  142.    move.l   im_Class(a0),MessageClass
  143.    move.w   im_Code(a0),MessageCode
  144.  
  145.    movea.l  _AbsExecBase,a6      ;Reply
  146.    move.l   d0,a1
  147.    jsr      _LVOReplyMsg(a6)
  148.  
  149.    cmpi.l   #CLOSEWINDOW,MessageClass  ;Close and quit?
  150.    beq      Close
  151.  
  152.    cmpi.l   #MENUPICK,MessageClass     ;Menu Selection?
  153.    bne      GetInfoMessage
  154.  
  155. MenuSelect:
  156.    moveq.l  #0,d0
  157.    move.w   MessageCode,d0
  158.    and.w    #$1F,d0
  159.    move.w   d0,MenuNumber
  160.  
  161.    moveq.l  #0,d0
  162.    move.w   MessageCode,d0
  163.    move.w   #5,d1
  164.    lsr.w    d1,d0
  165.    and.w    #$3F,d0
  166.    move.w   d0,ItemNumber
  167.  
  168.    cmpi.w   #1,MenuNumber        ;Learn Menu Chosen?
  169.    beq      LearnRoutine
  170.  
  171.    cmpi.w   #2,MenuNumber        ;Options Chosen?
  172.    beq      GetInfoMessage
  173.  
  174.    cmpi.w   #0,ItemNumber        ;Project Menu Chosen
  175.    beq      SaveFileRoutine
  176.    cmpi.w   #1,ItemNumber
  177.    beq      LoadFileRoutine
  178.    cmpi.w   #2,ItemNumber
  179.    beq      RecognizeRoutine
  180.    cmpi.w   #3,ItemNumber
  181.    beq      Close
  182.    bra      GetInfoMessage
  183.  
  184. SaveFileRoutine:
  185.    movea.l  DOS_Base,a6
  186.    move.l   #VoiceFileName,d1
  187.    move.l   #MODE_NEWFILE,d2
  188.    jsr      _LVOOpen(a6)
  189.    move.l   d0,File_Handle
  190.  
  191.    move.l   File_Handle,d1
  192.    move.l   #MapBuffer,d2
  193.    move.l   #1824,d3
  194.    jsr      _LVOWrite(a6)
  195.  
  196.    move.l   File_Handle,d1
  197.    jsr      _LVOClose(a6)
  198.  
  199.    bra      GetInfoMessage
  200.  
  201. LoadFileRoutine:
  202.    movea.l  DOS_Base,a6
  203.    move.l   #VoiceFileName,d1
  204.    move.l   #MODE_OLDFILE,d2
  205.    jsr      _LVOOpen(a6)
  206.    move.l   d0,File_Handle
  207.    beq      1$
  208.  
  209.    moveq.l  #0,d0
  210.    move.l   File_Handle,d1
  211.    move.l   #MapBuffer,d2
  212.    move.l   #1824,d3
  213.    jsr      _LVORead(a6)
  214.  
  215.    cmpi.l   #-1,d0
  216.    bne      2$
  217.  
  218. 1$
  219.    movea.l  Intuition_Base,a6          ;Beep if no voice.dat
  220.    movea.l  InfoScr,a0
  221.    jsr      _LVODisplayBeep(a6)
  222.    bra      6$
  223.  
  224. 2$
  225.    movea.l  #OneLearnItem,a0           ;Erase all checkmarks
  226.    move.l   #5,d7
  227. 4$
  228.    move.w   #ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT,mi_Flags(a0)
  229.    move.l   mi_NextItem(a0),a0
  230.    dbra     d7,4$
  231.  
  232. 6$
  233.    movea.l  DOS_Base,a6
  234.    move.l   File_Handle,d1
  235.    jsr      _LVOClose(a6)
  236.  
  237. 8$
  238.    bra      GetInfoMessage
  239.  
  240. ******************************************
  241.  
  242. RecognizeRoutine:
  243.    movea.l  #VoiceWindow,a0      ;Open VoiceTask Window
  244.    move.l   InfoScr,nw_Screen(a0)
  245.    movea.l  Intuition_Base,a6
  246.    jsr      _LVOOpenWindow(a6)
  247.    move.l   d0,VoiceWdw          ;Intuition Window
  248.    beq      Close
  249.  
  250.    add.l    #wd_RPort,d0
  251.    move.l   d0,a0
  252.    move.l   (a0),VoiceRastPort
  253.  
  254.    movea.l  VoiceRastPort,a0
  255.    move.l   rp_BitMap(a0),VoiceBitMap
  256.    movea.l  VoiceBitMap,a0
  257.    move.l   bm_Planes(a0),VoiceBitPlane
  258.  
  259.    movea.l  VoiceWdw,a0
  260.    movea.l  #RecProjectMenu,a1
  261.    jsr      _LVOSetMenuStrip(a6)
  262.  
  263.    movea.l  Voice_Base,a6
  264.    bsr      ChooseDigitizer
  265.  
  266.    movea.l  #ResHighSubItem,a0   ;What resolution?
  267.    move.w   mi_Flags(a0),d0
  268.    btst     #8,d0
  269.    bne      2$
  270.    move.l   #1,Resolution        ;Low
  271.    bra.s    4$
  272. 2$
  273.    move.l   #0,Resolution        ;High
  274. 4$
  275.    movea.l  #MapBuffer,a0        ;User's voice map buffer
  276.    movea.l  VoiceWdw,a1
  277.    movea.l  wd_UserPort(a1),a1   ;User's message port
  278.    move.l   #6,d0                ;Number words in vocabulary
  279.    move.l   Resolution,d1        ;Resolution
  280.    jsr      _LVOAddVoiceTask(a6)
  281.  
  282.    movea.l  Intuition_Base,a6    ;Clear Info Menu
  283.    movea.l  InfoWdw,a0
  284.    movea.l  #ProjectMenu,a1
  285.    jsr      _LVOClearMenuStrip(a6)
  286.  
  287. VoicePause:
  288.    movea.l  _AbsExecBase,a6      ;Wait IntuiMessages
  289.    movea.l  VoiceWdw,a0          ;or Message from VoiceTask
  290.    movea.l  wd_UserPort(a0),a0
  291.    move.b   MP_SIGBIT(a0),d1
  292.    moveq.l  #1,d0
  293.    lsl.l    d1,d0
  294.    jsr      _LVOWait(a6)
  295.  
  296. GetVoiceMessage:
  297.    movea.l  _AbsExecBase,a6
  298.    movea.l  VoiceWdw,a0
  299.    movea.l  wd_UserPort(a0),a0
  300.    jsr      _LVOGetMsg(a6)
  301.    move.l   d0,IDCMPMessage
  302.    beq      VoicePause
  303.  
  304.    movea.l  IDCMPMessage,a0
  305.    move.l   im_Class(a0),MessageClass
  306.    move.w   im_Code(a0),MessageCode
  307.  
  308.    cmp.l    #0,MessageClass      ;A Reply from VoiceTask?
  309.    beq      ReceiveVoiceMsg
  310.  
  311.    movea.l  _AbsExecBase,a6      ;Reply if not from VoiceTask
  312.    movea.l  IDCMPMessage,a1
  313.    jsr      _LVOReplyMsg(a6)
  314.  
  315.    cmpi.l   #CLOSEWINDOW,MessageClass     ;Close and Exit?
  316.    beq      CloseVoiceTask
  317.  
  318.    cmpi.l   #MENUPICK,MessageClass
  319.    bne      GetVoiceMessage
  320.  
  321.    moveq.l  #0,d0                ;Menu Selected
  322.    move.w   MessageCode,d0
  323.    move.w   #5,d1
  324.    lsr.w    d1,d0
  325.    and.w    #$3F,d0
  326.    move.w   d0,ItemNumber
  327.  
  328.    cmpi.w   #0,ItemNumber        ;Volume Up?
  329.    bne      2$
  330.    movea.l  Voice_Base,a6
  331.    jsr      _LVOGainUp(a6)
  332.    bra      GetVoiceMessage
  333.  
  334. 2$
  335.    cmpi.w   #1,ItemNumber        ;Volume Down?
  336.    bne      4$
  337.    movea.l  Voice_Base,a6
  338.    jsr      _LVOGainDown(a6)
  339.    bra      GetVoiceMessage
  340.  
  341. 4$
  342.    cmpi.w   #2,ItemNumber        ;Quit?
  343.    bne      GetVoiceMessage
  344.  
  345. CloseVoiceTask:
  346.    movea.l  Voice_Base,a6        ;Remove Voice Task
  347.    jsr      _LVORemVoiceTask(a6)
  348.  
  349.    movea.l  Intuition_Base,a6
  350.    movea.l  VoiceWdw,a0
  351.    jsr      _LVOCloseWindow(a6)
  352.  
  353.    movea.l  Intuition_Base,a6    ;Set Info Menu
  354.    movea.l  InfoWdw,a0
  355.    movea.l  #ProjectMenu,a1
  356.    jsr      _LVOSetMenuStrip(a6)
  357.  
  358.    bra      GetInfoMessage
  359.  
  360. ReceiveVoiceMsg:                 ;Process Message From VoiceTask
  361.    move.w   MessageCode,d7
  362.  
  363.    btst     #15,d7               ;Match Error?
  364.    beq      MatchFound
  365.  
  366.    movea.l  Graphics_Base,a6
  367.    movea.l  VoiceRastPort,a1
  368.    move.l   #24,d0
  369.    move.l   #60,d1
  370.    jsr      _LVOMove(a6)
  371.  
  372.    movea.l  VoiceRastPort,a1
  373.    move.l   #2,d0
  374.    jsr      _LVOSetAPen(a6)
  375.  
  376.    cmpi.w   #-1,d7               ;No Matches?
  377.    bne.s    2$
  378.    movea.l  Graphics_Base,a6
  379.    movea.l  VoiceRastPort,a1
  380.    movea.l  #NegMatchWord,a0
  381.    move.l   #9,d0
  382.    jsr      _LVOText(a6)
  383.    bra      EndRec
  384.  
  385. 2$
  386.    cmpi.w   #-2,d7               ;Clip?
  387.    bne.s    4$
  388.    movea.l  Graphics_Base,a6
  389.    movea.l  VoiceRastPort,a1
  390.    movea.l  #ClipWord,a0
  391.    move.l   #9,d0
  392.    jsr      _LVOText(a6)
  393.    bra      EndRec
  394.  
  395. 4$
  396.    cmpi.w   #-3,d7               ;Low Volume?
  397.    bne      6$
  398.    movea.l  Graphics_Base,a6
  399.    movea.l  VoiceRastPort,a1
  400.    movea.l  #LowVolWord,a0
  401.    move.l   #9,d0
  402.    jsr      _LVOText(a6)
  403.    bra      EndRec
  404.  
  405. 6$
  406.    cmpi.w   #-4,d7               ;Noisy?
  407.    bne      GetVoiceMessage
  408.    movea.l  Graphics_Base,a6
  409.    movea.l  VoiceRastPort,a1
  410.    movea.l  #NoiseWord,a0
  411.    move.l   #9,d0
  412.    jsr      _LVOText(a6)
  413.    bra      EndRec
  414.  
  415. MatchFound:
  416.    bsr      PlotMap              ;Plot Word Map
  417.  
  418.    movea.l  Graphics_Base,a6
  419.    movea.l  VoiceRastPort,a1
  420.    move.l   #24,d0
  421.    move.l   #60,d1
  422.    jsr      _LVOMove(a6)
  423.  
  424.    movea.l  VoiceRastPort,a1
  425.    move.l   #1,d0
  426.    jsr      _LVOSetAPen(a6)
  427.  
  428.    movea.l  Graphics_Base,a6     ;Write recognized word
  429.    movea.l  VoiceRastPort,a1
  430.    movea.l  #MapBuffer,a0
  431.    move.w   MessageCode,d5
  432.    mulu     #304,d5              ;304 bytes for each map in sequence
  433.    adda.l   d5,a0
  434.    move.l   #9,d0
  435.    jsr      _LVOText(a6)
  436.  
  437.    movea.l  #SayOnSubItem,a0     ;Say On?
  438.    move.w   mi_Flags(a0),d0
  439.    btst     #8,d0
  440.    beq      EndRec
  441.  
  442.    movea.l  #SayString,a0        ;Load Say String
  443.    adda.l   #18,a0
  444.    movea.l  #MapBuffer,a1
  445.    move.w   MessageCode,d0
  446.    mulu     #304,d0              ;304 bytes for each map in sequence
  447.    adda.l   d0,a1
  448.    move.l   (a1)+,(a0)+          ;Insert Say String
  449.    move.l   (a1)+,(a0)+
  450.    move.l   (a1)+,(a0)+
  451.  
  452.    movea.l  DOS_Base,a6          ;Say
  453.    move.l   #SayString,d1
  454.    moveq.l  #0,d2
  455.    move.l   #NIL_Handle,d3
  456.    jsr      _LVOExecute(a6)
  457.  
  458. EndRec:
  459.    movea.l  _AbsExecBase,a6      ;Now Reply to VoiceTask
  460.    movea.l  IDCMPMessage,a1      ;in order to listen for
  461.    jsr      _LVOReplyMsg(a6)     ;the next word.
  462.  
  463.    bra      GetVoiceMessage      ;Return and wait for message
  464.  
  465. ******************************************
  466.  
  467. LearnRoutine:
  468.    movea.l  Voice_Base,a6
  469.    bsr      ChooseDigitizer
  470.  
  471.    movea.l  #MapBuffer,a0              ;MapBuffer address in a0
  472.    movea.l  #WordList,a1               ;Start of Word List
  473.    move.w   ItemNumber,d0              ;Sequence Number of Word
  474.    lsl.w    #4,d0                      ;16 bytes per word
  475.    adda.w   d0,a1                      ;ASCII text string in a1
  476.  
  477.    movea.l  InfoScr,a2                 ;Screen for Learn Window
  478.    move.w   ItemNumber,d0              ;Sequence Number of Word
  479.    move.l   #130,d1                    ;X Position of Learn Window
  480.    move.l   #40,d2                     ;Y Position of Learn Window
  481.    jsr      _LVOLearn(a6)
  482.  
  483.    cmpi.l   #0,d0                      ;Intentionally Cancelled?
  484.    bne      GetInfoMessage
  485.  
  486.    movea.l  #OneLearnItem,a0           ;If Cancelled, erase checkmark
  487.    move.w   ItemNumber,d0
  488.    subq.w   #1,d0
  489. 2$
  490.    cmpi.w   #-1,d0
  491.    beq      4$
  492.    move.l   mi_NextItem(a0),a0
  493.    subq.w   #1,d0
  494.    bra.s    2$
  495. 4$
  496.    move.w   #ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT,mi_Flags(a0)
  497.  
  498.    bra      GetInfoMessage
  499.  
  500. *********** Close and Exit ****************
  501.  
  502. Close:
  503.    movea.l  Intuition_Base,a6
  504.    movea.l  InfoWdw,a0
  505.    jsr      _LVOCloseWindow(a6)
  506.  
  507. Close4:
  508.    movea.l  Intuition_Base,a6
  509.    movea.l  InfoScr,a0
  510.    jsr      _LVOCloseScreen(a6)
  511.  
  512. Close8:                                ;Close Libraries
  513.    movea.l  _AbsExecBase,a6
  514.    movea.l  Voice_Base,a1
  515.    jsr      _LVOCloseLibrary(a6)
  516.  
  517. Close10:
  518.    movea.l  _AbsExecBase,a6
  519.    movea.l  Graphics_Base,a1
  520.    jsr      _LVOCloseLibrary(a6)
  521.  
  522. Close20:
  523.    movea.l  _AbsExecBase,a6
  524.    movea.l  Intuition_Base,a1
  525.    jsr      _LVOCloseLibrary(a6)
  526.  
  527. Close30:
  528.    movea.l  DOS_Base,a6
  529.    move.l   NIL_Handle,d1
  530.    jsr      _LVOClose(a6)
  531.  
  532. Close40:
  533.    movea.l  _AbsExecBase,a6
  534.    movea.l  DOS_Base,a1
  535.    jsr      _LVOCloseLibrary(a6)
  536.  
  537. Close50:
  538.  
  539.    rts
  540.  
  541. ************ SubRoutines *****************
  542.  
  543. ChooseDigitizer:
  544.    movea.l  Voice_Base,a6
  545.    movea.l  #PS3SubItem,a0       ;What digitizer?
  546.    move.w   mi_Flags(a0),d0
  547.    btst     #8,d0
  548.    beq      2$
  549.    moveq.l  #0,d0                ;PS3 Chosen
  550.    bra.s    4$
  551. 2$
  552.    moveq.l  #1,d0                ;SoundMaster Chosen
  553. 4$
  554.    jsr      _LVOPickSampler(a6)
  555.  
  556.    rts
  557.  
  558.  
  559. **************** Plot Map ***************
  560.  
  561. PlotMap:
  562.    movem.l  d2-d7/a4-a5,-(a7)
  563.  
  564.    movea.l  Voice_Base,a6        ;Find Map Address
  565.    jsr      _LVORecMapAddress(a6)
  566.    move.l   d0,a5
  567.  
  568.    move.w   #20,d0               ;Starting X in d7
  569.    movea.l  VoiceWdw,a0
  570.    add.w    wd_LeftEdge(a0),d0
  571.    ext.l    d0
  572.    move.l   d0,d7
  573.  
  574.    move.l   #71,d5               ;Loop counter (72 frequency Points)
  575. PMLoop:
  576.    move.w   #18,d0               ;Starting Y in d6
  577.    movea.l  VoiceWdw,a0
  578.    add.w    wd_TopEdge(a0),d0
  579.    ext.l    d0
  580.    move.l   d0,d6
  581.  
  582.    move.l   (a5)+,d3             ;32 bit word from map
  583.  
  584.    move.l   d7,d2
  585.    divu     #8,d2                ;X/8 Bytes
  586.  
  587.    move.l   #31,d4               ;Loop counter (32 bits per frequency)
  588. PFLoop:
  589.    move.l   d6,d0
  590.    mulu     #80,d0               ;Y*80 Bytes per line
  591.  
  592.    add.w    d2,d0                ;Byte Position in d0
  593.  
  594.    move.l   d2,d1
  595.    swap     d1                   ;7 - (Remainder of X/8)
  596.    sub.w    #7,d1
  597.    neg.w    d1                   ;Bit Position in d1
  598.  
  599.    movea.l  VoiceBitPlane,a4
  600.    btst     d4,d3
  601.    beq      10$
  602.    bset     d1,0(a4,d0.w)
  603.    bra.s    12$
  604. 10$
  605.    bclr     d1,0(a4,d0.w)
  606. 12$
  607.    addq.w   #1,d6
  608.    dbra     d4,PFLoop
  609.  
  610.    addq.l   #1,d7
  611.    dbra     d5,PMLoop
  612.  
  613.    movem.l  (a7)+,d2-d7/a4-a5
  614.    rts
  615.  
  616. ************** Info Text *****************
  617.  
  618. WriteInfoText:
  619.    movea.l  Graphics_Base,a6
  620.    movea.l  InfoRastPort,a1
  621.    move.l   #1,d0
  622.    jsr      _LVOSetAPen(a6)
  623.  
  624.    movea.l  #InfoText,a5
  625.    move.l   #22,d7               ;Loop Counter, 23 lines
  626.    move.l   #24,d6               ;Starting X
  627.    move.l   #18,d5               ;Starting Y
  628.  
  629. WILoop:
  630.    movea.l  InfoRastPort,a1
  631.    move.l   d6,d0
  632.    move.l   d5,d1
  633.    jsr      _LVOMove(a6)
  634.  
  635.    movea.l  InfoRastPort,a1
  636.    movea.l  a5,a0
  637.    move.l   #71,d0
  638.    jsr      _LVOText(a6)
  639.  
  640.    adda.l   #72,a5
  641.    add.l    #8,d5
  642.    dbra     d7,WILoop
  643.  
  644.    rts
  645.  
  646. ***************** Data *******************
  647.  
  648.    SECTION  data,DATA
  649.  
  650. DOS_Name:
  651.    dc.b     'dos.library',0
  652.  
  653. INTUITION_Name:
  654.    dc.b     'intuition.library',0
  655.  
  656. GRAPHICS_Name:
  657.    dc.b     'graphics.library',0,0
  658.  
  659. VOICE_Name:
  660.    dc.b     'voice.library',0
  661.  
  662. VoiceFileName:
  663.    dc.b     'Voice.dat',0
  664.  
  665. NILFileName:
  666.    dc.b     'NIL:',0,0
  667.  
  668. WordList:                        ;16 bytes each
  669.    dc.b     'Peter          ',0
  670.    dc.b     'Piper          ',0
  671.    dc.b     'Picked         ',0
  672.    dc.b     'A Peck Of      ',0
  673.    dc.b     'Pickled        ',0
  674.    dc.b     'Peppers        ',0
  675.  
  676. NegMatchWord:
  677.    dc.b     'No Match ',0
  678.  
  679. LowVolWord:
  680.    dc.b     'Low Vol  ',0
  681.  
  682. ClipWord:
  683.    dc.b     'Clipping ',0
  684.  
  685. NoiseWord:
  686.    dc.b     'Noisy    ',0
  687.  
  688. SayString:
  689.    dc.b     'sys:utilities/Say              ',0
  690.  
  691. InfoScreen:
  692.    dc.w     0,0,640,200,2
  693.    dc.b     0,1
  694.    dc.w     V_HIRES,CUSTOMSCREEN!NS_EXTENDED
  695.    dc.l     MyFont,0,0,0,ScreenTagList
  696.  
  697. MyFont:
  698.    dc.l     MyFontName     ;pointer to font name
  699.    dc.w     8              ;size
  700.    dc.w     0
  701.  
  702. MyFontName:
  703.    dc.b     'topaz.font',0,0
  704.  
  705. ScreenTagList:
  706.    dc.l     SA_Pens,MyPenArray
  707.    dc.l     TAG_DONE
  708.  
  709. ScreenTitle:
  710.    dc.b     'InfoScreen',0,0
  711.  
  712. MyPenArray:
  713.    dc.w     0     ;Detail Pen
  714.    dc.w     1     ;Block Pen
  715.    dc.w     1     ;Text Pen
  716.    dc.w     2     ;Shine Pen
  717.    dc.w     1     ;Shadow Pen
  718.    dc.w     3     ;Hifill Pen
  719.    dc.w     1     ;Text over Hifill
  720.    dc.w     0     ;Background Pen
  721.    dc.w     1     ;Hilight text Pen
  722.  
  723. ******************************************
  724.  
  725. InfoWindow:
  726.    dc.w     0,0,640,200
  727.    dc.b     0,1
  728.    dc.l     CLOSEWINDOW!RAWKEY!MENUPICK,WINDOWCLOSE!WINDOWDEPTH!ACTIVATE
  729.    dc.l     0,0,InfoWindowTitle,0,0
  730.    dc.w     640,200,0,0,CUSTOMSCREEN
  731.  
  732. InfoWindowTitle:
  733.    dc.b     '                        VoiceDemo Information',0
  734.    cnop     0,2
  735.  
  736. ******************************************
  737.  
  738. VoiceWindow:
  739.    dc.w     160,30,112,65
  740.    dc.b     0,1
  741.    dc.l     CLOSEWINDOW!MENUPICK,WINDOWCLOSE!WINDOWDRAG!ACTIVATE
  742.    dc.l     0,0,VoiceWindowTitle,0,0
  743.    dc.w     160,30,0,0,CUSTOMSCREEN
  744.  
  745. VoiceWindowTitle:
  746.    dc.b     'VoiceWdw ',0
  747.    cnop     0,2
  748.  
  749. Colors:
  750.    dc.w     $0999,$0000,$0eee,$0679    ;gray, black, white, blue
  751.  
  752. ************ Project Menu ****************
  753.  
  754. ProjectMenu:
  755.    dc.l     LearnMenu
  756.    dc.w     5,0,70,0,MENUENABLED
  757.    dc.l     ProjectMenuTitle,SaveVoiceFileItem
  758.    dc.w     0,0,0,0
  759.  
  760. ProjectMenuTitle:
  761.    dc.b     'PROJECT',0
  762.  
  763. SaveVoiceFileItem:
  764.    dc.l     LoadVoiceFileItem
  765.    dc.w     0,0,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  766.    dc.l     0,SaveVoiceFileItemText,0,0,0
  767.  
  768. SaveVoiceFileItemText:
  769.    dc.b     0,1,RP_JAM1,0
  770.    dc.w     0,0
  771.    dc.l     0,SaveVoiceFileItemTitle,0
  772.  
  773. SaveVoiceFileItemTitle:
  774.    dc.b     'Save Voice File',0
  775.  
  776. LoadVoiceFileItem:
  777.    dc.l     RecognizeItem
  778.    dc.w     0,10,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  779.    dc.l     0,LoadVoiceFileItemText,0,0,0
  780.  
  781. LoadVoiceFileItemText:
  782.    dc.b     0,1,RP_JAM1,0
  783.    dc.w     0,0
  784.    dc.l     0,LoadVoiceFileItemTitle,0
  785.  
  786. LoadVoiceFileItemTitle:
  787.    dc.b     'Load Voice File',0
  788.    cnop     0,2
  789.  
  790. RecognizeItem:
  791.    dc.l     QuitItem
  792.    dc.w     0,20,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  793.    dc.l     0,RecognizeItemText,0,0,0
  794.  
  795. RecognizeItemText:
  796.    dc.b     0,1,RP_JAM1,0
  797.    dc.w     0,0
  798.    dc.l     0,RecognizeItemTitle,0
  799.  
  800. RecognizeItemTitle:
  801.    dc.b     'Recognize Voice',0
  802.  
  803. QuitItem:
  804.    dc.l     0
  805.    dc.w     0,30,120,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  806.    dc.l     0,QuitItemText,0,0,0
  807.  
  808. QuitItemText:
  809.    dc.b     0,1,RP_JAM1,0
  810.    dc.w     0,0
  811.    dc.l     0,QuitItemTitle,0
  812.  
  813. QuitItemTitle:
  814.    dc.b     'Quit',0,0
  815.  
  816. ************ Learn Menu ******************
  817.  
  818. LearnMenu:
  819.    dc.l     OptionMenu
  820.    dc.w     120,0,60,0,MENUENABLED
  821.    dc.l     LearnMenuTitle,OneLearnItem
  822.    dc.w     0,0,0,0
  823.  
  824. LearnMenuTitle:
  825.    dc.b     'LEARN',0
  826.  
  827. OneLearnItem:
  828.    dc.l     TwoLearnItem
  829.    dc.w     0,0,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  830.    dc.l     0,OneLearnItemText,0,0,0
  831.  
  832. OneLearnItemText:
  833.    dc.b     0,1,RP_JAM1,0
  834.    dc.w     CHECKWIDTH,0
  835.    dc.l     0,OneLearnItemTitle,0
  836.  
  837. OneLearnItemTitle:
  838.    dc.b     '"Peter"',0
  839.  
  840. TwoLearnItem:
  841.    dc.l     ThreeLearnItem
  842.    dc.w     0,10,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  843.    dc.l     0,TwoLearnItemText,0,0,0
  844.  
  845. TwoLearnItemText:
  846.    dc.b     0,1,RP_JAM1,0
  847.    dc.w     CHECKWIDTH,0
  848.    dc.l     0,TwoLearnItemTitle,0
  849.  
  850. TwoLearnItemTitle:
  851.    dc.b     '"Piper"',0
  852.  
  853. ThreeLearnItem:
  854.    dc.l     FourLearnItem
  855.    dc.w     0,20,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  856.    dc.l     0,ThreeLearnItemText,0,0,0
  857.  
  858. ThreeLearnItemText:
  859.    dc.b     0,1,RP_JAM1,0
  860.    dc.w     CHECKWIDTH,0
  861.    dc.l     0,ThreeLearnItemTitle,0
  862.  
  863. ThreeLearnItemTitle:
  864.    dc.b     '"Picked"',0,0
  865.  
  866. FourLearnItem:
  867.    dc.l     FiveLearnItem
  868.    dc.w     0,30,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  869.    dc.l     0,FourLearnItemText,0,0,0
  870.  
  871. FourLearnItemText:
  872.    dc.b     0,1,RP_JAM1,0
  873.    dc.w     CHECKWIDTH,0
  874.    dc.l     0,FourLearnItemTitle,0
  875.  
  876. FourLearnItemTitle:
  877.    dc.b     '"A Peck Of"',0
  878.  
  879. FiveLearnItem:
  880.    dc.l     SixLearnItem
  881.    dc.w     0,40,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  882.    dc.l     0,FiveLearnItemText,0,0,0
  883.  
  884. FiveLearnItemText:
  885.    dc.b     0,1,RP_JAM1,0
  886.    dc.w     CHECKWIDTH,0
  887.    dc.l     0,FiveLearnItemTitle,0
  888.  
  889. FiveLearnItemTitle:
  890.    dc.b     '"Pickeled"',0,0
  891.  
  892. SixLearnItem:
  893.    dc.l     0
  894.    dc.w     0,50,100+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  895.    dc.l     0,SixLearnItemText,0,0,0
  896.  
  897. SixLearnItemText:
  898.    dc.b     0,1,RP_JAM1,0
  899.    dc.w     CHECKWIDTH,0
  900.    dc.l     0,SixLearnItemTitle,0
  901.  
  902. SixLearnItemTitle:
  903.    dc.b     '"Peppers"',0
  904.  
  905. ************ Option Menu *****************
  906.  
  907. OptionMenu:
  908.    dc.l     0
  909.    dc.w     240,0,60,0,MENUENABLED
  910.    dc.l     OptionMenuTitle,DigitizerOptionItem
  911.    dc.w     0,0,0,0
  912.  
  913. OptionMenuTitle:
  914.    dc.b     'OPTIONS',0
  915.  
  916. *************************************
  917.  
  918. DigitizerOptionItem:
  919.    dc.l     ResOptionItem
  920.    dc.w     0,0,100,10,ITEMTEXT!ITEMENABLED!HIGHCOMP
  921.    dc.l     0,DigitizerOptionItemText,0
  922.    dc.w     0
  923.    dc.l     PS3SubItem
  924.    dc.w     0
  925.  
  926. DigitizerOptionItemText:
  927.    dc.b     0,1,RP_JAM1,0
  928.    dc.w     0,0
  929.    dc.l     0,DigitizerOptionItemTitle,0
  930.  
  931. DigitizerOptionItemTitle:
  932.    dc.b     'Digitizer',0
  933.  
  934. PS3SubItem:
  935.    dc.l     SMSubItem
  936.    dc.w     98,4,108+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT!CHECKED
  937.    dc.l     2,PS3SubItemText
  938.    dc.l     0,0,0
  939.  
  940. PS3SubItemText:
  941.    dc.b     0,1,RP_JAM1,0
  942.    dc.w     CHECKWIDTH,0
  943.    dc.l     0,PS3SubItemTitle,0
  944.  
  945. PS3SubItemTitle:
  946.    dc.b     'PerfectSound3',0
  947.  
  948. SMSubItem:
  949.    dc.l     0
  950.    dc.w     98,14,108+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  951.    dc.l     1,SMSubItemText
  952.    dc.l     0,0,0
  953.  
  954. SMSubItemText:
  955.    dc.b     0,1,RP_JAM1,0
  956.    dc.w     CHECKWIDTH,0
  957.    dc.l     0,SMSubItemTitle,0
  958.  
  959. SMSubItemTitle:
  960.    dc.b     'SoundMaster',0
  961.  
  962. *************************************
  963.  
  964. ResOptionItem:
  965.    dc.l     SayOptionItem
  966.    dc.w     0,10,100,10,ITEMTEXT!ITEMENABLED!HIGHCOMP
  967.    dc.l     0,ResOptionItemText,0
  968.    dc.w     0
  969.    dc.l     ResHighSubItem
  970.    dc.w     0
  971.  
  972. ResOptionItemText:
  973.    dc.b     0,1,RP_JAM1,0
  974.    dc.w     0,0
  975.    dc.l     0,ResOptionItemTitle,0
  976.  
  977. ResOptionItemTitle:
  978.    dc.b     'Resolution',0,0
  979.  
  980. ResHighSubItem:
  981.    dc.l     ResLowSubItem
  982.    dc.w     98,4,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  983.    dc.l     2,ResHighSubItemText,0,0,0
  984.  
  985. ResHighSubItemText:
  986.    dc.b     0,1,RP_JAM1,0
  987.    dc.w     CHECKWIDTH,0
  988.    dc.l     0,ResHighSubItemTitle,0
  989.  
  990. ResHighSubItemTitle:
  991.    dc.b     'High',0,0
  992.  
  993. ResLowSubItem:
  994.    dc.l     0
  995.    dc.w     98,14,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT!CHECKED
  996.    dc.l     1,ResLowSubItemText,0,0,0
  997.  
  998. ResLowSubItemText:
  999.    dc.b     0,1,RP_JAM1,0
  1000.    dc.w     CHECKWIDTH,0
  1001.    dc.l     0,ResLowSubItemTitle,0
  1002.  
  1003. ResLowSubItemTitle:
  1004.    dc.b     'Low',0
  1005.  
  1006. ******************************************
  1007.  
  1008. SayOptionItem:
  1009.    dc.l     0
  1010.    dc.w     0,20,100,10,ITEMTEXT!ITEMENABLED!HIGHCOMP
  1011.    dc.l     0,SayOptionItemText,0
  1012.    dc.w     0
  1013.    dc.l     SayOnSubItem
  1014.    dc.w     0
  1015.  
  1016. SayOptionItemText:
  1017.    dc.b     0,1,RP_JAM1,0
  1018.    dc.w     0,0
  1019.    dc.l     0,SayOptionItemTitle,0
  1020.  
  1021. SayOptionItemTitle:
  1022.    dc.b     'Say',0
  1023.  
  1024. SayOnSubItem:
  1025.    dc.l     SayOffSubItem
  1026.    dc.w     98,4,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT
  1027.    dc.l     2,SayOnSubItemText
  1028.    dc.l     0,0,0
  1029.  
  1030. SayOnSubItemText:
  1031.    dc.b     0,1,RP_JAM1,0
  1032.    dc.w     CHECKWIDTH,0
  1033.    dc.l     0,SayOnSubItemTitle,0
  1034.  
  1035. SayOnSubItemTitle:
  1036.    dc.b     'On',0,0
  1037.  
  1038. SayOffSubItem:
  1039.    dc.l     0
  1040.    dc.w     98,14,50+CHECKWIDTH,10,ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT!CHECKED
  1041.    dc.l     1,SayOffSubItemText
  1042.    dc.l     0,0,0
  1043.  
  1044. SayOffSubItemText:
  1045.    dc.b     0,1,RP_JAM1,0
  1046.    dc.w     CHECKWIDTH,0
  1047.    dc.l     0,SayOffSubItemTitle,0
  1048.  
  1049. SayOffSubItemTitle:
  1050.    dc.b     'Off',0
  1051.  
  1052. ******** Recognize Project Menu **********
  1053.  
  1054. RecProjectMenu:
  1055.    dc.l     0
  1056.    dc.w     5,0,70,0,MENUENABLED
  1057.    dc.l     RecProjectMenuTitle,VolumeUpItem
  1058.    dc.w     0,0,0,0
  1059.  
  1060. RecProjectMenuTitle:
  1061.    dc.b     'PROJECT',0
  1062.  
  1063. VolumeUpItem:
  1064.    dc.l     VolumeDownItem
  1065.    dc.w     0,0,80,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  1066.    dc.l     0,VolumeUpItemText,0,0,0
  1067.  
  1068. VolumeUpItemText:
  1069.    dc.b     0,1,RP_JAM1,0
  1070.    dc.w     0,0
  1071.    dc.l     0,VolumeUpItemTitle,0
  1072.  
  1073. VolumeUpItemTitle:
  1074.    dc.b     'Volume Up',0
  1075.  
  1076. VolumeDownItem:
  1077.    dc.l     RecQuitItem
  1078.    dc.w     0,10,80,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  1079.    dc.l     0,VolumeDownItemText,0,0,0
  1080.  
  1081. VolumeDownItemText:
  1082.    dc.b     0,1,RP_JAM1,0
  1083.    dc.w     0,0
  1084.    dc.l     0,VolumeDownItemTitle,0
  1085.  
  1086. VolumeDownItemTitle:
  1087.    dc.b     'Volume Dn',0
  1088.    cnop     0,2
  1089.  
  1090. RecQuitItem:
  1091.    dc.l     0
  1092.    dc.w     0,20,80,9,ITEMTEXT!ITEMENABLED!HIGHCOMP
  1093.    dc.l     0,RecQuitItemText,0,0,0
  1094.  
  1095. RecQuitItemText:
  1096.    dc.b     0,1,RP_JAM1,0
  1097.    dc.w     0,0
  1098.    dc.l     0,RecQuitItemTitle,0
  1099.  
  1100. RecQuitItemTitle:
  1101.    dc.b     'Quit',0
  1102.    cnop     0,2
  1103.  
  1104. *************************** Information Text  ************************************
  1105.  
  1106. InfoText:
  1107.    dc.b '      This program utilizes the PerfectSound3 or SoundMaster audio     ',0
  1108.    dc.b 'digitizer and the public domain disk-based voice.library to learn and  ',0
  1109.    dc.b 'recognize six simple spoken phrases.  The phrases are "Peter ... Piper ',0
  1110.    dc.b '... Picked ... A Peck Of ... Pickled ... Peppers."                     ',0
  1111.    dc.b '      First, the program must learn each phrase.  To do this, select   ',0
  1112.    dc.b 'the desired phrase from the "Learn" menu.  You will then be prompted to',0
  1113.    dc.b 'speak this phrase to produce three acceptable digital samples.  Choose ',0
  1114.    dc.b 'the "Sample" gadget to record, and the "Accept" gadget to save each of ',0
  1115.    dc.b 'the THREE REQUIRED SAMPLES for each phrase.  You may need to increase  ',0
  1116.    dc.b 'or decrease volume by moving your microphone or by choosing the        ',0
  1117.    dc.b 'appropriate volume adjustment gadget.  Speak each phrase slowly and    ',0
  1118.    dc.b 'forcefully, pronouncing each syllable distinctly.  After learning all  ',0
  1119.    dc.b 'six phrases, you may save a complete file of voice data as voice.dat.  ',0
  1120.    dc.b '      After learning is complete, you may proceed to recognize any     ',0
  1121.    dc.b 'phrase at random.  Choose "Recognize Voice" from the Project Menu to   ',0
  1122.    dc.b 'start a separate task that listens to the audio digitizer and          ',0
  1123.    dc.b 'recognizes each phrase based on an audio frequency analysis.  When a   ',0
  1124.    dc.b 'phrase is recognized, it will be spoken back to you using the Amiga    ',0
  1125.    dc.b 'speach capability.  A voice map showing a frequency range of 3200 Hz   ',0
  1126.    dc.b 'versus 3/4 second of time will also be plotted.  Digitizer volume may  ',0
  1127.    dc.b 'be changed by menu selection.  "Clipping" indicates volume is too high.',0
  1128.    dc.b '"Low Vol" indicates volume is too low.                                 ',0
  1129.    dc.b '                                                                       ',0
  1130.  
  1131. **********************************************************************************
  1132.  
  1133.    SECTION  Memory,BSS
  1134.  
  1135. DOS_Base:
  1136.    ds.l     1
  1137.  
  1138. Intuition_Base:
  1139.    ds.l     1
  1140.  
  1141. Graphics_Base:
  1142.    ds.l     1
  1143.  
  1144. Voice_Base:
  1145.    ds.l     1
  1146.  
  1147. InfoScr:
  1148.    ds.l     1
  1149.  
  1150. InfoWdw:
  1151.    ds.l     1
  1152.  
  1153. InfoRastPort:
  1154.    ds.l     1
  1155.  
  1156. InfoViewPort:
  1157.    ds.l     1
  1158.  
  1159. VoiceWdw:
  1160.    ds.l     1
  1161.  
  1162. VoiceRastPort:
  1163.    ds.l     1
  1164.  
  1165. VoiceBitMap:
  1166.    ds.l     1
  1167.  
  1168. VoiceBitPlane:
  1169.    ds.l     1
  1170.  
  1171. Resolution:
  1172.    ds.l     1
  1173.  
  1174. File_Handle:
  1175.    ds.l     1
  1176.  
  1177. NIL_Handle:
  1178.    ds.l     1
  1179.  
  1180. MessageClass
  1181.    ds.l     1
  1182.  
  1183. MessageCode:
  1184.    ds.w     1
  1185.  
  1186. IDCMPMessage:
  1187.    ds.l     1
  1188.  
  1189. MenuNumber:
  1190.    ds.w     1
  1191.  
  1192. ItemNumber:
  1193.    ds.w     1
  1194.  
  1195. MapBuffer:
  1196.    ds.b     1824  ;6 word maps, (72*4 + 16) bytes each
  1197.  
  1198.    END
  1199.