{"id":1279,"date":"2017-07-03T17:13:22","date_gmt":"2017-07-03T08:13:22","guid":{"rendered":"http:\/\/blog.criware.com\/?p=1279"},"modified":"2017-07-03T17:13:22","modified_gmt":"2017-07-03T08:13:22","slug":"footsteps-sound-effects-implementation-using-atomcraft","status":"publish","type":"post","link":"https:\/\/blog.criware.com\/index.php\/2017\/07\/03\/footsteps-sound-effects-implementation-using-atomcraft\/","title":{"rendered":"Footsteps Sound Effects Implementation Using AtomCraft"},"content":{"rendered":"<p><em>This post describes the implementation of surface-dependent footsteps using AtomCraft<\/em><em>.<\/em><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Introduction<\/strong><\/p>\n<p>Footsteps are some of the most common sound effects implemented in video games. In recent AAA titles, it is not uncommon to find very sophisticated systems managing hundreds of audio assets relating to different types of characters, shoes, surfaces, and movements.<\/p>\n<p>This post will teach you how to implement a basic surface-dependent footsteps system using AtomCraft.\u00a0 You will then be able to improve it based on the specific requirements of your game.<\/p>\n<p><strong>The basic knowledge<\/strong><\/p>\n<p>The main features of AtomCraft that we will be using for this implementation are listed below, with links to their respective tutorial videos. We recommend that you watch these tutorials if you are not familiar with AtomCraft yet.<\/p>\n<ul>\n<li>The Cue parameters <a href=\"https:\/\/www.youtube.com\/watch?v=cZWsCCJaqVM&amp;list=PLx6UV6537TuiL42WUz9RkwRzhx47CZOIu&amp;index=9\">Tutorial #9<\/a><\/li>\n<li>The Switch &amp; Selectors <a href=\"https:\/\/www.youtube.com\/watch?v=UBZbkA8eCFw&amp;list=PLx6UV6537TuiL42WUz9RkwRzhx47CZOIu&amp;index=19\">Tutorial #19<\/a><\/li>\n<li>The AISAC <a href=\"https:\/\/www.youtube.com\/watch?v=K6GC1_Yl7w8&amp;index=13&amp;list=PLx6UV6537TuiL42WUz9RkwRzhx47CZOIu\">Tutorial #13<\/a><\/li>\n<li>The Session Window <a href=\"https:\/\/www.youtube.com\/watch?v=UBZbkA8eCFw&amp;list=PLx6UV6537TuiL42WUz9RkwRzhx47CZOIu&amp;index=19\">Tutorial #19<\/a><\/li>\n<\/ul>\n<p><strong>The concept\u00a0<\/strong><\/p>\n<p>There are several ways to implement footsteps sound effects in a game. Here, we will show how to create a simple multi-surface system with a single Cue. It will prove itself to be very convenient when triggering the sound effects from the game side, since the programmer can always call the same Cue and simply change a parameter based on the surface the character is walking on. You can later expand on that principle to account for different type of shoes and so on\u2026<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1425\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog-Picture_Implementation-Classics-Footsteps_Diagram.png\" alt=\"Blog Picture_Implementation Classics Footsteps_Diagram\" width=\"781\" height=\"316\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog-Picture_Implementation-Classics-Footsteps_Diagram.png 781w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog-Picture_Implementation-Classics-Footsteps_Diagram-300x121.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog-Picture_Implementation-Classics-Footsteps_Diagram-768x311.png 768w\" sizes=\"auto, (max-width: 781px) 100vw, 781px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Step by Step <\/strong><\/p>\n<p><strong>Step 1- Import the Audio Files<\/strong><\/p>\n<p>The first thing to do is to import all the needed audio files as Materials, so that they can be referenced later by our Cues. We can import audio files by dragging-and-dropping them onto the Material Root folder or by using the context menu.<\/p>\n<p>Go to the Materials pane, right-click on a folder and select \u201cAdd Material (Waveform) files\u201d.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1281\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_001.png\" alt=\"Blog_FS_001\" width=\"341\" height=\"339\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_001.png 447w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_001-150x150.png 150w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_001-300x298.png 300w\" sizes=\"auto, (max-width: 341px) 100vw, 341px\" \/><\/p>\n<p>When you add audio files to an AtomCraft project, they are duplicated in one of its materials folders (we suggest that you organize your files in subfolders).<\/p>\n<p><strong>Step 2- Create the Sound Cue <\/strong><\/p>\n<p>Let\u2019s create our Cue. This Cue will be used to play all our surface-dependent footstep sound effects.<\/p>\n<p>To create a Cue: go in the Work Units section of the project tree, right-click on the desired CueSheet and select \u201cNew object\u201d. There are many different types of Cues available. Because we want to make a Cue that will change depending on the surface type, we will select a Cue of type \u201cSwitch\u201d.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1282\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_002a.png\" alt=\"Blog_FS_002a\" width=\"642\" height=\"224\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_002a.png 642w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_002a-300x105.png 300w\" sizes=\"auto, (max-width: 642px) 100vw, 642px\" \/><\/p>\n<p>It is a good time to set the Random Volume and Pitch parameters, which can still be tweaked later. Select the Master Cue Track and click on the FX1 Tab to get access to the random settings.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1283\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_002b.png\" alt=\"Blog_FS_002b\" width=\"650\" height=\"207\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_002b.png 728w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_002b-300x96.png 300w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/p>\n<p><strong>Step 3- Create the Selector<\/strong><\/p>\n<p>Selectors are variables that can take several predefined values called Selector Labels. At run-time, the cues of type Switch will check the value of a Selector and only play back the Tracks that are associated with the appropriate Selector Label.<\/p>\n<p>To create a new Selector: go to the Global Settings section in the project tree, right-click on the Selector Folder, select New Object and then click on Create Selector. We will rename the new Selector as \u201cFS_Surface\u201d.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1284\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_003.png\" alt=\"Blog_FS_003\" width=\"457\" height=\"155\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_003.png 457w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_003-300x102.png 300w\" sizes=\"auto, (max-width: 457px) 100vw, 457px\" \/><\/p>\n<p><strong>Step 4- Create the Selector Labels<\/strong><\/p>\n<p>Now we need to create different Selector Labels for each surface type. To create a Selector Label: right-click on the Selector, select New Object and then click on Create Selector Label.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1285\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_004.png\" alt=\"Blog_FS_004\" width=\"459\" height=\"104\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_004.png 459w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_004-300x68.png 300w\" sizes=\"auto, (max-width: 459px) 100vw, 459px\" \/><\/p>\n<p>Repeat this for each type of surface. For example, let\u2019s create Wood, Grass, Concrete and Dirt Selector Labels.<\/p>\n<p><strong>Step 5- Assign the Selector Labels<\/strong><\/p>\n<p>The next step is to assign each Selector Label to a different Cue Track. After creating a Track for each surface type, click on the Random\/Selector tab, then specify what Selector to use in the scroll down menu and assign a Selector Label to each Track.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1286\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_005.png\" alt=\"Blog_FS_005\" width=\"463\" height=\"151\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_005.png 484w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_005-300x98.png 300w\" sizes=\"auto, (max-width: 463px) 100vw, 463px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1287\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_006.png\" alt=\"Blog_FS_006\" width=\"465\" height=\"174\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_006.png 484w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_006-300x112.png 300w\" sizes=\"auto, (max-width: 465px) 100vw, 465px\" \/><\/p>\n<p><strong>Step 6- Create the Subsequences<\/strong><\/p>\n<p>A Subsequence has functions similar to those of a Cue. Tracks and Waveforms can be added, edited and randomized directly in the Subsequence. It is essentially a whole Cue contained within a Track.<\/p>\n<p>To add a bit more variety to the footstep sounds, each Subsequence will randomly pick a sound effect among several for a given surface. For instance, the \u201cGrass\u201d Subsequence will contain all our footstep sounds on grass.<\/p>\n<p>To create a Subsequence: right-click on a Track, select \u201cNew Object\u201d and choose \u201cCreate Sub Sequence\u201d.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1288\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_007.png\" alt=\"Blog_FS_007\" width=\"648\" height=\"259\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_007.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_007-300x120.png 300w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><\/p>\n<p><strong>Step 7- Assign the Audio Files <\/strong><\/p>\n<p>We are now ready to add our different audio files to their respective Subsequence. To open a Subsequence, double-click on it. It will look exactly like a Cue:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1451\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/07\/Blog_FS_DRAG.png\" alt=\"Blog_FS_DRAG\" width=\"876\" height=\"487\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/07\/Blog_FS_DRAG.png 1094w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/07\/Blog_FS_DRAG-300x167.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/07\/Blog_FS_DRAG-768x427.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/07\/Blog_FS_DRAG-1024x569.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/07\/Blog_FS_DRAG-800x445.png 800w\" sizes=\"auto, (max-width: 876px) 100vw, 876px\" \/><\/p>\n<p>Set the Subsequence type to Random No Repeat so that the footstep sound is chosen randomly and never played twice in a row. Finally, drag and drop all your audio files onto the timeline at once.<\/p>\n<p><strong>Step 8- Testing and fine-tuning<\/strong><\/p>\n<p>Now, to test our new Switch cue, click on the View menu and then select the Session Window.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1290\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_009.png\" alt=\"Blog_FS_009\" width=\"255\" height=\"310\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_009.png 255w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_009-247x300.png 247w\" sizes=\"auto, (max-width: 255px) 100vw, 255px\" \/><\/p>\n<p>To test the footsteps Cue, drag and drop it on the Session Window, select one of the Selector Label (i.e. surface type) and hit play to hear the result.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1291\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_010.png\" alt=\"Blog_FS_010\" width=\"461\" height=\"512\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_010.png 623w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_010-270x300.png 270w\" sizes=\"auto, (max-width: 461px) 100vw, 461px\" \/><\/p>\n<p><strong>Bonus- Using AISACs<\/strong><\/p>\n<p>If your character has different walking speeds, it could be interesting for the audio to reflect that as well. A simple way to achieve this is to use the AISAC system. For instance, we could use the pitch and volume AISACs to slightly modify the sound of our footsteps based on the character speed.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1292\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_011.png\" alt=\"Blog_FS_011\" width=\"736\" height=\"509\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_011.png 1209w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_011-300x207.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_011-768x531.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_011-1024x708.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_011-392x272.png 392w, https:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Blog_FS_011-130x90.png 130w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/p>\n<p>*You can learn more about the AISAC system in <a href=\"http:\/\/blog.criware.com\/index.php\/2016\/04\/05\/real-time-parameter-control-with-aisac\/\">this blog<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p>If you want to test an example of this implementation in AtomCraft, we have created a small project that you can download below:<\/p>\n<p><a href=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Footsteps_Project.zip\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1293 size-full\" src=\"http:\/\/blog.criware.com\/wp-content\/uploads\/2017\/06\/Logo_Zip.png\" alt=\"Logo_Zip\" width=\"134\" height=\"177\" \/><\/a><\/p>\n<p style=\"text-align: center;\">[Pease note that this project requires AtomCraft version 2.27.x or higher]\n<p>&nbsp;<\/p>\n<p>This concludes our post about <em>the implementation of footsteps in AtomCraft<\/em>. Let us know if you want to see other typical sound effect implementation examples!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post describes the implementation of surface-dependent footsteps using AtomCraft. &nbsp; Introduction Footsteps are some of the most common sound<\/p>\n","protected":false},"author":2,"featured_media":1424,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[5,7],"tags":[],"class_list":["post-1279","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-adx","category-tutorials"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/1279","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/comments?post=1279"}],"version-history":[{"count":22,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/1279\/revisions"}],"predecessor-version":[{"id":1454,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/1279\/revisions\/1454"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media\/1424"}],"wp:attachment":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media?parent=1279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/categories?post=1279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/tags?post=1279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}