0
0

I’m a newbie, and I don’t know how to set up this callback. I have search for the samples, but there’s any setendcallback. I have read another topic where it says how to set up it, but it’s no clear… Can you help me on it?

Reading the help, it is no clear if this callback is called when I force a FSOUND_stream_Stop, or when the song finish playing, then is called. I mean that what i want is a callback that is fired when my song file finishes playing (reach the end of the song). Is this the appropiate callback?

thank you.

  • You must to post comments
0
0

Hi…The End callback works the way you want, I think … When a stream stops playing, this callback is called… it can be when a stream reaches the end…
When you load the stream, you can set this end callback using

FSOUND_Stream_SetEndCallback(FSOUND_STREAM *stream, FSOUND_STREAMCALLBACK callback,int userdata)…

then in the callback you can make the things you want when a stream reaches the end…

//the callback
signed char F_CALLBACKAPI callback_name(FSOUND_STREAM *stream,void *buff,int len,int param);

  • You must to post comments
0
0

thank you very much for your answer, but I get this error when compiling:

error C2664: ‘FSOUND_Stream_SetEndCallback’ : cannot convert parameter 2 from ‘signed char (struct FSOUND_STREAM *,void *,int,int)’ to ‘signed char (__cdecl *)(struct FSOUND_STREAM *,void *,int,int)’

what is (__cdecl *)???

in the .h file I have:

signed char F_CALLBACKAPI CallbackMP3_2(FSOUND_STREAM *mp32,void *buff,int len, int param);

and in the ini function of my .cpp file I have:

FSOUND_Stream_SetEndCallback(mp3_2,CallbackMP3_2,0);

and the callback in the same *cpp:

signed char F_CALLBACKAPI CMP3::CallbackMP3_2(FSOUND_STREAM *mp32,void *buff,int len, int param)
{
return 0;
}

please would you help me?? what am I doing wrong???

thanks!

  • You must to post comments
0
0

I had the same error… i think this error occurs when you are using classes… I upgraded to version 3.70, and I did this (it worked for me):

in the .h file: (cCLASS.h)
class cCLASS
{
static signed char __stdcall Callback(FSOUND_STREAM *stream,void *buff,int len,int param);
signed char __stdcall Callback_Function(FSOUND_STREAM *stream,void *buff,int len,int param);
};

/////////////////////////////////////////////////////////

in .cpp file: (cCLASS.cpp)

//setting the end callback
FSOUND_Stream_SetEndCallback(stream, (FSOUND_STREAMCALLBACK)cCLASS::Callback,(int)this);

//the static function, that will set the callback…then you can
//use the atributes of the class inside the callback

signed char __stdcall cCLASS:Callback(FSOUND_STREAM stream,void *buff,int len,int param)
{
return ((cCLASS
)param)->Callback_Function(stream, buff, len, param);
}

//and, finally, the callback function…

signed char __stdcall cCLASS::Callback_Function(FSOUND_STREAM *stream,void *buff,int len,int param)
{
//put the code of the callback here
}
I think it works …. :)

  • You must to post comments
0
0

Oh my god, it really works! that’s amazing. 😀

But now it takes me to ask another question: how was I supposed to guess all that initialitzations to set up this callback?????

I took a look to the help file, but i didn’t find anythig explaninig how to set it up, and, if i’m not wrong, there’s no sample with a callback set up. Or it is?

well, thank you very much for your help, and I propose to add this piece of topic to the help file or something like this.

  • You must to post comments
0
0

hi brett, i’m not an advanced c++ programmer, and that’s why I needed to ask in this forum. I had never seted up a callback before. What I’m only saying is that in the help file that comes with the api, there’s no example (I say example, not the prototype function). Usually, the VC++ documentation comes with examples and it’s very helpfully.

Maybe I didn’t see an exemple (if it is really in the help), but if there’s no one, I propose you to add it to the next release.

regards.

  • You must to post comments
0
0

I fought now half of the day with callbacks and can’t figure it out myself.

[i:3ua6mvla]My problem:[/i:3ua6mvla]
I want my background music to loop between the end and a point other then the beginning (after it at first played entirely from start to end).

So, I set up an endCallback function which processes:
[code:3ua6mvla]function callback(Stream: PFSoundStream; Buff: Pointer; Length, Param: Integer): ByteBool;
begin
FSOUND_Stream_Play(FSOUND_FREE,pTest_BgMusic);
fsound_stream_settime(pTest_BgMusic,startpointMs);
end;[/code:3ua6mvla]
All works fine, the stream is playing again after it ended, and the second time it plays from the desired position.

But the problem now is – there is a notable delay before it replays (about 500ms pause).

Any ideas where this comes from and – more important: how to overcome it?

I load the stream as follows:
[code:3ua6mvla]pTest_BgMusic := FSOUND_Stream_Open(PAnsiChar(filename),FSOUND_LOOP_OFF,0,0);
FSOUND_Stream_SetEndCallback(pTest_BgMusic,@callback,0);[/code:3ua6mvla]

  • You must to post comments
0
0

Besides, with Play(..) the song is played from the beginning and immediacly after this you skip the position. I’d recommend PlayEx with pause flag, SetPosition, and SetPaused when starting a song from a certain position, else there could be stutter on slow devices.

As for the callback functions: You can use static member functions, too.
I’d recommend to offer a pointer to the object as callback parameter, then cast it back to the object pointer and call some object method.

  • You must to post comments
Showing 7 results
Your Answer

Please first to submit.