static void alsa_poll_ready_playing (gpointer data, gint source, GdkInputCondition condition) { alsa_driver * const d = data; snd_pcm_sframes_t w; struct timeval tv; if(!d->firstpoll) { w = snd_pcm_writei(d->soundfd, d->sndbuf, d->p_fragsize); if(d->verbose) g_print("Written: %li from %li samples\n", w, d->p_fragsize); if(w != d->p_fragsize) { if(w < 0) { fprintf(stderr, "driver_alsa2: write() returned -1.\n--- \"%s\"\n", snd_strerror(w)); } else { fprintf(stderr, "driver_alsa2: write not completely done.\n"); } } gettimeofday(&tv, NULL); d->outtime = tv.tv_sec + tv.tv_usec / 1e6; d->playtime += (double) d->p_fragsize / d->p_mixfreq;//!!! } d->firstpoll = FALSE; audio_mix(d->sndbuf, d->p_fragsize, d->p_mixfreq, d->mf); }
static void alsa_poll_ready_playing (gpointer data, gint source, GdkInputCondition condition) { alsa_driver * const d = data; int byte_count = (d->stereo + 1) * (d->bits / 8) * d->fragsize; int w; struct timeval tv; w = snd_pcm_write(d->soundfd, d->sndbuf, byte_count); if(w != byte_count) { if(w < 0) { fprintf(stderr, "driver_alsa2: write() returned -1.\n--- \"%s\"", snd_strerror(w)); } else { fprintf(stderr, "driver_alsa2: write not completely done.\n"); } } gettimeofday(&tv, NULL); d->outtime = tv.tv_sec + tv.tv_usec / 1e6; d->playtime += (double) d->fragsize / d->playrate; audio_mix(d->sndbuf, d->fragsize, d->playrate, d->mf); }
static void oss_poll_ready_playing (gpointer data, gint source, GdkInputCondition condition) { oss_driver * const d = data; int w; int size; struct timeval tv; if(!d->firstpoll) { size = (d->stereo + 1) * (d->bits / 8) * d->fragsize; if((w = write(d->soundfd, d->sndbuf, size) != size)) { if(w == -1) { fprintf(stderr, "driver_oss: write() returned -1.\n"); } else { fprintf(stderr, "driver_oss: write not completely done.\n"); } } if(!d->realtimecaps) { gettimeofday(&tv, NULL); d->outtime = tv.tv_sec + tv.tv_usec / 1e6; d->playtime += (double) d->fragsize / d->playrate; } } d->firstpoll = FALSE; audio_mix(d->sndbuf, d->fragsize, d->playrate, d->mf); }
static void sndfile_poll_ready_playing (gpointer data, gint source, GdkInputCondition condition) { sndfile_driver * const d = data; if(!d->firstpoll) { sf_writef_short (d->outfile, d->sndbuf, d->sndbuf_size / 4); d->playtime += (double)(d->sndbuf_size) / 4 / d->p_mixfreq; } d->firstpoll = FALSE; #ifdef WORDS_BIGENDIAN audio_mix(d->sndbuf, d->sndbuf_size / 4, d->p_mixfreq, ST_MIXER_FORMAT_S16_BE | ST_MIXER_FORMAT_STEREO); #else audio_mix(d->sndbuf, d->sndbuf_size / 4, d->p_mixfreq, ST_MIXER_FORMAT_S16_LE | ST_MIXER_FORMAT_STEREO); #endif }
static void file_poll_ready_playing (gpointer data, gint source, GdkInputCondition condition) { file_driver * const d = data; if(!d->firstpoll) { afWriteFrames(d->outfile, AF_DEFAULT_TRACK, d->sndbuf, d->sndbuf_size / 4); d->playtime += (double)(d->sndbuf_size) / 4 / d->p_mixfreq; } d->firstpoll = FALSE; audio_mix(d->sndbuf, d->sndbuf_size / 4, d->p_mixfreq, ST_MIXER_FORMAT_S16_LE | ST_MIXER_FORMAT_STEREO); }