Exemplo n.º 1
0
/* Dummy F0 modelling for phones, copied directly from us_f0_model.c */
cst_utterance *flat_prosody(cst_utterance *u)
{
    /* F0 target model */
    cst_item *s,*t;
    cst_relation *targ_rel;
    float mean, stddev;

    targ_rel = utt_relation_create(u,"Target");
    mean = get_param_float(u->features,"target_f0_mean", 100.0);
    mean *= get_param_float(u->features,"f0_shift", 1.0);
    stddev = get_param_float(u->features,"target_f0_stddev", 12.0);

    s=relation_head(utt_relation(u,"Segment"));
    t = relation_append(targ_rel,NULL);
    item_set_float(t,"pos",0.0);
    item_set_float(t,"f0",mean+stddev);

    s=relation_tail(utt_relation(u,"Segment"));
    t = relation_append(targ_rel,NULL);

    item_set_float(t,"pos",item_feat_float(s,"end"));
    item_set_float(t,"f0",mean-stddev);

    return u;
}
Exemplo n.º 2
0
static void cg_smooth_F0(cst_utterance *utt,cst_cg_db *cg_db,
                         cst_track *param_track)
{
    /* Smooth F0 and mark unnoived frames as 0.0 */
    cst_item *mcep;
    int i, c;
    float l, s;
    float mean, stddev;

    l = 0.0;
    for (i=0; i<param_track->num_frames-1; i++)
    {
        c = 0; s = 0;
        if (l > 0.0)
        {
            c++; s+=l;
        }
        if (param_track->frames[i+1][0] > 0.0)
        {
            c++; s+=param_track->frames[i+1][0];
        }
        l = param_track->frames[i][0];
        if (param_track->frames[i][0] > 0.0)
        {
            c++; s+=param_track->frames[i][0];
            param_track->frames[i][0] = s/c;
        }
    }

    mean = get_param_float(utt->features,"int_f0_target_mean", cg_db->f0_mean);
    mean *= get_param_float(utt->features,"f0_shift", 1.0);
    stddev = 
        get_param_float(utt->features,"int_f0_target_stddev", cg_db->f0_stddev);
    
    for (i=0,mcep=utt_rel_head(utt,"mcep"); mcep; i++,mcep=item_next(mcep))
    {
        if (voiced_frame(mcep))
        {
            /* scale the F0 -- which normally wont change it at all */
            param_track->frames[i][0] = 
                (((param_track->frames[i][0]-cg_db->f0_mean)/cg_db->f0_stddev) 
                 *stddev)+mean;
            /* Some safety checks */
            if (param_track->frames[i][0] < 50)
                param_track->frames[i][0] = 50;
            if (param_track->frames[i][0] > 700)
                param_track->frames[i][0] = 700;
        }
        else /* Unvoice it */
            param_track->frames[i][0] = 0.0;
    }

    return;
}
Exemplo n.º 3
0
void P_label(Rainbow_hdr *rainbow_header, char* buf)
{
    int labelnum;
    char label;

    sscanf(buf, "%c%d", &label, &labelnum);

    if (labelnum == 3)
	rainbow_header->range_start= get_param_float(buf);
    else if (labelnum == 4)
	rainbow_header->range_stop = get_param_float(buf);
    else if (labelnum == 5)
	rainbow_header->range_step = get_param_float(buf);
}
Exemplo n.º 4
0
void A_label(Rainbow_hdr *rainbow_header, char* buf)
{
    int labelnum;
    char label;

    sscanf(buf, "%c%d", &label, &labelnum);

    if (labelnum == 3) 
	rainbow_header->az_step = get_param_float(buf);
     else if (labelnum == 9)
	rainbow_header->nsweeps = get_param_int(buf);
}
Exemplo n.º 5
0
void R_label(Rainbow_hdr *rainbow_header, char* buf)
{
    int labelnum;

    sscanf(buf, "%*c%d", &labelnum);

    if (labelnum == 1)
      rainbow_header->nbins = get_param_int(buf);
    else if (labelnum == 2)
      rainbow_header->bin_resolution = get_param_float(buf);
    else if (labelnum == 8)
      rainbow_header->nvalues = get_param_int(buf);
}
Exemplo n.º 6
0
Arquivo: flite.c Projeto: razr/opentts
void flite_strip_silence(AudioTrack * track)
{
	int playlen, skip;

	float stretch =
	    get_param_float(flite_voice->features, "duration_stretch", 1.);
	int speed = (int)(1000. / stretch);
	skip = (187 * track->sample_rate) / speed;
	playlen = track->num_samples - skip * 2;
	if (playlen > 0 && playlen < 500)
		playlen += (skip * 2) / 3;
	if (playlen < 0)
		playlen = 0;

	track->num_samples = playlen;
	assert(track->bits == 16);
	track->samples += skip * track->num_channels;
}
Exemplo n.º 7
0
static cst_utterance *cg_make_params(cst_utterance *utt)
{
    /* puts in the frame items */
    /* historically called "mcep" but can actually be any random vectors */
    cst_cg_db *cg_db;
    cst_relation *mcep, *mcep_link;
    cst_item *s, *mcep_parent, *mcep_frame;
    int num_frames;
    float start, end;
    float dur_stretch, tok_stretch;

    cg_db = val_cg_db(utt_feat_val(utt,"cg_db"));
    mcep = utt_relation_create(utt,"mcep");
    mcep_link = utt_relation_create(utt,"mcep_link");
    end = 0.0;
    num_frames = 0;
    dur_stretch = get_param_float(utt->features,"duration_stretch", 1.0);

    for (s = utt_rel_head(utt,"HMMstate"); s; s=item_next(s))
    {
        start = end;
        tok_stretch = ffeature_float(s,"R:segstate.parent.R:SylStructure.parent.parent.R:Token.parent.local_duration_stretch");
        if (tok_stretch == 0)
            tok_stretch = 1.0;
        end = start + (tok_stretch*dur_stretch*cg_state_duration(s,cg_db));
        item_set_float(s,"end",end);
        mcep_parent = relation_append(mcep_link, s);
        for ( ; (num_frames * cg_db->frame_advance) <= end; num_frames++ )
        {
            mcep_frame = relation_append(mcep,NULL);
            item_add_daughter(mcep_parent,mcep_frame);
            item_set_int(mcep_frame,"frame_number",num_frames);
            item_set(mcep_frame,"name",item_feat(mcep_parent,"name"));
        }
    }

    /* Copy duration up onto Segment relation */
    for (s = utt_rel_head(utt,"Segment"); s; s=item_next(s))
        item_set(s,"end",ffeature(s,"R:segstate.daughtern.end"));

    utt_set_feat_int(utt,"param_track_num_frames",num_frames);

    return utt;
}
Exemplo n.º 8
0
cst_utterance *cart_duration(cst_utterance *u)
{
    cst_cart *dur_tree;
    cst_item *s;
    float zdur, dur_stretch, local_dur_stretch, dur;
    float end;
    dur_stats *ds;
    const dur_stat *dur_stat;

    end = 0;

    if (feat_present(u->features,"no_segment_duration_model"))
        return u;  /* not all methods need segment durations */

    dur_tree = val_cart(feat_val(u->features,"dur_cart"));
    dur_stretch = get_param_float(u->features,"duration_stretch", 1.0);
    ds = val_dur_stats(feat_val(u->features,"dur_stats"));
    
    for (s=relation_head(utt_relation(u,"Segment")); s; s=item_next(s))
    {
	zdur = val_float(cart_interpret(s,dur_tree));
	dur_stat = phone_dur_stat(ds,item_name(s));

	local_dur_stretch = ffeature_float(s, "R:SylStructure.parent.parent."
					   "R:Token.parent.local_duration_stretch");
	if (local_dur_stretch)
	    local_dur_stretch *= dur_stretch;
	else
	    local_dur_stretch = dur_stretch;

	dur = local_dur_stretch * ((zdur*dur_stat->stddev)+dur_stat->mean);
	DPRINTF(0,("phone %s accent %s stress %s pdur %f stretch %f mean %f std %f dur %f\n",
		   item_name(s),
		   ffeature_string(s,"R:SylStructure.parent.accented"),
		   ffeature_string(s,"R:SylStructure.parent.stress"),
		   zdur, local_dur_stretch, dur_stat->mean,
		   dur_stat->stddev, dur));
	end += dur;
	item_set_float(s,"end",end);
    }
    return u;
}
Exemplo n.º 9
0
result_t widget_wndproc(handle_t hwnd, const canmsg_t *msg)
  {
  bool changed = false;
  hsi_window_t *wnd;
  get_wnddata(hwnd, (void **)&wnd);

  switch (msg->id)
    {
    case id_magnetic_heading:
    {
    int16_t direction;
    get_param_int16(msg, 0, &direction);

    while (direction < 0)
      direction += 360;
    while (direction > 359)
      direction -= 360;

    changed = wnd->direction != direction;
    wnd->direction = direction;
    }
    break;
    case id_heading:
    {
    int16_t value;
    get_param_int16(msg, 0, &value);
    changed = wnd->heading_bug != value;
    wnd->heading_bug = value;
    }
    break;
    case id_heading_angle:
    {
    int16_t value;
    get_param_int16(msg, 0, &value);
    changed = wnd->heading != value;
    wnd->heading = value;
    }
    break;
    case id_deviation:
    {
    int16_t value;
    get_param_int16(msg, 0, &value);
    changed = wnd->deviation != value;
    wnd->deviation = value;
    // the deviation is +/- * 10
    }
    break;
    case id_selected_course:
    {
    int16_t value;
    get_param_int16(msg, 0, &value);
    changed = wnd->course != value;
    wnd->course = value;
    }
    break;
    case id_track:
    {
    int16_t value;
    get_param_int16(msg, 0, &value);
    changed = wnd->track != value;
    wnd->track = value;
    }
    break;
    case id_wind_speed:
    {
    float v;
    get_param_float(msg, &v);
    int16_t value = (int16_t)meters_per_second_to_knots(v);
    changed = wnd->wind_speed != value;
    wnd->wind_speed = value;
    }
    break;
    case id_wind_direction:
    {
    float v;
    get_param_float(msg, &v);
    int16_t value = (int16_t)radians_to_degrees(v);
    changed = wnd->wind_direction != value;
    wnd->wind_direction != value;
    }
    break;
    case id_distance_to_next:
    {
    float v;
    get_param_float(msg, &v);
    int16_t value = (int16_t)meters_to_nm(v);
    changed = wnd->distance_to_waypoint != value;
    wnd->distance_to_waypoint = value;
    }
    break;
    case id_magnetic_variation:
    {
    float v;
    get_param_float(msg, &v);
    int16_t value = (int16_t)radians_to_degrees(v);
    changed = wnd->magnetic_variation != value;
    wnd->magnetic_variation = value;
    }
    break;
    case id_estimated_time_to_next:
    {
    int16_t value;
    get_param_int16(msg, 0, &value);
    changed = wnd->time_to_waypoint != value;
    wnd->time_to_waypoint = value;
    }
    break;
    case id_paint:
      begin_paint(hwnd);
      update_window(hwnd, wnd);
      end_paint(hwnd);
      break;
    default:
      return defwndproc(hwnd, msg);
    }

  if (changed)
    invalidate_rect(hwnd, 0);

  return s_ok;
  }
