cst_utterance *concat_units(cst_utterance *utt) { cst_lpcres *target_lpcres; cst_item *u; int pm_i; int unit_size, unit_start, unit_end; int rpos, nearest_u_pm; int target_end, target_start; float m, u_index; cst_sts_list *sts_list; const char *residual_type; sts_list = val_sts_list(utt_feat_val(utt, "sts_list")); if (sts_list->codec == NULL) residual_type = "ulaw"; else residual_type = sts_list->codec; target_lpcres = val_lpcres(utt_feat_val(utt, "target_lpcres")); target_lpcres->lpc_min = sts_list->coeff_min; target_lpcres->lpc_range = sts_list->coeff_range; target_lpcres->num_channels = sts_list->num_channels; target_lpcres->sample_rate = sts_list->sample_rate; lpcres_resize_samples(target_lpcres, target_lpcres->times[target_lpcres->num_frames - 1]); if (utt_feat_val(utt, "delayed_decoding")) { target_lpcres->delayed_decoding = 1; target_lpcres->packed_residuals = cst_alloc(const unsigned char *, target_lpcres->num_frames); }
cst_wave *reconstruct_wave(cst_wave *sig, cst_sts *sts, cst_track *lpc) { cst_lpcres *lpcres; int i,j,r; int start; int num_samples; /* FILE *ofd; */ for (num_samples = 0, i=0; i < lpc->num_frames; i++) num_samples += sts[i].size; lpcres = new_lpcres(); lpcres_resize_frames(lpcres,lpc->num_frames); lpcres->num_channels = lpc->num_channels-1; start = (int)((float)sig->sample_rate * lpc->times[0]/2); num_samples += start; for (i=0; i<lpc->num_frames; i++) { lpcres->frames[i] = sts[i].frame; lpcres->sizes[i] = sts[i].size; } lpcres_resize_samples(lpcres,num_samples); lpcres->lpc_min = lpc_min; lpcres->lpc_range = lpc_range; lpcres->sample_rate = sig->sample_rate; for (r=start,i=0; i<lpc->num_frames; i++) for (j=0; j<sts[i].size; j++,r++) lpcres->residual[r] = sts[i].residual[j]; #if 0 /* Debug dump */ ofd = fopen("lpc_resid.lpc","w"); for (s=0,i=0; i<lpcres->num_frames; i++) { fprintf(ofd,"%d %d %d\n",i,0,lpcres->sizes[i]); for (j=0; j < lpcres->num_channels; j++) fprintf(ofd,"%d ",lpcres->frames[i][j]); fprintf(ofd,"\n"); for (j=0; j < lpcres->sizes[i]; j++,s++) fprintf(ofd,"%d ",lpcres->residual[s]); fprintf(ofd,"\n"); } fclose(ofd); ofd = fopen("lpc_resid.res","w"); for (i=0; i < r; i++) fprintf(ofd,"%d\n",cst_ulaw_to_short(lpcres->residual[i])); fclose(ofd); #endif return lpc_resynth(lpcres); }