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. The namespace for BMLT is http://hmi.ewi.utwente.nl/bmlt, we use bmlt as the prefix for that namespace throughout this document.
Used to pass parameter values to <bmlt:controller>, <bmlt:procanimation>, <bmlt:keyframe> or <bmlt:transition>.
| Attribute | Type | Use | Description |
|---|---|---|---|
| name | Name | required | parameter name |
| value | String | required | parameter value |
Describes a keyframe (or mocap) animation. Parameters can be passed using <bmlt:parameter>. The joints parameter selects the joints the animation should act upon. This is useful to substract motion on a subsection of the body from full body mocap.
| Attribute | Type | Use | Description |
|---|---|---|---|
| name | Name | required | name of the procedural animation |
<bmlt:keyframe id="v1" name="plain_rhand"> <bmlt:parameter name="joints" value="r_shoulder r_elbow r_wrist"/> </bmlt:keyframe>
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" xmlns:bmlt="http://hmi.ewi.utwente.nl/bmlt"> <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" xmlns:bmlt="http://hmi.ewi.utwente.nl/bmlt"> <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" xmlns:bmlt="http://hmi.ewi.utwente.nl/bmlt"> <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>
<bml id="bml1"> <speech id="speech1" start="5"> <text>I'm speaking BML.</text> <description priority="1" type="application/ssml+xml"> <speak xmlns="http://www.w3.org/2001/10/synthesis"> I'm <prosody pitch="high">speaking</prosody> BML. </speak> </description> </speech> </bml>
<bml id="bml1"> <speech id="speech1" start="5"> <text>I'm speaking BML.</text> <description priority="10" type="maryxml"> <maryxml xmlns="http://mary.dfki.de/2002/MaryXML"> I'm speaking BML. </maryxml> </description> </speech> </bml>