{"id":6382,"date":"2025-10-02T12:17:00","date_gmt":"2025-10-02T03:17:00","guid":{"rendered":"https:\/\/blog.criware.com\/?p=6382"},"modified":"2025-10-06T23:30:19","modified_gmt":"2025-10-06T14:30:19","slug":"smooth-musical-transitions-between-levels","status":"publish","type":"post","link":"https:\/\/blog.criware.com\/index.php\/2025\/10\/02\/smooth-musical-transitions-between-levels\/","title":{"rendered":"Smooth musical transitions between levels [Part 1]"},"content":{"rendered":"<p>In this 2-part tutorial, we will see how to play an intermediary music when switching between 2 main songs. This can be used, for instance, to create a smooth transition while loading the next scene.<\/p>\n<p>To achieve this, we will use ADX\u2019s BeatSync feature and a Blueprint in UE5 to control the implementation on the game side.<\/p>\n<p>We will use the ADX LE UE SDK (version 2.04.02). If you are not familiar with it yet, ADX LE is the light edition of ADX, and the SDK can be downloaded for free here:<br \/>\n<a href=\"https:\/\/game.criware.jp\/en\/products\/adx-le_en\/\">https:\/\/game.criware.jp\/en\/products\/adx-le_en\/<\/a><\/p>\n<h5>Importing the audio files<\/h5>\n<p>First, let\u2019s prepare the sounds we will use for the music in the authoring tool AtomCraft.<br \/>\nFor this example, we will move a character between two rooms, as shown below: <\/p>\n<div style=\"width: 640px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-6382-1\" width=\"640\" height=\"360\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/10\/Smooth-Musical-Transitions-ENG_V05.mp4?_=1\" \/><a href=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/10\/Smooth-Musical-Transitions-ENG_V05.mp4\">https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/10\/Smooth-Musical-Transitions-ENG_V05.mp4<\/a><\/video><\/div>\n<p>Therefore, we need to import the following four sound materials:<br \/>\n   \u2022 <strong>ADX_BGM_A<\/strong>: the music that will play in the first room (A)<br \/>\n   \u2022 <strong>ADX_BGM_AT<\/strong>: the transition music when moving from the first room (A) to the second one (B)<br \/>\n   \u2022 <strong>ADX_BGM_B<\/strong>: the music that will play in the second room (B)<br \/>\n   \u2022 <strong>ADX_BGM_BT<\/strong>: the transition music when moving from the second room (B) back into the first one (A)<\/p>\n<p>We import the audio files into the <strong>Material Tree<\/strong>.<\/p>\n<p>For easier management later, we store them in subfolders under the <strong>Material Root Folder<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A01-1.png\" alt=\"\" width=\"392\" height=\"284\" class=\"alignnone size-full wp-image-6385\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A01-1.png 392w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A01-1-300x217.png 300w\" sizes=\"auto, (max-width: 392px) 100vw, 392px\" \/><\/p>\n<p>Since <strong>ADX_BGM_A<\/strong> and <strong>ADX_BGM_B<\/strong> should keep playing as long as the player stays in the corresponding rooms, we need to set <strong>Override Loop Information<\/strong> to <strong>True<\/strong> in the Inspector to enable loop playback.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A02-1.png\" alt=\"\" width=\"509\" height=\"345\" class=\"alignnone size-full wp-image-6386\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A02-1.png 509w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A02-1-300x203.png 300w\" sizes=\"auto, (max-width: 509px) 100vw, 509px\" \/><\/p>\n<h5>Creating the Cues<\/h5>\n<p>Since we want to use simple Cues to play the audio materials, we simply drag &#038; drop them from the Material Tree onto the Cue Sheet. This will automatically create <strong>Polyphonic Cues<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A03-1.png\" alt=\"\" width=\"424\" height=\"518\" class=\"alignnone size-full wp-image-6387\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A03-1.png 424w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A03-1-246x300.png 246w\" sizes=\"auto, (max-width: 424px) 100vw, 424px\" \/><\/p>\n<p>We just created the four Cues we needed at once.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A04-1.png\" alt=\"\" width=\"405\" height=\"265\" class=\"alignnone size-full wp-image-6388\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A04-1.png 405w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A04-1-300x196.png 300w\" sizes=\"auto, (max-width: 405px) 100vw, 405px\" \/><\/p>\n<p>We will use the <strong>BeatSync<\/strong> feature of ADX to ensure that the Cues transition smoothly (i.e., at the right time, not in the middle of a beat). To do that, in Cue\u2019s Track list, right-click and select <strong>New Object<\/strong>, then <strong>Create BeatSync Track<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A05-1.png\" alt=\"\" width=\"1279\" height=\"784\" class=\"alignnone size-full wp-image-6389\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A05-1.png 1279w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A05-1-300x184.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A05-1-1024x628.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A05-1-768x471.png 768w\" sizes=\"auto, (max-width: 1279px) 100vw, 1279px\" \/><\/p>\n<p>Select the BeatSync Track, then set the correct BPM (and signature if needed) in the Inspector.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A06-1.png\" alt=\"\" width=\"1395\" height=\"731\" class=\"alignnone size-full wp-image-6390\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A06-1.png 1395w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A06-1-300x157.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A06-1-1024x537.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A06-1-768x402.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A06-1-390x205.png 390w\" sizes=\"auto, (max-width: 1395px) 100vw, 1395px\" \/><\/p>\n<p>Create a <strong>BeatSync Label<\/strong> as well.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A07-1.png\" alt=\"\" width=\"793\" height=\"401\" class=\"alignnone size-full wp-image-6391\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A07-1.png 793w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A07-1-300x152.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A07-1-768x388.png 768w\" sizes=\"auto, (max-width: 793px) 100vw, 793px\" \/><\/p>\n<p>Repeat this process for all tracks (note that the BeatSync Labels can be reused).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A08-1.png\" alt=\"\" width=\"1284\" height=\"533\" class=\"alignnone size-full wp-image-6392\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A08-1.png 1284w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A08-1-300x125.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A08-1-1024x425.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A08-1-768x319.png 768w\" sizes=\"auto, (max-width: 1284px) 100vw, 1284px\" \/><\/p>\n<p>It is time to export the Cue Sheet! Go to the Build menu and select <strong>Build Atom CueSheet Binary<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A09-1.png\" alt=\"\" width=\"915\" height=\"259\" class=\"alignnone size-full wp-image-6393\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A09-1.png 915w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A09-1-300x85.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A09-1-768x217.png 768w\" sizes=\"auto, (max-width: 915px) 100vw, 915px\" \/><\/p>\n<p>Select the options as shown below and press Build. A new ACB file will be generated.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A10-1.png\" alt=\"\" width=\"1090\" height=\"718\" class=\"alignnone size-full wp-image-6394\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A10-1.png 1090w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A10-1-300x198.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A10-1-1024x675.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/09\/A10-1-768x506.png 768w\" sizes=\"auto, (max-width: 1090px) 100vw, 1090px\" \/><\/p>\n<p>In the second post of this tutorial, we will import the binary Cue Sheet we prepared in Unreal Engine and use Blueprints to implement smooth musical transitions!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this 2-part tutorial, we will see how to play an intermediary music when switching between 2 main songs. This<\/p>\n","protected":false},"author":2,"featured_media":6403,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[5,7,22],"tags":[],"class_list":["post-6382","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-adx","category-tutorials","category-unreal-engine"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/6382","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=6382"}],"version-history":[{"count":6,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/6382\/revisions"}],"predecessor-version":[{"id":6405,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/6382\/revisions\/6405"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media\/6403"}],"wp:attachment":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media?parent=6382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/categories?post=6382"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/tags?post=6382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}