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; }
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; }