Hi,
I am looking for some more information on the data types and conversions used when creating objects.
I have found some information in the user guide: in the "creating axo objects" part. Somewhere it was mentioned that -0x08000000 to 0x7FFFFFF (-2^27 to 2^27-1) are used to represent -64.0 to 64.0 as frac32. Is this correct?
More concretely I have a problem when multiplying a window with a sample value. It would be helpful if someone could explain exactly what is happening in gain.axo:
outlet_out= __SSAT(___SMMUL(param_amp,__SSAT(inlet_in,28)<<4)<<1,28);
Even the basics are not clear to me: how are audio samples exactly encoded? It uses a int32buffer but how does this translate to hex? To put it in other words how can you convert an audio sample, encoded as a float (-1.0 to 1.0) to the correct (int16_t, int32_t) value?
Another mystery to me is how echo.axo is using a delay line defined as:
int16_t delayline[attr_delaylength];
Are the sample values not encodes as 32 bit integers (as the int32buffer seems to suggest) ?
Another issue is the definition of parameters like frac32.s.map.ratio. Are these all converted to a -2^27 to 2^27-1 range and is the distinction only for display purposes?
In short it would be helpful if there were a more detailed user guide detailing the exact formats used, which would make it more easy to port algorithms to objects. Especially for people like me with some c/c++ experience but not much low level bit-banging ARM optimization knowledge.