Source code for malaya_speech.utils.astype

import numpy as np
from malaya_speech.model.frame import Frame


[docs]def to_ndarray(array): """ Change list / tuple / bytes into np.array Parameters ---------- array: list / tuple / bytes Returns ------- result : np.array """ if isinstance(array, Frame): array = array.array if isinstance(array, list) or isinstance(array, tuple): array = np.array(array) elif isinstance(array, bytes) or isinstance(array, bytearray): if isinstance(array, bytearray): array = bytes(array) array = np.frombuffer(array, np.int16) return array
[docs]def to_byte(array): """ Change list / tuple / np.array into bytes Parameters ---------- array: list / tuple / np.array Returns ------- result : bytes """ if isinstance(array, Frame): array = array.array if isinstance(array, bytes): return array array = to_ndarray(array) if array.dtype == 'float': array = float_to_int(array) if array.dtype != np.int16: array = array.astype(np.int16) if not isinstance(array, bytes): array = array.tobytes() return array
[docs]def float_to_int(array, type=np.int16): """ Change np.array float32 / float64 into np.int16 Parameters ---------- array: np.array type: np.int16 Returns ------- result : np.array """ array = to_ndarray(array) if array.dtype == type: return array if array.dtype not in [np.int16, np.int32, np.int64]: if np.max(np.abs(array)) == 0: array[:] = 0 array = type(array * np.iinfo(type).max) else: array = type(array / np.max(np.abs(array)) * np.iinfo(type).max) return array
[docs]def int_to_float(array, type=np.float32): """ Change np.array int16 into np.float32 Parameters ---------- array: np.array type: np.float32 Returns ------- result : np.array """ array = to_ndarray(array) if array.dtype == type: return array if array.dtype not in [np.float16, np.float32, np.float64]: if np.max(np.abs(array)) == 0: array = array.astype(np.float32) array[:] = 0 else: array = array.astype(np.float32) / np.max(np.abs(array)) return array