{"id":3763,"date":"2022-07-07T14:38:57","date_gmt":"2022-07-07T05:38:57","guid":{"rendered":"https:\/\/blog.criware.com\/?p=3763"},"modified":"2024-05-21T09:56:15","modified_gmt":"2024-05-21T00:56:15","slug":"radio-voice-effect","status":"publish","type":"post","link":"https:\/\/blog.criware.com\/index.php\/2022\/07\/07\/radio-voice-effect\/","title":{"rendered":"Radio Voice Effect"},"content":{"rendered":"<p>Radio and communication effects are common in games, especially in modern military settings. In this post, we will see how to recreate a radio effect in Atom Craft and how to make it more dynamic.<\/p>\n<div class=\"wp-video\" style=\"width: 800px; display: block; margin: 40px auto;\">\n<div style=\"width: 800px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-3763-1\" width=\"800\" height=\"450\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Video-Radio-Effect.mp4?_=1\" \/><a href=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Video-Radio-Effect.mp4\">https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Video-Radio-Effect.mp4<\/a><\/video><\/div>\n<\/div>\n<h2 style=\"font-size: 150%; font-weight: bold; margin-top: 40px;\">Routing<\/h2>\n<p>DSP Busses must be created in order to route the Cues to the processing chain.\u00a0 A general \u201cVoice\u201d bus is typically created, along with dedicated sub-busses to perform the different effects needed in the game: reverberation for different locations, radio effect, inner voice effect etc.<\/p>\n<ul>\n<li>In the <strong>Mixer<\/strong> window, right-click on a blank space and create 2 new DSP Busses<\/li>\n<li>Call the first one \u201cVoice\u201d and keep it routed to the MasterOut<\/li>\n<li>Call the second one \u201cVoice Radio\u201d and route it to the Voice bus<\/li>\n<\/ul>\n<p>To be able to assign the dialogue Cues to that bus, a <strong>BusMap<\/strong> also needs to be created:<\/p>\n<ul>\n<li>In the Project Tree, select <strong>BusMap<\/strong> &gt; <strong>BusMap for Cue<\/strong> and create a new <strong>BusMap<\/strong> called \u201cVoice Radio\u201d<\/li>\n<li>In the <strong>Inspector<\/strong>, change the <em>DspBusName1<\/em> property to <em>Voice Radio<\/em><\/li>\n<li>Finally, select the <strong>Cues<\/strong> or the <strong>Cue Sheets<\/strong> of interest, and change the <em>BusMap<\/em> property in the Inspector to <em>Voice Radio<\/em><\/li>\n<\/ul>\n<p>These Cues will now be routed to the Voice Radio bus, allowing them to be processed.<\/p>\n<p style=\"text-align: center;\">\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot01-Routing.png\" alt=\"Screenshot01 Routing\" width=\"983\" height=\"609\" class=\"alignnone size-full wp-image-3769\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot01-Routing.png 983w, https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot01-Routing-300x186.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot01-Routing-768x476.png 768w\" sizes=\"auto, (max-width: 983px) 100vw, 983px\" \/>\n<\/p>\n<h2 style=\"font-size: 150%; font-weight: bold; margin-top: 40px;\">DSP Effects<\/h2>\n<p>To simulate the sound emitted by a radio, the spectral and dynamic ranges need to be reduced, and the audio degraded.<\/p>\n<ul>\n<li>In the <strong>Mixer<\/strong> window, click the <strong>+<\/strong> icon in the <strong>Effects<\/strong> section of the Voice Radio bus, and add a <strong>Bandpass<\/strong>, a <strong>Distortion<\/strong>, a <strong>32-Bands EQ<\/strong> and a <strong>Compressor<\/strong> (in that order)<\/li>\n<li>Set the <strong>Bandpass<\/strong> between 500 and 10000Hz to reduce a bit the frequency range<\/li>\n<li>For the <strong>Distortion<\/strong>, set the <em>Drive<\/em> to 24.00dB<\/li>\n<li>Then, to recreate the frequency response of a low-fi speaker, the <strong>32-Bands EQ<\/strong> should have two <strong>Bands<\/strong> of <em>Peaking<\/em> type around 1000 and 2000Hz, and two other <strong>Bands<\/strong> configured as <em>LowShelf<\/em> and <em>HighShelf<\/em> around 700Hz and 4000Hz respectively<\/li>\n<li>Finally, the dynamic range will be reduced with the <strong>Compressor<\/strong>, using a <em>Threshold<\/em> set to -40dB, a <em>Ratio<\/em> set to 14, and a <em>Gain<\/em> set to 6dB<\/li>\n<\/ul>\n<p style=\"text-align: center;\">\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot02-EQ.png\" alt=\"Screenshot02 EQ\" width=\"1211\" height=\"708\" class=\"alignnone size-full wp-image-3770\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot02-EQ.png 1211w, https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot02-EQ-300x175.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot02-EQ-768x449.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot02-EQ-1024x599.png 1024w\" sizes=\"auto, (max-width: 1211px) 100vw, 1211px\" \/>\n<\/p>\n<p>The <strong>32-Bands EQ<\/strong> settings can easily be tweaked to create a frequency response that matches the devices in the game. Simply moving the peaks will instantly create a new sonic signature.<\/p>\n<p>The <strong>Distortion<\/strong> can be moved up and down the processing chain, e.g., after the <strong>EQ<\/strong> or the <strong>Compressor<\/strong>, to get different types of effects. Make sure to adjust the <em>Drive<\/em> property as the sound level may become much louder once the effect is lower in the chain.<\/p>\n<h2 style=\"font-size: 150%; font-weight: bold; margin-top: 40px;\">Dynamic Interference<\/h2>\n<p>The processing chain described above already produces a convincing radio effect that will work in most situations. It may still sound a bit too clean in some cases though. This can be improved by adding interferences to the signal, to make it sound more organic.<\/p>\n<p>To achieve this, a new Cue containing looping static noise is created and routed to a new DSP Bus (let\u2019s call it \u201cRadio Noise\u201d), itself routed to the general \u201cVoice\u201d bus.<\/p>\n<p>The noise will be played alongside the dialogue lines. By using the side-chain function of the <strong>Compressor<\/strong>, it can be driven by the voice level, thus creating dynamic interferences:<\/p>\n<ul>\n<li>On the Voice Radio bus, add an <strong>Amplitude Analyzer<\/strong> at the end of the chain<\/li>\n<li>Then, on the Radio Noise bus, add a <strong>Compressor<\/strong>.<\/li>\n<li>In the <strong>Inspector<\/strong>, change the <em>Side Chain Input<\/em> property to Voice Radio<\/li>\n<\/ul>\n<p>The <strong>Amplitude Analyzer<\/strong> is basically an envelope follower that sends the output of the Voice Radio bus directly to the <em>side chain<\/em> input of the Radio Noise <strong>Compressor<\/strong>. The <strong>Compressor<\/strong> will therefore reduce the gain of the static noise, but only when it receives a signal from the Voice Radio bus, where our dialogue is routed. The <strong>Compressor<\/strong> settings are: <em>Threshold<\/em> = -45dB, <em>Ratio<\/em> = 17, <em>Attack<\/em> = 2ms and <em>Release<\/em> = 20ms (to allow for a fast response), <em>Gain =<\/em> -1.5dB. The<em> Sidechain<\/em> input at the bottom should be set to <em>Active.<\/em><\/p>\n<p style=\"text-align: center;\">\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot03-Sidechain.png\" alt=\"Screenshot03 Sidechain\" width=\"1328\" height=\"786\" class=\"alignnone size-full wp-image-3771\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot03-Sidechain.png 1328w, https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot03-Sidechain-300x178.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot03-Sidechain-768x455.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/Screenshot03-Sidechain-1024x606.png 1024w\" sizes=\"auto, (max-width: 1328px) 100vw, 1328px\" \/>\n<\/p>\n<p>Now, when playing the static noise Cue simultaneously with the dialogue lines, the noise level is reduced whenever the character is talking, and increases back to its initial level during a silent phase.<\/p>\n<p>For this demonstration, the static noise Cue is started via <strong>Start<\/strong> and <strong>Stop Actions<\/strong> added directly to the dialogue Cues. This would of course be impracticable with a large number of dialogue Cues. Instead, it is recommended to play the noise Cue for the exact duration of a dialogue line on the programming side. By using Categories, the system can be applied to the right Cues, and will be resilient to any change that may occur to the dialogue lines.<\/p>\n<p>Download the demo project below to see the system in action!<\/p>\n<div style=\"max-width: 800px; margin: 0 auto; margin-bottom: 20px; text-align: center;\"><a style=\"display: block; border: 1px solid #ccc; padding: 20px; max-width: 100%; margin: 0 auto;\" href=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2022\/07\/AtomCraft_Project_RadioVoiceEffect.zip\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1813\" style=\"display: block; margin: 0 auto;\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2018\/06\/zip.png\" alt=\"zip\" width=\"80\" height=\"78\" \/>AtomCraft_Project_RadioVoiceEffect.zip<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Radio and communication effects are common in games, especially in modern military settings. In this post, we will see how<\/p>\n","protected":false},"author":2,"featured_media":5488,"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-3763","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\/3763","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=3763"}],"version-history":[{"count":11,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/3763\/revisions"}],"predecessor-version":[{"id":5487,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/3763\/revisions\/5487"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media\/5488"}],"wp:attachment":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media?parent=3763"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/categories?post=3763"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/tags?post=3763"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}