Lines Matching +full:n +full:- +full:factor

7  * - stretch factor f
8 * - window size w
9 * - input step i
11 * - steady state of window s, ss = s*w
32 * FIXME: maybe shift could be allowed > 1.0 with factor < 1.0 ???
34 double factor; /* strech factor. 1.0 means copy. */ member
52 double * fade_coefs; /* fading, 1.0 -> 0.0 */
61 priv_t * p = (priv_t *) effp->priv; in getopts()
62 --argc, ++argv; in getopts()
65 p->factor = 1.0; /* default is no change */ in getopts()
66 p->window = DEFAULT_STRETCH_WINDOW; in getopts()
68 if (argc > 0 && !sscanf(argv[0], "%lf", &p->factor)) { in getopts()
69 lsx_fail("error while parsing factor"); in getopts()
73 if (argc > 1 && !sscanf(argv[1], "%lf", &p->window)) { in getopts()
90 p->shift = (p->factor <= 1.0) ? in getopts()
93 if (argc > 3 && !sscanf(argv[3], "%lf", &p->shift)) { in getopts()
98 if (p->shift > 1.0 || p->shift <= 0.0) { in getopts()
104 it makes sense for factor >= 0.5 */ in getopts()
105 if (p->factor < 1.0) in getopts()
106 p->fading = 1.0 - (p->factor * p->shift); in getopts()
108 p->fading = 1.0 - p->shift; in getopts()
109 if (p->fading > 0.5) in getopts()
110 p->fading = 0.5; in getopts()
112 if (argc > 4 && !sscanf(argv[4], "%lf", &p->fading)) { in getopts()
117 if (p->fading > 0.5 || p->fading < 0.0) { in getopts()
130 priv_t * p = (priv_t *)effp->priv; in start()
133 if (p->factor == 1) in start()
136 p->state = input_state; in start()
138 p->segment = (int)(effp->out_signal.rate * 0.001 * p->window); in start()
140 p->index = p->segment / 2; in start()
141 p->ibuf = lsx_malloc(p->segment * sizeof(sox_sample_t)); in start()
145 if (p->factor < 1.0) { in start()
146 p->ishift = p->shift * p->segment; in start()
147 p->oshift = p->factor * p->ishift; in start()
149 p->oshift = p->shift * p->segment; in start()
150 p->ishift = p->oshift / p->factor; in start()
152 assert(p->ishift <= p->segment); in start()
153 assert(p->oshift <= p->segment); in start()
155 p->oindex = p->index; /* start as synchronized */ in start()
156 p->obuf = lsx_malloc(p->segment * sizeof(double)); in start()
157 p->overlap = (int)(p->fading * p->segment); in start()
158 p->fade_coefs = lsx_malloc(p->overlap * sizeof(double)); in start()
161 for (i = 0; i<p->segment; i++) in start()
162 p->ibuf[i] = 0; in start()
164 for (i = 0; i<p->segment; i++) in start()
165 p->obuf[i] = 0.0; in start()
167 if (p->overlap>1) { in start()
168 double slope = 1.0 / (p->overlap - 1); in start()
169 p->fade_coefs[0] = 1.0; in start()
170 for (i = 1; i < p->overlap - 1; i++) in start()
171 p->fade_coefs[i] = slope * (p->overlap - i - 1); in start()
172 p->fade_coefs[p->overlap - 1] = 0.0; in start()
173 } else if (p->overlap == 1) in start()
174 p->fade_coefs[0] = 1.0; in start()
176 lsx_debug("start: (factor=%g segment=%g shift=%g overlap=%g)\nstate=%d\n" in start()
177 "segment=%" PRIuPTR "\nindex=%" PRIuPTR "\n" in start()
178 "ishift=%" PRIuPTR "\noindex=%" PRIuPTR "\n" in start()
180 p->factor, p->window, p->shift, p->fading, p->state, in start()
181 p->segment, p->index, p->ishift, p->oindex, p->oshift, p->overlap); in start()
183 effp->out_signal.length = SOX_UNKNOWN_LEN; /* TODO: calculate actual length */ in start()
193 for (i = 0; i < p->overlap; i++) in combine()
194 p->obuf[i] += p->fade_coefs[p->overlap - 1 - i] * p->ibuf[i]; in combine()
197 for (; i < p->segment - p->overlap; i++) in combine()
198 p->obuf[i] += p->ibuf[i]; in combine()
201 for (; i<p->segment; i++) in combine()
202 p->obuf[i] += p->fade_coefs[i - p->segment + p->overlap] * p->ibuf[i]; in combine()
211 priv_t * p = (priv_t *) effp->priv; in flow()
216 if (p->state == input_state) { in flow()
217 size_t tocopy = min(*isamp-iindex, in flow()
218 p->segment-p->index); in flow()
220 memcpy(p->ibuf + p->index, ibuf + iindex, tocopy * sizeof(sox_sample_t)); in flow()
223 p->index += tocopy; in flow()
225 if (p->index == p->segment) { in flow()
230 for (i = 0; i + p->ishift < p->segment; i++) in flow()
231 p->ibuf[i] = p->ibuf[i+p->ishift]; in flow()
233 p->index -= p->ishift; in flow()
236 p->state = output_state; in flow()
240 if (p->state == output_state) { in flow()
241 while (p->oindex < p->oshift && oindex < *osamp) { in flow()
243 f = p->obuf[p->oindex++]; in flow()
244 SOX_SAMPLE_CLIP_COUNT(f, effp->clips); in flow()
248 if (p->oindex >= p->oshift && oindex<*osamp) { in flow()
249 p->oindex -= p->oshift; in flow()
252 for (i = 0; i + p->oshift < p->segment; i++) in flow()
253 p->obuf[i] = p->obuf[i + p->oshift]; in flow()
256 for (; i < p->segment; i++) in flow()
257 p->obuf[i] = 0.0; in flow()
259 p->state = input_state; in flow()
277 priv_t * p = (priv_t *) effp->priv; in drain()
281 if (p->state == input_state) { in drain()
282 for (i=p->index; i<p->segment; i++) in drain()
283 p->ibuf[i] = 0; in drain()
287 p->state = output_state; in drain()
290 while (oindex<*osamp && p->oindex<p->index) { in drain()
291 float f = p->obuf[p->oindex++]; in drain()
292 SOX_SAMPLE_CLIP_COUNT(f, effp->clips); in drain()
298 if (p->oindex == p->index) in drain()
307 priv_t * p = (priv_t *) effp->priv; in stop()
309 free(p->ibuf); in stop()
310 free(p->obuf); in stop()
311 free(p->fade_coefs); in stop()
319 "factor [window fade shift fading]\n" in lsx_stretch_effect_fn()
320 " (expansion, frame in ms, lin/..., unit<1.0, unit<0.5)\n" in lsx_stretch_effect_fn()