{"id":6801,"date":"2024-02-01T02:39:38","date_gmt":"2024-02-01T02:39:38","guid":{"rendered":"https:\/\/tsugi-studio.com\/blog\/?p=6801"},"modified":"2024-02-27T01:43:38","modified_gmt":"2024-02-27T01:43:38","slug":"interactive-audio-with-gamesynth","status":"publish","type":"post","link":"https:\/\/tsugi-studio.com\/blog\/2024\/02\/01\/interactive-audio-with-gamesynth\/","title":{"rendered":"Interactive Audio with GameSynth"},"content":{"rendered":"<p>The patching environment of <a href=\"https:\/\/tsugi-studio.com\/web\/en\/products-gamesynth.html\">GameSynth<\/a> comes with many Control and Logic modules that are usually not found in virtual synthesizers. They allow for the creation of advanced sonic behaviors and interactive systems, for instance driven by game parameters. In this post, we will be focusing on the Logic modules.<\/p>\n<h2 class=\"tsugiblog-blackheader\" style=\"margin-top: 40px; padding: 22px 18px; max-width: 670px; background-position: right center; background-repeat: no-repeat; background-size: contain; letter-spacing: 0.05em; color: #ffffff; background-color: #000000; background-image: url('https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/header-bg1.png');\">Types of logic modules<\/h2>\n<p>The logic modules mostly handle triggers (or events) and can be grouped by category:<\/p>\n<ul>\n<li><em>Event generation<\/em>:<strong> Clock<\/strong>,<strong> Distribution<\/strong>,<strong> Gait<\/strong>,<strong> Sequencer,<\/strong> and<strong> Pattern<\/strong> send triggers periodically, randomly, or based on rules and parameters.<\/li>\n<li><em>Event filtering<\/em>: <strong>Oncer <\/strong>and <strong>Divider<\/strong> will remove events, while <strong>Retrigger <\/strong>will add some.<\/li>\n<li><em>Logic operations<\/em>: <strong>Crossings<\/strong>,<strong> Comparator<\/strong>, and<strong> Logic Gate <\/strong>evaluate their inputs and trigger events when the right conditions are met.<\/li>\n<li><em>Signal routing<\/em>:<strong> Selector<\/strong>, <strong>Switch<\/strong>, and <strong>Transitions <\/strong>will route signals to different branches of your patch based on their inputs and operating modes.<\/li>\n<li><em>Storage<\/em>: <strong>Queue <\/strong>and<strong> Stack<\/strong> can temporarily store values, making them useful to create simple algorithms.<\/li>\n<\/ul>\n<p>From dynamically re-routing modulation signals to triggering and muting sub-sections of your patches, the logic modules of GameSynth offer ways to make your sounds evolve far beyond what a regular synthesizer can provide. In the rest of this post, we will show a few use cases.<\/p>\n<h2 class=\"tsugiblog-blackheader\" style=\"margin-top: 40px; padding: 22px 18px; max-width: 670px; background-position: right center; background-repeat: no-repeat; background-size: contain; letter-spacing: 0.05em; color: #ffffff; background-color: #000000; background-image: url('https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/header-bg2.png');\">Parameter-Triggered Events<\/h2>\n<p>The <strong>Crossings<\/strong> module generates triggers when its input signal crosses specific values. This makes it easy to play different branches of a patch based on the value of a parameter.<\/p>\n<p>In the following patch, a <strong>MetaParameter<\/strong> drives several <strong>Crossings<\/strong> modules to generate a mechanical sound.<\/p>\n<ul>\n<li>All the outputs of the first <strong>Crossings<\/strong> module trigger metallic clicks. The thresholds are spaced at regular intervals, effectively allowing us to control the clicking speed via the MetaParameter\u2019s movement.<\/li>\n<li>The two other <strong>Crossings<\/strong> modules are configured as to play impact sounds when the MetaParameter reaches its minimum or maximum values.<\/li>\n<li>Finally, a <strong>Motor<\/strong> sound is played, but only when the MetaParameter is moving, thanks to the use of the <strong>Derivatives<\/strong> module, which outputs the movement\u2019s velocity.<\/li>\n<\/ul>\n<p><a class=\"litymp3\" href=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/01_Mechanism.mp4\" data-lity=\"\"><img decoding=\"async\" src=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/01_Mechanism.png\" alt=\"\" \/><\/a><\/p>\n<h2 class=\"tsugiblog-blackheader\" style=\"margin-top: 40px; padding: 22px 18px; max-width: 670px; background-position: right center; background-repeat: no-repeat; background-size: contain; letter-spacing: 0.05em; color: #ffffff; background-color: #000000; background-image: url('https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/header-bg3.png');\">Dynamically Switching Modulation Signals<\/h2>\n<p>The <strong>Selector<\/strong> lets a different control signal go through each time it is triggered. Its various modes of operation (Sequential, Random, Shuffle\u2026) help you to dynamically route your modulation signals.<\/p>\n<p>For instance, when the \u201cPitch\u201d meta-parameter of this Force Field patch reaches a specific value, some of the parameters will fade out to end the patch smoothly:<\/p>\n<ul>\n<li>The <strong>Crossings<\/strong> module will trigger the <strong>Selector<\/strong>, making it switch to its second input.<\/li>\n<li>At the same time, the <strong>Automation Curve<\/strong> connected to the second input is triggered to start the fade-out of several parameters (<em>frequency<\/em> of the <strong>EQ Filter<\/strong>, <em>duration<\/em> of the <strong>Blip<\/strong>, and <em>amplitude<\/em> of the <strong>Beam<\/strong>).<\/li>\n<li>The <strong>Crossings<\/strong> module will also switch the state of the <strong>Mute<\/strong> module, ensuring that the sound is completely cut off.<\/li>\n<\/ul>\n<p><a class=\"litymp3\" href=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/02_ForceField.mp4\" data-lity=\"\"><img decoding=\"async\" src=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/02_ForceField.png\" alt=\"\" \/><\/a><\/p>\n<p>Similarly, in the Cash Register patch below, the <strong>Selector<\/strong> module allows us to alternate between two distinct mechanical sounds, corresponding to the movements of the register.<\/p>\n<ul>\n<li>The two <strong>Envelopes<\/strong> are routed through the <strong>Selector<\/strong>, which is set to <em>Sequential<\/em> mode.<\/li>\n<li>A <strong>Switch<\/strong> module allows us to trigger them alternatively when it is activated by the <strong>Crossings <\/strong>module.<\/li>\n<li>In order to change the routing each time, the <strong>Crossings<\/strong> is also triggering the <strong>Selector<\/strong>.<\/li>\n<li>Finally, the second output of the <strong>Switch<\/strong> is used to trigger the bell of the cash register on the second movement.<\/li>\n<\/ul>\n<p><a class=\"litymp3\" href=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/03_ChasRegister.mp4\" data-lity=\"\"><img decoding=\"async\" src=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/03_ChasRegister.png\" alt=\"\" \/><\/a><\/p>\n<h2 class=\"tsugiblog-blackheader\" style=\"margin-top: 40px; padding: 22px 18px; max-width: 670px; background-position: right center; background-repeat: no-repeat; background-size: contain; letter-spacing: 0.05em; color: #ffffff; background-color: #000000; background-image: url('https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/header-bg4.png');\">Comparing signal levels<\/h2>\n<p>While the <strong>Crossings<\/strong> module is sufficient to trigger simple logic, its threshold values are fixed, and therefore it cannot perform comparisons between control signals. Instead, the <strong>Comparator<\/strong> should be used.<\/p>\n<p>This Laser patch plays a charging sound followed by a shot. The longer the charging time, the louder the shot will be.<\/p>\n<ul>\n<li>The <strong>MetaParameter<\/strong> is used as a threshold. The shot is triggered when the <strong>Envelope<\/strong> of the charging sound becomes greater than its value.<\/li>\n<li>To achieve this, the values of the <strong>Envelope<\/strong> and the <strong>MetaParameter<\/strong> are compared by the <strong>Comparator<\/strong> module (set to <em>Greater)<\/em>.<\/li>\n<li>Once the value of the <strong>Envelope<\/strong> goes higher than the value of the <strong>MetaParameter<\/strong>, the output of the <strong>Comparator<\/strong> switches to true and the shot is triggered. (Note that a <strong>Oncer<\/strong> module is used to only keep the first trigger. This is because the <strong>Comparator<\/strong> will continue to output triggers as long as the comparison remains true.)<\/li>\n<\/ul>\n<p>An additional branch &#8211; with a <strong>Thunder<\/strong> module \u2013 is triggered if the threshold is high enough. This means that the patch must meet two conditions to trigger that branch:<\/p>\n<ul>\n<li>The <strong>MetaParameter<\/strong> value must be higher than 0.85 (value provided by a <strong>Constant<\/strong> module).<\/li>\n<li>The shot must have been triggered. That is why a <strong>Logic Gate<\/strong> module set to <em>AND<\/em> is used. If the shot is triggered AND the threshold is higher than 0.85, the thunder branch will play.<\/li>\n<\/ul>\n<p><a class=\"litymp3\" href=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/04_LaserShot.mp4\" data-lity=\"\"><img decoding=\"async\" src=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/04_LaserShot.png\" alt=\"\" \/><\/a><\/p>\n<h2 class=\"tsugiblog-blackheader\" style=\"margin-top: 40px; padding: 22px 18px; max-width: 670px; background-position: right center; background-repeat: no-repeat; background-size: contain; letter-spacing: 0.05em; color: #ffffff; background-color: #000000; background-image: url('https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/header-bg5.png');\">Going further<\/h2>\n<p>The last patch is a shotgun sound with a simple reloading system. If you simply pull the trigger &#8211; using the meta-parameter of the same name -, only the mechanical sound of the weapon will be heard. But once a bullet is loaded with the \u201cPump\u201d <strong>MetaParameter<\/strong>, the shooting sound will play back. The shotgun must be reloaded with the pump after each shot.<\/p>\n<ul>\n<li>A <strong>Crossings<\/strong> module &#8211; with the \u201cTrigger\u201d <strong>MetaParameter<\/strong> as input &#8211; is used for the shot.<\/li>\n<li>Two other <strong>Crossings<\/strong> modules simulate the working of the pump as the \u201cPump\u201d <strong>MetaParameter<\/strong> is moved back and forth.<\/li>\n<li>More logic allows for the shot to be fired, but only if the pump has just been used. The <strong>Queue<\/strong> module comes in handy to store this information. The value 1 is written when the \u201cPump\u201d <strong>MetaParameter<\/strong> has been used.<\/li>\n<li>This value is read when using the Trigger <strong>MetaParameter<\/strong>. A <strong>Comparator<\/strong> checks that it is higher than 0.5. If the pump was used and the trigger was activated by the <strong>Crossings<\/strong> module, the shot is fired.<\/li>\n<li>Once the first shot has been triggered, a <strong>Mute<\/strong> module is switched to Unmuted, activating a branch with a <strong>Bullet<\/strong> module. The next time the \u201cPump\u201d <strong>MetaParameter<\/strong> is used it will also trigger the sound of a shell bouncing on the ground.<\/li>\n<\/ul>\n<p><a class=\"litymp3\" href=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/05_Shotgun.mp4\" data-lity=\"\"><img decoding=\"async\" src=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/05_Shotgun.png\" alt=\"\" \/><\/a><\/p>\n<div style=\"height: 20px;\"><\/div>\n<p>These are only a few examples of interactive patches showcasing the logic modules. Combined with the many control modules available, they offer endless possibilities to craft advanced audio behaviors in GameSynth. Download the patches and start experimenting with them, and if you need more help using these modules, do not hesitate to ask on our Discord server!<\/p>\n<p><a class=\"\" href=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2024\/01\/interactive-audio\/GameSynth_Interactive_Patches.zip\"><img decoding=\"async\" src=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2022\/04\/download-patches2023.png\" alt=\"download-patches\" \/><\/a><\/p>\n<p><a class=\"gs-learn-more\" href=\"https:\/\/tsugi-studio.com\/web\/en\/products-gamesynth.html\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2020\/06\/2020_06_Introducing-Modular-Weapons-Modules-banner-1.png\" alt=\"GameSynth\" \/><\/a><\/p>\n<p><a class=\"gs-learn-more\" href=\"https:\/\/discord.com\/invite\/hacFY2EmgF\"><img decoding=\"async\" src=\"https:\/\/tsugi-studio.com\/blog\/wp-content\/uploads\/2023\/04\/discord.png\" alt=\"discord\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The patching environment of GameSynth comes with many Control and Logic modules that are usually not found in virtual synthesizers. They allow for the<\/p>\n","protected":false},"author":1,"featured_media":6832,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,12,6],"tags":[],"class_list":["post-6801","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-procedural-audio","category-tutorial","category-gamesynth"],"_links":{"self":[{"href":"https:\/\/tsugi-studio.com\/blog\/wp-json\/wp\/v2\/posts\/6801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tsugi-studio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tsugi-studio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tsugi-studio.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tsugi-studio.com\/blog\/wp-json\/wp\/v2\/comments?post=6801"}],"version-history":[{"count":25,"href":"https:\/\/tsugi-studio.com\/blog\/wp-json\/wp\/v2\/posts\/6801\/revisions"}],"predecessor-version":[{"id":6833,"href":"https:\/\/tsugi-studio.com\/blog\/wp-json\/wp\/v2\/posts\/6801\/revisions\/6833"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tsugi-studio.com\/blog\/wp-json\/wp\/v2\/media\/6832"}],"wp:attachment":[{"href":"https:\/\/tsugi-studio.com\/blog\/wp-json\/wp\/v2\/media?parent=6801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tsugi-studio.com\/blog\/wp-json\/wp\/v2\/categories?post=6801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tsugi-studio.com\/blog\/wp-json\/wp\/v2\/tags?post=6801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}