Project

General

Profile

Wiki » History » Version 3

Michelangelo Diamanti, 2020-12-07 16:26

1 1 Michelangelo Diamanti
h1. BML 1.0 Standard
2
3
{{toc}}
4
5
This document introduces and describes version 1.0 of the Behavior Markup Language standard. This document contains background information, descriptions of typical use contexts, and, most importantly, the syntactic and semantic details of the XML format of the Behavior Markup Language.
6
7
h1. Introduction
8
9
The Behavior Markup Language, or BML, is an XML description language for controlling the verbal and nonverbal behavior of (humanoid) embodied conversational agents (ECAs). A BML block (see example in figure below) describes the physical realization of behaviors (such as speech and gesture) and the synchronization constraints between these behaviors. BML is _not_ concerned with the communicative intent underlying the requested behaviors. The module that executes behaviors specified in BML on the embodiment of the ECA is called a _BML Realizer_.
10
11
!bmlexample.png!
12 2 Michelangelo Diamanti
!https://projects.cs.ru.is/attachments/download/1150/bmlexample.png!
13 1 Michelangelo Diamanti
_Figure 1: Example of a BML Request_
14
15
h2. Core Standard and Extensions
16
17
The BML Standard consists of a small and lean core, plus a few clearly defined mechanisms for extending the language.
18
19
h3. Lean Core Standard
20
21
The Core of the BML Standard defines the form and use of BML blocks, mechanisms for synchronisation, the basic rules for feedback about the processing of BML messages (see later in this document), plus a number of generic basic behaviors. BML compliant realizers implement the complete BML Core Standard and provide a meaningful execution for all its behavior elements. Some realizers might offer only partial compliance, for example because they only steer a head (and therefore do not need to interpret bodily behaviors). In that case, a realizer should at least provide an exception/warning feedback when being requested to execute unsupported Core Standard behaviors (see [[Wiki#Feedback|Feedback]]).
22
23
    |*What:*         |BML Core Standard. |
24
    |*Status:*        |Mandatory. |
25
    |*XML namespace:* |http://www.bml-initiative.org/bml/bml-1.0 |
26
    |*Examples:*      |[[Wiki#ltspeechgt|basic speech]], [[Wiki#ltpointinggt|pointing gestures]] |
27
28
h3. Extensions
29
30
BML provides several standardized mechanisms for extension. One can define new behaviors (in a custom namespace), or extend upon Core behaviors by adding custom attributes. *_Description extensions_* provide a standardized manner for a user to give more detail about how the BML Realizer should realize a given instance of a core behavior, while allowing a fallback to the Core specification when the BML Realizer does not support the extension.
31
32
The BML standard defines a number of Core Extensions, both in the form of additional behaviors and in the form of description extensions. The Core Extensions provide behaviors and description extensions that we  do not want to make mandatory, but we do want to be implemented in a standardized way whenever a BML Realizer implements them. We encourage authors of realizers to collaborate and define shared behavior types and descriptions beyond those provided by the core extensions.
33
34
    |*What:*         |BML Core Extensions. |
35
    |*Status:*        |Optional, but if a realizer implements the functionality of a Core Extension, it should exactly follow the standard specification. |
36
    |*XML namespace:* |http://www.bml-initiative.org/bml/...  (last part is specified in the definition of the Core Extension) |
37
    |*Examples:*      |[[Wiki#ltfaceFacsgt|FACS face expressions]], SSML description extension for speech |
38
39
h1. Global Context
40
41
h2. SAIBA
42
43
The Behavior Markup Language is part of the SAIBA Multimodal Behavior Generation Framework (see Figure 2 below). In this framework, the intention for the ECA to express something arises in the *_Intent Planner_*. The *_Behavior Planner_* is responsible for deciding which multimodal behaviors to choose for expressing the communicative intent (through speech, face expressions, gestures, etcetera) and for specifying proper synchronisation between the various modalities. This multimodal behavior is specified in the form of BML messages. A *_BML Realizer_* is responsible for physically realizing the specified BML message through sound and motion (animation, robot movement, ...), in such a way that the time constraints specified in the BML block are satisfied. At runtime, the BML realizer sends back feedback messages to keep the planning modules updated about the progress and result of the realization of previously sent BML messages, allowing, e.g., for monitoring and possible error recovery.
44
45 3 Michelangelo Diamanti
!https://projects.cs.ru.is/attachments/download/1152/SAIBA_framework.png!
46 1 Michelangelo Diamanti
_Figure 2: SAIBA Framework_
47
48
  {{div_start_tag(intentplanning, inset)}}
49
        _The exact nature of the intent and behavior planning processes is left unspecified here. As far as the BML Realizer is concerned, it makes no difference whether BML messages are the result of a complicated multimodal affective dialog system, or are simply predefined BML messages pulled from a library of pre-authored materials._
50
  {{div_end_tag}}
51
52
h2. BML Messaging Architecture
53
54
BML does not prescribe a specific message transport. Different architectures have drastically different notions of a message. A message may come in the form of a string, an XML document or DOM, a message object, or just a function call. However, no matter what message transport is used, the transport and routing layer should adhere to the following requirements:
55
56
*  Messages must be received in sent order.
57
*  Messages must contain specific contents that can be fully expressed as XML expressions in the format detailed in this document.
58
 
59
Currently, there are two types of messages: 
60
    
61
*  BML Requests.
62
**  Sent by the Behavior Planner to the Behavior Realizer.
63
**  BML requests are sent as <bml> blocks containing a number of behavior elements with synchronisation.
64
*  Feedback Messages.
65
**  Sent by the Behavior Realizer.
66
**  Used to inform the planner (and possibly other processes) of the progress of the realization process.
67
    
68
h2. The BML Realizer
69
70
Conceptually, BML Realizers execute a multimodal plan that is incrementally constructed (scheduled) on the basis of a stream of incoming BML Requests (see Figure 3). A BML Realizer is responsible for executing the behaviors specified in each BML request sent to it, in such a way that the time constraints specified in the BML request are satisfied. If a new request is sent before the realisation of previous requests has been completed, a composition attribute determines how to combine the behaviors in the new request with the behaviors from earlier requests (see [[Wiki#Composition|documentation of composition attribute]]).
71
72
Each BML Request represents a scheduling boundary. That is: if behaviors are in the same BML request, this means that the constraints between them are resolved before any of the behaviors in the request is executed. 
73
74 3 Michelangelo Diamanti
!https://projects.cs.ru.is/attachments/download/1153/Scheduling.png!
75 1 Michelangelo Diamanti
_Figure 3: Dealing with an incoming stream of BML Requests_
76
77
h2. The State of an ECA
78
79
BML assumes that there is something like a ground state of the ECA. This state comprises several elements, such as the permanent posture or the ground state of the face. For example, when a temporary @<posture>@ behavior ends, the ECA reverts to the posture defined in the groud state; when a temporary face expression ends, the face of the ECA reverts to a ground state. Some types of behavior have a residual effect. That is, after the end time of the behavior has been reached, the ground state of the ECA will be different than before the behavior started. Such behaviors are generally names @<...Shift>@. Details can be found at the documentation of each particular element; here we present a table of dimensions to the ground state of the ECA, and behaviors that may influence this ground state.
80
81
|_./ Ground state aspect |_. Behaviors that change this state |
82
| Body posture | @<postureShift>@ |
83
| Head pose | @<headDirectionShift>@ |
84
| Face expression | @<faceShift>@ |
85
|Gaze direction | @<gazeShift>@ |
86
| Location in the world | @<locomotion>@ |
87
88
h1. XML Format: Values and Types
89
90
Before describing the various XML elements in the BML Standard, we describe here the available attribute types.
91
92
We use camelCase throughout for element names and attribute names. Values of type openSetItem and closedSetItem defined in this document are generally all uppercase. The names of default syncpoints for various behavior types are also written in camelCase (e.g., strokeStart).
93
94
h2. Attribute Value Types
95
96
Values for various types of behavior attributes can be one of the following:
97
98
* *ID:* An identifier that is unique within a specified context (see <bml> and "behavior element"). Adheres to "standard XML type ID":http://www.w3.org/TR/REC-xml/#sec-attribute-types 
99
* *syncref:* describes the relative timing of sync points (see [[Wiki#Synchronisation|the section on synchronisation]])
100
* *worldObjectID:* A unique ID of an object in the character's world. Adheres to "standard XML type ID":http://www.w3.org/TR/REC-xml/#sec-attribute-types 
101
* *targetID:* A unique ID referring to a target in the character's world. Adheres to "standard XML type ID":http://www.w3.org/TR/REC-xml/#sec-attribute-types 
102
* *closedSetItem:* A string from a closed set of strings, where the standard will provide the exhaustive list of strings in the set. 
103
* *openSetItem:* A string from an open set of strings, where the standard may provide a few common strings in the set.
104
* *bool:* A truth value, either "true" or "false"
105
* *int:* A whole number
106
* *float:* A number with decimals
107
* *angle:* A float number specifying angle in degrees counterclockwise, from (-180, 180].
108
* *string:* An arbitrary string
109
* *direction:* A particular closedSetItem type from the ClosedSet [LEFT, RIGHT, UP, DOWN, FRONT, BACK, UPRIGHT, UPLEFT, DOWNLEFT, DOWNRIGHT]
110
* *vector:* a string of format “float; float; float” indicating the x, y, and z coordinates of a vector
111
112
h2. Coordinate System and Units
113
114
While we prefer specifying behavior by common verbs and nouns, for some attributes or applications it is unavoidable to use precise vectors. 
115
116
All units are in kms (kilograms, meters, seconds).
117
118
BML assumes a *global* coordinate system in which the positive Y-axis is up. The *local* (character-based) coordinate system[1] adheres to the guidelines of the H-Anim standard ( "v1.1":http://h-anim.org/Specifications/H-Anim1.1/#modeling and "H-Anim":http://h-anim.org/Specifications/H-Anim200x/ISO_IEC_FCD_19774/concepts.html#ModellingOfHumanoids ): _"The humanoid shall be modelled in a standing position, facing in the +Z direction with +Y up and +X to the humanoid's left. The local character-based origin (0, 0, 0) shall be located at ground level, between the humanoid's feet."_ 
119
120
fn1. _Currently, there are no expressions in BML 1.0 that actually use the local character based coordinate system. However, future versions may introduce references such as "2 meters to the left of the character"._
121
122
h1. -------------------------------------------------
123
124
h1. <bml> request
125
126
All BML behaviors must belong to a @<bml>@ behavior block. A @<bml>@ block is formed by placing one or more BML behavior elements inside a top-level @<bml>@ element. Unless synchronization is specified (see [[Wiki#Synchronisation|the section on synchronisation]]), it is assumed that all behaviors in a @<bml>@ block start at the same time after arriving at the BML realizer.
127
128
h2. Syntax @ @
129
130
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
131
|*ELEMENT:*    |@<bml>@ |
132
|*ATTRIBUTES:* |@characterId@, @id@, @composition@ |
133
|*CONTENTS:*   |behaviors of various types, @<required>@ blocks, @<constraint>@ blocks |
134
135
<pre><code class="xml">
136
  <bml xmlns="http://www.bml-initiative.org/bml/bml-1.0" 
137
       id="bml1" characterId="Alice" composition="MERGE">
138
  </bml>
139
</code></pre>
140
_Example: An empty @<bml>@ request_
141
142
h2. Attribute Details @ @
143
144
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
145
|characterId |worldObjectID |optional |"" |a reference towards the controlled character |
146
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ block. The id 'bml' is reserved. |
147
|composition |openSetItem |optional |"MERGE" |one among [MERGE,APPEND,REPLACE], defines the composition policy to apply if the current @<bml>@ block overlaps with previous @<bml>@ blocks (see below). |
148
149
h2. Semantics @ @
150
151
h3. No Communicative Meaning @ @
152
153
The BML specification does not prescribe a communicative meaning for the BML Request. This allows users of BML to specify short spurts of behavior (for example: speech clauses or individual gaze shifts) and generate performances incrementally, or, if they prefer, to construct elaborate performances as a whole and send them in a single request (for example: entire monologues).
154
155
h3. Ordering is not meaningful @ @
156
157
The order of elements inside the @<bml>@ block does not have any semantic meaning. Authors writing BML expressions should not rely on a BML Realizer realizing something in a certain order because it is in a certain order in the BML block
158
159
h3. Start time, end time, delays @ @
160
161
Each @<bml>@ request represents a scheduling boundary. That is: if behaviors are in the same @<bml>@ request, this means that the constraints between them are resolved before any of the behaviors in the request is executed. 
162
163
*start time* -- the start time of a block b is the global timestamp when it actually starts being executed. The start time may be influenced by various delays, as well as by the composition attribute (both explained further below).
164
*end time* -- the end time of a block is the global timestamp when all behaviors in the block have ended.
165
166
  {{div_start_tag(realisationdelay, inset)}}
167
      _When a planner sends a @<bml>@ request to a realizer, there will be a slight (hopefully negligible) delay before the behavior actually starts being performed on the embodiment. The transport and routing layer supporting the transmission of a sequence of @<bml>@ blocks will introduce a transmission delay; parsing the request and solving the constraints may introduce another delay._
168
  {{div_end_tag}}
169
170
h3. Composition @ @
171
172
If a new request is sent before the realisation of previous requests has been completed, a composition attribute determines how to combine the behaviors in the new @<bml>@ block with the behaviors from prior @<bml>@ blocks. The values for the composition attribute have the following meaning.
173
174
* *MERGE:* _(default)_ The start time of the new @<bml>@ block will be as soon as possible. The behaviors specified in the new @<bml>@ block will be realized together with the behaviors specified in prior @<bml>@ blocks. In case of conflict, behaviors in the newly merged @<bml>@ block cannot modify behaviors defined by prior @<bml>@ blocks. 
175
* *APPEND:* The start time of the new block will be as soon as possible after the end time of all prior blocks. 
176
* *REPLACE:* The start time of the new block will be as soon as possible. The new block will completely replace all prior @<bml>@ blocks. All behavior specified in earlier blocks will be ended and the ECA will revert to a neutral state before the new block starts.
177
178
  {{div_start_tag(betweenblockconflict, inset)}}
179
      _As an example of a merge conflict, one might consider two consecutive @<bml>@ blocks that both specify a right handed gesture, with the timing being such that they should be performed at the same time. When this turns out to be impossible, the gesture in the block that arrived last should be dropped, and an appropriate warning should be issued (see [[Wiki#Feedback|Feedback]] section)_
180
  {{div_end_tag}}
181
182
h1. <required>
183
184
It is generally assumed that the behavior realizer will attempt to realize all behaviors in a block, but if some of the behaviors don't successfully complete for some reason, other behaviors still get carried out (see [[Wiki#Feedback|Feedback]] and [[Wiki#Failure-and-Fallback|Failure and Fallback]]).
185
186
If there is an all-or-nothing requirement for all or some of the behaviors, they can be enclosed in a @<required>@ block inside the @<bml>@ block.
187
188
h2. Syntax @ @
189
190
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
191
|*ELEMENT:*    |@<required>@ |
192
|*ATTRIBUTES:* |none |
193
|*CONTENTS:*   |behaviors of various types, @<constraint>@ blocks |
194
195
h2. Semantics @ @
196
197
If behaviors or constraints enclosed in a @<required>@ block cannot be realized, the complete @<bml>@ block of which the @<required>@ block is a part should be aborted, with appropriate feedback.
198
199
In the following example, the entire performance in the @<bml>@ block will be aborted if either the gaze or the speech behavior is unsuccessful (and an appropriate feedback message sent back from the behavior realizer, see [[Wiki#Feedback|Feedback]] section), but if only the head nod is unsuccessful, the rest will be carried out regardless (and an appropriate feedback message sent back from the behavior realizer).
200
201
<pre><code>
202
  <bml id="bml1" xmlns="http://www.bml-initiative.org/bml/bml-1.0" characterId="Alice">
203
    <required>
204
      <gaze id="gaze1" target="PERSON1"/>
205
      <speech id="speech1"><text>Welcome to my humble abode</text></speech>
206
    </required>
207
    <head id="nod1" type="NOD"/>
208
  </bml>
209
</code></pre>
210
211
h1. Behaviors (common aspects)
212
213
A behavior element describes one kind of a behavior to the behavior realizer. In its simplest form, a behavior element is a single XML tag with a few key attributes:
214
215
<pre><code>
216
  <bml id="bml1" xmlns="http://www.bml-initiative.org/bml/bml-1.0" character="Alice">
217
     <gaze id="gaze1" target="PERSON1"/>
218
  </bml>
219
</code></pre>
220
221
222
h2. Syntax @ @
223
224
This document specifies a number of XML elements for specifying various sorts of behavior. Any behavior element has at least the following attributes: 
225
226
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
227
|id |ID |required | |Unique ID that allows referencing to a particular behavior. The id 'bml' is reserved. |
228
|start |syncref |optional | |Determines the start time of the behavior, either as offset relative to the start time of the enclosing @<bml>@ block, or relative to another behavior contained in this block or in another block. If no syncrefs are specified for this behavior, start time is 0; if start is unspecified but other syncrefs are given for this behavior, start is determined by the other syncrefs (and the possible duration for this behavior). |
229
|end |syncref |optional | |local end time of the behavior, either as offset relative to the start time of the enclosing @<bml>@ block, or relative to another behavior contained in this block or in another block. If unspecified, the end time will be dependent on the start time, other syncrefs specified on this behavior, and the possible duration of the behavior. |
230
231
In addition, there may be sync attributes concerning other default sync points for a specific behavior type.
232
233
h2. Semantics @ @
234
235
There are a few aspects concerning the semantics of behaviors that are common to all behavior types.
236
237
h3. Timing and synchronisation @ @
238
239
Unless synchronization or timing constraints are specified, it is assumed that all behaviors in a @<bml>@ block start at the start time of the @<bml>@ block. In [[Wiki#Synchronisation|the section on synchronisation]], more detail is given concerning how to specify such constraints.
240
241
h3. Targets in the world  @ @
242
243
Some of the behavior types specified in this document, require reference to a *target* in the world (gaze target, point target, ...). A BML Realizer may assume a number of predefined targets, referenced by an attribute value of type worldObjectID. 
244
245
  {{div_start_tag(target, inset)}}
246
      For next version, we are working on working out a "target" element that allows more control over specification and modification of targets in the world.
247
  {{div_end_tag}}
248
249
h3. Behaviors with residual effect @ @
250
251
Some types of behavior have a residual effect. That is, after the end time of the behavior has been reached, the ground state of the ECA will be different than before the behavior started. 
252
253
An example of a behavior type _with_ a residual effect is @<locomotion>@: after a @<locomotion>@ behavior has been completed, part of the ground state of the ECA (in this case: location and orientation in the world) will be different than before, and other behaviors will be realized from this new ground state. 
254
255
An example of a behavior type _without_ a residual effect is @<point>@: usually, realization of a @<point>@ behavior involves a final retraction phase that returns the ECA back to the ground state in which it was before starting realization of the @<point>@ behavior. 
256
257
A number of behavior types exist both in a version with and without residual effect. For example, after completion of a @<face>@ behavior, the face of the ECA returns to the state it was in before the @<face>@ behavior started, but a @<faceShift>@ behavior will cause the face of the ECA to have a new ground state. 
258
259
When both versions of a behavior are active at the same time, the version without residual effect has priority for being displayed, but the ground state is nevertheless changed by the behavior with residual effect. 
260
261
262
263
h1. Synchronisation
264
265
For every behavior, its realization may be broken down into phases. Each phase is bounded by a sync-point that carries the name of the transition it represents, making it relatively straight-forward to align behaviors at meaningful boundaries (see Figure 4 for an example of the sync points for gestures). In the example below, the speech behavior and the point gesture are aligned at their start times.
266
267
<pre><code>
268
  <bml id="bml1" xmlns="http://www.bml-initiative.org/bml/bml-1.0" character="Alice">
269
    <pointing id="behavior1" target="blueBox" mode="RIGHT_HAND" start="speech1:start"/> 
270
    <speech id="speech1"><text>Look there!</text></speech>
271
  </bml>
272
</code></pre>
273
_Example: speech and gesture aligned at their start times_
274
275 3 Michelangelo Diamanti
!https://projects.cs.ru.is/attachments/download/1154/gesturephases.png!
276 1 Michelangelo Diamanti
_Figure 4: Synchronisation points for a gesture_
277
278
h2. Syntax @ @
279
280
Synchronisation is specified by assigning a syncref value to one or more of the sync attributes of a behavior. 
281
282
An syncref value is one of the following two forms:
283
284
* @[block_id:]behavior_id:sync_id [+/- offset]@ -- A reference to a sync point of another behavior, optionally with a float offset in seconds. By default, this is a behavior in the same @<bml>@ block that the syncref is contained in; if optional prefix @block_id:@ is present, the syncref specifies a sync point of a behavior in the @<bml>@ block with that ID.)
285
* @offset@ --A positive float offset in seconds relative to the start time of the surrounding @<bml>@ block.
286
287
<pre><code>
288
  <!-- Timing example behaviors -->
289
  <gaze start="0.3" end="2.14" /><!-- absolute timing in seconds -->
290
  <gaze stroke="behavior1:stroke" /><!-- relative to another behavior -->
291
  <gaze ready="behavior1:relax + 1.1" /><!-- relative to another behavior, with offset -->
292
  <gaze ready="bml3:behavior1:relax" /><!-- relative to a behavior in another block -->
293
</code></pre>
294
295
h3. The constraint element
296
297
The <constraint> element provides a container for specifying additional constraints on the performance. BML 1.0 only defines three timing constraints:
298
299
    * <synchronize> declares one or more sync points should be synchronized with a referenced sync-point notation
300
    * <before> declares one or more sync points should be performed before a referenced sync-point notation
301
    * <after> declares one or more sync points should be performed after a referenced sync-point notation
302
303
h4. <synchronize> 
304
305
<synchronize> constraints perform just like the sync-point attribute constaints, performing the sync-points of two or more behaviors at the same time.
306
<pre>
307
<constraint>
308
  <synchronize>
309
    <sync ref="speech1:sync4"/>
310
    <sync ref="beat1:stroke:2"/>
311
    <sync ref="nod1:stroke"/>
312
  </synchronize>
313
</constraint>
314
</pre>
315
316
This generalizes the attribute notation in three ways:
317
318
    * A constraint can synchronize sync-points that do not have an attribute notation, such as speech word breaks and multi-stroke rhythmic gestures.
319
    * A constraint can synchronize more than two behaviors to the same point.
320
    * A constraint can remain optional (outside any <required> element) while the presence of the behaviors is still <required>.
321
322
h4. <before>
323
324
<before> constrains one or more sync-points to perform before a specified sync-point notation.
325
326
<pre>
327
<constraint>
328
  <before ref="speech_1:start">
329
    <sync ref="gaze_1:stroke"/>
330
  </before>
331
</constraint>
332
</pre>
333
334
This constraint example requires the gaze_1 to acquire target (complete the stroke sync-point) before beginning speech_1.
335
336
h5. <after>
337
338
<after> constrains one or more sync-points to perform before a specified sync-point notation.
339
340
<pre>
341
<constraint>
342
  <after ref="speech_1:end+2">
343
    <sync ref="gaze_1:relax"/>
344
  </after>
345
</constraint>
346
</pre>
347
348
This constraint example requires two seconds to pass after speech_1 completes before relaxing gaze_1.
349
Extending <constraint>
350
351
We encourage BML developers to experiment with using the constraint element for the alternative functions through the use of namespaced elements and <description> extensions, for example:
352
353
    * To specify some tolerance range for a synchronization operation.
354
    * To specify a certain priority for a particular synchronization operation.
355
    * To specify non-timing constraints such as modality
356
357
h3. The <wait> element
358
359
The <wait> element is a NO-OP behavior that facilitates flexible waiting times between behaviors.
360
361
<pre><code class="xml">
362
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
363
		character="Alice"
364
		id="bml1">
365
	<speech id="behavior1" start="0">			
366
        <text>
367
        Good morning.
368
        </text>
369
    </speech>
370
    <wait id="behavior2" start="behavior1:end" duration="1"/>
371
    <speech id="behavior3" start="behavior2:end">			
372
        <text>
373
        Goodbye.
374
        </text>
375
    </speech>
376
</bml>
377
</code></pre>
378
_Example: Wait for one second between the two speech fragments._
379
380
h4. Syntax @ @
381
382
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
383
|*ELEMENT:*    |@<wait>@ |
384
|*SYNC POINTS:* | @start@, @end@ |
385
|*ATTRIBUTES:* |@id@, @duration@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
386
|*CONTENTS:*   |none |
387
388
h4. Attribute details
389
390
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
391
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
392
|duration|float|optional||the duration of the wait in seconds|
393
394
|_.Sync Attribute |_.Description |
395
|start| start of wait |
396
|end| end of wait |
397
  
398
h2. Semantics @ @
399
400
The synchronization constraints described above are all bidirectional. That is:
401
402
@<head id="head1" stroke="gesture1:stroke" ... />@
403
404
means that the the strokes of head1 and gesture1 should be aligned. This synchronization constraint must be interpreted bidirectional: the exact same time constraint can be expressed by:
405
406
@<gesture id="gesture1" stroke="head1:stroke" ... />@
407
408
h3. Default Sync Points and their Sync Attributes @ @
409
410
All behaviors have sync points called @start@ and @end@. Furthermore, for each behavior type a number of additional default sync points may be available. For every default sync point, the corresponding behavior XML element has a sync attribute of the same name. 
411
412
h3. New Sync Points  @ @
413
414
New sync points can be introduced for specific behavior types or description extensions. For example, in speech one can use the special @<sync>@ tag to insert additional sync points in speech.
415
416
When new sync-points are introduced for a behavior, it is assumed that @start@ and @end@ will still refer to the first and last sync-point for that behavior.
417
418
h1. Face behaviors
419
420
The face can be controlled through various mechanisms. The @<faceLexeme>@ behavior offers a range of predefined expressions such as "RAISE_EYEBROWS"; a limited set of mandatory lexemes is defined that should be offered by any BML Realizer. The optional @<faceFacs>@ Core Extension allows precise control of the face in terms of the Facial Action Coding Scheme of Ekman. Finally, @<face>@ and @<faceShift>@ allow one to combine a set of partial expressions into one compound face expression, where the former is temporary, and the latter changes the BASE state of the ECAs face.
421
422
All face behavior types use the same set of sync points @start@, @attackPeak@, @relax@, and @end@. These sync points define a dynamic progress like in Figure 6 below. By using the Core Extension attribute @overshoot@, one can use these same alignment points to achieve a dynamic progress like in Figure 7, where @attackPeak@ is the peak point of the initial overshoot of the face expression. 
423
424
!OnsetApexOffset.png!
425
_Figure 6: Onset/apex/offset dynamics specified using the sync points and the @amount@ attribute._
426
427
!AttackSustainRelease.png!
428
_Figure 7: Attack/sustain/release dynamics specified using the sync points and the @amount@ attribute plus the Core Extension @overshoot@ attribute._
429
430
h2. Shared face attributes
431
432
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
433
434
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
435
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
436
|amount|float|optional|0.5|A float value between 0..1 to indicate the amount to which the expression should be shown on the face, 0 meaning 'not at all' and 1 meaning 'maximum, highly exaggerated'|
437
438
439
|_.Sync Attribute |_.Description |
440
|start		|beginning of face expression |
441
|attackPeak	|maximum expression achieved	|
442
|relax		|decay phase starts, _not for <faceShift> behaviors!_ |
443
|end			|face expression ended, _not for <faceShift> behaviors!_ |
444
445
h2. "overshoot" Core Extension attribute
446
447
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/coreextensions-1.0 |
448
449
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
450
|overshoot|float |optional | 0 | Fraction of overshoot of the attack peak, relative to @amount@ (which defines the level of the sustain phase)|
451
452
h2. <faceLexeme>
453
454
Show a (partial) face expression from a predefined lexicon.
455
456
h3. Syntax @ @
457
458
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
459
|*ELEMENT:*    |@<faceLexeme>@ |
460
|*SYNC POINTS:* | @start@, @attackPeak@, @relax@, @end@ |
461
|*ATTRIBUTES:* |@id@, @lexeme@, @amount@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]], Core Extension @overshoot@ |
462
|*CONTENTS:*   |none |
463
464
<pre><code class="xml">
465
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
466
		character="Alice"
467
		id="bml1">
468
	<faceLexeme id="behavior1" lexeme="RAISE_BROWS" amount="0.8" start="0" end="4"/>			
469
</bml>
470
</code></pre>
471
_Example: Raise both eye brows for 4 seconds._
472
473
h3. Attribute Details @ @
474
475
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
476
|lexeme|openSetItem|required||One of [OBLIQUE_BROWS, RAISE_BROWS, RAISE_LEFT_BROW, RAISE_RIGHT_BROW, LOWER_BROWS, LOWER_LEFT_BROW, LOWER_RIGHT_BROW, LOWER_MOUTH_CORNERS, LOWER_LEFT_MOUTH_CORNER, LOWER_RIGHT_MOUTH_CORNER, RAISE_MOUTH_CORNERS, RAISE_RIGHT_MOUTH_CORNER, RAISE_LEFT_MOUTH_CORNER, OPEN_MOUTH, OPEN_LIPS, WIDEN_EYES, CLOSE_EYES]|
477
478
The following table shows suggested interpretations that a BML Realizer can use for the lexemes using Ekman's Facial Action Coding System. To offer the user more detailed control of the face, providing an implementation of the @<faceFacs>@ element is suggested.
479
480
|_. Lexeme |_. FACS equivalent|
481
|OBLIQUE_BROWS | AU1+AU4 both sides |
482
| RAISE_BROWS | AU1+AU2 both sides |
483
| RAISE_LEFT_BROW | AU1+AU2 left side |
484
| RAISE_RIGHT_BROW | AU1+AU2 right side |
485
| LOWER_BROWS | AU4 both sides |
486
| LOWER_LEFT_BROW | AU4 left side  |
487
| LOWER_RIGHT_BROW | AU4 right side |
488
| LOWER_MOUTH_CORNERS | AU15 both sides |
489
| LOWER_LEFT_MOUTH_CORNER | AU15 left side |
490
| LOWER_RIGHT_MOUTH_CORNER | AU15 right side |
491
| RAISE_MOUTH_CORNERS | AU12 both sides |
492
| RAISE_LEFT_MOUTH_CORNER | AU12 left side   |
493
| RAISE_RIGHT_MOUTH_CORNER | AU12 right side |
494
| OPEN_MOUTH | AU25+AU26 |
495
| OPEN_LIPS | AU25 |
496
| WIDEN_EYES | AU5+AU7 |
497
| CLOSE_EYES | AU43 |
498
499
h3. Semantics @ @
500
501
This behavior shows a (partial) face expression from a predefined lexicon. A faceLexeme is a convenience shorthand for combinations of more detailed low level face controls. The provided set of core lexemes allows one to perform face expressions using meaningful lexeme names, which are easier to learn than the (more detailed) Action Units provided by the @faceFacs@ element.
502
503
h2. <faceFacs> Core Extension
504
505
This behavior provides control of the face through single Action Units from the Facial Action Coding Scheme. It is an Core Extension, that is, not every BML Compliant Realizer has to implement this behavior, but if a Realizer offers FACS based face control, they should adhere to the specification of this @<faceFacs>@ behavior
506
507
h3. Syntax @ @
508
509
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/coreextensions-1.0 |
510
|*ELEMENT:*    |@<faceFacs>@ |
511
|*SYNC POINTS:* | @start@, @attackPeak@, @relax@, @end@ |
512
|*ATTRIBUTES:* |@id@, @au@, @side@, @amount@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]], Core Extension @overshoot@ |
513
|*CONTENTS:*   |none |
514
515
<pre><code class="xml">
516
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
517
    xmlns:ext="http://www.bml-initiative.org/bml/coreextensions-1.0"
518
 		character="Alice"
519
 		id="bml1">
520
	<ext:faceFacs id="behavior1" au="1" side="BOTH" amount="0.8" start="0" end="4"/>			
521
</bml>
522
</code></pre>
523
_Example: Raise both eye brows for 4 seconds._
524
525
h3. Attribute Details @ @
526
527
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
528
|au|int|required||The number of the FACS Action Unit to be displayed |
529
|side|closedSetItem|optional|BOTH| Which side of the face to display the action unit on. Possible values: [LEFT,RIGHT,BOTH] Note that for some Action Units, BOTH is the only possible value. |
530
531
h3. Semantics @ @
532
533
This behavior provides control of the face through single Action Units from the Facial Action Coding Scheme. It is an Core Extension, that is, not every BML Compliant Realizer has to implement this behavior, but if a Realizer offers FACS based face control, they should adhere to the specification of this @<faceFacs>@ behavior
534
535
A BML Compliant Realizer that implements this extension will provide at least the set of Action Units listed below. The other Action Units are not mandatory, but implementing the full set of Action Units is strongly recommended.
536
537
h2. <face>
538
539
Compound behavior to specify the timing and alignment of several (partial) face expressions as one unit.
540
541
h3. Syntax @ @
542
543
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
544
|*ELEMENT:*    |@<face>@ |
545
|*SYNC POINTS:* | @start@, @attackPeak@, @relax@, @end@ |
546
|*ATTRIBUTES:* |@id@, @amount@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]], Core Extension @overshoot@ |
547
|*CONTENTS:*   | <lexeme>, with attributes @lexeme@ and @amount@ that can take the same values as for the @<faceLexeme>@ behavior.|
548
|| <facs>, with attributes @au@, @side@ and @amount@ that can take the same values as for the @<faceFacs>@ element. (This child element is only available if FACS Core Extension is implemented; this @<facs>@ child element has the same namespace as the @<faceFacs>@ behavior element) |
549
550
<pre><code class="xml">
551
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
552
     xmlns:ext="http://www.bml-initiative.org/bml/coreextensions-1.0"
553
		 character="Alice"
554
		 id="bml1">
555
	<face id="behavior1" amount="0.8" start="0" end="4">			
556
	  <ext:facs au="1" side="BOTH"/>
557
	  <lexeme lexeme="WIDEN_EYES"/>
558
	</face>
559
</bml>
560
</code></pre>
561
_Example: Raise both eye brows for 4 seconds._
562
563
564
h2. <faceShift>
565
566
Compound behavior to specify the timing and alignment of several (partial) face expressions as one unit, where the specified compound face expression becomes the new BASE state of the ECAs face.
567
568
h3. Syntax @ @
569
570
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
571
|*ELEMENT:*    |@<faceShift>@ |
572
|*SYNC POINTS:* | @start@, @end@ |
573
|*ATTRIBUTES:* |@id@, @amount@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
574
|*CONTENTS:*   | <lexeme>, with attributes @lexeme@ and @amount@ that can take the same values as for the @<faceLexeme>@ behavior.|
575
|| <facs>, with attributes @au@, @side@ and @amount@ that can take the same values as for the @<faceFacs>@ element. (This child element is only available if FACS Core Extension is implemented; this @<facs>@ child element has the same namespace as the @<faceFacs>@ behavior element) |
576
577
<pre><code class="xml">
578
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
579
     xmlns:ext="http://www.bml-initiative.org/bml/coreextensions-1.0"
580
		 character="Alice"
581
		 id="bml1">
582
	<faceShift id="behavior1" amount="0.8" start="0" end="4">			
583
	  <ext:facs au="1" side="BOTH"/>
584
	  <lexeme lexeme="WIDEN_EYES"/>
585
	</faceShift>
586
</bml>
587
</code></pre>
588
_Example: Raise both eye brows for 4 seconds._
589
590
h3. Semantics @ @
591
592
Compound behavior to specify the timing and alignment of several (partial) face expressions as one unit, where the specified compound face expression becomes the new BASE state of the ECAs face as soon as the behavior ends. 
593
594
h1. Gaze behaviors
595
596
h2. <gaze>
597
598
Temporarily directs the gaze of the character towards a target.
599
600
h3. Syntax @ @
601
602
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
603
|*ELEMENT:*    |@<gaze>@ |
604
|*SYNC POINTS:* | @start@, @ready@, @relax@, @end@ |
605
|*ATTRIBUTES:* |@id@, @target@, @influence@, @offsetAngle@, @offsetDirection@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
606
|*CONTENTS:*   |none |
607
608
<pre><code class="xml">
609
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
610
		character="Alice"
611
		id="bml1">
612
	<gaze id="gaze1" start="1" end="10" influence="NECK" target="bluebox"/>	
613
</bml>
614
</code></pre>
615
_Example: Direct the gaze towards the blue box for 9 seconds, using the eyes and the neck._
616
617
h3. Attribute Details @ @
618
619
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
620
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
621
|target|targetID|required| |A reference towards a target instance that represents the target direction of the gaze. |
622
|influence|openSetItem|optional| | Determines what parts of the body to move to effect the gaze direction. [EYES, HEAD, SHOULDER, WAIST, WHOLE, ...] |
623
|offsetAngle	|angle	|optional	|0.0	|Adds an angle degrees offset to gaze direction relative to the target in the direction specified in the @offsetDirection@ |
624
|offsetDirection	|direction	|optional	|RIGHT	|Direction of the offsetDirection angle [RIGHT, LEFT, UP, DOWN, UPRIGHT, UPLEFT, DOWNLEFT, DOWNRIGHT]|
625
626
|_.Sync Attribute |_.Description |
627
|start| gaze starts to move to new target |
628
|ready| gaze target acquired |
629
|relax| gaze starts returning to default direction |
630
|end| gaze returned to default direction |
631
632
h3. Semantics @ @
633
634
This behavior causes the character to temporarily direct its gaze to the requested target. The @influence@ parameter is read as follows: EYE means 'use only the eyes'; HEAD means 'use only head and eyes to change the gaze direction', etcetera.
635
636
h2. <gazeShift>
637
638
Permanently change the gaze direction of the character towards a certain target. 
639
640
h3. Syntax @ @
641
642
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
643
|*ELEMENT:*    |@<gazeShift>@ |
644
|*SYNC POINTS:* | @start@, @end@ |
645
|*ATTRIBUTES:* |@id@, @target@, @influence@, @offsetAngle@, @offsetDirection@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
646
|*CONTENTS:*   |none |
647
648
<pre><code class="xml">
649
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
650
		character="Alice"
651
		id="bml1">
652
	<gazeShift id="gaze1" start="1" end="2" influence="NECK" target="bluebox"/>	
653
</bml>
654
</code></pre>
655
_Example: Change the default gaze direction to be towards the blue box; the shift in gaze takes 1 second to be ready._
656
657
h3. Attribute Details @ @
658
659
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
660
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
661
|target|targetID|required| |A reference towards a target instance that represents the target direction of the gaze. |
662
|influence|openSetItem|optional| | Determines what parts of the body to move to effect the gaze direction. [EYES, HEAD, SHOULDER, WAIST, WHOLE, ...] |
663
|offsetAngle	|angle	|optional	|0.0	|Adds an angle degrees offset to gaze direction relative to the target in the direction specified in the @offsetDirection@ |
664
|offsetDirection	|direction	|optional	|RIGHT	|Direction of the offsetDirection angle [RIGHT, LEFT, UP, DOWN, UPRIGHT, UPLEFT, DOWNLEFT, DOWNRIGHT]|
665
666
|_.Sync Attribute |_.Description |
667
|start|gaze starts to move to new target |
668
|end|gaze target acquired |
669
670
h3. Semantics @ @
671
672
This behavior causes the character to direct its gaze to the requested target. This changes the default state of the ECA: after completing this behavior, the new target is the default gaze direction of the ECA. The @influence@ parameter is read as follows: EYE means 'use only the eyes'; HEAD means 'use only head and eyes to change the gaze direction', etcetera.
673
674
h1. Gesture behaviors
675
676
Currently, BML offers two types of gesture behaviors. The first provides a set of gestures recalled by name from a gesticon; the second provides simple pointing gestures. 
677
678
h2. <gesture>
679
680
Coordinated movement with arms and hands, recalled from a gesticon by requesting the corresponding lexeme
681
682
h3. Syntax @ @
683
684
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
685
|*ELEMENT:*    |@<gesture>@ |
686
|*SYNC POINTS:* | @start@, @ready@, @strokeStart@, @stroke@, @strokeEnd@, @relax@, @end@ |
687
|*ATTRIBUTES:* |@id@, @lexeme@, @mode@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
688
|*CONTENTS:*   |none |
689
690
<pre><code class="xml">
691
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
692
		character="Alice"
693
		id="bml1">
694
	<gesture id="behavior1" lexeme="hello-waving" start="2"/>			
695
</bml>
696
</code></pre>
697
_Example: Make a waving gesture._
698
699
h3. Attribute Details @ @
700
701
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
702
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
703
|mode|closedSetItem|optional||What hand/arm is being used [LEFT_HAND, RIGHT_HAND, BOTH_HANDS]|
704
|lexeme|openSetItem|required||Refers to an animation or a controller to realize this particular gesture.Every realizer will offer at least this set of possible values: [BEAT] |
705
706
|_.Sync Attribute |_.Description |
707
|start		|beginning of gesture				|
708
|ready		|end of gesture preparation phase	 	|
709
|strokeStart	|start of the stroke					|
710
|stroke		|gesture stroke						|
711
|strokeEnd	|end of stroke						|
712
|relax		|start of retraction phase				|
713
|end			|end of gesture						|
714
715
h3. Semantics @ @
716
717
Coordinated movement with arms and hands, recalled from a gesticon by requesting the corresponding lexeme
718
719
h2. <pointing>
720
721
Deictic gesture towards the target specified by the target attribute
722
723
h3. Syntax @ @
724
725
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
726
|*ELEMENT:*    |@<pointing>@ |
727
|*SYNC POINTS:* | @start@, @ready@, @strokeStart@, @stroke@, @strokeEnd@, @relax@, @end@ |
728
|*ATTRIBUTES:* |@id@, @target@, @mode@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
729
|*CONTENTS:*   |none |
730
731
<pre><code class="xml">
732
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
733
		character="Alice"
734
		id="bml1">
735
	<pointing id="behavior1" target="blueBox" mode="RIGHT_HAND" start="0" end="4"/>			
736
</bml>
737
</code></pre>
738
_Example: Point at the blue box._
739
740
h3. Attribute Details @ @
741
742
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
743
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
744
|mode|closedSetItem|optional||What hand/arm is being used [LEFT_HAND, RIGHT_HAND, BOTH_HANDS][3]|
745
|target|targetID|required||The gesture is directed towards this target|
746
747
fn3. _The set of values for @mode@ may in the future be extended with options such as HEAD or FOOT
748
749
|_.Sync Attribute |_.Description |
750
|start		|beginning of gesture				|
751
|ready		|end of gesture preparation phase	 	|
752
|strokeStart	|start of the stroke					|
753
|stroke		|gesture stroke						|
754
|strokeEnd	|end of stroke						|
755
|relax		|start of retraction phase				|
756
|end			|end of gesture						|
757
758
759
h3. Semantics @ @
760
761
Deictic gesture towards the target specified by the target attribute.
762
763
h1. Head behaviors
764
765
h2. <head>
766
767
Movement of the head, recalled from a gesticon by requesting the corresponding lexeme.
768
769
h3. Syntax @ @
770
771
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
772
|*ELEMENT:*    |@<head>@ |
773
|*SYNC POINTS:* | @start@, @ready@, @strokeStart@, @stroke@, @strokeEnd@, @relax@, @end@ |
774
|*ATTRIBUTES[2]:* |@id@, @lexeme@, @repetition@, @amount@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
775
|*CONTENTS:*   |none |
776
777
fn2. _The attribute @speed@ is being discussed as possible extensions; however, they are not part of the Core 1.0 Standard._
778
779
<pre><code class="xml">
780
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
781
		character="Alice"
782
		id="bml1">
783
	<head id="behavior1" lexeme="NOD" repetition="2" start="1" end="3"/>
784
</bml>
785
</code></pre>
786
_Example: Nod twice._
787
788
h3. Attribute Details @ @
789
790
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
791
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
792
|lexeme|openSetItem|required||Refers to an animation or a controller to realize this particular head behavior. Minimum set offered by all realizers: [NOD, SHAKE] |
793
|repetition| int|optional|1|Number of times the basic head motion is repeated.|
794
|amount| float|optional|1|How intense is the head nod? 0 means immeasurable small; 0.5 means "moderate"; 1 means maximally large |
795
796
|_.Sync Attribute |_.Description |
797
|start|start of the preparation phase |
798
|ready|end of the preparation phase |
799
|strokeStart |start of the stroke |
800
|stroke |stroke of the head motion. Note that the meaning of this sync point becomes undefined if @repetition > 1@ |
801
|strokeEnd |end of the stroke |
802
|relax |start of the retraction phase |
803
|end|end of the head motion |
804
805
h3. Semantics @ @
806
807
Movement of the head, recalled from a gesticon by requesting the corresponding lexeme. The stroke phase of the head motion (from @strokeStart@ till @strokeEnd@ is the "meaningful" part of the head motion. The @stroke@ sync point is the "peak" moment of the motion. If @repetition > 1@, the meaning of the @stroke@ sync point becomes undefined.
808
809
h2. <headDirectionShift>
810
811
Orient the head towards a target referenced by the target attribute.
812
813
h3. Syntax @ @
814
815
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
816
|*ELEMENT:*    |@<headDirectionShift>@ |
817
|*SYNC POINTS:* | @start@, @end@ |
818
|*ATTRIBUTES:* |@id@, @target@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
819
|*CONTENTS:*   |none |
820
821
<pre><code class="xml">
822
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
823
		character="Alice"
824
		id="bml1">
825
	<headDirectionShift id="behavior1" target="TARGET1" start="2"/>
826
</bml>
827
</code></pre>
828
_Example: Orient the head towards TARGET1._
829
830
h3. Attribute Details @ @
831
832
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
833
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
834
|target|targetID|required||target towards which the head is oriented|
835
836
|_.Sync Attribute |_.Description |
837
|start|beginning of headDirectionShift behavior |
838
|end|reached desired direction; set this direction as new BASE state |
839
840
h3. Semantics @ @
841
842
Permanently orient the head in a certain direction.
843
844
h1. Locomotion behavior
845
846
h2. <locomotion>
847
848
Move the body of the character from one location to another.
849
850
h3. Syntax @ @
851
852
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
853
|*ELEMENT:*    |@<locomotion>@ |
854
|*SYNC POINTS:* | @start@, @end@ |
855
|*ATTRIBUTES:* |@id@, @target@, @manner@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
856
|*CONTENTS:*   |none |
857
858
<pre><code class="xml">
859
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
860
		character="Alice"
861
		id="bml1">
862
	<locomotion id="behavior1" target="AUDIENCE" manner="WALK"/>
863
</bml>
864
</code></pre>
865
_Example: Locomotion: walk to the audience._
866
867
h3. Attribute Details @ @
868
869
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
870
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
871
|target|targetID|required| |A reference towards a target instance that represents the end location of the locomotive behavior. |
872
|manner|openSetItem|optional||The general manner of locomotion [WALK, RUN, STRAFE ...] (WALK is the only mandatory element in the set) |
873
874
|_.Sync Attribute |_.Description |
875
|start|start of the locomotion |
876
|end|end of the locomotion |
877
878
h3. Semantics @ @
879
880
This behavior causes the character to move to the requested target in the manner described. 
881
882
h1. Posture behaviors
883
884
BML allows one to specify _temporary_ postures using @<posture>@, and permanent shifts to a new BASE posture using the @<postureShift>@ behavior. Both behaviors have the same child elements to specify the form of the posture.
885
886
h2. <posture>
887
888
Temporarily change the posture of the ECA.
889
890
h3. Syntax @ @
891
892
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
893
|*ELEMENT:*    |@<posture>@ |
894
|*SYNC POINTS:* | @start@, @ready@, @relax@, @end@ |
895
|*ATTRIBUTES:* |@id@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
896
|*CONTENTS:*   | @<stance>@, @<pose>@ |
897
898
899
<pre><code class="xml">
900
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
901
		character="Alice"
902
		id="bml1">
903
	<posture id="behavior1" start="5" end="15">			
904
    <stance type="CROUCHING"/> 
905
    <pose type="ARMS" lexeme="ARMS_OPEN"/>
906
  </posture>
907
</bml>
908
</code></pre>
909
_Example: Crouch down with open arms for a short while._
910
911
h3. Attribute Details @ @ 
912
913
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
914
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
915
916
917
|_.Sync Attribute |_.Description |
918
|start		|start moving to a new posture |
919
|ready	|new posture achieved	|
920
|relax		|start returning to BASE posture |
921
|end			|temporary posture ended, back at BASE posture |
922
923
h3. Semantics @ @
924
925
Temporarily change the posture of the ECA. After the @<posture>@ behavior has ended, return to the BASE posture.
926
927
928
h2. <postureShift>
929
930
Permanently change the BASE posture of the ECA.
931
932
h3. Syntax @ @
933
934
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
935
|*ELEMENT:*    |@<postureShift>@ |
936
|*SYNC POINTS:* | @start@, @end@ |
937
|*ATTRIBUTES:* |@id@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
938
|*CONTENTS:*   | @<stance>@ (max 1), @<pose>@ (any number) |
939
940
941
<pre><code class="xml">
942
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
943
		character="Alice"
944
		id="bml1">
945
  <postureShift id="behavior1" start="5">			
946
    <stance type="SITTING"/> 
947
    <pose type="ARMS" lexeme="ARMS_CROSSED"/>
948
  </postureShift>
949
</bml>
950
</code></pre>
951
_Example: Sit down with arms crossed, and make that the new BASE posture._
952
953
h3. Attribute Details @ @ 
954
955
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
956
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
957
958
959
|_.Sync Attribute |_.Description |
960
|start		|start moving to a new posture |
961
|end			|new BASE posture achieved	 |
962
963
h3. Semantics @ @
964
965
Permanently change the BASE posture of the ECA. 
966
967
h2. <stance>
968
969
Child element of @<posture>@ and @<postureShift>@ behaviors, defines global body posture of the ECA.
970
971
h3. Syntax @ @
972
973
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
974
|*ELEMENT:*    |@<stance>@ |
975
|*ATTRIBUTES:* |@type@[5]|
976
|*CONTENTS:*   |none |
977
978
fn5. _In the future, we plan to add a way to also specify the orientation of the posture._
979
980
h3. Attribute Details @ @
981
982
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
983
|type|closedSetItem|required||Global body posture. Possible values are [SITTING, CROUCHING, STANDING, LYING]|
984
985
h3. Semantics @ @
986
987
Child element of @<posture>@ and @<postureShift>@ behaviors, defines global body posture of the ECA. This global posture may then be modified by one or more @<pose>@ siblings.
988
989
h2. <pose>
990
991
Child element of @<posture>@ and @<postureShift>@ behaviors, defines additions to the global body posture of the ECA.
992
993
h3. Syntax @ @
994
995
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
996
|*ELEMENT:*    |@<pose>@ |
997
|*ATTRIBUTES:* |@part@, @lexeme@|
998
|*CONTENTS:*   |none |
999
1000
h3. Attribute Details @ @
1001
1002
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
1003
|part|openSetItem|required||What part of the body is affected? Possible values are [ARMS, LEFT_ARM, RIGHT_ARM, LEGS, LEFT_LEG, RIGHT_LEG, HEAD, WHOLEBODY]|
1004
|lexeme|openSetItem|required||What configuration is set to the given part? Some possible values are [ARMS_AKIMBO, ARMS_CROSSED, ARMS_NEUTRAL, ARMS_OPEN, LEGS_CROSSED, LEGS_NEUTRAL, LEGS_OPEN, LEANING_FORWARD, LEANING_BACKWARD, ...]|
1005
1006
h3. Semantics @ @
1007
1008
Child element of @<posture>@ and @<postureShift>@ behaviors, defines additions that modify the global body posture of the ECA. For each value of the @part@ attribute, only one @<pose>@ child is expected to be present. A BML Realizer may define any number of lexemes beyond the ones specified above.
1009
1010
h1. Speech behaviors
1011
1012
h2. <speech>
1013
1014
Utterance to be spoken by a character. 
1015
1016
h3. Syntax @ @
1017
1018
|*NAMESPACE:*  |http://www.bml-initiative.org/bml/bml-1.0 |
1019
|*ELEMENT:*    |@<speech>@ |
1020
|*SYNC POINTS:* | @start@, @end@, any @<sync>@ element in the speech (see below) |
1021
|*ATTRIBUTES:* |@id@, [[Wiki#Default-Sync-Points-and-their-Sync-Attributes| sync attributes]] |
1022
|*CONTENTS:*   |exactly one @<text>@ child containing the text to be spoken, which in turn may contain one or more @<sync>@ markers. |
1023
| | A @<sync>@ marker has an attribute @id@ of type ID, the value of which is unique within the context of this @<speech>@ element. |
1024
1025
1026
<pre><code class="xml">
1027
<bml xmlns="http://www.bml-initiative.org/bml/bml-1.0"
1028
		character="Alice"
1029
		id="bml1">
1030
	<speech id="speech1" start="6"><text>This is a complete <sync id="syncstart1" /> 
1031
	BML core speech description.</text></speech>		
1032
</bml>
1033
</code></pre>
1034
_Example: This is an example of a complete speech behavior, synchronized to a beat gesture (striking on "speech")._
1035
1036
h3. Attribute Details @ @
1037
1038
|_.Attribute |_.Type |_.Use |_.Default |_.Description |
1039
|id |ID |required | |Unique ID that allows referencing to a particular @<bml>@ behavior. The id 'bml' is reserved. |
1040
1041
|_.Sync Attribute |_.Description |
1042
|start|start of the speech |
1043
|end|end of the speech |
1044
1045
h3. Semantics @ @
1046
1047
Realization of the @<speech>@ element generates both speech audio (or text) and speech movement, for example using a speech synthesizer and viseme morphing.
1048
The @<speech>@ element requires a sub-element. This sub-element is a @<text>@ element that contains the text to be spoken, with optionally embedded @<sync>@ elements for alignment with other behaviors. 
1049
1050
h2. SSML Core Description Extension
1051
1052
The SSML description extension is of type "application/ssml+xml". Its namespace is "http://www.w3.org/2001/10/synthesis".
1053
1054
The format of the content of this extension is defined at http://www.w3.org/TR/speech-synthesis/
1055
1056
<pre><code>
1057
  <speech id="s1">
1058
     <text>Hello! This is a basic SSML <sync id="bml"/>BML test.</text>
1059
    <description priority="2" type="application/ssml+xml">
1060
      <speak xmlns="http://www.w3.org/2001/10/synthesis">        
1061
        Hello! <break time="3s"/> <prosody pitch="high">This is a basic SSML <mark name="bml"/>BML test</prosody>.
1062
      </speak>
1063
    </description>
1064
  </speech>
1065
</code></pre>
1066
_Example: Using the SSML Description extension for speech_
1067
1068
h2. MaryXML Core Description Extension
1069
1070
The MaryXML description extension is of type "maryxml". Its namespace is "http://mary.dfki.de/2002/MaryXML". It allows one to specify more detail for the TTS engine, if one uses [[http://mary.dfki.de MaryTTS]] for speech generation.
1071
1072
The format of the content of this extension is defined at http://mary.dfki.de/documentation/maryxml
1073
1074
<pre><code>
1075
  <speech id="s1">
1076
     <text>Hello! This is a basic Mary <sync id="bml"/>BML test.</text>
1077
    <description priority="2" type="maryxml">
1078
      <maryxml xmlns="http://mary.dfki.de/2002/MaryXML">
1079
        Hello! This is a basic Mary <mark name="bml"/>BML test.
1080
      </maryxml>    
1081
    </description>
1082
  </speech>
1083
</code></pre>
1084
_Example: Using the MaryXML Description extension for speech. Only works when one uses MaryTTS for speech generation._
1085
1086
h1. Description extensions and other extension mechanisms 
1087
1088
The core BML behavior elements are by no means comprehensive, and much of the ongoing work behind BML involves identifying and defining a broad and flexible library of behavior (types). Implementors are encouraged to explore new behavior elements and more detailed ways to specify existing core behaviors. BML allows such extensions in several ways:
1089
1090
* Additional behaviors should be designed as new XML elements using custom XML namespaces.
1091
* Specialized attributes can be used to extend core BML behaviors. Such attributes should be identified as non-standard BML by utilizing XML namespaces.
1092
* Behavior Description Extensions provide a principled way of specifying core BML behaviors in a more detailed manner, typically using existing XML languages for that specific behavior.
1093
1094 3 Michelangelo Diamanti
!https://projects.cs.ru.is/attachments/download/1155/Extension.png!
1095 1 Michelangelo Diamanti
_Figure 5: Extending BML_
1096
1097
The following example utilizes a customized @animation@ behavior and a customized @joint-speeds@ attribute. The latter specifies the core gaze behavior in a more detailed manner. Both extensions are from the SmartBody project.
1098
1099
<pre><code>
1100
  <bml xmlns="http://www.bml-initiative.org/bml/bml-1.0" xmlns:sbm="http://www.smartbody-anim.org/sbm">
1101
     <gaze id="gaze1"  target="AUDIENCE" sbm:joint-speeds="100 100 100 300 600"/>
1102
     <sbm:animation name="CrossedArms_RArm_beat"/>   
1103
  </bml>
1104
</code></pre>
1105
_Example: Using extensions_
1106
1107
If a realizer cannot interpret extended BML, it should deal with it in the way suggested in the Section [[Wiki#Failure-and-Fallback|Failure and Fallback]].
1108
1109
h2. Behavior Description Extensions
1110
1111
BML allows for additional behavior descriptions that go beyond the core BML behavior specification in describing the form of a behavior. Additional descriptions are embedded within a behavior element as children elements of the type description. The type attribute of the description element should identify the type of content, indicating how it should be interpreted. Even if additional descriptions are included in a behavior, the core attributes of the behavior element itself cannot be omitted since the core specification is always the default fall-back.
1112
1113
Description elements in BML can include existing representation languages such as SSML, Tobi, etc. or new languages can be created that make use of advanced realization capabilities. Each description element should be a self-contained description of a behavior because a behavior realizer may not know how to combine multiple behavior descriptions. It is required that each description provides exactly the same synchronization points as its accompanying core BML. It is however allowed to place the synchronization points in the description extension at slightly different positions than those in the core BML. This can be used to, for example, to provide synchronization at syllable level rather than a word level in a description extension of a speech behavior.
1114
1115
If a realizer does not known how to interpret the available description types, it should default to the core behavior.
1116
1117
If multiple description elements are given, and a realizer is capable of interpreting more than one, the realizer should use the highest priority description.
1118
1119
Example: use an audio file to play back this speech behavior. If that's not supported, use SSML. As a last resort, fall back to the core behavior. Note that the descriptions specify the same sync points as the core behavior.
1120
1121
<pre><code>
1122
  <speech id="s1">
1123
     <text>This is the proposed BML <sync id="tm1"/> extended speech specification.</text>
1124
     <description priority="1" type="application/ssml+xml">
1125
        <ssml:speak xmlns:ssml="http://www.w3.org/2001/10/synthesis">
1126
        This is the <ssml:emphasis>proposed</ssml:emphasis>  BML  <ssml:mark name=”tm1”/> extended speech specification.
1127
        </ssml:speak>
1128
     </description>
1129
     <description priority="3" type="audio/x-wav">
1130
        <audio:sound xmlns:audio="http://www.ouraudiodesc.com/">
1131
          <audio:file ref="bml.wav"/>
1132
          <audio:sync id="tm1" time="2.3" />
1133
        </audio:sound>
1134
     </description>
1135
  </speech>
1136
</code></pre>
1137
_Example: Using description extensions for speech_
1138
1139
1140
<pre><code>
1141
  <speech id="s1">
1142
     <text>This is the proposed BML <sync id="tm1"/> extended speech specification.</text>
1143
     <description priority="1" type="application/ssml+xml">
1144
        <speak xmlns="http://www.w3.org/2001/10/synthesis">
1145
        This is the <emphasis>proposed</emphasis>  BML  <mark name=”tm1”/> extended speech specification.
1146
        </speak>
1147
     </description>
1148
     <description priority="3" type="audio/x-wav">
1149
        <sound xmlns="http://www.ouraudiodesc.com/">
1150
          <file ref="bml.wav"/>
1151
          <sync id="tm1" time="2.3" />
1152
        </sound>
1153
     </description>
1154
  </speech>
1155
</code></pre>
1156
_Example: A slightly less verbose example of the same behavior, using default namespaces for audio and SSML._
1157
1158
h1. Failure and Fallback
1159
1160
When a realizer is unable to interpret or execute part of a @<bml>@ block, it should deal with it in the following ways.
1161
1162
*  if unable to execute @<required>@ block: drop complete @<bml>@ block; send warning feedback
1163
*  if unable to execute a behavior child: drop behavior, send warning feedback
1164
*  if unable to adhere to a constraint specified in an attribute in a behavior child: drop behavior, send warning feedback
1165
*  if unable to *interpret* a description extension: fallback to lower priority description extension, or to core behavior
1166
*  if unable to *interpret* extended behaviors: drop behavior, send warning feedback
1167
*  if unable to *interpret* extended attributes: drop attribute, send warning feedback
1168
1169
h1. Feedback
1170
1171
A BML realizer should provide a behavior planner with various types of feedback. Progress feedback gives information on the execution status of ongoing behaviors. Prediction feedback provides the "scheduling solution" of behaviors, such as the expected timing of sync points. Warning feedback indicates that the execution or scheduling of some behavior(s) failed, or that some time constraints could not be achieved.
1172
1173
h2.  Prediction feedback  
1174
1175
Prediction feedback provides information about the expected realization of the @<bml>@ request. It consists of block prediction, and behavior prediction feedback. Block prediction feedback contains information on the global start and end time of a block. Behavior prediction feedback contains information on the local timing of all sync points of the behavior. 
1176
1177
Prediction feedback may be revised -- later feedback counts as a 'revision' overriding all previous prediction feedback concerning the same @<bml>@ block or the same behavior element.
1178
1179
    |*What:*         |Prediction feedback. |
1180
    |*Status:*        |Optional. |
1181
    |*XML namespace:* |http://www.bml-initiative.org/bml/bml-1.0 |
1182
1183
h3. Syntax @ @
1184
1185
The syntax is similar to that of the BML blocks. The prediction feedback is wrapped into a @<predictionFeedback>@ element, which has an optional @characterId@ attribute indicating the ID of the character.
1186
1187
<pre><code>
1188
<predictionFeedback characterId="doctor"  (optional attribute)>
1189
  <bml id="bml1" globalStart="1" globalEnd="30"/>
1190
</predictionFeedback>
1191
</code></pre>
1192
_Example: Block prediction example_
1193
1194
<pre><code>
1195
<predictionFeedback>
1196
  <gesture id="bml1:gesture1" lexeme="BEAT" start="0" ready="1" strokeStart="3" stroke="4" strokeEnd="5" relax="6" end="7"/>
1197
</predictionFeedback>
1198
</code></pre>
1199
_Example: Behavior prediction example_
1200
1201
<pre><code>
1202
<predictionFeedback>
1203
 <speech start="0" ready="0" strokeStart="0" stroke="4" strokeEnd="4" relax="4" end="4" id="bml1:speech1">
1204
   <text>Hello <sync id="s1" time="2"/> world</text>
1205
 </speech>
1206
</predictionFeedback>
1207
</code></pre>
1208
_Example: Solution for speech, internal syncs are resolved by a time attribute in the sync tag._
1209
1210
<pre><code>
1211
<predictionFeedback>
1212
  <gesture id="bml1:gesture1" type="LEXICALIZED" lexeme="CUSTOM_LEXEME" start="0" ready="0" strokeStart="0" stroke="4" strokeEnd="4" relax="4" end="4">
1213
    <sync id="customsync1" time="3"/>
1214
  </gesture>
1215
</predictionFeedback>
1216
</code></pre>
1217
_Example: Solution for a behavior with a custom sync point. The prediction for the timing of the custom sync point is provided in an embedded the sync tag._
1218
1219
<pre><code>
1220
<predictionFeedback>
1221
  <bml id="bml1" globalStart="1" globalEnd="7"/>
1222
  <gesture id="bml1:gesture1" lexeme="BEAT" start="0" ready="1" strokeStart="3" stroke="4" strokeEnd="5" relax="6" end="7"/>
1223
  <head id="bml1:head1" lexeme="NOD" start="0" ready="1" strokeStart="3" stroke="4" strokeEnd="5" relax="6" end="7"/>
1224
</predictionFeedback>
1225
</code></pre>
1226
_Example: A prediction feedback may contain multiple behaviors or blocks._
1227
1228
h4. Shape feedback
1229
1230
The behaviors elements within a prediction feedback may be used to provide the behavior planner with information on the shape of a to be executed behavior. 
1231
For example, the BML block:
1232
<pre><code>
1233
<bml id=“bml1”>
1234
 <gesture id=“b1” lexeme=“BEAT”/>
1235
</bml>
1236
</code></pre>
1237
may result in feedback of the form:
1238
<pre><code>
1239
<predictionFeedback>
1240
   <gesture id=“b1” lexeme=“BEAT” mode=“RIGHT_HAND”
1241
         start=“0” ready=“1”  
1242
         strokeStart=“1” strokeEnd=“2” 
1243
         relax=“2” end=“3”/>
1244
</predictionFeedback>
1245
</code></pre>
1246
In addition to informing the behavior planner on the timing of gesture b1, this feedback message also informs the behavior planner that the realizer chose to execute the beat gesture with the right hand. When desired, description extensions can be employed to provide very detailed shape information.
1247
1248
h3. Semantics @ @
1249
1250
h4. Multiple revisions @ @
1251
1252
Prediction feedback may be revised -- later feedback counts as a 'revision' overriding all previous prediction feedback concerning the same @<bml>@ block or the same behavior element. As such, the feedback can be used as (potentially continually updated) predictions of the timing of behaviors. 
1253
1254
h4. Maximum information @ @
1255
1256
The BML Realizer must send information about all sync points that it does know about. If it does not know, it will leave out the sync point from the returned BML expression. 
1257
      
1258
h2. Progress feedback  
1259
1260
Provides real-time information on the progress of ongoing behavior. Consists of progress feedback on the bml block and individual sync point level.
1261
1262
    |*What:*         |Progress feedback. |
1263
    |*Status:*        |Mandatory. |
1264
    |*XML namespace:* |http://www.bml-initiative.org/bml/bml-1.0 |
1265
1266
h3. <blockProgress> 
1267
1268
Block start block start contains the following attributes:
1269
| id | ID | required | | id of the bml block synchronization to which the feedback belongs |
1270
|globalTime | float | required | | global time stamp |
1271
|characterId | ID | optional | | ID of the character to which the feedback belongs |
1272
1273
<pre><code>
1274
<blockProgress id="bml1:start" globalTime="10" characterId="doctor"/>
1275
</code></pre>
1276
_Example: block start feedback_
1277
1278
<pre><code>
1279
<blockProgress id="bml1:end" globalTime="15" characterId="doctor"/>
1280
</code></pre>
1281
_Example: block end feedback_
1282
1283
BML compliant realizers should provide progress feedback for at least the start and end of the BML block (the format for this is shown in the examples above). 
1284
Optionally, realizers might provide feedback on other time events of a BML block. For example: a realizer might indicate that it is subsiding (all behavior in the block is either ended or in a relax phase) in the following manner:
1285
<pre><code>
1286
<blockProgress id="bml1:relax" globalTime="14" characterId="doctor"/>
1287
</code></pre>
1288
1289
h3. <syncPointProgress>
1290
1291
Sync point progress feedback contains the following attributes:
1292
| id | ID | required | | full id of the sync point to which the feedback belongs |
1293
|globalTime | float | required | | global time stamp of when the sync point happened |
1294
|time | float | required | | local time stamp of when the sync point happened, relative to the block start of the corresponding @<bml>@ block |
1295
|characterId | ID | optional | | ID of the character to which the feedback belongs |
1296
1297
<pre><code>
1298
<syncPointProgress id="bml1:gesture1:stroke" time="10" globalTime="1111"/>
1299
</code></pre>
1300
_Example: sync point progress feedback_
1301
1302
h3. The order of progress feedback 
1303
1304
Some order constraints are enforced upon the sending of progress feedback:
1305
1306
* The block start feedback of a bml block should occur before all sync point progress feedback messages of all behaviors in the block.
1307
* The block end feedback of a bml block should occur after all sync point progress feedback messages of all behaviors in the block.
1308
* The sync point progress feedback of behaviors should arrive in the default order. For example, if a @start@ and @ready@ sync of a behavior occur at the same time, the sync point progress feedback of the @start@ sync should still be sent before that of the @ready@ sync.
1309
1310
h2. Warning feedback 
1311
1312
Warning feedback notifies the behavior planner that requested behaviors and/or constraints have failed to realize, and possibly led to aborting the performance.
1313
1314
It contains the following information:
1315
* bml id
1316
* warning type [BML parsing failure, no such gaze/walk/point target, impossible to schedule, realizer does not support behavior type x, realizer cannot construct behavior type x, ...]
1317
* whether the block was interrupted as a whole or the id of the behavior that failed
1318
* optional: a human-readable description of the error
1319
* optional: character id
1320
1321
1322
<pre><code>
1323
  <warningFeedback id="bml1" characterId="armandia" type="PARSING_FAILURE">
1324
      Cannot parse BML block
1325
  </warningFeedback>
1326
</code></pre>
1327
_Example: bml1 fails as a whole_
1328
1329
1330
<pre><code>
1331
  <warningFeedback id="bml1:gaze1" characterId="armandia" type="NO_SUCH_TARGET">
1332
      "doctor" is not a valid gaze target.
1333
  </warningFeedback>
1334
</code></pre>
1335
_Example: behavior gaze1 in bml1 fails_
1336
1337
The content of the warningFeedback element is left open. In the examples we show how human readable error messages could be embedded in warning feedback. Alternatively, realizers could embed a custom XML element that describes the warning in more detail.  
1338
1339
This is the list of feedback types in BML 1.0:
1340
* PARSING_FAILURE: there is an error in the syntax of the BML block
1341
* NO_SUCH_TARGET: locomotion/gaze/.. target does not exist in the world
1342
* IMPOSSIBLE_TO_SCHEDULE: the BML block contains conflicting constraints(e.g. @beh1:start=beh1:end+1@)
1343
* BEHAVIOR_TYPE_NOT_SUPPORTED: the realizer does not support a core behavior type requested in the BML block (e.g. when a realizer steer a head only avatar is asked to do a locomotion behavior)
1344
* CUSTOM_BEHAVIOR_NOT_SUPPORTED: the realizer does not support a custom (non core) behavior
1345
* CUSTOM_ATTRIBUTE_NOT_SUPPORTED: the realizer does not support a custom attribute specified on a core behavior
1346
* CANNOT_CREATE_BEHAVIOR: the realizer cannot construct a behavior (given specified time constraints and shape attributes)
1347
1348
h1. -------------------------------------------------
1349
1350
h1. Contributors
1351
1352
Over the years, a large number of people have contributed to the papers, workshops and developer meetings leading to this standard. Below, you find an (incomplete[4]) list of names. 
1353
1354
Aleksandra Cerekovic, Alex Hill, Alexis Heloir, Andrew Marshall, Ari Shapiro, Brigitte Krenn, Catherine Pelachaud, Dan Loehr, Dennis Reidsma, Hannes Högni Vilhjálmsson, Hannes Pirker, Herwin van Welbergen, James Gruber, Job Zwiers, John Borland, Jon Homer, Justine Cassell, Kristinn R. Thórisson, Marco Vala, Maurizio Mancini, Michael Kipp, Michael Krieger, Michael Neff, Michael Wißner, N. Cantelmo, N.E. Chafai, Nicolas Schulz, Paul Tepper, Prasan Samtani, Quoc Anh Le, Radek Niewiadomski, Rick van der Werf, Stacy Marsella, Stefan Kopp, Tim Bickmore, W. Lewis Johnson, Zsofia Ruttkay
1355
1356
fn4. _Feel free to suggest missing names._