Hello again. I'm using alsa-kernel. My configuration: SNDRV_PCM_HW_PARAM_ACCESS = SNDRV_PCM_ACCESS_RW_INTERLEAVED SNDRV_PCM_HW_PARAM_FORMAT = SNDRV_PCM_FORMAT_S16_LE SNDRV_PCM_HW_PARAM_SUBFORMAT = SNDRV_PCM_SUBFORMAT_STD SNDRV_PCM_HW_PARAM_CHANNELS = 2 SNDRV_PCM_HW_PARAM_RATE = 48000 I have a vsynced game loop that is running at 60fps: > int num_base_samples = 48000 * (1 / 60); > int num_samples = num_base_samples * 2; > int16_t buffer[num_samples] = {}; > > while (true) { > int16_t *samples = buffer; > for (int sample_i = 0; sample_i < num_base_samples; sample_i++) { > *samples++ = 0x33; > *samples++ = 0x33; > } > > struct snd_xferi transfer = {}; > transfer.buf = buffer; > transfer.frames = num_base_samples; > ioctl(fd, SNDRV_PCM_IOCTL_WRITEI_FRAMES, &transfer); > > // ioctl(fd, SNDRV_PCM_IOCTL_DRAIN); --> NECESSARY??? > // ioctl(fd, SNDRV_PCM_IOCTL_PREPARE); --> NECESSARY??? > } On the first iteration of SNDRV_PCM_IOCTL_WRITEI_FRAMES I get no error. All subsequent iterations, I get Broken Pipe error. So, to counteract this at the end of each frame I call SNDRV_PCM_IOCTL_DRAIN and SNDRV_PCM_IOCTL_PREPARE. This removes the Broken Pipe error however slows the program down by half and no sound is heard. How best to solve this issue? Thanks again -- Ryan McClue, Sydney