Allow reverb tail of audio track to play out when region loops

I have what I thought would be a fairly simple situation, but the other answers I looked up didn’t actually solve this problem, even though it seemed to be the exact same question.

I have a music track that I’ve set up under a Loop Region… so it loops endlessly. I have the loop region adjusted so it actually loops a measure before the track is actually over, since this is when the music should loop; the extra bar is simply a reverb tail. However, I want this reverb tail to play back even when the track loops back to the store. Currently, it just hard jumps back to the start of the loop region, which of course makes sense, but I also want that reverb tail.

Using multi instruments doesn’t change anything - it still doesn’t allow the track to finish.

Asynchronous tracks don’t solve the problem properly; I’m looking for a way to keep the track synced to the timeline.

There are more complex ways I’ve achieved this, such as by using two tracks with the same asset, overlapping them on the timeline, and just looping the second one alongside the reverb tail from the first one, but I’m hoping there’s a simpler method that doesn’t require these redundancies.

An image of what I imagine the event should look like is below:

Thanks for any help!

First things first, it’s physically impossible to do this using only synchronous instruments. By definition, a synchronous instrument is an instrument that plays the part of the waveform at the timeline playback position. Thus, if you want an instrument to play out its waveform even when the timeline playback position moves away, you want an instrument that isn’t synchronous.

That being the case, here’s some steps to get the behavior you want.

  1. Start with the event from your screenshot.
  2. Right-click the instrument at a point along its length that’s inside the loop region, and select “Split” from the context menu.
  3. You now have two instruments. Right-click on the second instrument, and select “Replace Audio with Trimmed Copy” from the context menu. This creates a new audio file that’s missing the “head” cut off by the split, and is necessary for the next step to work.
  4. Select the instrument whose audio you just replaced with a trimmed copy, then set it to async in the deck.

This results in an event that begins a new loop every time the loop region returns the playback position to the beginning of the timeline, but which plays out the tail of the second instrument every time that it does.

1 Like

Thanks a lot, Joseph, that looks like the most eloquent solution for now.

It still seems like there should be a cleaner, more inclusive way to just loop a track but include a reverb tail, but this works quite nicely for now.

Hey Joseph,
I used your steps to achieve a loop with reverb tail and it works quite well, so thank you for that. However, I noticed when the playhead crosses between the split, there’s an audible pop sound. I haven’t really found a way to mitigate this yet and was wondering if anybody knew of a solution.

Thanks

It’s likely that your new audio file does not start and end on zero crossings. Editing the audio file to include a small amount of ramping at its start and end should resolve the issue.

I went into external software and chopped it into 2 separate files at zero crossings and now things sound good. Out of curiosity, however, does FMOD Studio not have functionality to select at zero crossings within the application?

It should. I’ve added this issue to our bug tracker.

I think I found an easier solution than the one that recommends splitting; this solution avoids the problem of zero crossings altogether. Here’s what I did:

  • Added a second track of the same loop, but placed on the timeline where the loop starts over (e.g. where the tail begins)
  • Set the second track to be the one that loops

This way, the second track always loops, and the tail only plays after one full loop.

Probably easier to explain via a screenshot:

Anyways, I found this solution really useful and hope it helps somebody else! May not work for all use cases but worked for mine.

1 Like