I have been working with 24 bit ADC data returned from pyUSB as byte-tuples,
which I need to convert to Float32 and save, I currently do it like this:
<code>
WRAP = 2.**23
BITS24 = 2.**24
data = []
for byteN in range(0, len(dataTuple), 3):
try:
chValue = struct.unpack(">I",
struct.pack(">4b",
0,*dataTuple[byteN:byteN+3])
)[0]
except:
chValue = 0
if chValue>WRAP:
chValue = ((BITS24-chValue) / WRAP)
else:
chValue = (-chValue / WRAP)
data[thisCh].append(chValue)
return data
</code>
It is really slow...
I have not been able to come up with a trick way to do it in numpy, either.
What is really needed is a 24 bit type, or at least a type-cast ability to go
to Float32, in core; all of the latest sound cards are now 24 bit, so the
demand should be coming.
http://www.koders.com/c/fid2226C89ED85B3FF15286288F7CF31CD8647CDD79.aspx
for instance, is an LGPL C module for working with them.
Cheers,
Ray
_______________________________________________
ActivePython mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
Other options: http://listserv.ActiveState.com/mailman/listinfo/ActivePython