Erwähnte ich schon `numpy`?

Code: Alles auswählen
def _get_Frame(x):
global Wave
i=x*8
return = Wave[i+0]<<(0*8) | Wave[i+1]<<(1*8) | Wave[i+2]<<(2*8) | Wave[i+3]<<(3*8) | Wave[i+4]<<(4*8) | Wave[i+5]<<(5*8) | Wave[i+6]<<(6*8) | Wave[i+7]<<(7*8)
#return c_int64.from_buffer_copy(Wave, i)
def get_Sample_from_channel(Sample, Channel, Mode = -1):
#liefert das Ergebnis von der Abtastung der Kanal
global Wave
global _Mode
if Mode == -1:
Mode = _Mode
P1 = HARDWARE_MODE_TABELLE[Mode].P1
P2 = HARDWARE_MODE_TABELLE[Mode].P2
P3 = HARDWARE_MODE_TABELLE[Mode].P3
SamplesPerFrame = P2/P3
FrameX = Sample / SamplesPerFrame
SampleInFrame = Sample % SamplesPerFrame
Frame = _get_Frame(FrameX)
return Frame>>(SampleInFrame*P3 + Channel) & 1
Code: Alles auswählen
return c_int64.from_buffer_copy(Wave, i)
Wie Wandel ich denn jetzt die c_int64 denn jetzt wieder in eine Python-Zahl um?return Frame>>(SampleInFrame*P3 + Channel) & 1
TypeError: unsupported operand type(s) for >>: 'c_longlong' and 'int'
Code: Alles auswählen
def _get_Frame(x):
global Wave
i=x*8
return int(c_int64.from_buffer_copy(Wave, i).value)
Und statt jeden Frame einzeln durch ein `c_int64` zu jagen, könntest Du das komplette `Wave`-Objekt über ein `c_uint64`-Array ansprechen.
@Torsten2000: Na Du müsstest halt ein Array definieren was gross genug ist um die Daten aufzunehmen, davon dann die `from_buffer_copy()`-Methode benutzen um ein Array aus `Wave` zu machen, und kannst dann per Indexzugriff auf die einzelnen Werte zugreifen.
Code: Alles auswählen
def transform_Wave_from_8_to_64():
global Wave
temp = (c_int64 * (len(Wave)/8)) ()
for i in range(len(w)):
temp[i] = c_int64.from_buffer_copy(Wave, i*8)
Wave = temp
Code: Alles auswählen
def frames2array(frames_data):
return (c_uint64 * (len(frames_data) // 8)).from_buffer_copy(frames_data)