If you create a FilePlayer with snd->fileplayer->newPlayer(), you should free it with freePlayer(). If you create a callback SoundSource with addCallbackSource(), you shouldn't free it with freePlayer() because that's for FilePlayers.
That said.. I added retain counting to the sound objects recently and now all of the freeX() functions just call
We should be using that for the callback source as well--if something else is holding a retain on it we shouldn't just free the object. I'll file this, and in the mean time you're probably okay just freeing it with realloc(). Or, hell, go ahead and use fileplayer->freePlayer() because it's actually doing the right thing. Just note that it might break in the future.
So, just to ensure, currently I have to remove source before to free it.
But saying "retain counting" do you mean that in some future release you'll implement some ref-counting with ptr-relations? That probably could be good but what cost of it will be?