home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.6 / ffcollection-1-6-1993-02.iso / ff_disks / 601-630 / ff_618 / voicedemo / voicelibrary.doc < prev    next >
Text File  |  1992-03-10  |  11KB  |  330 lines

  1. *****************************************************************
  2.  
  3.    Voice Recognition for the Amiga and PerfectSound 3
  4.  
  5.    Voice.library (Ver 4.0) by Richard Horne - March 1992
  6.  
  7. *****************************************************************
  8.  
  9. FUNCTION OFFSET DEFINITIONS
  10.  
  11.    _LVOLearn           EQU   -30
  12.    _LVORecognize       EQU   -36
  13.    _LVOAddVoiceTask    EQU   -42
  14.    _LVORemVoiceTask    EQU   -48
  15.    _LVOGainUp          EQU   -54
  16.    _LVOGainDown        EQU   -60
  17.    _LVORecDataAddress  EQU   -66
  18.    _LVORecMapAddress   EQU   -72
  19.    _LVOWordScore       EQU   -78
  20.    _LVOPickSampler     EQU   -84
  21.  
  22. ************************* FUNCTION DEFINITIONS ******************
  23.  
  24. NAME:      
  25. Learn -- Learn a spoken phrase.
  26.  
  27. OFFSET:      
  28. -30
  29.  
  30. SYNOPSIS:
  31. MapAddress = Learn (MapBuffer, Text, Screen, SequenceNum, X, Y)
  32. d0                  a0         a1    a2      d0           d1 d2
  33.  
  34. FUNCTION:
  35. The "Learn" function stores a frequency map of a spoken word or
  36. phrase.  Each frequency map is made up of 72 long words of data
  37. plus a 16 byte header for the associated ASCII text (304 bytes
  38. total).  "Learn" requires the user to reserve a MapBuffer in
  39. memory equal to the size of vocabulary desired (number of words)
  40. times 304 bytes.  MapBuffer address is passed to "Learn" in a0. 
  41. Address of a null terminated text string representing the word or
  42. phrase to be learned is passed to "Learn" in a1.
  43.  
  44. The "Learn" function will open it's own window on the screen
  45. specified in a2 (use NULL for WBENCHSCREEN), at a position X, Y
  46. specified in d1 and d2.  The user will then be prompted to speak
  47. the specified word or phrase to obtain three good digital
  48. samples.  Internally, these three samples are analyzed for
  49. frequency content and transformed into a frequency map (304
  50. bytes) which is stored in the MapBuffer according to the Sequence
  51. Number specified in d0.  "Learn" returns the memory address
  52. within MapBuffer at which this particular frequency map is
  53. stored.  If "Learn" is intentionally cancelled using the close
  54. gadget of the Learn Window, then a zero will be returned.
  55.  
  56. "Learn" is called separately for each word or phrase in the
  57. vocabulary.  After every word has been learned, MapBuffer will be
  58. filled with a sequence of frequency maps (each 304 bytes).  Then
  59. the "Recognize" or "AddVoiceTask" functions can be called which
  60. will listen to the PerfectSound digitizer, compute a frequency
  61. map of incoming words compare them to the words in MapBuffer, and
  62. indicate by Sequence Number which word or phrase is the best
  63. match.  The maximum number of words or phrases in the vocabulary
  64. is 64.
  65.  
  66. Note that you must select an audio sampler (PerfectSound3 or
  67. SoundMaster) using the "PickSampler" function before using the
  68. "Learn" function.
  69.  
  70. "Learn" utilizes Amiga audio channel 0.  So do not call this
  71. function while any other application is using channel 0.
  72.  
  73. *****************************************************************
  74.  
  75. NAME:
  76. Recognize -- Recognize a spoken word or phrase.
  77.  
  78. OFFSET:
  79. -36
  80.  
  81. SYNOPSIS:
  82. SequenceNum = Recognize (MapBuffer, SizeVocabulary, Resolution)
  83. d0                       a0         d0              d1 
  84.  
  85. FUNCTION:
  86. "Recognize" assumes that the user has learned a sequence of words
  87. or phrases using the "Learn" function.  MapBuffer contains a
  88. sequence of frequency maps produced by "Learn" corresponding to
  89. each word or phrase in the vocabulary.  Mapbuffer address is
  90. passed to "Recognize" in a0.  Number of words or phrases in the
  91. vocabulary are passed to "Recognize" in d0.
  92.  
  93. "Recognize" listens for an incoming word, computes it's frequency
  94. map, and compares this map to the sequence of maps contained in
  95. MapBuffer.  The Sequence Number of the word or phrase in
  96. MapBuffer which is most similar to that of the incoming word is
  97. returned in d0.  Note that the number "0" represents the first
  98. word, "1" the second, and so on.
  99.  
  100. "Recognize" will operate at either high resolution (d1 = 0) or
  101. low resolution (d1 = 1).  High resolution computes a frequency
  102. analysis of the incoming word or phrase at twice the number of
  103. points in time as low resolution.  High resolution is somewhat
  104. better at word recognition, but takes almost twice the processing
  105. time.
  106.  
  107. "Recognize" will return the following error codes if it cannot
  108. find a match.
  109.  
  110. d0 = -1 if there is no match between the incoming frequency map  
  111.    and any of the maps in MapBuffer.
  112.  
  113. d0 = -2 if the incoming word causes unacceptable digital
  114.    clipping.  Volume should be reduced by moving your
  115.    microphone or by using the "GainDown" function.
  116.     
  117. d0 = -3 if incoming word is too low in volume.  Volume should be
  118.    increased by moving your microphone or by using the "GainUp"
  119.    function.
  120.  
  121. d0 = -4 if the incoming sample is confused by extraneous noise.
  122.  
  123.  
  124. "Recognize" utilizes Amiga audio channel 0.  So do not call this
  125. function while any other application is using channel 0.
  126.  
  127. *****************************************************************
  128.  
  129. NAME:      
  130. AddVoiceTask -- Initiate a separate task to recognize a spoken 
  131.                 word or phrase.
  132.  
  133. OFFSET:      
  134. -42
  135.  
  136. SYNOPSIS:
  137. AddVoiceTask (MapBuffer, MsgPort, SizeVocabulary, Resolution)
  138.               a0         a1       d0              d1
  139.  
  140. FUNCTION:
  141. "AddVoiceTask" is similar in function to "Recognize" except that
  142. here, a separate task is started under the Amiga multitasking
  143. operating system which listens for incoming words or phrases and
  144. returns messages to the user's Message Port indicating the
  145. Sequence Number of the frequency map in Mapbuffer which best
  146. matches the frequency map of the incoming word.  MapBuffer
  147. address and Message Port address are passed to "AddVoiceTask"
  148. in a0 and a1.  Number of words or phrases in the vocabulary are
  149. passed to "AddVoiceTask" in d0.
  150.  
  151. "AddVoiceTask" will operate at either high resolution (d1 = 0) or
  152. low resolution (d1 = 1).  High resolution computes a frequency
  153. analysis of the incoming word or phrase at twice the number of
  154. points in time as low resolution.  High resolution is somewhat
  155. better at word recognition, but takes almost twice the processing
  156. time.
  157.  
  158. The messages sent to MessagePort are designed to mimic shortened
  159. IDCMP messages with a im_Class = $0.  Thus you can receive and
  160. process these messages at either an Intuition window IDCMP
  161. message port or at a custom message port of your own.
  162. Messages sent by this task are as follows.
  163.  
  164. im_Code = Sequence number of frequency map in MapBuffer that
  165.           best matches the frequency map of the incoming
  166.           word or phrase.
  167.  
  168. im_Code = -1 if there is no match between the incoming
  169.           frequency map and any of the maps in MapBuffer.
  170.  
  171. im_Code = -2 if the incoming word causes unacceptable
  172.           digital clipping.  Volume should be reduced by
  173.           moving your microphone or by using the "GainDown"
  174.           function.
  175.  
  176. im_Code = -3 if incoming word is too low in volume.  Volume
  177.           should be increased by moving your microphone or
  178.           by using the "GainUp" function.
  179.  
  180. im_Code = -4 if the incoming sample is confused by
  181.           extraneous noise.
  182.  
  183. Upon calling "AddVoiceTask", the PerfectSound digitizer becomes
  184. immediately active, listening for an incoming word.  After
  185. receipt of a word or phrase, a message as described above is sent
  186. to Message Port.  The VoiceTask then goes into a WAIT mode and
  187. remains inactive until it receives a reply to the message it has
  188. sent to Message Port.  Upon receipt of a reply, VoiceTask again
  189. becomes goes active and listens for an incoming word.
  190.  
  191. While VoiceTask is in WAIT, you are free to use any audio channel
  192. in other applications.  However, when VoiceTask is active, it
  193. utilizes audio channel 0 and will conflict with any other
  194. application using audio channel 0.
  195.  
  196. *****************************************************************
  197.  
  198. NAME:      
  199. RemVoiceTask -- Remove task initiated by AddVoiceTask
  200.  
  201. OFFSET:      
  202. -48
  203.  
  204. SYNOPSIS:
  205. RemVoiceTask ()
  206.    
  207. FUNCTION:
  208. Deallocates memory and removes VoiceTask from the Amiga system.
  209. Note that the Message Port specified for the "AddVoiceTask" function
  210. must still exist at the time you call "RemVoiceTask".
  211.  
  212. *****************************************************************
  213.  
  214. NAME:
  215. GainUp -- Increase gain of PerfectSound 3 audio digitizer.
  216.  
  217. OFFSET:
  218. -54
  219.  
  220. SYNOPSIS:
  221. GainUp()
  222.  
  223. FUNCTION:
  224. Increases gain of the PerfectSound audio digitizer by one step. 
  225. Note that when gain reaches maximum, "GainUp" will wrap around
  226. and return gain to it's lowest value.  Do not call this function
  227. if you are using the SoundMaster audio digitizer.
  228.  
  229. *****************************************************************
  230.  
  231. NAME:
  232. GainDown -- Decease gain of PerfectSound 3 audio digitizer.
  233.  
  234. OFFSET:
  235. -60
  236.  
  237. SYNOPSIS:
  238. GainDown()
  239.  
  240. FUNCTION:
  241. Decreases gain of the PerfectSound audio digitizer by one step. 
  242. Note that when gain reaches minimum, "GainDown" will wrap around
  243. and return gain to it's highest value.  Do not call this function
  244. if you are using the SoundMaster audio digitizer
  245.  
  246. *****************************************************************
  247.  
  248. NAME:
  249. RecDataAddress -- Return memory address of digital sample of
  250.                   incoming word or phrase.
  251.  
  252. OFFSET:
  253. -66
  254.  
  255. SYNOPSIS:
  256. RecDataAddress()
  257.  
  258. FUNCTION:
  259. When an incoming word or phrase is digitized, 3/4 second of
  260. digital data is stored in an internal buffer.  This is 8 bit
  261. digitized data is sampled at a rate of 6400 Hz.  Thus the buffer
  262. for storing this data is 4800 bytes in size.  This function
  263. returns the address of this buffer for possible additional
  264. experimental uses.
  265.  
  266. *****************************************************************
  267.  
  268. NAME:
  269. RecMapAddress -- Return memory address of frequency map of
  270.                  incoming word or phrase.
  271.  
  272. OFFSET:
  273. -72
  274.  
  275. SYNOPSIS:
  276. RecMapAddress()
  277.  
  278. FUNCTION:
  279. A frequency map of each incoming word or phrase is computed for
  280. comparison with maps learned and stored in MapBuffer.  Each map
  281. consists of a frequency analysis of 3/4 second of audio data at
  282. 72 points in time.  For each of these 72 time points, the data is
  283. examined for frequency content at 32 points between 0 Hz and 3200
  284. Hz.  A frequency map is made up of 72, 32 bit words corresponding
  285. to the 72 time points analyzed.  For each of these 32 bit words,
  286. bit 0 is set if the signal contains frequency components from 
  287. 0-100 Hz.  Bit 1 is set if the signal contains frequency
  288. components from 100-200 Hz.  Bit 2 is set if the signal contains
  289. frequency components from 200-300 Hz etc.  This function returns
  290. the address of this frequency map for possible additional
  291. experimental uses.  Note that this internal frequency map does
  292. not have the 16 byte ASCII header as do the frequency maps
  293. stored in MapBuffer.
  294.  
  295. *****************************************************************
  296.  
  297. NAME:
  298. WordScore -- Return recognition score of a recognized word.
  299.  
  300. OFFSET:
  301. -78
  302.  
  303. SYNOPSIS:
  304. WordScore()
  305.  
  306. FUNCTION:
  307. The recognize function computes a numerical score representing the
  308. "goodness" of a match between the frequency map of an incoming word
  309. and each frequency map stored in MapBuffer.  The recognized word
  310. is determined by highest score.  This function returns the numerical
  311. score of the recognized word.
  312.  
  313. *****************************************************************
  314.  
  315. NAME:      
  316. PickSampler -- Specify which model audio sampler to use (either
  317.                PerfectSound3 or SoundMaster).
  318.  
  319. OFFSET:      
  320. -84
  321.  
  322. SYNOPSIS:
  323. PickSampler (SamplerID)
  324.                 d0
  325.  
  326. FUNCTION:
  327. Select the audio sampler to be used with this function.  SamplerID = 0
  328. for PerfectSound3.  SamplerID = 1 for SoundMaster
  329.  
  330.