¿Cómo llego al máximo firmado entero corto en Python (es decir SHRT_MAX en limits.h de C) ?máximo número entero corto con signo en Python
Quiero normalizar muestras de un solo canal de un archivo *.wav
, así que en lugar de un montón de enteros con signo de 16 bits, quiero un conjunto de flotantes entre 1 y -1. Esto es lo que tengo (el código pertinente es en la función 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
Si son muestras de 16 bits, entonces las divide por 32768, sin importar el tamaño del entero más grande. python tiene solo dos tipos de enteros hasta la versión 3, un int de tamaño limitado "regular" y un binint ilimitado. No hay un tipo corto de int. –