@ -916,6 +916,32 @@ Sound LoadSoundFromWave(Wave wave)
return sound ;
}
/ / Clone sound from existing sound data , clone does not own wave data
/ / Wave data must
/ / NOTE : Wave data must be unallocated manually and will be shared across all clones
Sound LoadSoundAlias ( Sound source )
{
Sound sound = { 0 } ;
if ( source . stream . buffer - > data ! = NULL )
{
AudioBuffer * audioBuffer = LoadAudioBuffer ( AUDIO_DEVICE_FORMAT , AUDIO_DEVICE_CHANNELS , AUDIO . System . device . sampleRate , source . frameCount , AUDIO_BUFFER_USAGE_STATIC ) ;
if ( audioBuffer = = NULL )
{
TRACELOG ( LOG_WARNING , " SOUND: Failed to create buffer " ) ;
return sound ; / / early return to avoid dereferencing the audioBuffer null pointer
}
audioBuffer - > data = source . stream . buffer - > data ;
sound . frameCount = source . frameCount ;
sound . stream . sampleRate = AUDIO . System . device . sampleRate ;
sound . stream . sampleSize = 32 ;
sound . stream . channels = AUDIO_DEVICE_CHANNELS ;
sound . stream . buffer = audioBuffer ;
}
return sound ;
}
/ / Checks if a sound is ready
bool IsSoundReady ( Sound sound )
{
@ -940,6 +966,17 @@ void UnloadSound(Sound sound)
/ / TRACELOG ( LOG_INFO , " SOUND: Unloaded sound data from RAM " ) ;
}
void UnloadSoundAlias ( Sound alias )
{
/ / untrack and unload just the sound buffer , not the sample data , it is shared with the source for the alias
if ( alias . stream . buffer ! = NULL )
{
ma_data_converter_uninit ( & alias . stream . buffer - > converter , NULL ) ;
UntrackAudioBuffer ( alias . stream . buffer ) ;
RL_FREE ( alias . stream . buffer ) ;
}
}
/ / Update sound buffer with new data
void UpdateSound ( Sound sound , const void * data , int sampleCount )
{