[alsa-devel] How to transfer data to the endpoint (e.g. .wav file) in alsa external I/O plugin

Takashi Iwai tiwai at suse.de
Tue Nov 8 15:49:53 CET 2016


On Tue, 08 Nov 2016 07:45:07 +0100,
Hermes Zhang wrote:
> 
> Hi,
> 
> I'm a new in alsa plugin develop. Now I'm try to implement an I/O plugin for my platform in alsa. I can config the alsa plugin and start it, but when I'm deal with the data in the transfer api, I could not flush the data to the endpoint, e.g. .wav file.
> 
> I run below command to test my plugin:
> 
> arecord -D my_plug -c 1 -f S16_LE raw
> 
> I want to save the audio data to a wav file by my plugin. Then in my code, I try to write the data to the area structure like this:
> 
> static snd_pcm_sframes_t
> my_read (snd_pcm_ioplug_t * io,
>      const snd_pcm_channel_area_t * areas,
>      snd_pcm_uframes_t offset, snd_pcm_uframes_t size)
> {
>      /* I got the audio data from other api here */
> 
> memcpy(areas->addr + areas->first + areas->step * offset, my_data, size);

Both the first and the step fields are in bits, not in bytes.
You need to divide by 8:

	areas->addr + (areas->first + areas->step * offset) / 8


Takashi


More information about the Alsa-devel mailing list