home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 28 / amigaformatcd28.iso / -seriously_amiga- / programming / amos / lipsynclab / floyd.amos / floyd.amosSourceCode < prev    next >
AMOS Source Code  |  1998-04-23  |  6KB  |  162 lines

  1. 'Floyd Complains, ï¿½1998 Steve Tiffany    
  2. 'an example of using LipSyncLab data with bobs...    
  3. 'The data generated by LSL goes into the procedure AD[], where it gets copied
  4. 'as needed to files in ram:  
  5.  
  6. Global SAMDIR$,CURRDIR$,PICDIR$
  7.  
  8. 'Important!  Change next line to true location of LipSyncLab directory...      
  9. CURRDIR$="work:LipSyncLab/"
  10. 'CURRDIR$=Dir$ : Rem : Change to this just before compiling. 
  11.  
  12. Proc SETUP
  13.  
  14. Do 
  15.    Proc WRITESCENE
  16.    Proc PERFORMSCENE
  17. Loop 
  18.  
  19. Procedure SETUP
  20.    SAMDIR$=CURRDIR$+"Samples/"
  21.    Screen Open 0,320,200,4,Lowres
  22.    Flash Off : Curs Off : Cls 0 : Hide 
  23.    Palette $680,$0,$EEE,$D44
  24.  
  25.    'draw face and shoulders...  
  26.    Set Paint 1 : Ink ,,1 : Set Pattern 6 : Ink ,1 : Ink 3 : 
  27.    Polygon 63,199 To 72,169 To 93,155 To 123,147 To 215,147 To 240,156 To 258,173 To 267,199 : 
  28.    Set Pattern 0 : Ink 2 : 
  29.    Polygon 134,126 To 134,149 To 129,151 To 128,158 To 140,174 To 158,184 To 169,184 To 185,179 To 198,157 To 198,150 To 193,147 To 193,125 : 
  30.    Polygon 119,91 To 112,87 To 108,78 To 107,62 To 218,57 To 221,66 To 220,80 To 215,88 : 
  31.    Polygon 150,15 To 119,41 To 114,96 To 113,110 To 120,128 To 138,143 To 164,147 To 188,142 To 209,126 To 214,109 To 211,92 To 212,33 To 164,16 : 
  32.    Set Paint 0 : Ink 1 : 
  33.    Polygon 139,35 To 129,25 To 105,21 To 87,30 To 77,41 To 74,58 To 83,43 To 98,35 To 112,38 To 98,43 To 91,63 To 106,47 To 112,53 To 130,34 : 
  34.    Polygon 122,43 To 119,63 To 108,62 To 112,46 : Polygon 109,81 To 104,91 To 105,111 To 109,92 To 115,88 : 
  35.    Polygon 215,88 To 219,81 To 220,93 To 224,100 To 229,102 To 222,102 To 217,99 To 213,88 To 215,88 : 
  36.    Polygon 137,20 To 144,9 To 162,2 To 193,0 To 226,8 To 254,27 To 261,54 To 247,38 To 228,30 To 197,34 To 166,20 To 150,18 To 144,22 To 143,32 : 
  37.    Polygon 198,34 To 215,32 To 227,36 To 236,59 To 225,47 To 232,75 To 227,86 To 225,66 To 219,61 To 212,59 To 207,41 To 196,34 : 
  38.    Polygon 172,60 To 174,55 To 184,50 To 184,50 To 197,50 To 204,56 To 201,58 To 191,55 To 182,56 To 174,61 : 
  39.    Polygon 156,61 To 156,57 To 152,53 To 141,49 To 129,52 To 128,58 To 137,54 To 147,56 To 154,61 To 156,61 : 
  40.    Polygon 173,71 To 173,69 To 182,61 To 196,62 To 204,68 To 203,70 To 200,70 To 197,73 To 176,73 : 
  41.    Polygon 153,70 To 153,68 To 148,63 To 138,61 To 127,68 To 138,73 To 144,73 : 
  42.    Polygon 150,91 To 152,94 To 156,93 To 159,95 To 159,93 To 156,89 To 151,90 : 
  43.    Polygon 164,95 To 164,93 To 170,89 To 172,90 To 174,93 To 170,94 To 168,93 : 
  44.    Ink 1 : Ellipse 186,69,20,12 : Ellipse 140,68,18,11 : Draw 121,68 To 112,63 : 
  45.    Draw 159,67 To 166,67 : Draw 206,67 To 214,60 : Ink 3 : Paint 185,77 : 
  46.    Paint 139,75 : Polygon 132,68 To 138,66 To 136,67 To 138,71 : 
  47.    Polygon 145,68 To 142,71 To 147,71 To 147,69 : Polygon 176,70 To 184,67 To 184,71 : 
  48.    Polygon 190,67 To 191,69 To 190,71 To 193,71 To 196,69 : 
  49.  
  50.    Paste Bob 138,107,1 : Rem : closed mouth 
  51.  
  52.    'longest possible sentence is 11 samples, so open 11 banks...
  53.    For J=10 To 20
  54.       Reserve As Chip Work J,8032 : Rem : temporary banks to hold samples  
  55.    Next J : Rem :                         8032 is big enough to hold largest sample
  56. End Proc
  57.  
  58. Procedure WRITESCENE
  59.    'write files in ram: for the words he'll say...  
  60.  
  61.    Open Out 1,"ram:SceneNums.asc" : Open Out 2,"ram:SceneWords.asc"
  62.    'Gotta have two separate files because first you load all samples into 
  63.    'memory banks, then you play them one by one and display the mouths. 
  64.    'If it's all in one file, there's all this mouth data in between the 
  65.    'sample names, so it can't tell which samples to pre-load.   
  66.  
  67.       AD["think"] : AD["of"] : AD["me"] : AD["."]
  68.       AD["Iwould"] : AD["like"] : AD["to"] : AD["make"] : AD["you"] : 
  69.          AD["think"] : AD["of"] : AD["me"] : AD["."]
  70.       AD["you"] : AD["forget"] : AD["to"] : AD["think"] : AD["of"] : 
  71.          AD["me"] : AD["but"] : AD["you"] : 
  72.          AD["think"] : AD["of"] : AD["soup"] : AD["."]
  73.       AD["Iwould"] : AD["like"] : AD["you"] : AD["to"] : 
  74.          AD["make"] : AD["me"] : AD["forget"] : AD["."]
  75.       AD["you"] : AD["think"] : AD["you"] : AD["forget"] : AD["but"] : 
  76.          AD["you"] : AD["forget"] : AD["you"] : AD["think"] : AD["of"] : 
  77.          AD["soup"] : AD["."]
  78.       AD["but"] : AD["you"] : AD["forget"] : AD["to"] : AD["make"] : AD["soup"] : AD["."] : AD["END"]
  79.    Close 1 : Close 2
  80. End Proc
  81.  
  82. Procedure PERFORMSCENE
  83. 'speak the sentences by reading the file...  
  84.  
  85.    Open In 1,"ram:SceneNums.asc" : Open In 2,"ram:SceneWords.asc"
  86.    Do 
  87.       CURRBANK=9
  88.       Gosub BANKLOAD : Rem : load all samples in this sentence  
  89.       If WORD$="END" Then Exit 
  90.       Gosub PERFORMSENT
  91.    Loop 
  92.    Close 1 : Close 2
  93.    Pop Proc
  94.  
  95. BANKLOAD:
  96.    Do 
  97.       Input #2,WORD$ : 
  98.       If WORD$="END"
  99.          Return : Rem : it's over  
  100.       Else If WORD$="SpeakSent"
  101.          Return : Rem : speak the sentence 
  102.       Else 
  103.          Inc CURRBANK
  104.          SAM$=SAMDIR$+WORD$
  105.          Bload SAM$,Start(CURRBANK) : Rem : load sample into temporary bank    
  106.       End If 
  107.    Loop 
  108. Return 
  109.  
  110. PERFORMSENT:
  111.    For K=10 To CURRBANK
  112.       Input #1,SAMLEN : Input #1,NUMMOUTHS
  113.       Sam Raw 3,Start(K),SAMLEN,13982
  114.       For J=1 To NUMMOUTHS
  115.          XWAITRESS=Timer
  116.          Input #1,MOUTHNUM : Paste Bob 138,107,MOUTHNUM
  117.          Input #1,MOUTHWAIT : 
  118.          While Timer<XWAITRESS+MOUTHWAIT : Rem : check for clicks while waiting 
  119.             If Mouse Click=1
  120.                Close 1 : Close 2
  121.                Kill "ram:SceneNums.asc"
  122.                Kill "ram:SceneWords.asc" : Edit 
  123.             End If 
  124.          Wend 
  125.       Next J
  126.    Next K
  127.    Paste Bob 138,107,1 : Rem : close mouth between sentences
  128.    Wait 30
  129. Return 
  130. End Proc
  131.  
  132. Procedure AD[WORD$]
  133.   'adds the word and its relevant data to the files in ram: ...    
  134.    If WORD$="."
  135.       Print #2,"SpeakSent"
  136.    Else If WORD$="END"
  137.       Print #2,"END"
  138.    Else 
  139.       Print #2,WORD$
  140.       WORD$="_"+Upper$(WORD$)-" "
  141.       Restore WORD$ : 
  142.       Read SAMLENGTH : Print #1,SAMLENGTH
  143.       Read NUMMOUTHS : Print #1,NUMMOUTHS
  144.       For J=1 To NUMMOUTHS
  145.          Read MOUTHNUM : Print #1,MOUTHNUM : 
  146.          Read MOUTHWAIT : Print #1,MOUTHWAIT
  147.       Next J
  148.    End If 
  149.    Pop Proc
  150.  
  151. _BUT: Data 2346,3,1,2,3,4,2,5
  152. _FORGET: Data 8022,6,7,3,3,4,4,6,2,4,3,10,2,7
  153. _IWOULD: Data 6442,4,3,5,2,4,4,10,2,9
  154. _LIKE: Data 5616,3,2,8,3,8,2,8
  155. _MAKE: Data 4004,3,1,3,3,6,2,8
  156. _ME: Data 4236,2,1,5,6,14
  157. _OF: Data 2730,2,3,3,7,9
  158. _SOUP: Data 7756,3,2,12,4,14,1,8
  159. _THINK: Data 4320,3,2,2,3,6,2,11
  160. _TO: Data 2686,3,2,3,3,4,2,4
  161. _YOU: Data 4766,2,2,4,4,16
  162. End Proc