Rough Introduction To Quartz Unreal Engine Subsystem (UE4.26)

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ส.ค. 2024
  • A quick and dirty introduction to Unreal Audio Engine's Quartz Subsystem which allows users to quantize the playback of sound sources as well as receive event delegates based on quantization data.

ความคิดเห็น • 62

  • @xewi60
    @xewi60 ปีที่แล้ว +2

    the most underrated tool in unreal imo

  • @xewi60
    @xewi60 ปีที่แล้ว +1

    i can't thank you enough for provinding us this tool, this is bread and butter for me

  • @SadowickProduction
    @SadowickProduction 3 ปีที่แล้ว +4

    Thanks Dan! Ive waited years for something like this.

    • @DanReynoldsAudio
      @DanReynoldsAudio  3 ปีที่แล้ว +5

      Woot! And this is just the beginning! ;)

  • @jnthnsvr
    @jnthnsvr 3 ปีที่แล้ว +1

    SO happy to see this! I've been following Time Synth for years now... glad to see more flexibility in the time signatures, as well. I think you just gave me the reason I need to migrate to 4.26. Thank you sir!

  • @literallyjeff
    @literallyjeff 2 ปีที่แล้ว +1

    I always think of Sea of Thieves' music system when talking about quantized & spatialized instruments.

  • @apoka101
    @apoka101 ปีที่แล้ว

    Hey bro, you saved my life, thank you very much for this video. Awesome!🥰

  • @bradicalmusic
    @bradicalmusic 2 ปีที่แล้ว

    Stoked to see all this juicy bpm access in Unreal now. Keep it up!

  • @assamaavideo4492
    @assamaavideo4492 ปีที่แล้ว

    If you need to sync gameplay to music or cues to bpm, this is the place to start. Helped me a lot, thank you!

  • @ebarkani
    @ebarkani 3 ปีที่แล้ว +1

    This is fabulous news ! Thanx for the QuickStarter - will dive right in :-)

  • @NathanSMadsen
    @NathanSMadsen 2 ปีที่แล้ว

    This is a great video, Dan! I've really enjoyed your stuff and have been getting much more into Unreal since starting my new job as well as prepping for a college course I'm teaching this Fall. Thanks dude! I hope you're well.

  • @VikasDeo
    @VikasDeo 2 ปีที่แล้ว +1

    This was so helpful, thank you for this!

  • @diffraction163
    @diffraction163 3 ปีที่แล้ว +2

    26:27 dedication. alarm going off, but a man gotta do what a man gotta do! :D

  • @ViRiXDreamcore
    @ViRiXDreamcore 2 ปีที่แล้ว

    IN UE5 and this is STILL very useful. Thanks!

  • @joeykaudio
    @joeykaudio 3 ปีที่แล้ว +1

    Very cool. I just did this in UE4 using wwise of syncing sounds to the beat so this Play Quantized is very exciting.

  • @doudar41
    @doudar41 3 ปีที่แล้ว +1

    Eager to try it out. Thanks

  • @TheWeightOfUwU
    @TheWeightOfUwU 3 ปีที่แล้ว +1

    Really cool feature, I've only just started exploring it but already I can see how powerful it is.
    One thing that tripped me up when trying to go off just the docs was the bit about having to use "Resume Clock" to start a clock after creating it. It makes sense that you'd need to explicitly tell the clock when to start, but the overview in the documentation doesn't mention this or how to do it. To me, "Resume Clock" sounds like it would be for a clock that was previously paused, so when I saw it as an option it didn't register that it would be used for starting a clock-I think I would have found "Start Clock" or "Start/Resume Clock" more intuitive.
    This isn't a complaint, mind you-this is a beta feature, and I'm an Unreal Engine novice, so some snags in getting things to work are expected-just a bit of feedback.

    • @DanReynoldsAudio
      @DanReynoldsAudio  3 ปีที่แล้ว

      Agreed. That was my feedback as well. Under the hood, it is getting paused on creation. I think that was the reasoning.

  • @mattdmatt
    @mattdmatt 3 ปีที่แล้ว

    Thanks for the share, this looks awesome, can't wait to dig in!

  • @lucaluigi3571
    @lucaluigi3571 หลายเดือนก่อน

    I wonder how to execute trigger parameter in bp’s to be in sync with my clock. I have a music system metasound and a separate metasound with the need of executing trigger parameter to play the sound. Shall I just do a play quantized that metasound and then execute parameter with some gate stuff inside metasound or maybe it is possible to execute parameter in time sync directly in blueprints. Thank you for all of your videos and sorry if this question is stupid.

  • @CortVermin
    @CortVermin 3 ปีที่แล้ว +2

    why do you consider using the ACPool array "bad practice"? seems to work fine, or is there a better way of doing this? items in the array get auto destroyed, so no building up or is there something i am missing? :)

    • @DanReynoldsAudio
      @DanReynoldsAudio  3 ปีที่แล้ว +2

      The objects the TArray are referencing get cleaned up, but the Array needs to be pruned to get rid of empty elements.
      Could probably just do that every bar or something, loop through checking for invalid refs to get rid of the elements.
      Also it's not GREAT practice to keep creating and destroying Scene Components. Ideally you'd set up a small pool that you maintained and only created new ones when you ran out.

  • @eldflaug3770
    @eldflaug3770 ปีที่แล้ว

    hei Dan :D thank you for a great video and explaining how to use quartz, this is really cool and useful! :) at 12:14 you talk about how you create and forget audio components is not a good practice.... does anyone have idea about what would be a good practice here? You talk about making Audio Component Manager. What do you mean by that? I am learning all this and really want to know how to do this

    • @eldflaug3770
      @eldflaug3770 ปีที่แล้ว

      you say at 14:56 that this is not good form, can you tell why it is not good?

  • @rayworksvr
    @rayworksvr 11 หลายเดือนก่อน

    Hi Dan, first of all I want to thank you for all Quartz and Metasounds videos you have made. They have been a great source of inspiration and help for me.
    I’m developing interactive music game and Quartz takes care of whole music system. I have slow-motion feature in game and I would like to change pitch of all audio files when slow motion happens. (slomo can be triggered any time)
    When I’m trying to change bpm of Quartz clock during runtime to match bpm of pitch shifted audio files, Unreal (5.1) crashes.
    Do you have any solution for this?

    • @DanReynoldsAudio
      @DanReynoldsAudio  11 หลายเดือนก่อน

      Definitely submit a bug report: www.unrealengine.com/en-US/support/report-a-bug

  • @eirik2712
    @eirik2712 ปีที่แล้ว

    Hi Dan or others. Works great, but is there a way to delay the beat tracking a little bit, to compensate for the intro of the song. I'm putting delay nodes after the music quantized events, but it's impractical. Can I get some pointers to edit it in the c++ code for example?

    • @DanReynoldsAudio
      @DanReynoldsAudio  ปีที่แล้ว

      In UE5, you should be able to queue a track before starting the clock.

  • @user-ej5tw3ct4q
    @user-ej5tw3ct4q 3 ปีที่แล้ว +1

    Great Job, Thanks! But how could I reset the transport next beat instead of the next bar?

    • @DanReynoldsAudio
      @DanReynoldsAudio  3 ปีที่แล้ว

      Good question, 舸. I asked for the same thing, I think that feature will make its way to 4.27.

  • @domejunky
    @domejunky 3 ปีที่แล้ว

    Have there been some changes to this API? Following along at home, and a failing to loop 8 bars - always get the last beat of the loop truncated...?

  • @thomashoys
    @thomashoys 3 ปีที่แล้ว +1

    Keep it simple Dan! :)

  • @antennatrees
    @antennatrees ปีที่แล้ว

    Hi @DanReynoldsAudio , I'm currently trying to set up Quartz to directly drive Metasounds using Quartz as the master clock using "Execute Trigger Parameter". It technically works, but the timing is pretty bad. Am I missing something obvious? It seems like Quartz and Metasounds should be connected at the hip, but so far it seems like Metasounds would much rather use its own clock and gets tripped up when taking trigger events from Quartz. Any advice would be appreciated. I've searched the forums and Googled everything I can think of, but this topic isn't ever brought up.

    • @DanReynoldsAudio
      @DanReynoldsAudio  ปีที่แล้ว +1

      Quartz integration into MetaSounds is on the road map, but currently the only thing Quartz can guarantee is that your OnPlay trigger will happen at a specific sample. I use trigger gates within the MetaSound to manage the timing of BP input after that.

    • @antennatrees
      @antennatrees ปีที่แล้ว

      @@DanReynoldsAudio Thanks for responding. The only reason I want to drive Metasounds clock from Quartz is because currently Metasounds have no output capability to trigger other logic outside of MS. So for now I'll send my sequencer logic into MS and use its internal clock while also using that same sequencer logic to drive other things outside of MS with Quartz. And then maybe every 4 bars or so send a trigger into MS to "resync" the two clocks. The timing of the two clocks is pretty darn close so resyncing every X bars hopefully won't introduce that big of a hiccup. Thanks again for the reply.

  • @jakubmichalewicz1174
    @jakubmichalewicz1174 2 ปีที่แล้ว

    hey, i have some issue with quartz when game is paused. Without pause all is fine, clock of quartz is printing my bar and beats (subscribe all quantized events), but in pause its stop printing, my loop sounds are stoping (i was set my music to UI sound, so music is stop normal, but i want make loop as you in video from subscribe function). Can u help me how i can use this when game is paused?

    • @DanReynoldsAudio
      @DanReynoldsAudio  2 ปีที่แล้ว

      If you're running Blueprint logic, you need to make sure it runs when paused also. And then make sure Quartz is not pausing either.

  • @daniillitvinenko9634
    @daniillitvinenko9634 2 ปีที่แล้ว +1

    Hey Dan, I have a strange issue when looping the sample - for some reason all iterations of the loop past the first one would never start on the 1st beat of the 1st bar, instead it remains idle and waits for the first beat of the second bar to start playing.

    • @daniillitvinenko9634
      @daniillitvinenko9634 2 ปีที่แล้ว

      If I change Make QuartzQuantizationBoundary Quantization setting to Beat instead of Bar, the new iterations land correctly, but with more and more iterations the whole thing goes off the beat.

    • @daniillitvinenko9634
      @daniillitvinenko9634 2 ปีที่แล้ว

      How to make each iteration of my BGM start independently on the 1st beat of the 1st bar every time?

  • @Calliebonker
    @Calliebonker 2 ปีที่แล้ว

    Hey Dan, I've set up my Quartz vertical layered stem loop music player. It works fine until I send the sound waves to their own individual source buses to have different effects applied to them. The stems still play correctly but there is a loud, unpleasant, high pitch glitch sound that plays at the start of the loop. Is this a bug or am I doing something wrong?

    • @DanReynoldsAudio
      @DanReynoldsAudio  2 ปีที่แล้ว

      Hard to say, maybe the Source Bus is rendering before the Quartz playback and so it's spitting out uninitialized buffer. What happens if you wait to play your Source Bus instead of playing it in advance?
      Either way, I recommend reporting it here: www.unrealengine.com/en-US/support/report-a-bug

  • @SaberRiryi
    @SaberRiryi 3 ปีที่แล้ว

    I'm having a lot of fun playing with this. I have 2 quick questions if you could possibly help me. I'm curious how you might handle playing an audio clip that doesn't start right on the beat. Like if you had an mp3 that has a bit of silence at the beginning. Would I just have to manually tweak the start time in Play Quantized and hope that I get the bars and beats lined up well enough so there's no drift by the end of the song? Also, is there any way to intentionally start the metronome ticking prior to my mp3 playing? I tried setting the start time to a negative value, but that didn't seem to work.

    • @DanReynoldsAudio
      @DanReynoldsAudio  3 ปีที่แล้ว

      I just reset the metronome for the first bar, so everything that came before was cleared.
      But I also recommend trimming your audio files so that it's easier to start them on a musical quantization boundary.

  • @steyrboy
    @steyrboy 3 ปีที่แล้ว

    Dan, with Quartz can I start a series of stems at 0% volume and ramp them upon gameplay events? This is important for us, we want the composition to play as it should, but each stem is introduced with gameplay events. With TimeSynth I had to hack it using multiple TimeSynth components... it worked.... but it feels dirty and not very future-proof.

    • @steyrboy
      @steyrboy 3 ปีที่แล้ว

      The main thing here is that each stem should have their volume ramped at the point of where they should have been if they were all started together, holding their place in time. Should the player wait 20 seconds to hit the next stem (via gameplay event), that stem should ramp volume quantized (we only ask for next bar) at the time it would have been had it been started with the main track.

  • @jaredbohlken
    @jaredbohlken 3 ปีที่แล้ว

    I'm having trouble using Quartz in a packaged build in the Shipping config on Windows. All audio stops playing and the game locks up if I try to quit. Is this a known issue? I know beta features are beta for a reason.

    • @DanReynoldsAudio
      @DanReynoldsAudio  3 ปีที่แล้ว

      I think some fixes have been made, but I don't know the release status on those or when you can expect them to come out.

    • @jaredbohlken
      @jaredbohlken 3 ปีที่แล้ว +1

      @@DanReynoldsAudio Appreciate the response! I'll keep my ear to the ground.

  • @alcibiademinel
    @alcibiademinel 2 ปีที่แล้ว

    Hi Dan,
    Is there a way to sample-accurately trigger following sound cues without using BPM, bars and beats? I'd like to go from an intro, to a loop, but with a flexible tempo ; I don't need beat sync, I just need to tell my intro is x.xxx s long and my loop is y.yyy s long (before retriggering). Is there a way to do that?
    From what I've tested with TimeSynth, it's impossible to accurately change the BPM in realtime, to match those durations...

    • @DanReynoldsAudio
      @DanReynoldsAudio  2 ปีที่แล้ว +1

      Tempo is an arbitrary construct of repeated intervals of specified time. With that said, you can set Quartz to use Seconds instead of BPM. But even if you couldn't, you could always just calculate a bpm where the time interval is x seconds long.

    • @alcibiademinel
      @alcibiademinel 2 ปีที่แล้ว

      @@DanReynoldsAudio Sure, converting time to BPM was what I tried in TimeSynth (I wasn't aware Quartz was an upgrade), but it raised 2 issues:
      1) In TymeSynth, BPM seems to be stored as an int (despite the float cursor), thus a high BPM value has to be used to be accurate enough.
      2) Since the intro and the loop has different tempo behaviors, and due to point 1), I need to change the BPM at runtime when the loop starts. I was able to have a smooth intro-loop transition, but didn't manage to have an accurate retriggering of the loop after that, because of that virtual BPM change.
      Could you point me the blueprint node I should use with Quartz (or anything else) to simply schedule 2 audio clips with a given and exact delay inbetween?

    • @DanReynoldsAudio
      @DanReynoldsAudio  2 ปีที่แล้ว

      @@alcibiademinel One of the features I asked for was quantization scheduling for BPM changes, you should be able to quantize your conductor track and use that data to adjust BPM on the fly. Otherwise, if you're playing a loop, why not loop it?

    • @alcibiademinel
      @alcibiademinel 2 ปีที่แล้ว

      @@DanReynoldsAudio Even when that feature will be implemented (or do you mean it is already?), that would be a very inconvenient workaround for doing something that should be as simple as: play A, then 7.111s later play B, then 35.354s later replay B (loop retrigger).
      At the moment, and after hours of trying with a lot of different methods, I'm still unable to do that seamlessly in UE.
      I can't set my loop as a simple cue loop because I have an intro before. It's theoretically impossible to have a seamless loop (with the end reverb tail baked at the beginning) which also transition seamlessly from the intro (the baked-in end reverb tail of the loop won't exactly fit the reverb tail of the intro)...

    • @DanReynoldsAudio
      @DanReynoldsAudio  2 ปีที่แล้ว +1

      @@alcibiademinel Firstly, it's not impossible to have a loop that seamlessly loops and works with an intro segment. I've been doing edits like that for over a decade.
      You can't schedule something on the game thread from "now" because you don't have the proper frame of reference on the game thread. A clock with a pulse and phases is the best way because then you have reference landmarks which you can schedule from.
      The quantized BPM change was implemented in 4.27.

  • @jnthnsvr
    @jnthnsvr 3 ปีที่แล้ว

    Hey Dan, is it possible to smoothly interpolate tempo changes while staying in sync?

    • @DanReynoldsAudio
      @DanReynoldsAudio  3 ปีที่แล้ว +1

      I haven't tried it yet, but I believe if you set the BPM on a quantized boundary and the music conductor is quantized on the same boundary it will be possible.
      I don't know if that update made it to 4.26.1 or if it won't be out until 4.27. But the latest Set BPM has a quantization input so you can schedule the BPM change.
      But yeah, I haven't had a chance to test against some rubato bars yet.

    • @jnthnsvr
      @jnthnsvr 3 ปีที่แล้ว

      @@DanReynoldsAudio Yep, rubato is exactly what I was thinking. I slightly lerp the pitch (and tempo) of the music based upon the player's health and some other gameplay metrics... it's a subtle effect, but one I'd love to be able to reproduce in Quartz. I poked around a little bit over the weekend but couldn't figure it out. Will keep trying - thanks!

  • @rtgchannel4154
    @rtgchannel4154 2 ปีที่แล้ว

    This video it's so bad, practicly it's start on 4:50 and goes long as crawl
    But i leave a like because i'v never heard about quartz system and it Will help me greatly, thank you!