Exemplo n.º 10
0
/*----------------------------------------------------------------------------*/
int main(int argc, char* argv[])
{
	int loop, test, windowsize, count;
	float temp;
	double *pkernel, *gkernel, *dkernel;
	double corner, thresh = 1.0/256.0, sigma = 1.0, sumall = 1.0;

	for(loop=1;loop<argc;loop++)
	{
		if(strncmp(argv[loop],"-t",2)==0)
		{
			if(get_param_int(argc,argv,&loop,&test)<0)
			{
				printf("Cannot get threshold value?\n");
				return -1;
			}
			thresh = 1.0/(double)test;
		}
		else if(strncmp(argv[loop],"-s",2)==0)
		{
			if(get_param_float(argc,argv,&loop,&temp)<0)
			{
				printf("Cannot get sigma value?\n");
				return -1;
			}
			sigma = (double)temp;
		}
	}

	loop=0;
	do
	{
		corner = fgaussian2d(loop,loop,sigma);
		if(corner>thresh)
		{
			sumall = corner;
			loop++;
		}
		else
		{
			corner = sumall;
			break;
		}
	}
	while(1);

	printf("Gaussian kernel build parameters:\n");
	printf("  Sigma: %lf, Threshold: %lf, Corner: %lf\n",sigma,thresh,corner);

	windowsize = (loop*2)-1;
	count = windowsize/2;

	gkernel = (double*) malloc(windowsize*windowsize*sizeof(double));
	dkernel = (double*) malloc(windowsize*sizeof(double));

	printf("Gaussian 1D kernel\n");
	pkernel = dkernel; sumall = 0.0;
	for(loop=0;loop<windowsize;loop++)
	{
		*pkernel = fgaussian1d(loop-count,sigma);
		sumall += *pkernel;
		pkernel++;
	}
	pkernel = dkernel;
	for(loop=0;loop<windowsize;loop++)
	{
		*pkernel /= sumall;
		printf("  %.6lf  ",*pkernel);
		pkernel++;
	}
	printf("\n");

	printf("Gaussian 2D kernel from 1D!\n");
	for(loop=0;loop<windowsize;loop++)
	{
		for(test=0;test<windowsize;test++)
		{
			printf("  %.6lf  ",(dkernel[loop]*dkernel[test]));
		}
		printf("\n");
	}

	printf("Gaussian 2D kernel (%dx%d)\n",windowsize,windowsize);
	pkernel = gkernel; sumall = 0.0;
	for(loop=0;loop<windowsize;loop++)
	{
		for(test=0;test<windowsize;test++)
		{
			*pkernel = fgaussian2d(loop-count, test-count, sigma);
			sumall += *pkernel;
			pkernel++;
		}
	}
	corner /= sumall;
	// normalize and show it!
	pkernel = gkernel;
	for(loop=0;loop<windowsize;loop++)
	{
		for(test=0;test<windowsize;test++)
		{
			*pkernel /= sumall;
			printf("  %.6lf  ",*pkernel);
			pkernel++;
		}
		printf("\n");
	}

	printf("Gaussian 2D kernel (1/%d)\n",(int)(1.0/corner));
	pkernel = gkernel;
	for(loop=0;loop<windowsize;loop++)
	{
		for(test=0;test<windowsize;test++)
		{
			printf("  %6d  ",(int)((*pkernel)/corner));
			pkernel++;
		}
		printf("\n");
	}

	free(dkernel);
	free(gkernel);
	return 0;
}
Exemplo n.º 11
0
float flite_get_param_float(const cst_features *f, const char *name, float def)
{
    return get_param_float(f,name,def);
}