{"id":270,"date":"2019-03-05T21:53:17","date_gmt":"2019-03-05T21:53:17","guid":{"rendered":"https:\/\/projects-old.etc.cmu.edu\/ako\/?p=270"},"modified":"2019-03-06T03:16:10","modified_gmt":"2019-03-06T03:16:10","slug":"week-7-preparing-for-halves","status":"publish","type":"post","link":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/2019\/03\/05\/week-7-preparing-for-halves\/","title":{"rendered":"Week 7: Preparing for Halves"},"content":{"rendered":"\n<p>We are at Week 7 and halves is just around the corner! As planned, we proceeded with integrating the AR and Speech modules. However, we had some major decision changes regarding the state machine in Unity.<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Choosing <g class=\"gr_ gr_22 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace\" id=\"22\" data-gr-id=\"22\">Dialogflow<\/g> functions<\/h2>\n\n\n\n<p>While Dialogflow sounded like a good option for us to use to drive the state machine logic. We also realized that it was adding complexities to our logic. Let us take a look at the following screenshot of Dialogflow.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"434\" src=\"https:\/\/projects-old.etc.cmu.edu\/ako\/wp-content\/uploads\/2019\/03\/dialogflow-screenshot-1024x434.png\" alt=\"\" class=\"wp-image-278\" srcset=\"https:\/\/projects-old.etc.cmu.edu\/ako\/wp-content\/uploads\/2019\/03\/dialogflow-screenshot-1024x434.png 1024w, https:\/\/projects-old.etc.cmu.edu\/ako\/wp-content\/uploads\/2019\/03\/dialogflow-screenshot-300x127.png 300w, https:\/\/projects-old.etc.cmu.edu\/ako\/wp-content\/uploads\/2019\/03\/dialogflow-screenshot-768x325.png 768w, https:\/\/projects-old.etc.cmu.edu\/ako\/wp-content\/uploads\/2019\/03\/dialogflow-screenshot.png 1522w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>We add a list of Intents to the <g class=\"gr_ gr_8 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace\" id=\"8\" data-gr-id=\"8\">dialogflow<\/g> to manage our contexts. However, to do a state machine logic within <g class=\"gr_ gr_9 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace\" id=\"9\" data-gr-id=\"9\">dialogflow<\/g>, we need to add follow up intents that would create a nested structure. <g class=\"gr_ gr_10 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace\" id=\"10\" data-gr-id=\"10\">Dialogflow<\/g> becomes complex to maintain when data needs to be transferred between different contexts.<br><br>Therefore, we decided to use a different mode of state management using <g class=\"gr_ gr_18 gr-alert gr_gramm gr_inline_cards gr_run_anim Grammar multiReplace\" id=\"18\" data-gr-id=\"18\">a XML<\/g> file. This file would be used to map the responses to game state, animations <g class=\"gr_ gr_19 gr-alert gr_gramm gr_inline_cards gr_run_anim Punctuation only-ins replaceWithoutSep\" id=\"19\" data-gr-id=\"19\">and<\/g> actions, speech output. Here is an expanded view of the decision tree we saw last week.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/projects-old.etc.cmu.edu\/ako\/wp-content\/uploads\/2019\/03\/expanded-decision-tree-1024x576.jpg\" alt=\"\" class=\"wp-image-279\" srcset=\"https:\/\/projects-old.etc.cmu.edu\/ako\/wp-content\/uploads\/2019\/03\/expanded-decision-tree-1024x576.jpg 1024w, https:\/\/projects-old.etc.cmu.edu\/ako\/wp-content\/uploads\/2019\/03\/expanded-decision-tree-300x169.jpg 300w, https:\/\/projects-old.etc.cmu.edu\/ako\/wp-content\/uploads\/2019\/03\/expanded-decision-tree-768x432.jpg 768w, https:\/\/projects-old.etc.cmu.edu\/ako\/wp-content\/uploads\/2019\/03\/expanded-decision-tree.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Using XML also allowed us to have added flexibility to the decision making process.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Using SSML<\/h2>\n\n\n\n<p>SSML allows us to have expressive speech content to an otherwise, robotic voice. It is done by modifying certain attributes of a voice clip from Amazon Polly. The attributes that can be modified include:<br><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Pitch<\/li><li>Rate<\/li><li>Emphasis<\/li><li>Breath<\/li><li>Timbre<\/li><\/ul>\n\n\n\n<p>Here is an example of Ako talking with SSML modifications<\/p>\n\n\n\n<figure class=\"wp-block-embed-soundcloud wp-block-embed is-type-rich is-provider-soundcloud wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class='embed-container'><iframe loading=\"lazy\" width=\"1920\" height=\"400\" scrolling=\"no\" frameborder=\"no\" src=\"https:\/\/w.soundcloud.com\/player\/?visual=true&#038;url=https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F585498666&#038;show_artwork=true&#038;maxwidth=1920&#038;maxheight=1080&#038;dnt=1&#038;secret_token=s-6ld7i\"><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p>And here is an example of Ako talking without SSML modifications<\/p>\n\n\n\n<figure class=\"wp-block-embed-soundcloud wp-block-embed is-type-rich is-provider-soundcloud wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class='embed-container'><iframe loading=\"lazy\" width=\"1920\" height=\"400\" scrolling=\"no\" frameborder=\"no\" src=\"https:\/\/w.soundcloud.com\/player\/?visual=true&#038;url=https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F585500034&#038;show_artwork=true&#038;maxwidth=1920&#038;maxheight=1080&#038;dnt=1&#038;secret_token=s-RnH1J\"><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Rigging and Animation<\/h2>\n\n\n\n<p>We also created a custom rig so that Ako can be animated for any action. Here is a demonstration of the rig. Ako has a full body and facial rig.<br><\/p>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class='embed-container'><iframe loading=\"lazy\" width=\"1920\" height=\"1080\" src=\"https:\/\/www.youtube.com\/embed\/6c-I_5SbrK0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class='embed-container'><iframe loading=\"lazy\" width=\"1920\" height=\"1080\" src=\"https:\/\/www.youtube.com\/embed\/he5YAA3HgWg?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Adding Visual Guides and Mini-Game practice modes<\/h2>\n\n\n\n<p>To add to a better learning experience, we introduced more visual guides to help reinforce the rules to the players, One major feedback from our Quarters playtest was that some people preferred having visuals compared to vocals.<br><br>We iterated on different visual UI that would focus on showing the features of the game. We also introduced a mini-game mode or practice mode that would be played after the rules part. This phase tells a player why a set of cards is set or not. It also explains the features of the card one by one so that they can absorb the differences clearly.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/dSetPFj5SoW9wWdmOt\/giphy.gif\" alt=\"\" width=\"582\" height=\"327\"\/><figcaption>An image showing the visual cues in the practice mode<\/figcaption><\/figure>\n\n\n\n<p>Integrating these features is our goal for the halves review and demo next week!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We are at Week 7 and halves is just around the corner! As planned, we proceeded with integrating the AR and Speech modules. However, we had some major decision changes regarding the state machine in Unity. Choosing Dialogflow functions While Dialogflow sounded like a good option for us to use to drive the state machine&hellip; <br \/> <a class=\"read-more\" href=\"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/2019\/03\/05\/week-7-preparing-for-halves\/\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":285,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-270","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/wp-json\/wp\/v2\/posts\/270"}],"collection":[{"href":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/wp-json\/wp\/v2\/comments?post=270"}],"version-history":[{"count":7,"href":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/wp-json\/wp\/v2\/posts\/270\/revisions"}],"predecessor-version":[{"id":288,"href":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/wp-json\/wp\/v2\/posts\/270\/revisions\/288"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/wp-json\/wp\/v2\/media\/285"}],"wp:attachment":[{"href":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/wp-json\/wp\/v2\/media?parent=270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/wp-json\/wp\/v2\/categories?post=270"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/projects-old.etc.cmu.edu\/ako\/index.php\/wp-json\/wp\/v2\/tags?post=270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}