home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / new / dev / gui / visualarts / demo / source / speech / speech.c < prev   
Encoding:
C/C++ Source or Header  |  1995-01-01  |  8.2 KB  |  306 lines

  1. /* ******************************************************************** */
  2. /* C code generated by:                            */
  3. /* Visual Arts Version 2.1                        */
  4. /* Copyright 1994-95 Danny Y. Wong  All rights reserved            */
  5. /* Calgary, Alberta (CANADA)                                    */
  6. /* Partial of the code is copyright by Jaba Development            */
  7. /* ******************************************************************** */
  8.  
  9. /*  this program demostrates the speech features and how easily it can
  10.     be done using Visual Arts
  11.  
  12.     When ever you see '-->' this tells you that the codes are custom and
  13.     inserted by me.
  14.     
  15.     When using the speech you always need to call the following routines.
  16.     
  17.     1. InitSpeech()     --somewhere in your main()
  18.     2. DeInitSpeech()   --before you exit the program.
  19.     
  20.     Speak(text, volume, rate, sex) -- to speak the text
  21.     
  22.     eg: Speak("Speak is as easy as 1 2 3", 64, 150, 0)
  23.     
  24. */
  25.  
  26. #include <VisualArts.h> 
  27.  
  28. #define ID_quit                                       0
  29. #define ID_sentence                                   1
  30. #define ID_sex                                        2
  31. #define ID_volume                                     3
  32. #define ID_rate                                       4
  33.  
  34. #define SpeechNumGads                        5
  35.  
  36. /* --> add this struct to keep tack of the paramters */
  37. struct speechInfo
  38. {
  39.    short volume;
  40.    short rate;
  41.    short sex;
  42. }SpeechInfo = {32, 150, 0};     //default values
  43.  
  44. #include "Speech_func.c" 
  45.  
  46. int quitObj(struct VAobject VAObject);
  47. int sentenceObj(struct VAobject VAObject);
  48. int sexObj(struct VAobject VAObject);
  49. int volumeObj(struct VAobject VAObject);
  50. int rateObj(struct VAobject VAObject);
  51.  
  52. int SpeechIDCMP_MOUSEMOVE (struct VAobject VAObject);
  53. int GetPubScreen(void);
  54. void ClosePubScreen(void);
  55. int OpenSpeechWindow(char windtitle[]);
  56. void CloseSpeechWindow(void);
  57. int SpeechHandler(void);
  58. int SpeechMainHandler(void);
  59. void DrawSpeechObjs(void);
  60. int main(int argc, char *argv[]);
  61.  
  62. UBYTE                *PubScrName = "Workbench";
  63. struct DrawInfo            *ScrDrawInfo = NULL;
  64. APTR                 VisualInfo = NULL;
  65. struct Screen            *Scr = NULL;
  66. struct Window            *SpeechWnd = NULL;
  67. struct Gadget            *SpeechGList = NULL;
  68. struct Gadget            *SpeechGadgets[SpeechNumGads];
  69. struct IntuiMessage         SpeechMsg;
  70. UWORD                 SpeechLeft = 69;
  71. UWORD                 SpeechTop = 54;
  72. UWORD                 SpeechWidth = 430;
  73. UWORD                 SpeechHeight = 57;
  74.  
  75. /* stringinfo for WB 1.x style string/integer gadgets */
  76.  
  77. struct StringExtend            SpeechStrExt;    /* Extend String Gadget */
  78. struct TextAttr topaz8 = { (STRPTR)"topaz.font", 8, 0x00, 0x01 };
  79. struct TextAttr topaz800 = { (STRPTR)"topaz.font", 8, 0x00, 0x00 };
  80.  
  81. UBYTE *SexLabels[] = {
  82.     (UBYTE *)"Male", 
  83.     (UBYTE *)"Female", 
  84.     NULL
  85. };
  86.  
  87. WORD SpeechGadTypes[] = {
  88.     BUTTON_KIND,
  89.     STRING_KIND,
  90.     MX_KIND,
  91.     SLIDER_KIND,
  92.     SLIDER_KIND,
  93. };
  94.  
  95. struct NewGadget SpeechNGads[] = {
  96.     340, 24, 70, 12, (UBYTE *)"_Quit",&topaz800, ID_quit, PLACETEXT_IN, NULL, (APTR)quitObj,
  97.     84, 3, 327, 13, (UBYTE *)"Sentence", &topaz800, ID_sentence, PLACETEXT_LEFT, NULL, (APTR)sentenceObj,
  98.     294, 20, 17, 9, (UBYTE *)"", &topaz800, ID_sex, PLACETEXT_LEFT, NULL, (APTR)sexObj,
  99.     84, 19, 143, 10, (UBYTE *)"Volume   ", &topaz800, ID_volume, PLACETEXT_LEFT, NULL, (APTR)volumeObj,
  100.     84, 30, 143, 10, (UBYTE *)"Rate    ", &topaz800, ID_rate, PLACETEXT_LEFT, NULL, (APTR)rateObj,
  101. };
  102.  
  103. ULONG SpeechNTags[] = {
  104.     (GT_Underscore), '_', TAG_DONE,
  105.     (GTST_String), (ULONG)"Hello, this is Amiga speaking", GTST_MaxChars, 255, (STRINGA_Justification), GACT_STRINGLEFT, TAG_DONE,
  106.     (GTMX_Labels), (ULONG)&SexLabels[0], (GTMX_Active), 0, (GTMX_Spacing), 2, TAG_DONE,
  107.     (GTSL_Min), 0, (GTSL_Max), 64, (GTSL_Level), 32, (GTSL_LevelFormat), (ULONG)"%3ld", (GTSL_MaxLevelLen), 0, (GTSL_LevelPlace), PLACETEXT_LEFT, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (PGA_Freedom), LORIENT_HORIZ, TAG_DONE,
  108.     (GTSL_Min), 40, (GTSL_Max), 400, (GTSL_Level), 150, (GTSL_LevelFormat), (ULONG)"%3ld", (GTSL_MaxLevelLen), 0, (GTSL_LevelPlace), PLACETEXT_LEFT, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (PGA_Freedom), LORIENT_HORIZ, TAG_DONE,
  109. };
  110.  
  111.  
  112. int GetPubScreen(void)
  113. {
  114.   if (!(Scr = LockPubScreen(PubScrName)))
  115.     return(1L);
  116.  
  117.   if (!(VisualInfo = GetVisualInfo(Scr, TAG_DONE)))
  118.     return(2L);
  119.  
  120.   if (!(ScrDrawInfo = GetScreenDrawInfo(Scr)))
  121.     return(3L);
  122.   return(0L);
  123. }
  124.  
  125. void ClosePubScreen(void)
  126. {
  127.   if (VisualInfo)
  128.     FreeVisualInfo(VisualInfo);
  129.   if (Scr)
  130.     UnlockPubScreen(NULL,  Scr);
  131.   if (ScrDrawInfo)
  132.     FreeScreenDrawInfo(Scr,  ScrDrawInfo);
  133. }
  134.  
  135. int OpenSpeechWindow(char windtitle[80])
  136. {
  137.   struct NewGadget    NewGad;
  138.   struct Gadget       *Gad;
  139.   register UWORD i, j;
  140.   UWORD offsetx = Scr->WBorLeft;
  141.   UWORD offsety = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  142.  
  143.  
  144.   SpeechStrExt.Font = NULL;
  145.   SpeechStrExt.Pens[0] = 2;
  146.   SpeechStrExt.Pens[1] = 0;
  147.   SpeechStrExt.ActivePens[0] = 3;
  148.   SpeechStrExt.ActivePens[1] = 2;
  149.   SpeechStrExt.InitialModes  = 0;
  150.   SpeechStrExt.EditHook = NULL;
  151.   SpeechStrExt.WorkBuffer = NULL;
  152.  
  153.   if (!(Gad = CreateContext(&SpeechGList)))
  154.       return(1L);
  155.  
  156.   for (i=0, j=0; i < SpeechNumGads; i++)
  157.   {
  158.     CopyMem((char *)&SpeechNGads[i], (char *)&NewGad, (long)sizeof(struct NewGadget));
  159.  
  160.     NewGad.ng_VisualInfo = VisualInfo;
  161.     NewGad.ng_LeftEdge += offsetx;
  162.     NewGad.ng_TopEdge  += offsety;
  163.  
  164.     SpeechGadgets[i] = Gad = CreateGadgetA((ULONG)SpeechGadTypes[i], Gad, &NewGad,
  165.     (struct TagItem *)&SpeechNTags[j]);
  166.     if (SpeechGadTypes[i] == STRING_KIND || SpeechGadTypes[i] == INTEGER_KIND)
  167.     {
  168.     SpeechGadgets[i]->Flags |= GFLG_STRINGEXTEND;
  169.     ((struct StringInfo *)SpeechGadgets[i]->SpecialInfo)->Extension = &SpeechStrExt;
  170.     }
  171.     while (SpeechNTags[j])
  172.         j +=2;
  173.     j++;
  174.     if (!Gad)
  175.        return(2L);
  176.   }
  177.   if (!(SpeechWnd = OpenWindowTags(NULL,
  178.       WA_Left,    SpeechLeft,
  179.       WA_Top,     SpeechTop,
  180.       WA_Width,    SpeechWidth,
  181.       WA_Height,    SpeechHeight,
  182.       WA_NewLookMenus, TRUE,
  183.       WA_IDCMP,    IDCMP_CLOSEWINDOW |  IDCMP_NEWSIZE | IDCMP_MOUSEMOVE | IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_VANILLAKEY ,
  184.       WA_Flags,    WFLG_CLOSEGADGET | WFLG_DEPTHGADGET  |  WFLG_SMART_REFRESH | 
  185.              WFLG_ACTIVATE |  WFLG_DRAGBAR ,
  186.       WA_Gadgets,    SpeechGList,
  187.       WA_Title,    windtitle,
  188.       WA_ScreenTitle,    "Visual Arts V2.1 Copyright 1994-95 Danny Y. Wong  All Rights Reserved.",
  189.       WA_PubScreen,    Scr,
  190.       WA_MinWidth,    160,
  191.       WA_MinHeight,    50,
  192.       WA_MaxWidth,    640,
  193.       WA_MaxHeight,    200,
  194.       TAG_DONE)))
  195.           return(3L);
  196.  
  197.   CreateSpeechLists();
  198.   GT_RefreshWindow(SpeechWnd, NULL);
  199.   RefreshGadgets(SpeechGadgets[0], SpeechWnd, NULL);
  200.   return(0L);
  201. }
  202.  
  203. void CloseSpeechWindow(void)
  204. {
  205.   if (SpeechWnd)
  206.     CloseWindow(SpeechWnd);
  207.   if (SpeechGList)
  208.     FreeGadgets(SpeechGList);
  209. }
  210.  
  211. int SpeechHandler(void)
  212. {
  213.   struct IntuiMessage    *msg;
  214.   struct VAobject    VAObject;
  215.   int running    = 1;
  216.   int (*func)(struct VAobject VAObject);
  217.   ULONG class;
  218.   UWORD code;
  219.  
  220.   while (msg=GT_GetIMsg(SpeechWnd->UserPort))
  221.   {
  222.     CopyMem((char *)msg, (char *)&SpeechMsg, (long)sizeof(struct IntuiMessage));
  223.     class = msg->Class;
  224.     code  = msg->Code;
  225.  
  226.     VAObject.va_Window = (struct Window *)SpeechWnd;
  227.     VAObject.va_Gadget = (struct Gadget *)msg->IAddress;
  228.     VAObject.va_IntuiMsg = (struct IntuiMessage *)msg;
  229.     VAObject.va_Flags = 0;
  230.     VAObject.va_UserData = 0;
  231.  
  232.     GT_ReplyIMsg(msg);
  233.     switch(class)
  234.     {
  235.  
  236.       case IDCMP_MOUSEMOVE :
  237.         running = SpeechIDCMP_MOUSEMOVE (VAObject);
  238.         break;
  239.  
  240.       case IDCMP_NEWSIZE:
  241.        break;
  242.  
  243.       case IDCMP_CLOSEWINDOW:
  244.          return(0);
  245.          break;
  246.  
  247.       case IDCMP_GADGETUP:
  248.         func = (void *)((struct Gadget *)SpeechMsg.IAddress)->UserData;
  249.         if (func != NULL)
  250.           running =  func(VAObject);
  251.         break;
  252.  
  253.  
  254.       case   IDCMP_VANILLAKEY:
  255.         switch(code)
  256.         {
  257.           case 'Q':
  258.             ButtonSelected(SpeechWnd, SpeechGadgets[0]);
  259.                 return(-1);
  260.             break;
  261.         }
  262.         break;
  263.     }
  264.   }
  265.   return(running);
  266. }
  267.  
  268. int SpeechMainHandler(void)
  269. {
  270.   int running = 1;
  271.   ULONG windsig, signals;
  272.  
  273.   windsig = 1L << SpeechWnd->UserPort->mp_SigBit;
  274.   while (running == 1)
  275.   {
  276.     signals = Wait( windsig );
  277.     if (signals & windsig)
  278.     {
  279.       running = SpeechHandler();
  280.     }
  281.   }
  282.   return(running);
  283. }
  284.  
  285. int main(int argc, char *argv[])
  286. {
  287.   int rc;
  288.  
  289.   if (!(GetPubScreen()))
  290.   {
  291.         InitSpeech();   /* --> initialize the speech */
  292.     for (rc=0; rc < 1; rc++)
  293.       SpeechLists[rc]=GetNewList();
  294.     if (!(OpenSpeechWindow("Speech Demo")))
  295.     {
  296.       rc = SpeechMainHandler();
  297.       CloseSpeechWindow();
  298.     }
  299.     for (rc=0; rc < 1; rc++)
  300.       FreeList(SpeechLists[rc]);
  301.         DeInitSpeech(); /* --> deinitial the speech and free memory */
  302.     ClosePubScreen();
  303.   }
  304.   return(0L);
  305. }
  306.