The BML Twente extension adds the specification of physical controllers, procedural animation, transition animations and synchronization to anticipated events to BML. It is used in the Elckerlyc realizer. Here we present a quick overview of the BMLT tags and their syntax.
Used to pass parameter values to <bmlt:controller>, <bmlt:procanimation> or <bmlt:transition>.
| Attribute | Type | Use | Description |
|---|---|---|---|
| name | Name | required | parameter name |
| value | String | required | parameter value |
Describes a physical controller behavior. Parameters can be passed to the controller using <bmlt:parameter>.
| Attribute | Type | Use | Description |
|---|---|---|---|
| class | Name | required | Java class name of the controller |
Example: enable the balance controller with pelvis height at 1.3m (resulting in a balance motion with unbend legs) and slightly increased stiffness
<bmlt:controller id="balance1" class="BalanceController" start="0" end="10"> <bmlt:parameter name="pelvisheight" value="1.3"/> <bmlt:parameter name="stiffnessmultiplier" value="1.1"/> </bmlt:controller>
Describes a procedural animations. Parameters can be passed using <bmlt:parameter>.
| Attribute | Type | Use | Description |
|---|---|---|---|
| name | Name | required | name of the procedural animation |
Example: conduct a procedural 3 beat gesture with amplitude 5.
<bmlt:procanimation id="beat1" name="3-beat" start="3"> <bmlt:parameter name="a" value="5"/> </bmlt:procanimation>
Creates a transition animation. The start and end pose of the transition are determined automatically from its surrounding motions.
| Attribute | Type | Use | Description |
|---|---|---|---|
| class | Name | required | Java class name of the transition used |
Example: create a simple slerp transition on the arm's rotations, moving from the neutral pose toward the start arm pose of the conducting gesture
<bmlt:transition id="trans1" class="SlerpTransition" start="1" end="2"> <bmlt:parameter name="joints" value="r_shoulder,r_elbow,r_wrist,l_shoulder,l_elbow,l_wrist"/> </bmlt:transition> <bmlt:procanimation id="beat1" name="3-beat" start="trans1:end"/>
We allow synchronization to external, possibly predicted events. This does not require an extension of BML, other than allowing a synchronization to reference ids that are not in the BML script. Example: link conducting beat 1, 2 and 3 of a procedural conducting to tick 1, 2 and 3 of a metronome.
<bmlt:procanimation id="conduct1" name="3-beat"/> <constraint id="c1"> <synchronize ref="conduct1:start"> <sync ref="metronome1:tick1"/> </synchronize> <synchronize ref="conduct1:beat2"> <sync ref="metronome1:tick2"/> </synchronize> <synchronize ref="conduct1:beat3"> <sync ref="metronome1:tick3"/> </synchronize> </constraint>
All BMLT behaviors can also be specified within a bmlt description extension. For example:
<gesture start="3" id="beat1" type="LEXICALIZED" lexeme="conduct-3-beat" hand="RIGHT"> <description priority="1" type="bmlt:procanimation"> <bmlt:procanimation id="beat1" name="conduct-3-beat" start="3"> <bmlt:parameter name="a" value="5"/> <bmlt:parameter name="hand" value="RIGHT"/> </bmlt:procanimation> </description> </gesture>
Some BMLT behaviors are persistent (currently just bmlt:controller). They adhere to the same persistent patterns as gaze and posture in core BML.
Example:
Specification of a persistent balance controller
<bml id="bml1"> <bmlt:controller id="balance1" class="BalanceController" start="1"/> </bml>
Each bmlt behavior can be assigned a replacement group using a bmlt:parameter. The BMLT realizer ensures that at most one behavior of each replacement group is played at the same time. The played behavior is the behavior with the most recent start time.
Example:
<bml id="bml1"> <bmlt:controller id="balance1" class="BalanceController"> <bmlt:parameter name="pelvisheight" value="1.2"/> <bmlt:parameter name="replacementgroup" value="balance"/> </bmlt:controller> <bmlt:controller id="balance1" class="BalanceController" start="4" end="8"> <bmlt:parameter name="pelvisheight" value="0.8"/> <bmlt:parameter name="replacementgroup" value="balance"/> </bmlt:controller> </bml>
Balances with stretched knees (pelvisheight = 1.2m) from time = 0 till time = 4, balances with bend knees (pelvisheight = 0.8m) from time = 4 till time = 8, then balances with stretched knees again.
bmlt behaviors can overwrite persistent core bml behaviors by using their name as replacement group:
<bml id="bml1"> <posture id="pose1" stance="standing" shape="open" part="lower"/> <bmlt:controller id="balance1" class="BalanceController" start="4"> <bmlt:parameter name="pelvisheight" value="0.6"/> <bmlt:parameter name="replacementgroup" value="posture"/> </bmlt:controller> </bml>
Example:
<bml id="bml1"> <speech id="speech1" start="5"> <text>I'm speaking BML.</text> <description priority="1" type="application/msapi+xml"> <sapi>I'm speaking <spell>BML</spell>.</sapi> </description> </speech> </bml>