Added SetPlayingOffset to sf::SoundStream and sf::Music

git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1076 4e206d99-4929-0410-ac5d-dfc041789085
This commit is contained in:
laurentgom 2009-04-10 22:50:08 +00:00
parent 364b0ae9b1
commit 22c225c64f
17 changed files with 202 additions and 166 deletions

View file

@ -24,6 +24,7 @@ EXPORTS
sfMusic_SetRelativeToListener
sfMusic_SetMinDistance
sfMusic_SetAttenuation
sfMusic_SetPlayingOffset
sfMusic_GetPitch
sfMusic_GetVolume
sfMusic_GetPosition
@ -91,6 +92,7 @@ EXPORTS
sfSoundStream_SetRelativeToListener
sfSoundStream_SetMinDistance
sfSoundStream_SetAttenuation
sfSoundStream_SetPlayingOffset
sfSoundStream_SetLoop
sfSoundStream_GetPitch
sfSoundStream_GetVolume

View file

@ -24,6 +24,7 @@ EXPORTS
sfMusic_SetRelativeToListener
sfMusic_SetMinDistance
sfMusic_SetAttenuation
sfMusic_SetPlayingOffset
sfMusic_GetPitch
sfMusic_GetVolume
sfMusic_GetPosition
@ -91,6 +92,7 @@ EXPORTS
sfSoundStream_SetRelativeToListener
sfSoundStream_SetMinDistance
sfSoundStream_SetAttenuation
sfSoundStream_SetPlayingOffset
sfSoundStream_SetLoop
sfSoundStream_GetPitch
sfSoundStream_GetVolume

View file

@ -24,6 +24,7 @@ EXPORTS
sfMusic_SetRelativeToListener
sfMusic_SetMinDistance
sfMusic_SetAttenuation
sfMusic_SetPlayingOffset
sfMusic_GetPitch
sfMusic_GetVolume
sfMusic_GetPosition
@ -91,6 +92,7 @@ EXPORTS
sfSoundStream_SetRelativeToListener
sfSoundStream_SetMinDistance
sfSoundStream_SetAttenuation
sfSoundStream_SetPlayingOffset
sfSoundStream_SetLoop
sfSoundStream_GetPitch
sfSoundStream_GetVolume

View file

@ -24,6 +24,7 @@ EXPORTS
sfMusic_SetRelativeToListener
sfMusic_SetMinDistance
sfMusic_SetAttenuation
sfMusic_SetPlayingOffset
sfMusic_GetPitch
sfMusic_GetVolume
sfMusic_GetPosition
@ -91,6 +92,7 @@ EXPORTS
sfSoundStream_SetRelativeToListener
sfSoundStream_SetMinDistance
sfSoundStream_SetAttenuation
sfSoundStream_SetPlayingOffset
sfSoundStream_SetLoop
sfSoundStream_GetPitch
sfSoundStream_GetVolume

View file

@ -211,12 +211,21 @@ CSFML_API void sfMusic_SetMinDistance(sfMusic* Music, float MinDistance);
/// more the sound will be attenuated with distance from listener.
/// The default attenuation factor 1.0
///
/// \param Sound : Sound to modify
/// \param Music : Music to modify
/// \param Attenuation : New attenuation factor for the sound
///
////////////////////////////////////////////////////////////
CSFML_API void sfMusic_SetAttenuation(sfMusic* Music, float Attenuation);
////////////////////////////////////////////////////////////
/// Set the current playing position of a music
///
/// \param Music : Music to modify
/// \param TimeOffset : New playing position, expressed in seconds
///
////////////////////////////////////////////////////////////
CSFML_API void sfMusic_SetPlayingOffset(sfMusic* Music, float TimeOffset);
////////////////////////////////////////////////////////////
/// Get the pitch of a music
///

View file

