x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

How to use onaudiofinished to trigger event ?

I have a method like this inside actor class:

for(int32 ni = 0; ni < Len;)
{ switch(nr){
case 0: play sound0;
propellerAudioComponent->OnAudioFinished.AddDynamic(this, &AMyclass::bools);
...
}
m_semaphore->Wait();
++ni;
}

void AMyclass::bools(){ m_semaphore->Trigger(); }

Problem is that the editor crashes when calling bools();
I want to wait until the first sound finishes then play the next sound.
Thankyou in advance.

Product Version: UE 4.15
Tags:
more ▼

asked Dec 16 '17 at 05:21 PM in C++ Programming

avatar image

BestWarrior
34 3 3 8

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

1 answer: sort voted first

Hey there, have you marked your bools function with UFUNCTION() ?

more ▼

answered Dec 16 '17 at 08:16 PM

avatar image

xlar8or
6k 161 129 304

avatar image BestWarrior Dec 16 '17 at 08:54 PM

Thankyou for your quick reply and yes, its a ufunction it works very good. If I write something else in there it works. The problem is that I dont think I can use semaphore in an actor class, only in threads.

avatar image xlar8or Dec 16 '17 at 10:30 PM

I haven't used semaphores so i can't really comment on that, but what exactly are you trying to do?

avatar image BestWarrior Dec 17 '17 at 10:22 AM

"I want to wait until the first sound finishes then play the next sound.". Anyway I will try other way.

avatar image xlar8or Dec 17 '17 at 11:43 AM

So you were trying to do an audio queue? you have a list of sounds and once one ends playing you want to play the next?

avatar image BestWarrior Dec 17 '17 at 12:25 PM

Yes, I think I found a way to do that.

avatar image xlar8or Dec 17 '17 at 01:44 PM

You just need to have an array of sounds to play and an integer that controls the current sound you are playing, when you detect that the audio has finished you increment the integer and order the next sound to play so in pseudo code it would be something like this:

 .h
 
 TArray<USound *> SoundsToPlay;
 int32 SoundIndex = 0;
 
 .cpp
 
 AMyClass::AMyClass
 
 AudioComponent->OnAudioFinished.AddDynamic(this, &AMyClass::OnAudioFinished); 
 
 AMyClass::PlaySound()
 {
     if(SoundsToPlay.IsValidIndex(SoundIndex))
     AudioComponent->PlaySound(SoundsToPlay[SoundIndex]);
 }
 
 AMyClass::OnAudioFinished()
 {
     SoundIndex++;
 
     PlaySound();
 }
avatar image BestWarrior Dec 17 '17 at 06:24 PM

Yea, thats what I have thought of. Thankyou.

(comments are locked)
10|2000 characters needed characters left
Viewable by all users
Your answer
toggle preview:

Up to 5 attachments (including images) can be used with a maximum of 5.2 MB each and 5.2 MB total.

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question