// OpenBSD // cc -O2 -Wall -lsndio sndio_test2.c #include #include #include #include void dump_par(struct sio_par *par) { if (par == NULL) { printf("failed\n"); return; } printf("(enc) : "); printf("%d ", par->bits); printf("%d ", par->bps); printf("%s ", par->sig ? "signed" : "unsigned"); printf("%s ", par->le ? "LE" : "BE"); printf("%s\n", par->msb ? "MSB" : "LSB"); printf("rchan : %d\n", par->rchan); printf("pchan : %d\n", par->pchan); printf("rate : %d\n", par->rate); printf("bufsz : %d\n", par->bufsz); printf("xrun : %d\n", par->xrun); printf("round : %d\n", par->round); printf("appbufsz : %d\n", par->appbufsz); printf("__pad : %#x %#x %#x\n", par->__pad[0], par->__pad[1], par->__pad[2]); printf("__magic : %#x\n", par->__magic); } void dump_cap(struct sio_cap *cap) { int i; if (cap == NULL) { printf("failed\n"); return; } for (i = 0; i < SIO_NENC; i++) { printf("enc[%d] : ", i); printf("%d ", cap->enc[i].bits); printf("%d ", cap->enc[i].bps); printf("%s ", cap->enc[i].sig ? "signed" : "unsigned"); printf("%s ", cap->enc[i].le ? "LE" : "BE"); printf("%s\n", cap->enc[i].msb ? "MSB" : "LSB"); } printf("rchan : "); for (i = 0; i < SIO_NCHAN; i++) printf("%d ", cap->rchan[i]); printf("\n"); printf("pchan : "); for (i = 0; i < SIO_NCHAN; i++) printf("%d ", cap->pchan[i]); printf("\n"); printf("rate : "); for (i = 0; i < SIO_NRATE; i++) printf("%d ", cap->rate[i]); printf("\n"); printf("__pad : "); for (i = 0; i < sizeof(cap->__pad) / sizeof(cap->__pad[0]); i++) printf("%#x ", cap->__pad[i]); printf("\n"); for (i = 0; i < cap->nconf; i++) { printf("confs[%d].enc : %#x\n", i, cap->confs[i].enc); printf("confs[%d].rchan : %#x\n", i, cap->confs[i].rchan); printf("confs[%d].pchan : %#x\n", i, cap->confs[i].pchan); printf("confs[%d].rate : %#x\n", i, cap->confs[i].rate); } } int main(int argc, char *argv[]) { struct sio_hdl *hdl; struct sio_par par; unsigned char *buf; int i, n, bufsize = 22050; hdl = sio_open((argc < 2) ? SIO_DEVANY : argv[1], SIO_PLAY, 0); if (hdl == NULL) { printf("sio_open NULL\n"); goto fin0; } sio_initpar(&par); par.bits = 8; par.bps = 1; par.sig = 0; par.le = SIO_LE_NATIVE; par.msb = 0; par.pchan = 1; par.rchan = 0; par.rate = 22050; par.xrun = SIO_IGNORE; par.appbufsz = bufsize; dump_par(&par); if (!sio_setpar(hdl, &par)) { printf("sio_setpar failed\n"); goto fin1; } if (!sio_getpar(hdl, &par)) { printf("sio_getpar failed\n"); goto fin1; } dump_par(&par); bufsize = par.appbufsz; buf = alloca(bufsize); for (i = 0; i < bufsize; i++) buf[i] = rand(); if (!sio_start(hdl)) { printf("sio_start failed\n"); goto fin1; } while (1) { n = sio_write(hdl, buf, par.appbufsz); putchar('.'); fflush(stdout); } //fin2: sio_stop(hdl); fin1: sio_close(hdl); fin0: return 0; }