mirror of
https://github.com/google/liblc3.git
synced 2026-04-27 01:24:48 +00:00
Improvement: LTPF now work on decoded ring buffer
This commit is contained in:
@@ -346,8 +346,8 @@ static PyObject *to_ltpf_synthesis(
|
||||
CTYPES_CHECK("ltpf.pitch", to_scalar(
|
||||
PyDict_GetItemString(obj, "pitch"), NPY_INT, <pf->pitch));
|
||||
|
||||
CTYPES_CHECK("ltpf.c", c_obj = to_2d_copy(
|
||||
PyDict_GetItemString(obj, "c"), NPY_FLOAT, ltpf->c, 12, 2));
|
||||
CTYPES_CHECK("ltpf.c", c_obj = to_1d_copy(
|
||||
PyDict_GetItemString(obj, "c"), NPY_FLOAT, ltpf->c, 2*12));
|
||||
PyDict_SetItemString(obj, "c", c_obj);
|
||||
|
||||
CTYPES_CHECK("ltpf.x", x_obj = to_1d_copy(
|
||||
@@ -370,7 +370,7 @@ static PyObject *from_ltpf_synthesis(
|
||||
new_scalar(NPY_INT, <pf->pitch));
|
||||
|
||||
PyDict_SetItemString(obj, "c",
|
||||
new_2d_copy(NPY_FLOAT, 12, 2, <pf->c));
|
||||
new_1d_copy(NPY_FLOAT, 2*12, <pf->c));
|
||||
|
||||
PyDict_SetItemString(obj, "x",
|
||||
new_1d_copy(NPY_FLOAT, 12, <pf->x));
|
||||
@@ -782,9 +782,10 @@ static PyObject *from_decoder(PyObject *obj, const struct lc3_decoder *dec)
|
||||
{
|
||||
unsigned dt = dec->dt, sr = dec->sr;
|
||||
unsigned sr_pcm = dec->sr_pcm;
|
||||
unsigned xs_pos = dec->xs - dec->xr;
|
||||
int nr = LC3_NR(dt, sr);
|
||||
int ns = LC3_NS(dt, sr);
|
||||
int nd = LC3_ND(dt, sr);
|
||||
int nh = LC3_NH(sr);
|
||||
|
||||
if (!obj) obj = PyDict_New();
|
||||
|
||||
@@ -803,8 +804,11 @@ static PyObject *from_decoder(PyObject *obj, const struct lc3_decoder *dec)
|
||||
PyDict_SetItemString(obj, "plc",
|
||||
new_plc_state(&dec->plc));
|
||||
|
||||
PyDict_SetItemString(obj, "xs",
|
||||
new_1d_copy(NPY_FLOAT, nh+ns, dec->xs-nh));
|
||||
PyDict_SetItemString(obj, "xr",
|
||||
new_1d_copy(NPY_FLOAT, nr, dec->xr));
|
||||
|
||||
PyDict_SetItemString(obj, "xs_pos",
|
||||
new_scalar(NPY_INT, &xs_pos));
|
||||
|
||||
PyDict_SetItemString(obj, "xd",
|
||||
new_1d_copy(NPY_FLOAT, nd, dec->xd));
|
||||
@@ -818,8 +822,8 @@ static PyObject *from_decoder(PyObject *obj, const struct lc3_decoder *dec)
|
||||
__attribute__((unused))
|
||||
static PyObject *to_decoder(PyObject *obj, struct lc3_decoder *dec)
|
||||
{
|
||||
unsigned dt, sr, sr_pcm;
|
||||
PyObject *xs_obj, *xd_obj, *xg_obj;
|
||||
unsigned dt, sr, sr_pcm, xs_pos;
|
||||
PyObject *xr_obj, *xd_obj, *xg_obj;
|
||||
|
||||
CTYPES_CHECK("decoder", obj && PyDict_Check(obj));
|
||||
|
||||
@@ -836,9 +840,9 @@ static PyObject *to_decoder(PyObject *obj, struct lc3_decoder *dec)
|
||||
CTYPES_CHECK("decoder.sr_pcm",
|
||||
(unsigned)(dec->sr_pcm = sr_pcm) < LC3_NUM_SRATE);
|
||||
|
||||
int nr = LC3_NR(dt, sr);
|
||||
int ns = LC3_NS(dt, sr);
|
||||
int nd = LC3_ND(dt, sr);
|
||||
int nh = LC3_NH(sr);
|
||||
|
||||
CTYPES_CHECK(NULL, to_ltpf_synthesis(
|
||||
PyDict_GetItemString(obj, "ltpf"), &dec->ltpf));
|
||||
@@ -846,9 +850,13 @@ static PyObject *to_decoder(PyObject *obj, struct lc3_decoder *dec)
|
||||
CTYPES_CHECK(NULL, to_plc_state(
|
||||
PyDict_GetItemString(obj, "plc"), &dec->plc));
|
||||
|
||||
CTYPES_CHECK("decoder.xs", xs_obj = to_1d_copy(
|
||||
PyDict_GetItemString(obj, "xs"), NPY_FLOAT, dec->xs-nh, nh+ns));
|
||||
PyDict_SetItemString(obj, "xs", xs_obj);
|
||||
CTYPES_CHECK("decoder.xr", xr_obj = to_1d_copy(
|
||||
PyDict_GetItemString(obj, "xr"), NPY_FLOAT, dec->xr, nr));
|
||||
PyDict_SetItemString(obj, "xr", xr_obj);
|
||||
|
||||
CTYPES_CHECK("decoder.xs", to_scalar(
|
||||
PyDict_GetItemString(obj, "xs_pos"), NPY_INT, &xs_pos));
|
||||
dec->xs = dec->xr + xs_pos;
|
||||
|
||||
CTYPES_CHECK("decoder.xd", xd_obj = to_1d_copy(
|
||||
PyDict_GetItemString(obj, "xd"), NPY_FLOAT, dec->xd, nd));
|
||||
|
||||
@@ -302,7 +302,7 @@ class LtpfSynthesis(Ltpf):
|
||||
|
||||
max_pitch_12k8 = 228
|
||||
max_pitch = max_pitch_12k8 * T.SRATE_KHZ[self.sr] / 12.8
|
||||
max_pitch = np.ceil(max_pitch).astype(np.int)
|
||||
max_pitch = np.ceil(max_pitch).astype(int)
|
||||
|
||||
self.x = np.zeros(ns)
|
||||
self.y = np.zeros(max_pitch + len(self.C_D[0]))
|
||||
@@ -435,7 +435,7 @@ def initial_state():
|
||||
|
||||
def initial_sstate():
|
||||
return { 'active': False, 'pitch': 0,
|
||||
'c': np.zeros((12,2)), 'x': np.zeros(12) }
|
||||
'c': np.zeros(2*12), 'x': np.zeros(12) }
|
||||
|
||||
### ------------------------------------------------------------------------ ###
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@ static PyObject *synthesize_py(PyObject *m, PyObject *args)
|
||||
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, nd+ns, &x));
|
||||
|
||||
lc3_ltpf_synthesize(dt, sr, nbytes,
|
||||
<pf, pitch_present ? &data : NULL, x+nd);
|
||||
<pf, pitch_present ? &data : NULL, x, x + nd);
|
||||
|
||||
from_ltpf_synthesis(ltpf_obj, <pf);
|
||||
return Py_BuildValue("O", x_obj);
|
||||
|
||||
Reference in New Issue
Block a user