Not sure this is the right place, but I would like to some additional functions for Split and Join that have a different scaling.
ippsSplitScaled_16s32f_D2L uses a scaling that mapps -1 to 1 to Int.Min-Int.Max. Now that might be mathematically nice but it is not nice for people doing audio.
Reason 1: 0 maps to 0.0000152590219 not zero. Thus if a waveform editor changes the scale, what should be zero doesn't remain zero. Luckly 0.0f maps to 0
Reason 2: Not consistent with ippsConvert_32fxxx functions. These map 0 to 0. Thus to make the two work together I have to apply an ugly multiply and add on the vector; e.g. something like d = p*[1/2 - Min/(2*Max)] + 1/2 + Min/(2*Max)
Reason 3: No need for -1 to be in the range. There are two reasons for this. Audio is never recorded at max values, -3 dB is considered too high. Second, A/D converter hardware can become non-linear when near the top values and often employ soft cliping.
One simple thing would be to have the following scaling
pdest[n] = Min(-1, pSource[n]/(Max of Int16 = 32767)
Thus both -32768 and -32767 map to the same value.
That, and the same for 24 bit, is all I really want.
However, a soft clip might me nice. That is the map from Int16 to normalized float is (-1, 1] but if one has values, say [-10, 10], the top values are warped into the upper 3dB. This soft clip makes audio output that is mixed too loud sound much better although one would not want to create the inverse function for it.