At Tue, 03 Apr 2007 15:19:01 +0100, Gordon Miller wrote: > > Thanks Takashi > > I went for this : > > /*******************************************************/ > void > record_block (void *buffer) > { > int rc, needed = MAX_LEN; > void *buf_ptr = buffer; > > do > { > rc = snd_pcm_readi (handle, buf_ptr, needed); > needed -= rc; > buf_ptr += rc * (stereo_channel ? BPSSTEREO : BPSMONO); > } > while (needed); > > } /* end record_block */ > /****************************************************/ > > I have a global variable "stereo_channel" as you see that is 0 (mono), 1 > (stereo left only) or 2 (stereo right only). If it is non-zero I > multiply by BPSSTEREO (4) else BPSMONO (2). So "needed" counts down to > 0, and buf_ptr moves along. > > It's not pretty, but it works ! Repeating read is indeed a correct implementation. (It should be so even for normal file reads.) But I'd suggest to check the return value of snd_pcm_readi() whether it's zero or negative. Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel