ad_play_t *
ad_open_play_sps(int32 sps)
{
    ad_play_t *p;
    int32 i;
    HWAVEOUT h;

    if ((h = waveout_open(sps, sizeof(int16))) == NULL)
        return NULL;

    if ((p = (ad_play_t *) calloc(1, sizeof(ad_play_t))) == NULL) {
        fprintf(stderr, "calloc(1,%d) failed\n", sizeof(ad_play_t));
        waveOutClose(h);
        return NULL;
    }
    if ((p->wo_buf =
         (ad_wbuf_t *) calloc(N_WO_BUF, sizeof(ad_wbuf_t))) == NULL) {
        fprintf(stderr, "calloc(%d,%d) failed\n", N_WO_BUF,
                sizeof(ad_wbuf_t));
        free(p);
        waveOutClose(h);

        return NULL;
    }
    if ((p->busy = (char *) calloc(N_WO_BUF, sizeof(char))) == NULL) {
        fprintf(stderr, "calloc(%d,%d) failed\n", N_WO_BUF, sizeof(char));
        waveout_mem_cleanup(p, 0);
        free(p);
        waveOutClose(h);

        return NULL;
    }
    for (i = 0; i < N_WO_BUF; i++) {
        if (waveout_alloc_buf(&(p->wo_buf[i]), WO_BUFSIZE) < 0) {
            waveout_mem_cleanup(p, i);
            free(p);
            waveOutClose(h);

            return NULL;
        }
    }

    p->h_waveout = h;
    p->playing = 0;
    p->opened = 1;
    p->nxtbuf = 0;
    p->sps = sps;
    p->bps = sizeof(int16);     /* HACK!! Hardwired value for bytes/sec */

    return p;
}
Exemple #2
0
static int32 waveout_close (ad_play_t *p)
{
    int32 st;

    waveout_mem_cleanup (p, N_WO_BUF);
    
    if ((st = waveOutClose (p->h_waveout)) != 0) {
    	waveout_error("waveOutClose", st);
	return -1;
    }

    free (p);
    
    return 0;
}