home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 28
/
amigaformatcd28.iso
/
-seriously_amiga-
/
programming
/
amos
/
lipsynclab
/
floyd.amos
/
floyd.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1998-04-23
|
6KB
|
162 lines
'Floyd Complains, �1998 Steve Tiffany
'an example of using LipSyncLab data with bobs...
'The data generated by LSL goes into the procedure AD[], where it gets copied
'as needed to files in ram:
Global SAMDIR$,CURRDIR$,PICDIR$
'Important! Change next line to true location of LipSyncLab directory...
CURRDIR$="work:LipSyncLab/"
'CURRDIR$=Dir$ : Rem : Change to this just before compiling.
Proc SETUP
Do
Proc WRITESCENE
Proc PERFORMSCENE
Loop
Procedure SETUP
SAMDIR$=CURRDIR$+"Samples/"
Screen Open 0,320,200,4,Lowres
Flash Off : Curs Off : Cls 0 : Hide
Palette $680,$0,$EEE,$D44
'draw face and shoulders...
Set Paint 1 : Ink ,,1 : Set Pattern 6 : Ink ,1 : Ink 3 :
Polygon 63,199 To 72,169 To 93,155 To 123,147 To 215,147 To 240,156 To 258,173 To 267,199 :
Set Pattern 0 : Ink 2 :
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 :
Polygon 119,91 To 112,87 To 108,78 To 107,62 To 218,57 To 221,66 To 220,80 To 215,88 :
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 :
Set Paint 0 : Ink 1 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
Polygon 153,70 To 153,68 To 148,63 To 138,61 To 127,68 To 138,73 To 144,73 :
Polygon 150,91 To 152,94 To 156,93 To 159,95 To 159,93 To 156,89 To 151,90 :
Polygon 164,95 To 164,93 To 170,89 To 172,90 To 174,93 To 170,94 To 168,93 :
Ink 1 : Ellipse 186,69,20,12 : Ellipse 140,68,18,11 : Draw 121,68 To 112,63 :
Draw 159,67 To 166,67 : Draw 206,67 To 214,60 : Ink 3 : Paint 185,77 :
Paint 139,75 : Polygon 132,68 To 138,66 To 136,67 To 138,71 :
Polygon 145,68 To 142,71 To 147,71 To 147,69 : Polygon 176,70 To 184,67 To 184,71 :
Polygon 190,67 To 191,69 To 190,71 To 193,71 To 196,69 :
Paste Bob 138,107,1 : Rem : closed mouth
'longest possible sentence is 11 samples, so open 11 banks...
For J=10 To 20
Reserve As Chip Work J,8032 : Rem : temporary banks to hold samples
Next J : Rem : 8032 is big enough to hold largest sample
End Proc
Procedure WRITESCENE
'write files in ram: for the words he'll say...
Open Out 1,"ram:SceneNums.asc" : Open Out 2,"ram:SceneWords.asc"
'Gotta have two separate files because first you load all samples into
'memory banks, then you play them one by one and display the mouths.
'If it's all in one file, there's all this mouth data in between the
'sample names, so it can't tell which samples to pre-load.
AD["think"] : AD["of"] : AD["me"] : AD["."]
AD["Iwould"] : AD["like"] : AD["to"] : AD["make"] : AD["you"] :
AD["think"] : AD["of"] : AD["me"] : AD["."]
AD["you"] : AD["forget"] : AD["to"] : AD["think"] : AD["of"] :
AD["me"] : AD["but"] : AD["you"] :
AD["think"] : AD["of"] : AD["soup"] : AD["."]
AD["Iwould"] : AD["like"] : AD["you"] : AD["to"] :
AD["make"] : AD["me"] : AD["forget"] : AD["."]
AD["you"] : AD["think"] : AD["you"] : AD["forget"] : AD["but"] :
AD["you"] : AD["forget"] : AD["you"] : AD["think"] : AD["of"] :
AD["soup"] : AD["."]
AD["but"] : AD["you"] : AD["forget"] : AD["to"] : AD["make"] : AD["soup"] : AD["."] : AD["END"]
Close 1 : Close 2
End Proc
Procedure PERFORMSCENE
'speak the sentences by reading the file...
Open In 1,"ram:SceneNums.asc" : Open In 2,"ram:SceneWords.asc"
Do
CURRBANK=9
Gosub BANKLOAD : Rem : load all samples in this sentence
If WORD$="END" Then Exit
Gosub PERFORMSENT
Loop
Close 1 : Close 2
Pop Proc
BANKLOAD:
Do
Input #2,WORD$ :
If WORD$="END"
Return : Rem : it's over
Else If WORD$="SpeakSent"
Return : Rem : speak the sentence
Else
Inc CURRBANK
SAM$=SAMDIR$+WORD$
Bload SAM$,Start(CURRBANK) : Rem : load sample into temporary bank
End If
Loop
Return
PERFORMSENT:
For K=10 To CURRBANK
Input #1,SAMLEN : Input #1,NUMMOUTHS
Sam Raw 3,Start(K),SAMLEN,13982
For J=1 To NUMMOUTHS
XWAITRESS=Timer
Input #1,MOUTHNUM : Paste Bob 138,107,MOUTHNUM
Input #1,MOUTHWAIT :
While Timer<XWAITRESS+MOUTHWAIT : Rem : check for clicks while waiting
If Mouse Click=1
Close 1 : Close 2
Kill "ram:SceneNums.asc"
Kill "ram:SceneWords.asc" : Edit
End If
Wend
Next J
Next K
Paste Bob 138,107,1 : Rem : close mouth between sentences
Wait 30
Return
End Proc
Procedure AD[WORD$]
'adds the word and its relevant data to the files in ram: ...
If WORD$="."
Print #2,"SpeakSent"
Else If WORD$="END"
Print #2,"END"
Else
Print #2,WORD$
WORD$="_"+Upper$(WORD$)-" "
Restore WORD$ :
Read SAMLENGTH : Print #1,SAMLENGTH
Read NUMMOUTHS : Print #1,NUMMOUTHS
For J=1 To NUMMOUTHS
Read MOUTHNUM : Print #1,MOUTHNUM :
Read MOUTHWAIT : Print #1,MOUTHWAIT
Next J
End If
Pop Proc
_BUT: Data 2346,3,1,2,3,4,2,5
_FORGET: Data 8022,6,7,3,3,4,4,6,2,4,3,10,2,7
_IWOULD: Data 6442,4,3,5,2,4,4,10,2,9
_LIKE: Data 5616,3,2,8,3,8,2,8
_MAKE: Data 4004,3,1,3,3,6,2,8
_ME: Data 4236,2,1,5,6,14
_OF: Data 2730,2,3,3,7,9
_SOUP: Data 7756,3,2,12,4,14,1,8
_THINK: Data 4320,3,2,2,3,6,2,11
_TO: Data 2686,3,2,3,3,4,2,4
_YOU: Data 4766,2,2,4,4,16
End Proc