static int play(struct audio_play *play) { struct buffer *buffer; unsigned int len; if (set_pause(0) == -1) return -1; buffer = &output[bindex]; /* wait for block to finish playing */ if (buffer->pcm_length == 0 && wait(buffer) == -1) return -1; /* prepare block */ len = audio_pcm(&buffer->pcm_data[buffer->pcm_length], play->nsamples, play->samples[0], play->samples[1], play->mode, play->stats); buffer->pcm_length += len; if (buffer->pcm_length + MAX_NSAMPLES * samplesize * 2 > samplerate * samplesize * 2) { write_dev(wave_handle, buffer); bindex = (bindex + 1) % NBUFFERS; output[bindex].pcm_length = 0; } return 0; }
static int play(struct audio_play *play) { unsigned char data[MAX_NSAMPLES * 2 * 2]; unsigned int len; len = audio_pcm(data, play->nsamples, play->samples[0], play->samples[1], play->mode, play->stats); return output(data, len); }
static int play(struct audio_play *play) { unsigned char data[MAX_NSAMPLES * 4 * 2]; unsigned int len; len = audio_pcm(data, play->nsamples, play->samples[0], play->samples[1], play->mode, play->stats); buffer.data = data; buffer.len = len; while (buffer.len) AuHandleEvents(server); return 0; }
static int play(struct audio_play *play) { struct buffer *buffer; unsigned int len; if (set_pause(0) == -1) return -1; if (output[bindex].pcm_nsamples + play->nsamples > MAX_NSAMPLES && drain() == -1) return -1; buffer = &output[bindex]; /* wait for block to finish playing */ if (buffer->pcm_nsamples == 0) { if (buff_wait(buffer) == -1) return -1; buffer->pcm_length = 0; } /* prepare block */ len = audio_pcm(&buffer->pcm_data[buffer->pcm_length], play->nsamples, play->samples[0], play->samples[1], play->mode, play->stats); buffer->pcm_nsamples += play->nsamples; buffer->pcm_length += len; if (buffer->pcm_nsamples >= NQUEUESAMPLES && drain() == -1) return -1; return 0; }
static int play(struct audio_play *play) { int err, len; char *ptr; ptr = buf; len = play->nsamples; audio_pcm(ptr, len, play->samples[0], play->samples[1], play->mode, play->stats); while (len > 0) { err = snd_pcm_mmap_writei(alsa_handle, ptr, len); if (err == -EAGAIN) continue; if (err < 0) { if (xrun_recovery(alsa_handle, err) < 0) { audio_error = snd_strerror(err); return -1; } break; } len -= err; ptr += err * sample_size; } return 0; }