On Mon, 15 Nov 2010, Irfan Shaikh wrote: > Hello, > > I am reading an raw PCM file and want to write on PCM device using direct write (interleaved). I have gone through PCM.c test application. > I am trying tio write PCM audio data as follows. I am unable to use snd_pcm_mmap_begin and snd_pcm_mmap_commit properly. Please help me to use using these APIs > Question : > 1) How can i write to Ring buffer area (any pcm audio data)? //Any example or explanation other than pcm.c > 2) Do i need to write diffferently for each channel as shown in pcm.c > > I am trying to do following but not succeded (reading pcm file and writing content on device) . ANy thing played on audio device would help me in understanding. > > snd_pcm_channel_area_t my_areas; > snd_pcm_uframes_t offset, frames, size; > snd_pcm_sframes_t avail, commitres; > int result; > char *buffer; > > while(1) > { > avail = snd_pcm_avail_update(handle); > if(avail>=period_size) > { > size=periodsize > while (size > 0) { > frames = size; > err = snd_pcm_mmap_begin(handle, &my_areas, &offset, &frames); > mybuffer=(char *)malloc(frames*2); > result = fread (mybuffer,1,(frames*2),pFile); > my_areas.addr=mybuffer; // IS THIS CORRECT ? WILL THIS WORK ? How can i write my audio file data here in areas? What's this? You just overwrite the read-only pointer value in my_areas. Use the ring buffer pointer and do memcpy or so. Use area returned from mmap_begin(), don't forget to add offset. Also, application must check, if my_areas description (buffer arrangement) is expected (check for sample step/offset). The pcm.c is good example. Just try to understand what my_areas really does. And no, it's not necessary to handle just one sample, if you know the PCM ring buffer layout. Jaroslav ----- Jaroslav Kysela <perex@xxxxxxxx> Linux Kernel Sound Maintainer ALSA Project, Red Hat, Inc. _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel