int stuff_buffer(double playback_rate, short *inptr, short *outptr) { int i; int stuffsamp = frame_size; int stuff = 0; double p_stuff; p_stuff = 1.0 - pow(1.0 - fabs(playback_rate-1.0), frame_size); if ((float)rand()/((float)RAND_MAX) < p_stuff) { stuff = playback_rate > 1.0 ? -1 : 1; stuffsamp = rand() % (frame_size - 1); } for (i=0; i<stuffsamp; i++) { // the whole frame, if no stuffing *outptr++ = dithered_vol(*inptr++); *outptr++ = dithered_vol(*inptr++); }; if (stuff) { if (stuff==1) { if (debug) fprintf(stderr, "+++++++++\n"); // interpolate one sample *outptr++ = dithered_vol(((long)inptr[-2] + (long)inptr[0]) >> 1); *outptr++ = dithered_vol(((long)inptr[-1] + (long)inptr[1]) >> 1); } else if (stuff==-1) { if (debug) fprintf(stderr, "---------\n"); inptr++; inptr++; } for (i=stuffsamp; i<frame_size + stuff; i++) { *outptr++ = dithered_vol(*inptr++); *outptr++ = dithered_vol(*inptr++); } }
static int stuff_buffer(double playback_rate, short *inptr, short *outptr) { int i; int stuffsamp = frame_size; int stuff = 0; double p_stuff; p_stuff = 1.0 - pow(1.0 - fabs(playback_rate-1.0), frame_size); if (rand() < p_stuff * RAND_MAX) { stuff = playback_rate > 1.0 ? -1 : 1; stuffsamp = rand() % (frame_size - 1); } pthread_mutex_lock(&vol_mutex); for (i=0; i<stuffsamp; i++) { // the whole frame, if no stuffing *outptr++ = dithered_vol(*inptr++); *outptr++ = dithered_vol(*inptr++); }; if (stuff) { if (stuff==1) { debug(2, "+++++++++\n"); // interpolate one sample *outptr++ = dithered_vol(((long)inptr[-2] + (long)inptr[0]) >> 1); *outptr++ = dithered_vol(((long)inptr[-1] + (long)inptr[1]) >> 1); } else if (stuff==-1) {