Example #1
0
int sq_window( FILE* instream, FILE* outstream, unsigned int wndw_len, char* window_name)
{
    float *wndw_bfr;
    float *in_bfr;
    float *out_bfr;

    if (!((wndw_len >= 2) && (wndw_len <= MAX_WNDW_LEN)))
        return ERR_ARG_BOUNDS;

    wndw_bfr = malloc(wndw_len * sizeof(float));
    if(wndw_bfr == NULL)
        return ERR_MALLOC;
    in_bfr = malloc(wndw_len * sizeof(float) * 2);
    if(in_bfr == NULL)
        return ERR_MALLOC;
    out_bfr = malloc(wndw_len * sizeof(float) * 2);
    if(out_bfr == NULL)
        return ERR_MALLOC;

    // Make window buffer
    int status = sq_make_window_from_name(wndw_bfr, wndw_len, window_name);
    if(status < 0)
        return status;

    fread(&in_bfr[(wndw_len/2)*2], sizeof(float) * 2, wndw_len / 2, instream);
    memcpy(&in_bfr[0], &in_bfr[(wndw_len/2)*2], (wndw_len / 2)* sizeof(float) *2);

    unsigned int bfri;
    while (fread(&in_bfr[(wndw_len/2)*2], sizeof(float) * 2, wndw_len / 2, instream) == (wndw_len / 2))
    {
        for (bfri = 0; bfri < wndw_len; bfri++)
        {
            out_bfr[(bfri<<1)+0] = in_bfr[(bfri<<1)+0] * wndw_bfr[bfri];
            out_bfr[(bfri<<1)+1] = in_bfr[(bfri<<1)+1] * wndw_bfr[bfri];
        }
        fwrite(out_bfr, sizeof(float) * 2, wndw_len, outstream);
        memcpy(&in_bfr[0], &in_bfr[(wndw_len/2)*2], (wndw_len / 2)*4*2);
    }

    free(wndw_bfr);
    free(in_bfr);
    free(out_bfr);

    return 0;
}
Example #2
0
int main(int argc, char **argv)
{
    int opt;
    while ((opt = getopt(argc, argv, "hl:w:")) != -1)
    {
        switch (opt)
        {
            case 'h':
                print_usage(usage_text, arrlen);
                exit(EXIT_FAILURE);
            case 'l':
                sscanf(optarg, "%u", &wndw_len);
                break;
            case 'w':
                sscanf(optarg, "%s", window_name);
                break;
            default:
                print_usage(usage_text, arrlen);
                exit(EXIT_FAILURE);
        }
    }
    
    float* wnd = calloc(wndw_len, sizeof(float));
    
    unsigned int i;

    int status = sq_make_window_from_name(wnd, wndw_len, window_name);

    if(status < 0)
    {
        fprintf(stderr, "%s encountered a fatal error.", argv[0]);
        sq_error_handle(status);
        exit(EXIT_FAILURE);
    }
    
    sq_write_array(stdout, wnd, wndw_len, 1);
    
    exit(EXIT_SUCCESS);
}