{"id":3226,"date":"2021-01-19T17:07:11","date_gmt":"2021-01-19T08:07:11","guid":{"rendered":"https:\/\/blog.criware.com\/?p=3226"},"modified":"2021-01-19T17:07:11","modified_gmt":"2021-01-19T08:07:11","slug":"voice-limiting-in-atom-craft","status":"publish","type":"post","link":"https:\/\/blog.criware.com\/index.php\/2021\/01\/19\/voice-limiting-in-atom-craft\/","title":{"rendered":"Voice Limiting in Atom Craft"},"content":{"rendered":"<h2 style=\"font-size: 150%; font-weight: bold; margin-top: 40px;\">Introduction<\/h2>\n<p>Voices in ADX2 refer to the raw audio playback of single waveforms. Each Voice contributes to the game\u2019s processing load, which can further increase when compression codecs and DSP effects are involved. To avoid putting too much strain on the hardware, we need to carefully control which Voices are allowed to playback. It may also be unintuitive for certain sounds to overlap, such as several lines of the same character\u2019s dialog. Let\u2019s uncover what options we have available.<\/p>\n<h2 style=\"font-size: 150%; font-weight: bold; margin-top: 40px;\">Voice Limit Groups<\/h2>\n<p>Since a Waveform essentially represents a Voice, this is the lowest level at which we can apply limiting. To limit at this level, we need to create a <b>Voice Limit Group<\/b>. In the Project Tree, right-click the respective folder \u2192 New Object \u2192 Create Voice Limit Group. We can then drag-and-drop a Cue, Track, or Waveform onto a given group to add it to the group. Doing this at higher hierarchy levels will add all subsequent child Waveforms to the group.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3227\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_1.png\" alt=\"2020-01_VoiceLimiting_1\" width=\"443\" height=\"403\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_1.png 443w, https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_1-300x273.png 300w\" sizes=\"auto, (max-width: 443px) 100vw, 443px\" \/><\/p>\n<p>\nTo set a limit, we can change the <b>Voice Limits<\/b> value in the Inspector with the group selected.\n<\/p>\n<p>\nTo access more advanced logic, we can navigate to the <b>Priority<\/b> tab in the Inspector of any Waveform within the group.\n<\/p>\n<p>\n<b>Voice Priority<\/b> determines which Voices should play or stop, with a higher value denoting higher priority.\n<\/p>\n<p>\n<b>Voice Priority Type<\/b> controls the behavior for new playback requests, where \u201clast\u201d will prioritize new requests, and \u201cfirst\u201d will prioritize older requesters.\n<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_2.png\" alt=\"2020-01_VoiceLimiting_2\" width=\"444\" height=\"196\" class=\"alignnone size-full wp-image-3230\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_2.png 444w, https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_2-300x132.png 300w\" sizes=\"auto, (max-width: 444px) 100vw, 444px\" \/><\/p>\n<h2 style=\"font-size: 150%; font-weight: bold; margin-top: 40px;\">Category Cue Limit<\/h2>\n<p>\nThe Category feature is used chiefly to group similar sounds together for mixing. For example, we might want to create different Categories for music, sound effects, and dialog to make broad-stroke changes to the mix.\n<\/p>\n<p>\nHowever, we can additionally use these Categories to set macro limiting for a given sound type. Let\u2019s first select a Category and then navigate to the <b>Priority <\/b>tab in the Inspector.\n<\/p>\n<p>\n<b>Category Cue Limit Flag <\/b>is used to turn this feature on, and the <b>Cue Limits for the Category <\/b>sets how many Cues in this Category can be played simultaneously.\n<\/p>\n<p>\nThe <b>Short Distance Priority Flag <\/b>sets whether a sound is prioritized based on distance, which is great for scenes with much ambient content.\n<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_3.png\" alt=\"2020-01_VoiceLimiting_3\" width=\"443\" height=\"335\" class=\"alignnone size-full wp-image-3231\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_3.png 443w, https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_3-300x227.png 300w\" sizes=\"auto, (max-width: 443px) 100vw, 443px\" \/><\/p>\n<h2 style=\"font-size: 150%; font-weight: bold; margin-top: 40px;\">Cue Limit<\/h2>\n<p>\nCue Limits work similar to Voice Limit Groups but only apply to a given Cue. We can find these if we select a Cue and navigate to the <b>Priority <\/b>tab in the Inspector. Like with Voice Limit Groups, we can specify the amount to limit and prioritize newer or older playback requests. These priorities can also (separately) be applied to any Category Cue Limits.\n<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_4.png\" alt=\"2020-01_VoiceLimiting_4\" width=\"444\" height=\"335\" class=\"alignnone size-full wp-image-3233\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_4.png 444w, https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_4-300x226.png 300w\" sizes=\"auto, (max-width: 444px) 100vw, 444px\" \/><\/p>\n<h2 style=\"font-size: 150%; font-weight: bold; margin-top: 40px;\">Voice Behavior<\/h2>\n<p>\nAlthough not quite the same thing as limiting, we can further optimize our game by deciding what happens when a Cue\u2019s volume reaches 0. This can be helpful in situations where we are applying distance-based attenuation. If the player can no longer hear the sound source, it often makes sense to stop processing it. We can find the <b>Voice Behavior<\/b> setting in the Inspector under the Cue heading on any Cue.\n<\/p>\n<p>\nBy default (<b>Normal<\/b>), a sound will continue playing even if it reaches 0.\n<\/p>\n<p>\n<b>Voice Stop <\/b>will simply stop the Cue when it reaches 0.\n<\/p>\n<p>\n<b>Virtual Voice <\/b>stores the parameters needed to start the Voice back from where it stopped when the volume increases again.\n<\/p>\n<p>\n<b>Virtual Voice Retrigger <\/b>starts the Voice from the beginning when the volume increases again.\n<\/p>\n<p>\nIt is worth noting that virtualization can cause synchronization issues, so it should be avoided for tightly timed music.\n<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_5.png\" alt=\"2020-01_VoiceLimiting_5\" width=\"663\" height=\"341\" class=\"alignnone size-full wp-image-3234\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_5.png 663w, https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/01\/2020-01_VoiceLimiting_5-300x154.png 300w\" sizes=\"auto, (max-width: 663px) 100vw, 663px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Voices in ADX2 refer to the raw audio playback of single waveforms. Each Voice contributes to the game\u2019s processing<\/p>\n","protected":false},"author":2,"featured_media":3236,"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-3226","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\/3226","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=3226"}],"version-history":[{"count":5,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/3226\/revisions"}],"predecessor-version":[{"id":3249,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/3226\/revisions\/3249"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media\/3236"}],"wp:attachment":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media?parent=3226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/categories?post=3226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/tags?post=3226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}