Beispiel #1
0
alignment_t *
parse_alignment(char *line, dict2pid_t *d2p)
{
    alignment_t *al;
    char **wptr;
    int nf, i;
    double spos;
    int32 frate = 100; /* FIXME */

    nf = str2words(line, NULL, 0);
    if (nf < 0)
        return NULL;
    wptr = ckd_calloc(nf, sizeof(*wptr));
    nf = str2words(line, wptr, nf);
    if (nf < 0) {
        ckd_free(wptr);
        return NULL;
    }
    al = alignment_init(d2p);
    spos = 0.0;
    for (i = 0; i < nf; ++i) {
        char *c = strchr(wptr[i], ':');
        double epos;
        int duration;
        if (c == NULL) /* word ID */
            break;
        *c++ = '\0';
        epos = atof(c);
        duration = (int) ((epos - spos) * frate);
        alignment_add_word(al, dict_wordid(d2p->dict, wptr[i]), duration);
        spos = epos;
    }
    return al;
}
Beispiel #2
0
/* align_init
 *
 * * allocate a new DP matrix data structure
 * */
aligndatap align_init(int maxstr,
                      int match,
                      int mismatch,
                      int gapopen,
                      int gapextend) {
  aligndatap data;
  int i;

  data = (aligndatap) malloc(sizeof(struct aligndata));
  if (data == NULL) {
#ifdef VERBOSE
    fprintf(stderr,"align_init: failed to allocate struct aligndata\n");
#endif
    return NULL;
  }

  data->maxstr = maxstr;
  data->match = match;
  data->mismatch = mismatch;
  data->gapopen = gapopen;
  data->gapextend = gapextend;

  data->matrix = calloc(maxstr+1,sizeof(int *));
  data->gap1 = calloc(maxstr+1,sizeof(int *));
  data->gap2 = calloc(maxstr+1,sizeof(int *));

  if (data->matrix == NULL ||
      data->gap1 == NULL ||
      data->gap2 == NULL) {
#ifdef VERBOSE
    fprintf(stderr,"align_init: failed to allocate matrices\n");
#endif
    return NULL;
  }

  for (i=0;i<=maxstr;i++) {
    data->matrix[i] = calloc(maxstr+1,sizeof(int));
    data->gap1[i] = calloc(maxstr+1,sizeof(int));
    data->gap2[i] = calloc(maxstr+1,sizeof(int));
    if (data->matrix[i] == NULL ||
        data->gap1[i] == NULL ||
        data->gap2[i] == NULL) {
#ifdef VERBOSE
      fprintf(stderr,"align_init: failed to allocate sub-matrices (%d)\n",i);
#endif
      return NULL;
    }
  }

  data->alignment = alignment_init();
  if (data->alignment == NULL) {
    return NULL;
  }
  return data;
}