Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29037
Modified Files: Tag: desiredata s_audio_alsa.c s_audio_jack.c s_audio_oss.c s_audio_portaudio.c Log Message: cleanup
Index: s_audio_alsa.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/s_audio_alsa.c,v retrieving revision 1.5.4.5.2.2.2.8 retrieving revision 1.5.4.5.2.2.2.9 diff -C2 -d -r1.5.4.5.2.2.2.8 -r1.5.4.5.2.2.2.9 *** s_audio_alsa.c 9 Jul 2007 18:16:13 -0000 1.5.4.5.2.2.2.8 --- s_audio_alsa.c 9 Jul 2007 19:59:42 -0000 1.5.4.5.2.2.2.9 *************** *** 71,84 **** return 0; } ! err1 = snd_pcm_hw_params_set_access(dev->a_handle, ! hw_params, SND_PCM_ACCESS_RW_INTERLEAVED); if (err1 < 0) { ! err2 = snd_pcm_hw_params_set_access(dev->a_handle, ! hw_params, SND_PCM_ACCESS_MMAP_NONINTERLEAVED); ! } ! else err2 = -1; #if 0 ! post("err 1 %d (%s), err2 %d (%s)", err1, snd_strerror(err1), ! err2, snd_strerror(err2)); #endif return err1<0 && err2>=0; --- 71,80 ---- return 0; } ! err1 = snd_pcm_hw_params_set_access(dev->a_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED); if (err1 < 0) { ! err2 = snd_pcm_hw_params_set_access(dev->a_handle, hw_params, SND_PCM_ACCESS_MMAP_NONINTERLEAVED); ! } else err2 = -1; #if 0 ! post("err 1 %d (%s), err2 %d (%s)", err1, snd_strerror(err1), err2, snd_strerror(err2)); #endif return err1<0 && err2>=0; *************** *** 92,96 **** if (sys_verbose) { if (out) post("configuring sound output..."); ! else post("configuring sound input..."); } /* set hardware parameters... */ --- 88,92 ---- if (sys_verbose) { if (out) post("configuring sound output..."); ! else post("configuring sound input..."); } /* set hardware parameters... */ *************** *** 113,118 **** if (sys_verbose) post("Sample width set to %d bytes", dev->a_sampwidth); /* set the subformat */ ! err = snd_pcm_hw_params_set_subformat(dev->a_handle, ! hw_params, SND_PCM_SUBFORMAT_STD); check_error(err, "snd_pcm_hw_params_set_subformat"); /* set the number of channels */ --- 109,113 ---- if (sys_verbose) post("Sample width set to %d bytes", dev->a_sampwidth); /* set the subformat */ ! err = snd_pcm_hw_params_set_subformat(dev->a_handle, hw_params, SND_PCM_SUBFORMAT_STD); check_error(err, "snd_pcm_hw_params_set_subformat"); /* set the number of channels */ *************** *** 125,130 **** dev->a_channels = *channels; /* set the sampling rate */ ! err = snd_pcm_hw_params_set_rate_min(dev->a_handle, hw_params, ! (unsigned int *)rate, 0); check_error(err, "snd_pcm_hw_params_set_rate_min (input)"); #if 0 --- 120,124 ---- dev->a_channels = *channels; /* set the sampling rate */ ! err = snd_pcm_hw_params_set_rate_min(dev->a_handle, hw_params, (unsigned int *)rate, 0); check_error(err, "snd_pcm_hw_params_set_rate_min (input)"); #if 0 *************** *** 136,145 **** right now, it trips an assertion failure in ALSA lib */ #ifdef ALSAAPI9 ! err = snd_pcm_hw_params_set_period_size_near(dev->a_handle, ! hw_params, (snd_pcm_uframes_t)frag_size, 0); #else tmp_snd_pcm_uframes = frag_size; ! err = snd_pcm_hw_params_set_period_size_near(dev->a_handle, ! hw_params, &tmp_snd_pcm_uframes, 0); #endif check_error(err, "snd_pcm_hw_params_set_period_size_near (input)"); --- 130,137 ---- right now, it trips an assertion failure in ALSA lib */ #ifdef ALSAAPI9 ! err = snd_pcm_hw_params_set_period_size_near(dev->a_handle, hw_params, (snd_pcm_uframes_t)frag_size, 0); #else tmp_snd_pcm_uframes = frag_size; ! err = snd_pcm_hw_params_set_period_size_near(dev->a_handle, hw_params, &tmp_snd_pcm_uframes, 0); #endif check_error(err, "snd_pcm_hw_params_set_period_size_near (input)"); *************** *** 203,208 **** for (iodev = 0; iodev < naudioindev; iodev++) { alsa_numbertoname(audioindev[iodev], devname, 512); ! err = snd_pcm_open(&alsa_indev[alsa_nindev].a_handle, devname, ! SND_PCM_STREAM_CAPTURE, SND_PCM_NONBLOCK); check_error(err, "snd_pcm_open (input)"); if (err < 0) --- 195,199 ---- for (iodev = 0; iodev < naudioindev; iodev++) { alsa_numbertoname(audioindev[iodev], devname, 512); ! err = snd_pcm_open(&alsa_indev[alsa_nindev].a_handle, devname, SND_PCM_STREAM_CAPTURE, SND_PCM_NONBLOCK); check_error(err, "snd_pcm_open (input)"); if (err < 0) *************** *** 216,221 **** for (iodev = 0; iodev < naudiooutdev; iodev++) { alsa_numbertoname(audiooutdev[iodev], devname, 512); ! err = snd_pcm_open(&alsa_outdev[alsa_noutdev].a_handle, devname, ! SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK); check_error(err, "snd_pcm_open (output)"); if (err < 0) --- 207,211 ---- for (iodev = 0; iodev < naudiooutdev; iodev++) { alsa_numbertoname(audiooutdev[iodev], devname, 512); ! err = snd_pcm_open(&alsa_outdev[alsa_noutdev].a_handle, devname, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK); check_error(err, "snd_pcm_open (output)"); if (err < 0) *************** *** 230,257 **** Wini's code in s_audio_alsamm.c */ alsa_usemmap = 1; ! for (iodev = 0; iodev < alsa_nindev; iodev++) ! if (!alsaio_canmmap(&alsa_indev[iodev])) ! alsa_usemmap = 0; ! for (iodev = 0; iodev < alsa_noutdev; iodev++) ! if (!alsaio_canmmap(&alsa_outdev[iodev])) ! alsa_usemmap = 0; if (alsa_usemmap) { post("using mmap audio interface"); ! if (alsamm_open_audio(rate)) ! goto blewit; ! else return 0; } for (iodev = 0; iodev < alsa_nindev; iodev++) { int channels = chindev[iodev]; ! if (alsaio_setup(&alsa_indev[iodev], 0, &channels, &rate, ! nfrags, frag_size) < 0) ! goto blewit; inchans += channels; } for (iodev = 0; iodev < alsa_noutdev; iodev++) { int channels = choutdev[iodev]; ! if (alsaio_setup(&alsa_outdev[iodev], 1, &channels, &rate, ! nfrags, frag_size) < 0) ! goto blewit; outchans += channels; } --- 220,237 ---- Wini's code in s_audio_alsamm.c */ alsa_usemmap = 1; ! for (iodev = 0; iodev < alsa_nindev ; iodev++) if (!alsaio_canmmap(&alsa_indev [iodev])) alsa_usemmap = 0; ! for (iodev = 0; iodev < alsa_noutdev; iodev++) if (!alsaio_canmmap(&alsa_outdev[iodev])) alsa_usemmap = 0; if (alsa_usemmap) { post("using mmap audio interface"); ! if (alsamm_open_audio(rate)) goto blewit; else return 0; } for (iodev = 0; iodev < alsa_nindev; iodev++) { int channels = chindev[iodev]; ! if (alsaio_setup(&alsa_indev[iodev], 0, &channels, &rate, nfrags, frag_size) < 0) goto blewit; inchans += channels; } for (iodev = 0; iodev < alsa_noutdev; iodev++) { int channels = choutdev[iodev]; ! if (alsaio_setup(&alsa_outdev[iodev], 1, &channels, &rate, nfrags, frag_size) < 0) goto blewit; outchans += channels; } *************** *** 284,289 **** while (i--) { for (iodev = 0; iodev < alsa_noutdev; iodev++) ! snd_pcm_writei(alsa_outdev[iodev].a_handle, alsa_snd_buf, ! sys_dacblocksize); } } else if (inchans) { --- 264,268 ---- while (i--) { for (iodev = 0; iodev < alsa_noutdev; iodev++) ! snd_pcm_writei(alsa_outdev[iodev].a_handle, alsa_snd_buf, sys_dacblocksize); } } else if (inchans) { *************** *** 325,349 **** double timelast; t_sample *fp1, *fp2; ! int i, j, k, iodev, result, ch; int chansintogo, chansouttogo; unsigned int transfersize;
! if (alsa_usemmap) ! return alsamm_send_dacs(); ! ! if (!alsa_nindev && !alsa_noutdev) ! return SENDDACS_NO; ! chansintogo = sys_inchannels; chansouttogo = sys_outchannels; transfersize = sys_dacblocksize; - timelast = timenow; timenow = sys_getrealtime();
#ifdef DEBUG_ALSA_XFER ! if (timenow - timelast > 0.050) ! fprintf(stderr, "(%d)", ! (int)(1000 * (timenow - timelast))), fflush(stderr); callno++; #endif --- 304,321 ---- double timelast; t_sample *fp1, *fp2; ! int i, j, k, iodev, result, ch; int chansintogo, chansouttogo; unsigned int transfersize;
! if (alsa_usemmap) return alsamm_send_dacs(); ! if (!alsa_nindev && !alsa_noutdev) return SENDDACS_NO; chansintogo = sys_inchannels; chansouttogo = sys_outchannels; transfersize = sys_dacblocksize; timelast = timenow; timenow = sys_getrealtime();
#ifdef DEBUG_ALSA_XFER ! if (timenow - timelast > 0.050) fprintf(stderr, "(%d)", int(1000 * (timenow - timelast))), fflush(stderr); callno++; #endif *************** *** 374,378 **** float s1 = *fp2 * INT32_MAX; ((t_alsa_sample32 *)alsa_snd_buf)[j] = CLIP32(int(s1)); ! } for (; i < thisdevchans; i++, ch++) for (j = ch, k = sys_dacblocksize; k--; j += thisdevchans) --- 346,350 ---- float s1 = *fp2 * INT32_MAX; ((t_alsa_sample32 *)alsa_snd_buf)[j] = CLIP32(int(s1)); ! } for (; i < thisdevchans; i++, ch++) for (j = ch, k = sys_dacblocksize; k--; j += thisdevchans) *************** *** 383,390 **** j += thisdevchans, fp2++) { int s = int(*fp2 * 32767.); ! if (s > 32767) ! s = 32767; ! else if (s < -32767) ! s = -32767; ((t_alsa_sample16 *)alsa_snd_buf)[j] = s; } --- 355,359 ---- j += thisdevchans, fp2++) { int s = int(*fp2 * 32767.); ! if (s > 32767) s = 32767; else if (s < -32767) s = -32767; ((t_alsa_sample16 *)alsa_snd_buf)[j] = s; } *************** *** 393,411 **** ((t_alsa_sample16 *)alsa_snd_buf)[j] = 0; } ! result = snd_pcm_writei(alsa_outdev[iodev].a_handle, alsa_snd_buf, ! transfersize);
if (result != (int)transfersize) { #ifdef DEBUG_ALSA_XFER if (result >= 0 || errno == EAGAIN) ! fprintf(stderr, "ALSA: write returned %d of %d\n", ! result, transfersize); ! else fprintf(stderr, "ALSA: write: %s\n", ! snd_strerror(errno)); ! fprintf(stderr, ! "inputcount %d, outputcount %d, outbufsize %d\n", ! inputcount, outputcount, ! (ALSA_EXTRABUFFER + sys_advance_samples) ! * alsa_outdev[iodev].a_sampwidth * outchannels); #endif sys_log_error(ERR_DACSLEPT); --- 362,374 ---- ((t_alsa_sample16 *)alsa_snd_buf)[j] = 0; } ! result = snd_pcm_writei(alsa_outdev[iodev].a_handle, alsa_snd_buf, transfersize);
if (result != (int)transfersize) { #ifdef DEBUG_ALSA_XFER if (result >= 0 || errno == EAGAIN) ! fprintf(stderr, "ALSA: write returned %d of %d\n", result, transfersize); ! else fprintf(stderr, "ALSA: write: %s\n", snd_strerror(errno)); ! fprintf(stderr, "inputcount %d, outputcount %d, outbufsize %d\n", ! inputcount, outputcount, (ALSA_EXTRABUFFER + sys_advance_samples) * alsa_outdev[iodev].a_sampwidth * outchannels); #endif sys_log_error(ERR_DACSLEPT); *************** *** 418,423 **** if (sys_getrealtime() - timenow > 0.002) { #ifdef DEBUG_ALSA_XFER ! fprintf(stderr, "output %d took %d msec\n", ! callno, (int)(1000 * (timenow - timelast))), fflush(stderr); #endif timenow = sys_getrealtime(); --- 381,385 ---- if (sys_getrealtime() - timenow > 0.002) { #ifdef DEBUG_ALSA_XFER ! fprintf(stderr, "output %d took %d msec\n", callno, int(1000 * (timenow - timelast))), fflush(stderr); #endif timenow = sys_getrealtime(); *************** *** 431,450 **** int chans = (chansintogo < thisdevchans ? chansintogo : thisdevchans); chansouttogo -= chans; ! result = snd_pcm_readi(alsa_indev[iodev].a_handle, alsa_snd_buf, ! transfersize); if (result < (int)transfersize) { #ifdef DEBUG_ALSA_XFER if (result < 0) ! fprintf(stderr, ! "snd_pcm_read %d %d: %s\n", ! callno, xferno, snd_strerror(errno)); ! else fprintf(stderr, ! "snd_pcm_read %d %d returned only %d\n", ! callno, xferno, result); ! fprintf(stderr, ! "inputcount %d, outputcount %d, inbufsize %d\n", ! inputcount, outputcount, ! (ALSA_EXTRABUFFER + sys_advance_samples) ! * alsa_indev[iodev].a_sampwidth * inchannels); #endif sys_log_error(ERR_ADCSLEPT); --- 393,404 ---- int chans = (chansintogo < thisdevchans ? chansintogo : thisdevchans); chansouttogo -= chans; ! result = snd_pcm_readi(alsa_indev[iodev].a_handle, alsa_snd_buf, transfersize); if (result < (int)transfersize) { #ifdef DEBUG_ALSA_XFER if (result < 0) ! fprintf(stderr, "snd_pcm_read %d %d: %s\n", callno, xferno, snd_strerror(errno)); ! else fprintf(stderr, "snd_pcm_read %d %d returned only %d\n", callno, xferno, result); ! fprintf(stderr, "inputcount %d, outputcount %d, inbufsize %d\n", ! inputcount, outputcount, (ALSA_EXTRABUFFER + sys_advance_samples) * alsa_indev[iodev].a_sampwidth * inchannels); #endif sys_log_error(ERR_ADCSLEPT); *************** *** 453,467 **** if (alsa_indev[iodev].a_sampwidth == 4) { for (i = 0; i < chans; i++, ch++, fp1 += sys_dacblocksize) { ! for (j = ch, k = sys_dacblocksize, fp2 = fp1; k--; ! j += thisdevchans, fp2++) ! *fp2 = (float) ((t_alsa_sample32 *)alsa_snd_buf)[j] ! * (1./ INT32_MAX); } } else { for (i = 0; i < chans; i++, ch++, fp1 += sys_dacblocksize) { ! for (j = ch, k = sys_dacblocksize, fp2 = fp1; k--; ! j += thisdevchans, fp2++) ! *fp2 = (float) ((t_alsa_sample16 *)alsa_snd_buf)[j] ! * 3.051850e-05; } } --- 407,417 ---- if (alsa_indev[iodev].a_sampwidth == 4) { for (i = 0; i < chans; i++, ch++, fp1 += sys_dacblocksize) { ! for (j = ch, k = sys_dacblocksize, fp2 = fp1; k--; j += thisdevchans, fp2++) ! *fp2 = (float) ((t_alsa_sample32 *)alsa_snd_buf)[j] * (1./ INT32_MAX); } } else { for (i = 0; i < chans; i++, ch++, fp1 += sys_dacblocksize) { ! for (j = ch, k = sys_dacblocksize, fp2 = fp1; k--; j += thisdevchans, fp2++) ! *fp2 = (float) ((t_alsa_sample16 *)alsa_snd_buf)[j] * 3.051850e-05; } } *************** *** 472,477 **** if (sys_getrealtime() - timenow > 0.002) { #ifdef DEBUG_ALSA_XFER ! fprintf(stderr, "routine took %d msec\n", ! (int)(1000 * (sys_getrealtime() - timenow))); #endif sys_log_error(ERR_ADCSLEPT); --- 422,426 ---- if (sys_getrealtime() - timenow > 0.002) { #ifdef DEBUG_ALSA_XFER ! fprintf(stderr, "routine took %d msec\n", int(1000 * (sys_getrealtime() - timenow))); #endif sys_log_error(ERR_ADCSLEPT); *************** *** 489,504 **** if (sys_inchannels) { result = snd_pcm_delay(alsa_indev[iodev].a_handle, &indelay); ! if (result < 0) ! post("snd_pcm_delay 1 failed"); ! else post("in delay %d", indelay); } if (sys_outchannels) { result = snd_pcm_delay(alsa_outdev[iodev].a_handle, &outdelay); ! if (result < 0) ! post("snd_pcm_delay 2 failed"); ! else post("out delay %d", outdelay); } post("sum %d (%d mod 64)\n", indelay + outdelay, (indelay+outdelay)%64); - post("buf samples %d", alsa_buf_samps); } --- 438,448 ---- if (sys_inchannels) { result = snd_pcm_delay(alsa_indev[iodev].a_handle, &indelay); ! if (result < 0) post("snd_pcm_delay 1 failed"); else post("in delay %d", indelay); } if (sys_outchannels) { result = snd_pcm_delay(alsa_outdev[iodev].a_handle, &outdelay); ! if (result < 0) post("snd_pcm_delay 2 failed"); else post("out delay %d", outdelay); } post("sum %d (%d mod 64)\n", indelay + outdelay, (indelay+outdelay)%64); post("buf samples %d", alsa_buf_samps); } *************** *** 511,522 **** return; } ! memset(alsa_snd_buf, 0, ! alsa_indev[iodev].a_sampwidth * ! sys_dacblocksize * sys_outchannels); for (i = 0; i < 1000000; i++) { ! result = snd_pcm_writei(alsa_outdev[iodev].a_handle, alsa_snd_buf, ! sys_dacblocksize); ! if (result != (int)sys_dacblocksize) ! break; } post("%d written", i); --- 455,462 ---- return; } ! memset(alsa_snd_buf, 0, alsa_indev[iodev].a_sampwidth * sys_dacblocksize * sys_outchannels); for (i = 0; i < 1000000; i++) { ! result = snd_pcm_writei(alsa_outdev[iodev].a_handle, alsa_snd_buf, sys_dacblocksize); ! if (result != (int)sys_dacblocksize) break; } post("%d written", i); *************** *** 538,543 **** int i, result; for (i = 0; i < n; i++) { ! result = snd_pcm_readi(alsa_indev[iodev].a_handle, alsa_snd_buf, ! sys_dacblocksize); #if 0 if (result != sys_dacblocksize) --- 478,482 ---- int i, result; for (i = 0; i < n; i++) { ! result = snd_pcm_readi(alsa_indev[iodev].a_handle, alsa_snd_buf, sys_dacblocksize); #if 0 if (result != sys_dacblocksize) *************** *** 548,552 **** }
! /* call this only if both input and output are open */ static void alsa_checkiosync() { int result, giveup = 1000, alreadylogged = 0, iodev = 0; --- 487,491 ---- }
! /* call this only if both input and output are open */ static void alsa_checkiosync() { int result, giveup = 1000, alreadylogged = 0, iodev = 0; *************** *** 568,573 **** if (result < 0) { post("output snd_pcm_delay failed: %s", snd_strerror(result)); ! if (snd_pcm_status(alsa_outdev[iodev].a_handle, alsa_status) < 0) ! post("output snd_pcm_status failed"); else post("astate %d", snd_pcm_status_get_state(alsa_status)); return; --- 507,511 ---- if (result < 0) { post("output snd_pcm_delay failed: %s", snd_strerror(result)); ! if (snd_pcm_status(alsa_outdev[iodev].a_handle, alsa_status) < 0) post("output snd_pcm_status failed"); else post("astate %d", snd_pcm_status_get_state(alsa_status)); return; *************** *** 580,584 **** } for (iodev=0; iodev<alsa_nindev; iodev++) { ! result = snd_pcm_delay(alsa_indev[iodev].a_handle, &thisphase); if (result < 0) { snd_pcm_prepare(alsa_indev[iodev].a_handle); --- 518,522 ---- } for (iodev=0; iodev<alsa_nindev; iodev++) { ! result = snd_pcm_delay(alsa_indev[iodev].a_handle, &thisphase); if (result < 0) { snd_pcm_prepare(alsa_indev[iodev].a_handle); *************** *** 587,595 **** if (result < 0) { post("output snd_pcm_delay failed: %s", snd_strerror(result)); ! if (snd_pcm_status(alsa_outdev[iodev].a_handle, ! alsa_status) < 0) post("output snd_pcm_status failed"); ! else post("astate %d", ! snd_pcm_status_get_state(alsa_status)); return; } --- 525,531 ---- if (result < 0) { post("output snd_pcm_delay failed: %s", snd_strerror(result)); ! if (snd_pcm_status(alsa_outdev[iodev].a_handle, alsa_status) < 0) post("output snd_pcm_status failed"); ! else post("astate %d", snd_pcm_status_get_state(alsa_status)); return; } *************** *** 597,606 **** if (thisphase > maxphase) maxphase = thisphase; } ! /* the "correct" position is for all the phases to be exactly ! equal; but since we only make corrections sys_dacblocksize samples ! at a time, we just ask that the spread be not more than 3/4 ! of a block. */ ! if (maxphase <= minphase + (alsa_jittermax * (sys_dacblocksize / 4))) ! break;
if (!alreadylogged) --- 533,540 ---- if (thisphase > maxphase) maxphase = thisphase; } ! /* the "correct" position is for all the phases to be exactly ! equal; but since we only make corrections sys_dacblocksize samples ! at a time, we just ask that the spread be not more than 3/4 of a block. */ ! if (maxphase <= minphase + (alsa_jittermax * (sys_dacblocksize / 4))) break;
if (!alreadylogged) *************** *** 608,613 **** for (iodev = 0; iodev < alsa_noutdev; iodev++) { result = snd_pcm_delay(alsa_outdev[iodev].a_handle, &outdelay); ! if (result < 0) ! break; thisphase = alsa_buf_samps - outdelay; if (thisphase > minphase + sys_dacblocksize) { --- 542,546 ---- for (iodev = 0; iodev < alsa_noutdev; iodev++) { result = snd_pcm_delay(alsa_outdev[iodev].a_handle, &outdelay); ! if (result < 0) break; thisphase = alsa_buf_samps - outdelay; if (thisphase > minphase + sys_dacblocksize) { *************** *** 620,625 **** for (iodev = 0; iodev < alsa_nindev; iodev++) { result = snd_pcm_delay(alsa_indev[iodev].a_handle, &thisphase); ! if (result < 0) ! break; if (thisphase > minphase + sys_dacblocksize) { alsa_getzeros(iodev, 1); --- 553,557 ---- for (iodev = 0; iodev < alsa_nindev; iodev++) { result = snd_pcm_delay(alsa_indev[iodev].a_handle, &thisphase); ! if (result < 0) break; if (thisphase > minphase + sys_dacblocksize) { alsa_getzeros(iodev, 1); *************** *** 636,647 **** }
! static int alsa_nnames = 0; static char **alsa_names = 0;
void alsa_adddev(char *name) { ! if (alsa_nnames) ! alsa_names = (char **)t_resizebytes(alsa_names, ! alsa_nnames * sizeof(char *), ! (alsa_nnames+1) * sizeof(char *)); else alsa_names = (char **)t_getbytes(sizeof(char *)); alsa_names[alsa_nnames] = gensym(name)->s_name; --- 568,576 ---- }
! static int alsa_nnames = 0; static char **alsa_names = 0;
void alsa_adddev(char *name) { ! if (alsa_nnames) alsa_names = (char **)t_resizebytes(alsa_names, alsa_nnames*sizeof(char *), (alsa_nnames+1)*sizeof(char *)); else alsa_names = (char **)t_getbytes(sizeof(char *)); alsa_names[alsa_nnames] = gensym(name)->s_name; *************** *** 654,671 **** ndev++; if (devno < 2*ndev) { ! if (devno & 1) ! snprintf(devname, nchar, "plughw:%d", devno/2); else snprintf(devname, nchar, "hw:%d", devno/2); ! } ! else if (devno <2*ndev + alsa_nnames) snprintf(devname, nchar, "%s", alsa_names[devno - 2*ndev]); else snprintf(devname, nchar, "???"); }
! /* For each hardware card found, we list two devices, the "hard" and ! "plug" one. The card scan is derived from portaudio code. */ ! void alsa_getdevs(char *indevlist, int *nindevs, ! char *outdevlist, int *noutdevs, int *canmulti, ! int maxndev, int devdescsize) { int ndev = 0, cardno = -1, i, j; *canmulti = 2; /* supports multiple devices */ --- 583,596 ---- ndev++; if (devno < 2*ndev) { ! if (devno & 1) snprintf(devname, nchar, "plughw:%d", devno/2); else snprintf(devname, nchar, "hw:%d", devno/2); ! } else if (devno <2*ndev + alsa_nnames) snprintf(devname, nchar, "%s", alsa_names[devno - 2*ndev]); else snprintf(devname, nchar, "???"); }
! /* For each hardware card found, we list two devices, the "hard" and ! "plug" one. The card scan is derived from portaudio code. */ ! void alsa_getdevs(char *indevlist, int *nindevs, char *outdevlist, int *noutdevs, int *canmulti, int maxndev, int devdescsize) { int ndev = 0, cardno = -1, i, j; *canmulti = 2; /* supports multiple devices */
Index: s_audio_oss.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/s_audio_oss.c,v retrieving revision 1.6.4.2.2.2.2.4 retrieving revision 1.6.4.2.2.2.2.5 diff -C2 -d -r1.6.4.2.2.2.2.4 -r1.6.4.2.2.2.2.5 *** s_audio_oss.c 9 Jul 2007 17:51:14 -0000 1.6.4.2.2.2.2.4 --- s_audio_oss.c 9 Jul 2007 19:59:42 -0000 1.6.4.2.2.2.2.5 *************** *** 8,12 **** #include <linux/soundcard.h>
! #include "m_pd.h" #include "s_stuff.h" #include <errno.h> --- 8,13 ---- #include <linux/soundcard.h>
! #define PD_PLUSPLUS_FACE ! #include "desire.h" #include "s_stuff.h" #include <errno.h> *************** *** 81,100 **** cache the results, which in effect are the number of available devices. */ ! void oss_init(void) { ! int fd, i; static int countedthem = 0; if (countedthem) return; ! for (i = 0; i < 10; i++) { char devname[100]; if (i == 0) strcpy(devname, "/dev/dsp"); else sprintf(devname, "/dev/dsp%d", i); ! if ((fd = open(devname, O_WRONLY|O_NONBLOCK)) != -1) { ! oss_ndev++; ! close(fd); ! } else break; } countedthem = 1; }
! void oss_set32bit(void) {oss_32bit=1;}
typedef struct _multidev { --- 82,100 ---- cache the results, which in effect are the number of available devices. */ ! void oss_init() { static int countedthem = 0; if (countedthem) return; ! for (int i=0; i<10; i++) { char devname[100]; if (i == 0) strcpy(devname, "/dev/dsp"); else sprintf(devname, "/dev/dsp%d", i); ! int fd = open(devname, O_WRONLY|O_NONBLOCK); ! if (fd<0) break; ! oss_ndev++; ! close(fd); } countedthem = 1; }
! void oss_set32bit() {oss_32bit=1;}
typedef struct _multidev { *************** *** 155,160 **** if (!linux_fragsize) { linux_fragsize = OSS_DEFFRAGSIZE; ! while (linux_fragsize > sys_dacblocksize ! && linux_fragsize * 6 > sys_advance_samples) linux_fragsize = linux_fragsize/2; } --- 155,159 ---- if (!linux_fragsize) { linux_fragsize = OSS_DEFFRAGSIZE; ! while (linux_fragsize > sys_dacblocksize && linux_fragsize * 6 > sys_advance_samples) linux_fragsize = linux_fragsize/2; } *************** *** 196,201 **** if (defect > 0) { if (sys_verbose || defect > (dev->d_bufsize >> 2)) ! fprintf(stderr, ! "OSS: requested audio buffer size %d limited to %d\n", sys_advance_samples * (dev->d_bytespersamp * nchannels), dev->d_bufsize); sys_advance_samples = (dev->d_bufsize-OSS_XFERSAMPS(nchannels)) / (dev->d_bytespersamp*nchannels); --- 195,199 ---- if (defect > 0) { if (sys_verbose || defect > (dev->d_bufsize >> 2)) ! fprintf(stderr, "OSS: requested audio buffer size %d limited to %d\n", sys_advance_samples * (dev->d_bytespersamp * nchannels), dev->d_bufsize); sys_advance_samples = (dev->d_bufsize-OSS_XFERSAMPS(nchannels)) / (dev->d_bytespersamp*nchannels); *************** *** 230,258 ****
linux_nindevs = linux_noutdevs = 0; ! /* mark devices unopened */ ! for (i = 0; i < OSS_MAXDEV; i++) ! linux_adcs[i].d_fd = linux_dacs[i].d_fd = -1;
/* open output devices */ wantmore=0; ! if (noutdev < 0 || nindev < 0) ! bug("linux_open_audio"); ! ! for (n = 0; n < noutdev; n++) { int gotchans, j, inindex = -1; int thisdevice = (outdev[n] >= 0 ? outdev[n] : 0); int wantchannels = (nchout>n) ? chout[n] : wantmore; fd = -1; ! if (!wantchannels) ! goto end_out_loop; ! if (thisdevice > 0) sprintf(devname, "/dev/dsp%d", thisdevice); else sprintf(devname, "/dev/dsp"); /* search for input request for same device. Succeed only if the number of channels matches. */ for (j = 0; j < nindev; j++) ! if (indev[j] == thisdevice && chin[j] == wantchannels) ! inindex = j; ! /* if the same device is requested for input and output, ! try to open it read/write */ if (inindex >= 0) { sys_setalarm(1000000); --- 228,249 ----
linux_nindevs = linux_noutdevs = 0; ! /* mark devices unopened */ ! for (int i=0; i<OSS_MAXDEV; i++) linux_adcs[i].d_fd = linux_dacs[i].d_fd = -1;
/* open output devices */ wantmore=0; ! if (noutdev < 0 || nindev < 0) bug("linux_open_audio"); ! for (int n=0; n<noutdev; n++) { int gotchans, j, inindex = -1; int thisdevice = (outdev[n] >= 0 ? outdev[n] : 0); int wantchannels = (nchout>n) ? chout[n] : wantmore; fd = -1; ! if (!wantchannels) goto end_out_loop; if (thisdevice > 0) sprintf(devname, "/dev/dsp%d", thisdevice); else sprintf(devname, "/dev/dsp"); /* search for input request for same device. Succeed only if the number of channels matches. */ for (j = 0; j < nindev; j++) ! if (indev[j] == thisdevice && chin[j] == wantchannels) inindex = j; ! /* if the same device is requested for input and output, try to open it read/write */ if (inindex >= 0) { sys_setalarm(1000000); *************** *** 267,272 **** else if (fcntl(fd, F_SETFL, flags & (!O_NDELAY)) < 0) post("couldn't set audio device flags"); ! if (sys_verbose) ! post("opened %s for reading and writing\n", devname); linux_adcs[inindex].d_fd = fd; } --- 258,262 ---- else if (fcntl(fd, F_SETFL, flags & (!O_NDELAY)) < 0) post("couldn't set audio device flags"); ! if (sys_verbose) post("opened %s for reading and writing\n", devname); linux_adcs[inindex].d_fd = fd; } *************** *** 276,281 **** sys_setalarm(1000000); if ((fd = open(devname, O_WRONLY | O_AUDIOFLAG)) == -1) { ! post("%s (writeonly): %s", ! devname, strerror(errno)); break; } --- 266,270 ---- sys_setalarm(1000000); if ((fd = open(devname, O_WRONLY | O_AUDIOFLAG)) == -1) { ! post("%s (writeonly): %s", devname, strerror(errno)); break; } *************** *** 292,302 **** error("OSS: SNDCTL_DSP_GETCAPS failed %s", devname);
! gotchans = oss_setchannels(fd, ! (wantchannels>OSS_MAXCHPERDEV)?OSS_MAXCHPERDEV:wantchannels, ! devname);
! if (sys_verbose) ! post("opened audio output on %s; got %d channels", ! devname, gotchans);
if (gotchans < 2) { --- 281,287 ---- error("OSS: SNDCTL_DSP_GETCAPS failed %s", devname);
! gotchans = oss_setchannels(fd, (wantchannels>OSS_MAXCHPERDEV)?OSS_MAXCHPERDEV:wantchannels, devname);
! if (sys_verbose) post("opened audio output on %s; got %d channels", devname, gotchans);
if (gotchans < 2) { *************** *** 306,310 **** linux_dacs[linux_noutdevs].d_nchannels = gotchans; linux_dacs[linux_noutdevs].d_fd = fd; ! oss_configure(linux_dacs+linux_noutdevs, rate, 1, 0);
linux_noutdevs++; --- 291,295 ---- linux_dacs[linux_noutdevs].d_nchannels = gotchans; linux_dacs[linux_noutdevs].d_fd = fd; ! oss_configure(&linux_dacs[linux_noutdevs], rate, 1, 0);
linux_noutdevs++; *************** *** 373,393 ****
if (linux_nindevs) { ! if (sys_verbose) ! fprintf(stderr,("OSS: issuing first ADC 'read' ... ")); ! read(linux_adcs[0].d_fd, buf, ! linux_adcs[0].d_bytespersamp * ! linux_adcs[0].d_nchannels * sys_dacblocksize); if (sys_verbose) fprintf(stderr, "...done.\n"); } ! /* now go and fill all the output buffers. */ for (i = 0; i < linux_noutdevs; i++) { ! int j; ! memset(buf, 0, linux_dacs[i].d_bytespersamp * ! linux_dacs[i].d_nchannels * sys_dacblocksize); ! for (j = 0; j < sys_advance_samples/sys_dacblocksize; j++) ! write(linux_dacs[i].d_fd, buf, ! linux_dacs[i].d_bytespersamp * ! linux_dacs[i].d_nchannels * sys_dacblocksize); } sys_setalarm(0); --- 358,372 ----
if (linux_nindevs) { ! if (sys_verbose) fprintf(stderr,("OSS: issuing first ADC 'read' ... ")); ! read(linux_adcs[0].d_fd, buf, linux_adcs[0].d_bytespersamp * linux_adcs[0].d_nchannels * sys_dacblocksize); if (sys_verbose) fprintf(stderr, "...done.\n"); } ! /* now go and fill all the output buffers. */ for (i = 0; i < linux_noutdevs; i++) { ! t_oss_dev &d = linux_dacs[i]; ! memset(buf, 0, d.d_bytespersamp * d.d_nchannels * sys_dacblocksize); ! for (int j = 0; j < sys_advance_samples/sys_dacblocksize; j++) ! write(d.d_fd, buf, d.d_bytespersamp * d.d_nchannels * sys_dacblocksize); } sys_setalarm(0); *************** *** 397,401 **** }
! void oss_close_audio( void) { int i; for (i=0;i<linux_nindevs ;i++) close(linux_adcs[i].d_fd); --- 376,380 ---- }
! void oss_close_audio() { int i; for (i=0;i<linux_nindevs ;i++) close(linux_adcs[i].d_fd); *************** *** 408,416 ****
/* query audio devices for "available" data size. */ ! static void oss_calcspace(void) { int dev; audio_buf_info ainfo; for (dev=0; dev < linux_noutdevs; dev++) { ! if (ioctl(linux_dacs[dev].d_fd, SOUND_PCM_GETOSPACE, &ainfo) < 0) fprintf(stderr,"OSS: ioctl on output device %d failed",dev); linux_dacs[dev].d_space = ainfo.bytes; --- 387,395 ----
/* query audio devices for "available" data size. */ ! static void oss_calcspace() { int dev; audio_buf_info ainfo; for (dev=0; dev < linux_noutdevs; dev++) { ! if (ioctl(linux_dacs[dev].d_fd, SOUND_PCM_GETOSPACE,&ainfo) < 0) fprintf(stderr,"OSS: ioctl on output device %d failed",dev); linux_dacs[dev].d_space = ainfo.bytes; *************** *** 418,435 **** for (dev = 0; dev < linux_nindevs; dev++) { if (ioctl(linux_adcs[dev].d_fd, SOUND_PCM_GETISPACE,&ainfo) < 0) ! fprintf(stderr, "OSS: ioctl on input device %d, fd %d failed", ! dev, linux_adcs[dev].d_fd); linux_adcs[dev].d_space = ainfo.bytes; } }
! void linux_audiostatus(void) { ! int dev; if (!oss_blockmode) { oss_calcspace(); ! for (dev=0; dev < linux_noutdevs; dev++) ! fprintf(stderr, "dac %d space %d\n", dev, linux_dacs[dev].d_space); ! for (dev = 0; dev < linux_nindevs; dev++) ! fprintf(stderr, "adc %d space %d\n", dev, linux_adcs[dev].d_space); } } --- 397,410 ---- for (dev = 0; dev < linux_nindevs; dev++) { if (ioctl(linux_adcs[dev].d_fd, SOUND_PCM_GETISPACE,&ainfo) < 0) ! fprintf(stderr, "OSS: ioctl on input device %d, fd %d failed", dev, linux_adcs[dev].d_fd); linux_adcs[dev].d_space = ainfo.bytes; } }
! void linux_audiostatus() { if (!oss_blockmode) { oss_calcspace(); ! for (int dev=0; dev < linux_noutdevs; dev++) fprintf(stderr, "dac %d space %d\n", dev, linux_dacs[dev].d_space); ! for (int dev=0; dev < linux_nindevs; dev++) fprintf(stderr, "adc %d space %d\n", dev, linux_adcs[dev].d_space); } } *************** *** 438,489 **** in audio output and/or input. */
! static void oss_doresync( void) { int dev, zeroed = 0; char buf[OSS_MAXSAMPLEWIDTH * sys_dacblocksize * OSS_MAXCHPERDEV]; audio_buf_info ainfo;
! /* 1. if any input devices are ahead (have more than 1 buffer stored), ! drop one or more buffers worth */ for (dev = 0; dev < linux_nindevs; dev++) { ! if (linux_adcs[dev].d_space == 0) { ! linux_adcs_read(linux_adcs[dev].d_fd, buf, ! OSS_XFERSIZE(linux_adcs[dev].d_nchannels, ! linux_adcs[dev].d_bytespersamp)); ! } ! else while (linux_adcs[dev].d_space > ! OSS_XFERSIZE(linux_adcs[dev].d_nchannels, ! linux_adcs[dev].d_bytespersamp)) ! { ! linux_adcs_read(linux_adcs[dev].d_fd, buf, ! OSS_XFERSIZE(linux_adcs[dev].d_nchannels, ! linux_adcs[dev].d_bytespersamp)); ! if (ioctl(linux_adcs[dev].d_fd, SOUND_PCM_GETISPACE, &ainfo) < 0) { ! fprintf(stderr, "OSS: ioctl on input device %d, fd %d failed", dev, linux_adcs[dev].d_fd); break; } ! linux_adcs[dev].d_space = ainfo.bytes; } }
! /* 2. if any output devices are behind, feed them zeros to catch them ! up */ for (dev = 0; dev < linux_noutdevs; dev++) { ! while (linux_dacs[dev].d_space > linux_dacs[dev].d_bufsize - ! sys_advance_samples * (linux_dacs[dev].d_nchannels * ! linux_dacs[dev].d_bytespersamp)) ! { if (!zeroed) { ! unsigned int i; ! for (i = 0; i < OSS_XFERSAMPS(linux_dacs[dev].d_nchannels); i++) buf[i] = 0; zeroed = 1; } ! linux_dacs_write(linux_dacs[dev].d_fd, buf, ! OSS_XFERSIZE(linux_dacs[dev].d_nchannels, ! linux_dacs[dev].d_bytespersamp)); ! if (ioctl(linux_dacs[dev].d_fd, SOUND_PCM_GETOSPACE, &ainfo) < 0) { ! fprintf(stderr, "OSS: ioctl on output device %d, fd %d failed", dev, linux_dacs[dev].d_fd); break; } ! linux_dacs[dev].d_space = ainfo.bytes; } } --- 413,450 ---- in audio output and/or input. */
! static void oss_doresync() { int dev, zeroed = 0; char buf[OSS_MAXSAMPLEWIDTH * sys_dacblocksize * OSS_MAXCHPERDEV]; audio_buf_info ainfo;
! /* 1. if any input devices are ahead (have more than 1 buffer stored), drop one or more buffers worth */ for (dev = 0; dev < linux_nindevs; dev++) { ! t_oss_dev d = linux_adcs[dev]; ! if (d.d_space == 0) { ! linux_adcs_read(d.d_fd, buf, OSS_XFERSIZE(d.d_nchannels, d.d_bytespersamp)); ! } else while (d.d_space > OSS_XFERSIZE(d.d_nchannels, d.d_bytespersamp)) { ! linux_adcs_read(d.d_fd, buf, OSS_XFERSIZE(d.d_nchannels, d.d_bytespersamp)); ! if (ioctl(d.d_fd, SOUND_PCM_GETISPACE, &ainfo) < 0) { ! fprintf(stderr, "OSS: ioctl on input device %d, fd %d failed", dev, d.d_fd); break; } ! d.d_space = ainfo.bytes; } }
! /* 2. if any output devices are behind, feed them zeros to catch them up */ for (dev = 0; dev < linux_noutdevs; dev++) { ! t_oss_dev d = linux_dacs[dev]; ! while (d.d_space > d.d_bufsize - sys_advance_samples*d.d_nchannels*d.d_bytespersamp) { if (!zeroed) { ! for (unsigned int i = 0; i < OSS_XFERSAMPS(d.d_nchannels); i++) buf[i] = 0; zeroed = 1; } ! linux_dacs_write(d.d_fd, buf, OSS_XFERSIZE(d.d_nchannels, d.d_bytespersamp)); ! if (ioctl(d.d_fd, SOUND_PCM_GETOSPACE, &ainfo) < 0) { ! fprintf(stderr, "OSS: ioctl on output device %d, fd %d failed", dev, d.d_fd); break; } ! d.d_space = ainfo.bytes; } } *************** *** 491,508 **** number of frames which will let the others catch up. */ for (dev = 0; dev < linux_noutdevs; dev++) { ! if (linux_dacs[dev].d_space > linux_dacs[dev].d_bufsize - ! (sys_advance_samples - 1) * linux_dacs[dev].d_nchannels * ! linux_dacs[dev].d_bytespersamp) ! { ! linux_dacs[dev].d_dropcount = sys_advance_samples - 1 - ! (linux_dacs[dev].d_space - linux_dacs[dev].d_bufsize) / ! (linux_dacs[dev].d_nchannels * ! linux_dacs[dev].d_bytespersamp) ; ! } ! else linux_dacs[dev].d_dropcount = 0; } }
! int oss_send_dacs(void) { float *fp1, *fp2; int i, j, dev, rtnval = SENDDACS_YES; --- 452,463 ---- number of frames which will let the others catch up. */ for (dev = 0; dev < linux_noutdevs; dev++) { ! t_oss_dev d = linux_dacs[dev]; ! if (d.d_space > d.d_bufsize - (sys_advance_samples - 1) * d.d_nchannels * d.d_bytespersamp) { ! d.d_dropcount = sys_advance_samples - 1 - (d.d_space - d.d_bufsize) / (d.d_nchannels * d.d_bytespersamp); ! } else d.d_dropcount = 0; } }
! int oss_send_dacs() { float *fp1, *fp2; int i, j, dev, rtnval = SENDDACS_YES; *************** *** 510,546 **** t_oss_int16 *sp; t_oss_int32 *lp; ! /* the maximum number of samples we should have in the ADC buffer */ int idle = 0; int thischan; double timeref, timenow;
! if (!linux_nindevs && !linux_noutdevs) ! return SENDDACS_NO; ! if (!oss_blockmode) { /* determine whether we're idle. This is true if either (1) ! some input device has less than one buffer to read or (2) some ! output device has fewer than (sys_advance_samples) blocks buffered ! already. */ oss_calcspace(); ! for (dev=0; dev < linux_noutdevs; dev++) ! if (linux_dacs[dev].d_dropcount || ! (linux_dacs[dev].d_bufsize - linux_dacs[dev].d_space > ! sys_advance_samples * linux_dacs[dev].d_bytespersamp * ! linux_dacs[dev].d_nchannels)) ! idle = 1; ! for (dev=0; dev < linux_nindevs; dev++) ! if (linux_adcs[dev].d_space < ! OSS_XFERSIZE(linux_adcs[dev].d_nchannels, ! linux_adcs[dev].d_bytespersamp)) ! idle = 1; } if (idle && !oss_blockmode) { ! /* sometimes---rarely---when the ADC available-byte-count is ! zero, it's genuine, but usually it's because we're so ! late that the ADC has overrun its entire kernel buffer. We ! distinguish between the two by waiting 2 msec and asking again. ! There should be an error flag we could check instead; look for this ! someday... */ for (dev = 0;dev < linux_nindevs; dev++) if (linux_adcs[dev].d_space == 0) { sys_microsleep(sys_sleepgrain); /* tb: changed to sys_sleepgrain */ --- 465,494 ---- t_oss_int16 *sp; t_oss_int32 *lp; ! /* the maximum number of samples we should have in the ADC buffer */ int idle = 0; int thischan; double timeref, timenow;
! if (!linux_nindevs && !linux_noutdevs) return SENDDACS_NO; if (!oss_blockmode) { /* determine whether we're idle. This is true if either (1) ! some input device has less than one buffer to read or (2) some ! output device has fewer than (sys_advance_samples) blocks buffered already. */ oss_calcspace(); ! for (dev=0; dev < linux_noutdevs; dev++) { ! t_oss_dev d = linux_dacs[dev]; ! if (d.d_dropcount || (d.d_bufsize - d.d_space > sys_advance_samples * d.d_bytespersamp * d.d_nchannels)) idle = 1; ! } ! for (dev=0; dev < linux_nindevs; dev++) { ! t_oss_dev d = linux_adcs[dev]; ! if (d.d_space < OSS_XFERSIZE(d.d_nchannels, d.d_bytespersamp)) idle = 1; ! } } if (idle && !oss_blockmode) { ! /* sometimes---rarely---when the ADC available-byte-count is ! zero, it's genuine, but usually it's because we're so ! late that the ADC has overrun its entire kernel buffer. We ! distinguish between the two by waiting 2 msec and asking again. ! There should be an error flag we could check instead; look for this someday... */ for (dev = 0;dev < linux_nindevs; dev++) if (linux_adcs[dev].d_space == 0) { sys_microsleep(sys_sleepgrain); /* tb: changed to sys_sleepgrain */ *************** *** 557,572 **** input device should have more than one buffer readable and no output device should have less than sys_advance_samples-1 */ ! for (dev=0; dev < linux_noutdevs; dev++) ! if (!linux_dacs[dev].d_dropcount && ! (linux_dacs[dev].d_bufsize - linux_dacs[dev].d_space < ! (sys_advance_samples - 2) * ! (linux_dacs[dev].d_bytespersamp * ! linux_dacs[dev].d_nchannels))) goto badsync; for (dev=0; dev < linux_nindevs; dev++) ! if (linux_adcs[dev].d_space > 3 * ! OSS_XFERSIZE(linux_adcs[dev].d_nchannels, ! linux_adcs[dev].d_bytespersamp)) ! goto badsync;
/* return zero to tell the scheduler we're idle. */ --- 505,515 ---- input device should have more than one buffer readable and no output device should have less than sys_advance_samples-1 */ ! for (dev=0; dev < linux_noutdevs; dev++) { ! t_oss_dev d = linux_dacs[dev]; ! if (!d.d_dropcount && (d.d_bufsize - d.d_space < (sys_advance_samples - 2)*d.d_bytespersamp*d.d_nchannels)) goto badsync; + } for (dev=0; dev < linux_nindevs; dev++) ! if (linux_adcs[dev].d_space > 3 * OSS_XFERSIZE(linux_adcs[dev].d_nchannels, linux_adcs[dev].d_bytespersamp)) goto badsync;
/* return zero to tell the scheduler we're idle. */ *************** *** 581,600 **** timeref = sys_getrealtime(); for (dev=0, thischan = 0; dev < linux_noutdevs; dev++) { ! int nchannels = linux_dacs[dev].d_nchannels; ! if (linux_dacs[dev].d_dropcount) ! linux_dacs[dev].d_dropcount--; else { ! if (linux_dacs[dev].d_bytespersamp == 4) { ! for (i = sys_dacblocksize * nchannels, fp1 = sys_soundout + ! sys_dacblocksize*thischan, ! lp = (t_oss_int32 *)buf; i--; fp1++, lp++) { float f = *fp1 * 2147483648.; *lp = int(f >= 2147483647. ? 2147483647. : (f < -2147483648. ? -2147483648. : f)); } } else { ! for (i = sys_dacblocksize, fp1 = sys_soundout + ! sys_dacblocksize*thischan, ! sp = (t_oss_int16 *)buf; i--; fp1++, sp += nchannels) ! { for (j=0, fp2 = fp1; j<nchannels; j++, fp2 += sys_dacblocksize) { int s = int(*fp2 * 32767.); --- 524,540 ---- timeref = sys_getrealtime(); for (dev=0, thischan = 0; dev < linux_noutdevs; dev++) { ! t_oss_dev d = linux_dacs[dev]; ! int nchannels = d.d_nchannels; ! if (d.d_dropcount) d.d_dropcount--; else { ! if (d.d_bytespersamp == 4) { ! fp1 = sys_soundout + sys_dacblocksize*thischan; ! for (i = sys_dacblocksize * nchannels, lp = (t_oss_int32 *)buf; i--; fp1++, lp++) { float f = *fp1 * 2147483648.; *lp = int(f >= 2147483647. ? 2147483647. : (f < -2147483648. ? -2147483648. : f)); } } else { ! fp1 = sys_soundout + sys_dacblocksize*thischan; ! for (i = sys_dacblocksize, sp = (t_oss_int16 *)buf; i--; fp1++, sp += nchannels) { for (j=0, fp2 = fp1; j<nchannels; j++, fp2 += sys_dacblocksize) { int s = int(*fp2 * 32767.); *************** *** 605,614 **** } } ! linux_dacs_write(linux_dacs[dev].d_fd, buf, ! OSS_XFERSIZE(nchannels, linux_dacs[dev].d_bytespersamp)); if ((timenow = sys_getrealtime()) - timeref > 0.002) { ! if (!oss_blockmode) ! sys_log_error(ERR_DACSLEPT); ! else rtnval = SENDDACS_SLEPT; } timeref = timenow; --- 545,551 ---- } } ! linux_dacs_write(d.d_fd, buf, OSS_XFERSIZE(nchannels, d.d_bytespersamp)); if ((timenow = sys_getrealtime()) - timeref > 0.002) { ! if (!oss_blockmode) sys_log_error(ERR_DACSLEPT); else rtnval = SENDDACS_SLEPT; } timeref = timenow; *************** *** 616,651 **** thischan += nchannels; } ! memset(sys_soundout, 0, ! sys_outchannels * (sizeof(float) * sys_dacblocksize)); ! ! /* do input */
for (dev = 0, thischan = 0; dev < linux_nindevs; dev++) { int nchannels = linux_adcs[dev].d_nchannels; ! linux_adcs_read(linux_adcs[dev].d_fd, buf, ! OSS_XFERSIZE(nchannels, linux_adcs[dev].d_bytespersamp)); ! if ((timenow = sys_getrealtime()) - timeref > 0.002) { ! if (!oss_blockmode) ! sys_log_error(ERR_ADCSLEPT); ! else ! rtnval = SENDDACS_SLEPT; } timeref = timenow; ! if (linux_adcs[dev].d_bytespersamp == 4) { ! for (i = sys_dacblocksize*nchannels, ! fp1 = sys_soundin + thischan*sys_dacblocksize, ! lp = (t_oss_int32 *)buf; i--; fp1++, lp++) ! { ! *fp1 = ((float)(*lp))*(float)(1./2147483648.); ! } } else { ! for (i = sys_dacblocksize,fp1 = sys_soundin + thischan*sys_dacblocksize, ! sp = (t_oss_int16 *)buf; i--; fp1++, sp += nchannels) ! { ! for (j=0;j<nchannels;j++) ! fp1[j*sys_dacblocksize] = (float)sp[j]*(float)3.051850e-05; ! } } thischan += nchannels; --- 553,572 ---- thischan += nchannels; } ! memset(sys_soundout, 0, sys_outchannels * (sizeof(float) * sys_dacblocksize));
for (dev = 0, thischan = 0; dev < linux_nindevs; dev++) { int nchannels = linux_adcs[dev].d_nchannels; ! linux_adcs_read(linux_adcs[dev].d_fd, buf, OSS_XFERSIZE(nchannels, linux_adcs[dev].d_bytespersamp)); if ((timenow = sys_getrealtime()) - timeref > 0.002) { ! if (!oss_blockmode) sys_log_error(ERR_ADCSLEPT); else rtnval = SENDDACS_SLEPT; } timeref = timenow; ! fp1 = sys_soundin + thischan*sys_dacblocksize; if (linux_adcs[dev].d_bytespersamp == 4) { ! for (i = sys_dacblocksize*nchannels, lp = (t_oss_int32 *)buf; i--; fp1++, lp++) ! *fp1 = float(*lp)*float(1./2147483648.); } else { ! for (i = sys_dacblocksize, sp = (t_oss_int16 *)buf; i--; fp1++, sp += nchannels) ! for (j=0; j<nchannels; j++) fp1[j*sys_dacblocksize] = (float)sp[j]*(float)3.051850e-05; } thischan += nchannels; *************** *** 655,664 ****
void oss_getdevs(char *indevlist, int *nindevs, char *outdevlist, int *noutdevs, int *canmulti, int maxndev, int devdescsize) { ! int i, ndev; *canmulti = 2; /* supports multiple devices */ ! if ((ndev = oss_ndev) > maxndev) ndev = maxndev; ! for (i = 0; i < ndev; i++) { ! sprintf(indevlist + i * devdescsize, "OSS device #%d", i+1); ! sprintf(outdevlist + i * devdescsize, "OSS device #%d", i+1); } *nindevs = *noutdevs = ndev; --- 576,584 ----
void oss_getdevs(char *indevlist, int *nindevs, char *outdevlist, int *noutdevs, int *canmulti, int maxndev, int devdescsize) { ! int ndev = min(oss_ndev,maxndev); *canmulti = 2; /* supports multiple devices */ ! for (int i=0; i<ndev; i++) { ! sprintf(indevlist + i*devdescsize, "OSS device #%d", i+1); ! sprintf(outdevlist + i*devdescsize, "OSS device #%d", i+1); } *nindevs = *noutdevs = ndev;
Index: s_audio_jack.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/s_audio_jack.c,v retrieving revision 1.5.4.8.2.7.2.6 retrieving revision 1.5.4.8.2.7.2.7 diff -C2 -d -r1.5.4.8.2.7.2.6 -r1.5.4.8.2.7.2.7 *** s_audio_jack.c 9 Jul 2007 17:41:02 -0000 1.5.4.8.2.7.2.6 --- s_audio_jack.c 9 Jul 2007 19:59:42 -0000 1.5.4.8.2.7.2.7 *************** *** 2,5 **** --- 2,6 ---- #include <stdlib.h> #include <string.h> + #define PD_PLUSPLUS_FACE #include "desire.h" #include "m_simd.h" *************** *** 26,46 **** pthread_cond_t jack_sem; t_int jack_save_connection_state(t_int* dummy); ! static void jack_restore_connection_state(void); ! void run_all_idle_callbacks(void);
static int process (jack_nframes_t nframes, void *arg) { ! int j; ! float *out; ! float *in; ! if (nframes > JACK_OUT_MAX) jack_out_max = nframes; ! else jack_out_max = JACK_OUT_MAX; if (jack_filled >= nframes) { if (jack_filled != nframes) fprintf(stderr,"Partial read"); ! for (j = 0; j < sys_outchannels; j++) { ! out = (float *)jack_port_get_buffer(output_port[j], nframes); memcpy(out, jack_outbuf + (j * BUF_JACK), sizeof(float)*nframes); } ! for (j = 0; j < sys_inchannels; j++) { ! in = (float *)jack_port_get_buffer( input_port[j], nframes); memcpy(jack_inbuf + (j * BUF_JACK), in, sizeof(float)*nframes); } --- 27,43 ---- pthread_cond_t jack_sem; t_int jack_save_connection_state(t_int* dummy); ! static void jack_restore_connection_state(); ! void run_all_idle_callbacks();
static int process (jack_nframes_t nframes, void *arg) { ! jack_out_max = max(int(nframes),JACK_OUT_MAX); if (jack_filled >= nframes) { if (jack_filled != nframes) fprintf(stderr,"Partial read"); ! for (int j = 0; j < sys_outchannels; j++) { ! float *out = (float *)jack_port_get_buffer(output_port[j], nframes); memcpy(out, jack_outbuf + (j * BUF_JACK), sizeof(float)*nframes); } ! for (int j = 0; j < sys_inchannels; j++) { ! float *in = (float *)jack_port_get_buffer( input_port[j], nframes); memcpy(jack_inbuf + (j * BUF_JACK), in, sizeof(float)*nframes); } *************** *** 48,53 **** } else { /* PD could not keep up ! */ if (jack_started) jack_dio_error = 1; ! for (j = 0; j < outport_count; j++) { ! out = (float *)jack_port_get_buffer (output_port[j], nframes); memset(out, 0, sizeof (float) * nframes); } --- 45,50 ---- } else { /* PD could not keep up ! */ if (jack_started) jack_dio_error = 1; ! for (int j = 0; j < outport_count; j++) { ! float *out = (float *)jack_port_get_buffer (output_port[j], nframes); memset(out, 0, sizeof (float) * nframes); } *************** *** 55,65 **** jack_filled = 0; } ! /* tb: wait in the scheduler */ ! /* pthread_cond_broadcast(&jack_sem); */ return 0; }
! void sys_peakmeters(void); extern int sys_meters; /* true if we're metering */ extern float sys_inmax; /* max input amplitude */ --- 52,62 ---- jack_filled = 0; } ! /* tb: wait in the scheduler */ ! /* pthread_cond_broadcast(&jack_sem); */ return 0; }
! void sys_peakmeters(); extern int sys_meters; /* true if we're metering */ extern float sys_inmax; /* max input amplitude */ *************** *** 73,81 ****
static int cb_process (jack_nframes_t nframes, void *arg) { - int i,j; int timeout = int(nframes * 1e6 / sys_dacsr); if (canvas_dspstate == 0) { /* dsp is switched off, the audio is open ... */ ! for (j = 0; j < sys_outchannels; j++) { t_sample *out = (t_sample *)jack_port_get_buffer (output_port[j], nframes); zeroblock(out, dspticks_per_jacktick * sys_dacblocksize); --- 70,77 ----
static int cb_process (jack_nframes_t nframes, void *arg) { int timeout = int(nframes * 1e6 / sys_dacsr); if (canvas_dspstate == 0) { /* dsp is switched off, the audio is open ... */ ! for (int j=0; j<sys_outchannels; j++) { t_sample *out = (t_sample *)jack_port_get_buffer (output_port[j], nframes); zeroblock(out, dspticks_per_jacktick * sys_dacblocksize); *************** *** 94,109 **** return 0; } ! for (i = 0; i != dspticks_per_jacktick; ++i) { /* get sound from the inputs */ ! for (j = 0; j < sys_inchannels; j++) { t_sample *in = (t_sample *)jack_port_get_buffer(input_port[j], nframes); ! copyblock(sys_soundin + j * sys_dacblocksize, ! in + i * sys_dacblocksize, ! sys_dacblocksize); } /* run dsp */ sched_tick(sys_time + sys_time_per_dsp_tick); /* send sound to the output */ ! for (j = 0; j < sys_outchannels; j++) { t_sample *out = (t_sample *)jack_port_get_buffer (output_port[j], nframes); copyblock(out + i * sys_dacblocksize, sys_soundout + j * sys_dacblocksize, sys_dacblocksize); --- 90,104 ---- return 0; } ! for (int i = 0; i != dspticks_per_jacktick; ++i) { /* get sound from the inputs */ ! for (int j=0; j<sys_inchannels; j++) { t_sample *in = (t_sample *)jack_port_get_buffer(input_port[j], nframes); ! copyblock(sys_soundin + j * sys_dacblocksize, in + i * sys_dacblocksize, sys_dacblocksize); } /* run dsp */ sched_tick(sys_time + sys_time_per_dsp_tick); /* send sound to the output */ ! int j; ! for (j=0; j<sys_outchannels; j++) { t_sample *out = (t_sample *)jack_port_get_buffer (output_port[j], nframes); copyblock(out + i * sys_dacblocksize, sys_soundout + j * sys_dacblocksize, sys_dacblocksize); *************** *** 138,174 **** }
! static void jack_shutdown (void *arg) { ! /* register idle callback in scheduler */ ! sys_callback(jack_shutdown_handler, NULL, 0); ! } ! ! static int jack_graph_order_callback(void* arg) { ! sys_callback(jack_save_connection_state, NULL, 0); ! return 0; ! }
! static char** jack_get_clients(void) { const char **jack_ports; - int i,j; int num_clients = 0; regex_t port_regex; ! jack_ports = jack_get_ports( jack_client, "", "", 0 ); ! regcomp( &port_regex, "^[^:]*", REG_EXTENDED ); jack_client_names[0] = NULL; /* Build a list of clients from the list of ports */ ! for (i=0; jack_ports[i] != NULL; i++) { int client_seen; regmatch_t match_info; char tmp_client_name[100]; /* extract the client name from the port name, using a regex that parses the clientname:portname syntax */ ! regexec( &port_regex, jack_ports[i], 1, &match_info, 0 ); ! memcpy( tmp_client_name, &jack_ports[i][match_info.rm_so], ! match_info.rm_eo - match_info.rm_so ); tmp_client_name[ match_info.rm_eo - match_info.rm_so ] = '\0'; /* do we know about this port's client yet? */ client_seen = 0; ! for (j = 0; j < num_clients; j++) ! if( strcmp( tmp_client_name, jack_client_names[j] ) == 0 ) ! client_seen = 1; if (!client_seen) { jack_client_names[num_clients] = (char*)getbytes(strlen(tmp_client_name) + 1); --- 133,159 ---- }
! /* register idle callback in scheduler */ ! static void jack_shutdown (void *arg) {sys_callback(jack_shutdown_handler, NULL, 0);} ! static int jack_graph_order_callback(void* arg) {sys_callback(jack_save_connection_state, NULL, 0); return 0;}
! static char** jack_get_clients() { const char **jack_ports; int num_clients = 0; regex_t port_regex; ! jack_ports = jack_get_ports(jack_client, "", "", 0); ! regcomp(&port_regex, "^[^:]*", REG_EXTENDED); jack_client_names[0] = NULL; /* Build a list of clients from the list of ports */ ! for (int i=0; jack_ports[i] != NULL; i++) { int client_seen; regmatch_t match_info; char tmp_client_name[100]; /* extract the client name from the port name, using a regex that parses the clientname:portname syntax */ ! regexec(&port_regex, jack_ports[i], 1, &match_info, 0); ! memcpy(tmp_client_name, &jack_ports[i][match_info.rm_so], match_info.rm_eo-match_info.rm_so); tmp_client_name[ match_info.rm_eo - match_info.rm_so ] = '\0'; /* do we know about this port's client yet? */ client_seen = 0; ! for (int j=0; j<num_clients; j++) if (strcmp(tmp_client_name, jack_client_names[j])==0) client_seen = 1; if (!client_seen) { jack_client_names[num_clients] = (char*)getbytes(strlen(tmp_client_name) + 1); *************** *** 177,181 **** * it in spot 0 put it in spot 0 and move whatever * was already in spot 0 to the end. */ ! if (strcmp( "alsa_pcm", tmp_client_name ) == 0 && num_clients > 0) { char* tmp; /* alsa_pcm goes in spot 0 */ --- 162,166 ---- * it in spot 0 put it in spot 0 and move whatever * was already in spot 0 to the end. */ ! if (strcmp("alsa_pcm",tmp_client_name)==0 && num_clients>0) { char* tmp; /* alsa_pcm goes in spot 0 */ *************** *** 183,195 **** jack_client_names[ num_clients ] = jack_client_names[0]; jack_client_names[0] = tmp; ! strcpy( jack_client_names[0], tmp_client_name); } else { /* put the new client at the end of the client list */ ! strcpy( jack_client_names[ num_clients ], tmp_client_name ); } num_clients++; } } ! /* for (i=0;i<num_clients;i++) post("client: %s",jack_client_names[i]); */ free(jack_ports); return jack_client_names; --- 168,180 ---- jack_client_names[ num_clients ] = jack_client_names[0]; jack_client_names[0] = tmp; ! strcpy(jack_client_names[0], tmp_client_name); } else { /* put the new client at the end of the client list */ ! strcpy(jack_client_names[ num_clients ], tmp_client_name); } num_clients++; } } ! /* for (int i=0; i<num_clients; i++) post("client: %s",jack_client_names[i]); */ free(jack_ports); return jack_client_names; *************** *** 205,215 **** entered = 1; if (strlen(client) > 96) return -1; ! sprintf( regex_pattern, "%s:.*", client ); ! jack_ports = jack_get_ports( jack_client, regex_pattern, NULL, JackPortIsOutput); if (jack_ports) for (i=0;jack_ports[i] != NULL && i < sys_inchannels;i++) if (jack_connect (jack_client, jack_ports[i], jack_port_name (input_port[i]))) fprintf (stderr, "cannot connect input ports %s -> %s\n", jack_ports[i],jack_port_name (input_port[i])); ! jack_ports = jack_get_ports( jack_client, regex_pattern, NULL, JackPortIsInput); if (jack_ports) for (i=0;jack_ports[i] != NULL && i < sys_outchannels;i++) --- 190,200 ---- entered = 1; if (strlen(client) > 96) return -1; ! sprintf(regex_pattern, "%s:.*", client); ! jack_ports = jack_get_ports(jack_client, regex_pattern, NULL, JackPortIsOutput); if (jack_ports) for (i=0;jack_ports[i] != NULL && i < sys_inchannels;i++) if (jack_connect (jack_client, jack_ports[i], jack_port_name (input_port[i]))) fprintf (stderr, "cannot connect input ports %s -> %s\n", jack_ports[i],jack_port_name (input_port[i])); ! jack_ports = jack_get_ports(jack_client, regex_pattern, NULL, JackPortIsInput); if (jack_ports) for (i=0;jack_ports[i] != NULL && i < sys_outchannels;i++) *************** *** 295,303 **** sys_dacsr = srate; /* create the ports */ ! for (j = 0; j < inchans; j++) { sprintf(port_name, "input%d", j); if (!input_port[j]) input_port[j] = jack_port_register (jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); } ! for (j = 0; j < outchans; j++) { sprintf(port_name, "output%d", j); if (!output_port[j]) output_port[j] = jack_port_register (jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); --- 280,288 ---- sys_dacsr = srate; /* create the ports */ ! for (int j = 0; j < inchans; j++) { sprintf(port_name, "input%d", j); if (!input_port[j]) input_port[j] = jack_port_register (jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); } ! for (int j = 0; j < outchans; j++) { sprintf(port_name, "output%d", j); if (!output_port[j]) output_port[j] = jack_port_register (jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); *************** *** 326,337 **** }
! void jack_close_audio(void) { if (jack_client) { - int i; jack_deactivate(jack_client); jack_started = 0; jack_client_close(jack_client); jack_client = NULL; ! for (i = 0; i <NUM_JACK_PORTS; i++) { input_port[i] = NULL; output_port[i] = NULL; --- 311,321 ---- }
! void jack_close_audio() { if (jack_client) { jack_deactivate(jack_client); jack_started = 0; jack_client_close(jack_client); jack_client = NULL; ! for (int i = 0; i <NUM_JACK_PORTS; i++) { input_port[i] = NULL; output_port[i] = NULL; *************** *** 340,344 **** }
! int jack_send_dacs(void) { float *fp; int j; --- 324,328 ---- }
! int jack_send_dacs() { float *fp; int j; *************** *** 386,392 **** }
! void jack_listdevs (void) { ! post("device listing not implemented for jack yet\n"); ! }
/* ports connected to the inputs */ --- 370,374 ---- }
! void jack_listdevs () {post("device listing not implemented for jack yet\n");}
/* ports connected to the inputs */ *************** *** 397,403 **** /* tb: save the current state of pd's jack connections */ t_int jack_save_connection_state(t_int* dummy) { - int i; if (jack_ignore_graph_callback) return 0; ! for (i = 0; i != NUM_JACK_PORTS; ++i) { /* saving the inputs connections */ if (jack_in_connections[i]) free(jack_in_connections[i]); --- 379,384 ---- /* tb: save the current state of pd's jack connections */ t_int jack_save_connection_state(t_int* dummy) { if (jack_ignore_graph_callback) return 0; ! for (int i = 0; i != NUM_JACK_PORTS; ++i) { /* saving the inputs connections */ if (jack_in_connections[i]) free(jack_in_connections[i]); *************** *** 413,423 ****
/* todo: don't try to connect twice if we're both input and output host */ ! static void jack_restore_connection_state(void) { ! int i, j, status; post("restoring connections"); ! for (i = 0; i != NUM_JACK_PORTS; ++i) { /* restoring the inputs connections */ if (jack_in_connections[i]) { ! j = 0; while (1) { const char* src_port = jack_in_connections[i][j]; --- 394,404 ----
/* todo: don't try to connect twice if we're both input and output host */ ! static void jack_restore_connection_state() { ! int status; post("restoring connections"); ! for (int i = 0; i != NUM_JACK_PORTS; ++i) { /* restoring the inputs connections */ if (jack_in_connections[i]) { ! int j = 0; while (1) { const char* src_port = jack_in_connections[i][j]; *************** *** 430,434 **** /* restoring the output connections */ if (jack_out_connections[i]) { ! j = 0; while (1) { const char* dst_port = jack_out_connections[i][j]; --- 411,415 ---- /* restoring the output connections */ if (jack_out_connections[i]) { ! int j = 0; while (1) { const char* dst_port = jack_out_connections[i][j];
Index: s_audio_portaudio.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/s_audio_portaudio.c,v retrieving revision 1.1.2.21.2.4 retrieving revision 1.1.2.21.2.5 diff -C2 -d -r1.1.2.21.2.4 -r1.1.2.21.2.5 *** s_audio_portaudio.c 9 Jul 2007 18:16:13 -0000 1.1.2.21.2.4 --- s_audio_portaudio.c 9 Jul 2007 19:59:42 -0000 1.1.2.21.2.5 *************** *** 65,81 **** static int pddev2padev(int pdindev,int isinput); static int padev2pddev(int padev,int isinput); ! int process (const void *input, void *output, unsigned long frameCount, ! const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData);
- #if 0 - static int patestCallback(const void* inputBuffer, - void* outputBuffer, - unsigned long framesPerBuffer, - const PaStreamCallbackTimeInfo* timeInfo, - PaStreamCallbackFlags statusFlags, - void* userData); - #endif - static int pa_indev = -1, pa_outdev = -1;
--- 65,71 ---- static int pddev2padev(int pdindev,int isinput); static int padev2pddev(int padev,int isinput); ! int process (const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData);
static int pa_indev = -1, pa_outdev = -1;
*************** *** 198,204 **** return 1; } - #ifndef DEBUG if(sys_verbose) - #endif post("successfully started"); return 0; --- 188,192 ---- *************** *** 208,232 **** extern int sys_meters; /* true if we're metering */
- #if 0 - static int patestCallback( - const void *inputBuffer, void *outputBuffer, - unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo *timeInfo, - PaStreamCallbackFlags statusFlags, void *userData) { - float** outputs = (float**)outputBuffer; - static float phase; - for (int frameIndex=0; frameIndex<(int)framesPerBuffer; frameIndex++) { - /* Output sine wave on every channel. */ - outputs[0][frameIndex] = (float) sin(phase); - outputs[1][frameIndex] = (float) sin(phase); - phase += 0.05; - if (phase >= 2*M_PI) phase -= 2*M_PI; - } - for (int i=0; (unsigned)i != framesPerBuffer / sys_dacblocksize; ++i) { - sched_tick(sys_time + sys_time_per_dsp_tick); - } - return 0; - } - #endif - void run_all_idle_callbacks(); void sys_xrun_notification(); /* in m_sched.c */ --- 196,199 ---- *************** *** 260,267 ****
void pa_close_audio() { ! #ifndef DEBUG ! if(sys_verbose) ! #endif ! post("closing portaudio"); if (pa_inchans || pa_outchans) { if (pa_stream) { --- 227,231 ----
void pa_close_audio() { ! if(sys_verbose) post("closing portaudio"); if (pa_inchans || pa_outchans) { if (pa_stream) { *************** *** 273,280 **** } sys_setscheduler(0); ! #ifndef DEBUG ! if(sys_verbose) ! #endif ! post("portaudio closed"); pa_inchans = pa_outchans = 0; pa_indev = pa_outdev = -1; --- 237,241 ---- } sys_setscheduler(0); ! if(sys_verbose) post("portaudio closed"); pa_inchans = pa_outchans = 0; pa_indev = pa_outdev = -1;