# Pause a sequence and lose sound when played

**URL:** <https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246>\
**Category:** Unreal Engine\
**Tags:** ue4\
**Created:** [September 7, 2022, 9:04am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246 "2022-09-07T09:04:40Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![minchul2ya](https://avatars.discourse-cdn.com/v4/letter/m/3e96dc/32.png) [@minchul2ya](https://qa.fmod.com/u/minchul2ya)\
**Post date:** [September 7, 2022, 9:04am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/1 "2022-09-07T09:04:40Z")

</div>

Unreal Version - 4.27.2  
FMOD Plugin Version - 2.02.06

Hello.

If you pause the sequence and resume it, there is a problem that the sound cannot be heard.

Reproduction methods are as follows:

1. Play the sequence containing FMOD-Event.
2. Pause the Level Sequence Player.
3. Play the Level Sequence Player.

Is there any solution?

We tried to bind the play function of FMODAudioComponent to the sequence, but in this case, the sound is not played at the sequence-editor time.

---

<div class="post-metadata">

**Author:** ![Connor\_FMOD](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/connor_fmod/32/3685_2.png) [@Connor\_FMOD](https://qa.fmod.com/u/Connor_FMOD)\
**Post date:** [September 8, 2022, 4:04am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/2 "2022-09-08T04:04:19Z")

</div>

Hi,

Currently, when you pause the sequence it will end the event instance which means it cannot be resumed from within the sequence again. I will pass this on to our development team to look into further.

Could you elaborate on what you are trying to do with the sequence that requires it to play and pause?

Thanks

---

<div class="post-metadata">

**Author:** ![minchul2ya](https://avatars.discourse-cdn.com/v4/letter/m/3e96dc/32.png) [@minchul2ya](https://qa.fmod.com/u/minchul2ya)\
**Post date:** [September 19, 2022, 7:04am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/3 "2022-09-19T07:04:58Z")

</div>

Sorry for the late confirmation.

When expressing game effect in Sequence, you should stop in the following situations:

1. Press the pause button.
2. When the app is in the background

Do you need any more information?  
Thanks.

---

<div class="post-metadata">

**Author:** ![minchul2ya](https://avatars.discourse-cdn.com/v4/letter/m/3e96dc/32.png) [@minchul2ya](https://qa.fmod.com/u/minchul2ya)\
**Post date:** [September 21, 2022, 2:44am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/4 "2022-09-21T02:44:10Z")

</div>

Is there a way around?

I wonder what direction the discussion with the development team is going.

---

<div class="post-metadata">

**Author:** ![Connor\_FMOD](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/connor_fmod/32/3685_2.png) [@Connor\_FMOD](https://qa.fmod.com/u/Connor_FMOD)\
**Post date:** [September 26, 2022, 3:01am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/5 "2022-09-26T03:01:11Z")

</div>

Thanks for sharing that.

Unfortunately, this currently isn’t possible from a sequence. This can be done on an event through a blueprint if you can get the current state of the game and pass that to the event. E.g. playing, paused, and/or in the background.

Currently, the ticket is still in our backlog.

---

<div class="post-metadata">

**Author:** ![pigeon55](https://avatars.discourse-cdn.com/v4/letter/p/bc79bd/32.png) [@pigeon55](https://qa.fmod.com/u/pigeon55)\
**Post date:** [February 21, 2023, 8:48am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/6 "2023-02-21T08:48:30Z")

</div>

Hello.  
Does this problem is fixed?

---

<div class="post-metadata">

**Author:** ![Connor\_FMOD](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/connor_fmod/32/3685_2.png) [@Connor\_FMOD](https://qa.fmod.com/u/Connor_FMOD)\
**Post date:** [February 21, 2023, 9:02pm UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/7 "2023-02-21T21:02:23Z")

</div>

Hi,

Unfortunately, there hasn’t been a fix implemented yet. The task is still in our backlog.

---

<div class="post-metadata">

**Author:** ![pigeon55](https://avatars.discourse-cdn.com/v4/letter/p/bc79bd/32.png) [@pigeon55](https://qa.fmod.com/u/pigeon55)\
**Post date:** [February 27, 2023, 2:59am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/8 "2023-02-27T02:59:17Z")

</div>

Hi, I think I solved this problem.  
Since I was using Wwise before, I referred to the Wwise code.  
It’s here.

 ![image](https://canada1.discourse-cdn.com/flex036/uploads/fmod/original/2X/7/7dd37bfe832dd55a9d650c864e746b7ddfa206e0.png)  
 ![image](https://canada1.discourse-cdn.com/flex036/uploads/fmod/original/2X/1/1c5690f44ce458559b04a007b5c28c1b1e986731.png)

---

<div class="post-metadata">

**Author:** ![Connor\_FMOD](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/connor_fmod/32/3685_2.png) [@Connor\_FMOD](https://qa.fmod.com/u/Connor_FMOD)\
**Post date:** [March 1, 2023, 4:04am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/9 "2023-03-01T04:04:45Z")

</div>

Hi,

Thank you for looking into this. Could I get the files and lines that you implemented these changes?

---

<div class="post-metadata">

**Author:** ![pigeon55](https://avatars.discourse-cdn.com/v4/letter/p/bc79bd/32.png) [@pigeon55](https://qa.fmod.com/u/pigeon55)\
**Post date:** [March 1, 2023, 4:23am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/10 "2023-03-01T04:23:41Z")

</div>

Off course.  
In the file “FMODEventControlSectionTemplate.cpp”.  
Sorry I don’t know how to upload a file, so I paste it below.

```auto
// Copyright (c), Firelight Technologies Pty, Ltd. 2012-2022.

#include "FMODEventControlSectionTemplate.h"
#include "FMODAmbientSound.h"
#include "FMODAudioComponent.h"
#include "Evaluation/MovieSceneEvaluation.h"
#include "IMovieScenePlayer.h"

struct FPlayingToken : IMovieScenePreAnimatedToken
{
    FPlayingToken(UObject &InObject)
    {
        bPlaying = false;

        if (UFMODAudioComponent *AudioComponent = Cast<UFMODAudioComponent>(&InObject))
        {
            if (IsValid(AudioComponent))
            {
                bPlaying = AudioComponent->IsPlaying();
            }
        }
    }

    virtual void RestoreState(UObject &Object, const UE::MovieScene::FRestoreStateParams& Params) override
    {
        UFMODAudioComponent *AudioComponent = CastChecked<UFMODAudioComponent>(&Object);

        if (AudioComponent)
        {
            if (bPlaying)
            {
                AudioComponent->Play();
            }
            else
            {
                AudioComponent->Stop();
            }
        }
    }

private:
    bool bPlaying;
};

struct FPlayingTokenProducer : IMovieScenePreAnimatedTokenProducer
{
    static FMovieSceneAnimTypeID GetAnimTypeID() { return TMovieSceneAnimTypeID<FPlayingTokenProducer>(); }

private:
    virtual IMovieScenePreAnimatedTokenPtr CacheExistingState(UObject &Object) const override { return FPlayingToken(Object); }
};

struct FFMODEventKeyState : IPersistentEvaluationData
{
    FKeyHandle LastKeyHandle;
    FKeyHandle InvalidKeyHandle;
};

struct FFMODEventControlExecutionToken : IMovieSceneExecutionToken
{
    FFMODEventControlExecutionToken()
        : EventControlKey(EFMODEventControlKey::Stop)
        , KeyTime(FFrameTime(0))
    {
    }

    FFMODEventControlExecutionToken(EFMODEventControlKey InEventControlKey, FFrameTime InKeyTime)
        : EventControlKey(InEventControlKey)
        , KeyTime(InKeyTime)
    {
    }

    float inline GetTimeInSeconds(const FMovieSceneContext& Context)
    {
        return (float)Context.GetFrameRate().AsSeconds(Context.GetTime());
    }

    /** Execute this token, operating on all objects referenced by 'Operand' */
    /*virtual void Execute(const FMovieSceneContext &Context, const FMovieSceneEvaluationOperand &Operand, FPersistentEvaluationData &PersistentData,
        IMovieScenePlayer &Player)
    {
        for (TWeakObjectPtr<> &WeakObject : Player.FindBoundObjects(Operand))
        {
            UFMODAudioComponent *AudioComponent = Cast<UFMODAudioComponent>(WeakObject.Get());

            if (!AudioComponent)
            {
                AFMODAmbientSound *AmbientSound = Cast<AFMODAmbientSound>(WeakObject.Get());
                AudioComponent = AmbientSound ? AmbientSound->AudioComponent : nullptr;
            }

            if (IsValid(AudioComponent))
            {
                Player.SavePreAnimatedState(*AudioComponent, FPlayingTokenProducer::GetAnimTypeID(), FPlayingTokenProducer());

                if (EventControlKey == EFMODEventControlKey::Play)
                {
                    if (AudioComponent->IsPlaying())
                    {
                        AudioComponent->Stop();
                    }

                    EFMODSystemContext::Type SystemContext =
                        (GWorld && GWorld->WorldType == EWorldType::Editor) ? EFMODSystemContext::Editor : EFMODSystemContext::Runtime;
                    AudioComponent->PlayInternal(SystemContext);
                }
                else if (EventControlKey == EFMODEventControlKey::Stop)
                {
                    AudioComponent->Stop();
                }
            }
        }
    }*/

    virtual void Execute(const FMovieSceneContext& Context, const FMovieSceneEvaluationOperand& Operand, FPersistentEvaluationData& PersistentData,
        IMovieScenePlayer& Player)
    {
        for (TWeakObjectPtr<>& WeakObject : Player.FindBoundObjects(Operand))
        {
            UFMODAudioComponent* AudioComponent = Cast<UFMODAudioComponent>(WeakObject.Get());

            if (!AudioComponent)
            {
                AFMODAmbientSound* AmbientSound = Cast<AFMODAmbientSound>(WeakObject.Get());
                AudioComponent = AmbientSound ? AmbientSound->AudioComponent : nullptr;
            }

            if (IsValid(AudioComponent))
            {
                bool isPaused = false;
                if (AudioComponent->StudioInstance)
                {
                    AudioComponent->StudioInstance->getPaused(&isPaused);
                }
                switch (Player.GetPlaybackStatus())
                {
                case EMovieScenePlayerStatus::Paused:
                {
                    if (!isPaused && AudioComponent->StudioInstance)
                    {
                        AudioComponent->StudioInstance->setPaused(true);
                    }
                    break;
                }
                case EMovieScenePlayerStatus::Stopped:
                {
                    AudioComponent->Stop();
                    break;
                }
                case EMovieScenePlayerStatus::Playing:
                {
                    const float CurrentTime = GetTimeInSeconds(Context);
                    if (!isPaused && AudioComponent->StudioInstance)
                    {
                        return;
                    }
                    else if (!AudioComponent->IsPlaying())
                    {
                        EFMODSystemContext::Type SystemContext =
                            (GWorld && GWorld->WorldType == EWorldType::Editor) ? EFMODSystemContext::Editor : EFMODSystemContext::Runtime;
                        AudioComponent->PlayInternal(SystemContext);
                    }
                    else
                    {
                        AudioComponent->StudioInstance->setPaused(false);
                    }
                    break;
                }
                }
            }
        }
    }

    EFMODEventControlKey EventControlKey;
    FFrameTime KeyTime;
};

FFMODEventControlSectionTemplate::FFMODEventControlSectionTemplate(const UFMODEventControlSection &Section)
    : ControlKeys(Section.ControlKeys)
{
}

void FFMODEventControlSectionTemplate::Evaluate(const FMovieSceneEvaluationOperand &Operand, const FMovieSceneContext &Context,
    const FPersistentEvaluationData &PersistentData, FMovieSceneExecutionTokens &ExecutionTokens) const
{
    //const bool bPlaying = Context.IsSilent() == false && Context.GetDirection() == EPlayDirection::Forwards &&
    // Context.GetRange().Size<FFrameTime>() >= FFrameTime(0) && Context.GetStatus() == EMovieScenePlayerStatus::Playing;

    //if (!bPlaying)
    //{
    // ExecutionTokens.Add(FFMODEventControlExecutionToken(EFMODEventControlKey::Stop, FFrameTime(0)));
    //}
    //else
    //{
    // TRange<FFrameNumber> PlaybackRange = Context.GetFrameNumberRange();
    // TMovieSceneChannelData<const uint8> ChannelData = ControlKeys.GetData();

    // // Find the index of the key handle that exists before this time
    // TArrayView<const FFrameNumber> Times = ChannelData.GetTimes();
    // TArrayView<const uint8> Values = ChannelData.GetValues();

    // const int32 LastKeyIndex = Algo::UpperBound(Times, PlaybackRange.GetUpperBoundValue()) - 1;
    // if (LastKeyIndex >= 0 && PlaybackRange.Contains(Times[LastKeyIndex]))
    // {
    // FFMODEventControlExecutionToken NewToken((EFMODEventControlKey)Values[LastKeyIndex], Times[LastKeyIndex]);
    // ExecutionTokens.Add(MoveTemp(NewToken));
    // }
    //}
    ExecutionTokens.Add(FFMODEventControlExecutionToken());
}

```

---

<div class="post-metadata">

**Author:** ![Connor\_FMOD](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/connor_fmod/32/3685_2.png) [@Connor\_FMOD](https://qa.fmod.com/u/Connor_FMOD)\
**Post date:** [March 1, 2023, 4:43am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/11 "2023-03-01T04:43:43Z")

</div>

Thank you for sharing those! I will pass this fix on to our development team to look into it further.

Thank you again for looking into this, we greatly appreciate it!

---

<div class="post-metadata">

**Author:** ![Richard](https://avatars.discourse-cdn.com/v4/letter/r/f0a364/32.png) [@Richard](https://qa.fmod.com/u/Richard)\
**Post date:** [September 28, 2023, 6:55am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/12 "2023-09-28T06:55:52Z")

</div>

Was there a solution to this issue? We are having the same problem and the proposed fix by pigeon55 is not working for us. While active events are being resumed, others are not played at all.

---

<div class="post-metadata">

**Author:** ![Connor\_FMOD](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/connor_fmod/32/3685_2.png) [@Connor\_FMOD](https://qa.fmod.com/u/Connor_FMOD)\
**Post date:** [October 1, 2023, 9:20pm UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/13 "2023-10-01T21:20:21Z")

</div>

Hi,

Unfortunately, the task is still in our backlog.

What version of FMOD and Unreal are you using?

---

<div class="post-metadata">

**Author:** ![Richard](https://avatars.discourse-cdn.com/v4/letter/r/f0a364/32.png) [@Richard](https://qa.fmod.com/u/Richard)\
**Post date:** [October 2, 2023, 7:30am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/14 "2023-10-02T07:30:25Z")

</div>

Ok, thats unfortunate. We are on Unreal 4.27 and FMOD Plugin version 2.02.09.

---

<div class="post-metadata">

**Author:** ![BashOrgRu](https://avatars.discourse-cdn.com/v4/letter/b/f475e1/32.png) [@BashOrgRu](https://qa.fmod.com/u/BashOrgRu)\
**Post date:** [October 30, 2023, 10:55am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/15 "2023-10-30T10:55:57Z")

</div>

Hello.  
Was this problem fixed? I have a troubles with pause in the UE 5.1. My ambient sound stops playing if sequence is paused

---

<div class="post-metadata">

**Author:** ![Connor\_FMOD](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/connor_fmod/32/3685_2.png) [@Connor\_FMOD](https://qa.fmod.com/u/Connor_FMOD)\
**Post date:** [October 31, 2023, 3:11am UTC](https://qa.fmod.com/t/pause-a-sequence-and-lose-sound-when-played/19246/16 "2023-10-31T03:11:35Z")

</div>

Hi,

Unfortunately, there hasn’t been any progress on this task. I will note your interest.

If there are any updates I will post them here.
