|
import math |
|
|
|
from numba import jit |
|
import wave |
|
from io import BytesIO |
|
|
|
import numpy as np |
|
from .av import wav2 |
|
|
|
|
|
|
|
def float_to_int16(audio: np.ndarray) -> np.ndarray: |
|
am = int(math.ceil(float(np.abs(audio).max())) * 32768) |
|
am = 32767 * 32768 // am |
|
return np.multiply(audio, am).astype(np.int16) |
|
|
|
def pcm_arr_to_mp3_view(wav: np.ndarray): |
|
buf = BytesIO() |
|
with wave.open(buf, "wb") as wf: |
|
wf.setnchannels(1) |
|
wf.setsampwidth(2) |
|
wf.setframerate(24000) |
|
wf.writeframes(float_to_int16(wav)) |
|
buf.seek(0, 0) |
|
buf2 = BytesIO() |
|
wav2(buf, buf2, "mp3") |
|
buf.seek(0, 0) |
|
return buf2.getbuffer() |