@ -43,15 +43,15 @@ typedef struct
unsigned int NbSamples; ///< Number of samples pointed by Samples
} sfSoundStreamChunk;
typedef sfBool (*sfSoundStreamStartCallback)(void*); ///< Type of the callback used to start a sound stream
typedef sfBool (*sfSoundStreamGetDataCallback)(sfSoundStreamChunk*, void*); ///< Type of the callback used to get a sound stream data
typedef void (*sfSoundStreamSeekCallback)(float, void*); ///< Type of the callback used to seek in a sound stream
////////////////////////////////////////////////////////////
/// Construct a new sound stream
///
/// \param OnStart : Function called when the stream starts (can be NULL)
/// \param OnGetData : Function called when the stream needs more data (can't be NULL)
/// \param OnSeek : Function called when the stream seeks (can't be NULL)
/// \param ChannelsCount : Number of channels to use (1 = mono, 2 = stereo)
/// \param SampleRate : Sample rate of the sound (44100 = CD quality)
/// \param UserData : Data to pass to the callback functions
@ -59,8 +59,8 @@ typedef sfBool (*sfSoundStreamGetDataCallback)(sfSoundStreamChunk*, void*); ///<
/// \return A new sfSoundStream object (NULL if failed)
///
////////////////////////////////////////////////////////////
CSFML_API sfSoundStream* sfSoundStream_Create(sfSoundStreamStartCallback OnStart,
sfSoundStreamGetDataCallback OnGetData,
CSFML_API sfSoundStream* sfSoundStream_Create(sfSoundStreamGetDataCallback OnGetData,
sfSoundStreamSeekCallback OnSeek,
unsigned int ChannelsCount,
unsigned int SampleRate,
void* UserData);
@ -190,6 +190,15 @@ CSFML_API void sfSoundStream_SetMinDistance(sfSoundStream* SoundStream, float Mi
////////////////////////////////////////////////////////////
CSFML_API void sfSoundStream_SetAttenuation(sfSoundStream* SoundStream, float Attenuation);
////////////////////////////////////////////////////////////
/// Set the current playing position of a stream
///
/// \param SoundStream : Sound stream to modify
/// \param TimeOffset : New playing position, expressed in seconds
///
////////////////////////////////////////////////////////////
CSFML_API void sfSoundStream_SetPlayingOffset(sfSoundStream* SoundStream, float TimeOffset);
////////////////////////////////////////////////////////////
/// Set a stream loop state
///

View file

@ -231,6 +231,15 @@ void sfMusic_SetAttenuation(sfMusic* Music, float Attenuation)
}
////////////////////////////////////////////////////////////
/// Set the current playing position of a stream
////////////////////////////////////////////////////////////
void sfMusic_SetPlayingOffset(sfMusic* Music, float TimeOffset)
{
CSFML_CALL(Music, SetPlayingOffset(TimeOffset));
}
////////////////////////////////////////////////////////////
/// Get the pitch of a music
////////////////////////////////////////////////////////////

View file

@ -34,13 +34,13 @@ class sfSoundStreamImpl : public sf::SoundStream
{
public :
sfSoundStreamImpl(sfSoundStreamStartCallback OnStart,
sfSoundStreamGetDataCallback OnGetData,
sfSoundStreamImpl(sfSoundStreamGetDataCallback OnGetData,
sfSoundStreamSeekCallback OnSeek,
unsigned int ChannelsCount,
unsigned int SampleRate,
void* UserData) :
myStartCallback (OnStart),
myGetDataCallback(OnGetData),
mySeekCallback (OnSeek),
myUserData (UserData)
{
Initialize(ChannelsCount, SampleRate);
@ -48,14 +48,6 @@ public :
private :
virtual bool OnStart()
{
if (myStartCallback)
return myStartCallback(myUserData) == sfTrue;
else
return true;
}
virtual bool OnGetData(Chunk& Data)
{
sfSoundStreamChunk Chunk = {NULL, 0};
@ -67,21 +59,26 @@ private :
return Continue;
}
sfSoundStreamStartCallback myStartCallback;
virtual void OnSeek(float TimeOffset)
{
if (mySeekCallback)
mySeekCallback(TimeOffset, myUserData);
}
sfSoundStreamGetDataCallback myGetDataCallback;
sfSoundStreamSeekCallback mySeekCallback;
void* myUserData;
};
struct sfSoundStream
{
sfSoundStream(sfSoundStreamStartCallback OnStart,
sfSoundStreamGetDataCallback OnGetData,
sfSoundStream(sfSoundStreamGetDataCallback OnGetData,
sfSoundStreamSeekCallback OnSeek,
unsigned int ChannelsCount,
unsigned int SampleRate,
void* UserData) :
This(OnStart, OnGetData, ChannelsCount, SampleRate, UserData)
This(OnGetData, OnSeek, ChannelsCount, SampleRate, UserData)
{
}
@ -92,13 +89,13 @@ struct sfSoundStream
////////////////////////////////////////////////////////////
/// Construct a new sound stream
////////////////////////////////////////////////////////////
sfSoundStream* sfSoundStream_Create(sfSoundStreamStartCallback OnStart,
sfSoundStreamGetDataCallback OnGetData,
sfSoundStream* sfSoundStream_Create(sfSoundStreamGetDataCallback OnGetData,
sfSoundStreamSeekCallback OnSeek,
unsigned int ChannelsCount,
unsigned int SampleRate,
void* UserData)
{
return new sfSoundStream(OnStart, OnGetData, ChannelsCount, SampleRate, UserData);
return new sfSoundStream(OnGetData, OnSeek, ChannelsCount, SampleRate, UserData);
}
@ -228,6 +225,15 @@ void sfSoundStream_SetAttenuation(sfSoundStream* SoundStream, float Attenuation)
}
////////////////////////////////////////////////////////////
/// Set the current playing position of a stream
////////////////////////////////////////////////////////////
void sfSoundStream_SetPlayingOffset(sfSoundStream* SoundStream, float TimeOffset)
{
CSFML_CALL(SoundStream, SetPlayingOffset(TimeOffset));
}
////////////////////////////////////////////////////////////
/// Set a stream loop state
////////////////////////////////////////////////////////////