Hum... so .. the code if ((areas[chn].step % 16) !=0 ) is because a 16bits format's been used. If I wanted a 32bits sample format I should change that for if ((areas[chn].step % 32) !=0 ) ?? and the offset for the first doen's need any changes, is it? Just a opinion about all this, I think that alsa developers should design graphs for these things, as has in gstreamer documentation. It is a lot easer to understand that way. It is because I dont understand very well yet, but as I am going to work with sound stuff especially in linux environment, Ill be very soon offering help for this! ;o) Tks! ------------------- Guilherme Longo Dept. Eng. da Computação Unaerp Linux User - #484927 *Before Asking http://www.istf.com.br/?page=perguntas !- I'd rather die on my feet than live on my knees -! Takashi Iwai wrote: > At Tue, 30 Jun 2009 11:40:20 -0300, > Guilherme wrote: > >> Tks takashi.... >> >> The doubt comes from this block of code: >> >> for (chn = 0; chn < channels; chn++) { >> if ((areas[chn].first % 8) != 0) { >> printf("areas[%i].first == %i, abortando...\n", chn, >> areas[chn].first); >> exit(EXIT_FAILURE); >> } >> //pega endereço e offset da area >> samples[chn] = /*(signed short *)*/(((unsigned char >> *)areas[chn].addr) + (areas[chn].first / 8)); >> >> if ((areas[chn].step % 16) != 0) { >> printf("areas[%i].step == %i, aborting...\n", chn, >> areas[chn].step); >> exit(EXIT_FAILURE); >> } >> >> steps[chn] = areas[chn].step / 8; >> samples[chn] += offset * steps[chn]; >> } >> >> first: >> >> areas[chn].first % 8 ( I am using chn = 1). So for the only area that >> I have, if I get the value of the parameter 'first' isn't divisible by >> 8, the program exits. >> The same doubt happens with "areas[chn].step % 16" and >> "areas[chn].step / 8". >> >> This is the parameter I am using: >> >> static snd_pcm_format_t format = SND_PCM_FORMAT_S16; //sample format >> unsigned 16 bit endian >> >> Perhaps with this practical example I can understand better. >> > > Oops, I wrote wrongly. The first and step fields are not in bytes but > bits. That's why 8 and 16 appear there, corresponding to 1 byte and 2 > bytes. > > > Takashi > > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel