Come ottengo il massimo intero con segno firmato in Python (vale a dire SHRT_MAX in C limiti.h) ?Trova il numero intero massimo con segno firmato in python
voglio normalizzare i campioni provenienti da un singolo canale di un file *.wav
, così invece di un gruppo di interi con segno a 16 bit, voglio un po 'di carri allegorici tra 1 e -1. Ecco quello che ho (il codice pertinente è nella funzione normalized_samples()
):
def samples(clip, chan_no = 0):
# *.wav files generally come in 8-bit unsigned ints or 16-bit signed ints
# python's wave module gives sample width in bytes, so STRUCT_FMT
# basically converts the wave.samplewidth into a struct fmt string
STRUCT_FMT = { 1 : 'B',
2 : 'h' }
for i in range(clip.getnframes()):
yield struct.unpack(STRUCT_FMT[clip.getsampwidth()] * clip.getnchannels(),
clip.readframes(1))[chan_no]
def normalized_samples(clip, chan_no = 0):
for sample in samples(clip, chan_no):
yield float(sample)/float(32767) ### THIS IS WHERE I NEED HELP
Se sono campioni a 16 bit, li dividi per 32768, indipendentemente dalle dimensioni del più grande intero normale. python ha solo due tipi di interi fino alla versione 3, un "normale" int limitato e un binint illimitato. Non esiste un tipo int breve. –