舞蹈服务
舞蹈服务提供 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");