舞蹈服务

舞蹈服务提供 API 调用设备 “跳舞” 的能力。作为舞蹈服务访问代理的 OrchestrationManager 对象,提供了舞蹈服务的主要 API,可通过 RobotContext 对象获取到。

OrchestrationManager orchestrationManager = aRobotContext.getSystemService(OrchestrationManager.SERVICE);

跳舞

当需要设备像人类一样跳舞时,可通过以下代码实现:

promise /* [2] */ = orchestrationManager.play(
    Uri.parse("orchestration://id/Naxi") /* [1] */)
    .progress(new ProgressCallback<PlayProgress>() {
        @Override
        public void onProgress(PlayProgress playProgress /* [3] */) {
            // 跳舞过程会多次运行至此
        }
    })
    .done(new DoneCallback<Void>() {
        @Override
        public void onDone(Void aVoid) {
            // 舞蹈跳舞之后会运行至此
        }
    })
    .fail(new FailCallback<PlayException>() {
        @Override
        public void onFail(PlayException e) {
            // 跳舞出错会运行至此
        }
    });

[1] 舞蹈的唯一标识,详见附录。

[2] 返回等待舞蹈进度与结果的异步对象,通过该对象可等待或监听进度与结果以及取消跳舞。具体用法参考 Promise

[3] 异步回调的 PlayProgress 对象描述了跳舞的进度信息,具体包括:

属性 getter 说明
PlayProgress.progress 进度信息
began:舞蹈开始
ended:舞蹈结束
playing:正在跳舞

通过指定选项,可调整跳舞的行为,通过如下代码实现:

PlayOption /* [1] */ playOption = new PlayOption.Builder(
    new Orchestration.Builder().build() /* [2] */).setOffsetTime(5000).build();
promise = orchestrationManager.play(playOption);

[1] PlayOption 对象通过 PlayOption.Builder 构建,使用说明如下:

方法 说明 默认值
Builder.constructor(orchestration) 构造时需传入已编排好的对象Orchestration
Builder.setOffsetTime(5000) 舞蹈跳过的时长,单位:毫秒 0

[2] Orchestration 对象通过 Orchestration.Builder 构建,使用说明如下:

方法 说明 默认值
Builder.constructor()
Builder.addTrack(track) 添加轨道,对象创建请见 Track
Builder.addTrackList(tracks) 添加轨道集合
Builder.setMainTrackIndex(0) 指定主轨道 0

Track 对象通过 Track.Builder 构建:使用说明如下:

方法 说明 默认值
Builder.constructor(type, segment) 构造时,指定 track 的类型以及片段,目前支持的 track 类型:"motion", "locomotion", "audio", "emotion"
Builder.setRootSegment(rootSegment) 指定片段,对象创建请见 Segment
Builder.setDescription(description) 描述信息 长度为 0 的字符串

Segment 对象通过 Segment.Builder 构建:使用说明如下:

方法 说明 默认值
Builder.constructor()
Builder.setName(name) 片段的名称 长度为 0 的字符串
Builder.setDescription(description) 片段的描述信息 长度为 0 的字符串
Builder.setLoops(loops) 循环次数,0 : 无限循环 0
Builder.setDuration(duration) 执行总时长,单位:毫秒 0
Builder.setDurationLoopOnce(durationLoopOnce) 执行一次需要的时长,单位:毫秒 0
Builder.setBlank(blank) 等待,true: 等待 false
Builder.setOption(option) 泛型,设置各轨道独有的信息。
"motion" 请见 PerformingOption
"locomotion" 请见LocomotionOption
emotion" 请见ExpressingOption

如果想构建一个片段集合,可以使用 SegmentGroup 对象,其继承 Segment,通过 SegmentGroup.Builder 构建,使用说明如下:

方法 说明 默认值
Builder.constructor()
Builder.addChildren(childrenSegment) 添加一个片段
Builder.addChildren(childSegmentGroup) 添加多个片段
Builder.addChildFirst(childrenSegment) 添加一个片段到最开始的位置
Builder.removeChild(childSegment) 移除一个片段

舞蹈列表

舞蹈名称 英文名称 ID
海草舞 Seaweed Seaweed
嘟拉舞 Dura Dura
消逝舞 Faded Faded
西哩西哩舞 Panama Panama
咖喱咖喱舞 Curry Curry
甩葱舞 IevanPolkka IevanPolkka
蜡笔小新舞 Crayon Crayon
图卡舞 TocaToca TocaToca
流行舞 Rock ModernDance
西班牙舞 Spain Flamenco
蹦蹦舞 BoomBoom BBoomBBoom
纳西舞 Naxi Naxi

附录

public static final Uri NAXI = Uri.parse("orchestration://id/Naxi");
public static final Uri BBOOM_BBOOM = Uri.parse("orchestration://id/BBoomBBoom");
public static final Uri FLAMENCO = Uri.parse("orchestration://id/Flamenco");
public static final Uri MODERN = Uri.parse("orchestration://id/Modern Dance");
public static final Uri TOCA_TOCA = Uri.parse("orchestration://id/TocaToca");
public static final Uri CRAYON = Uri.parse("orchestration://id/Crayon");
public static final Uri SEAWEED = Uri.parse("orchestration://id/Seaweed");
public static final Uri CURRY = Uri.parse("orchestration://id/Curry");
public static final Uri IEVAN_POLKKA = Uri.parse("orchestration://id/IevanPolkka");
public static final Uri PANAMA = Uri.parse("orchestration://id/Panama");
public static final Uri FADED = Uri.parse("orchestration://id/Faded");
public static final Uri DURA = Uri.parse("orchestration://id/Dura");