From 08a91f1fa3a5888c2a97943c9a36384e30f21db1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 15 Feb 2010 19:50:35 +0100 Subject: sleep between two sounds --- dbverify.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/dbverify.c b/dbverify.c index 6b7121b..e6d9dfe 100644 --- a/dbverify.c +++ b/dbverify.c @@ -5,11 +5,11 @@ #include static double linear_to_dB(double v) { - return 20.0 * log10(v); + return 20.0 * log10(v); } static double dB_to_linear(double v) { - return pow(10.0, v / 20.0); + return pow(10.0, v / 20.0); } static float *generate_signal(unsigned n_samples, double amplitude, double frequency) { @@ -31,7 +31,7 @@ static snd_pcm_t *open_pcm(const char *name, unsigned *rate) { snd_pcm_hw_params_t *hw; snd_pcm_uframes_t t; snd_output_t *output = NULL; - int dir = 1; + int dir = 0; snd_pcm_hw_params_alloca(&hw); @@ -118,6 +118,9 @@ static int play_pcm(snd_pcm_t *pcm, float *samples, unsigned n_samples) { if ((r = snd_pcm_recover(pcm, t, 0)) >= 0) continue; + if (snd_pcm_prepare(pcm) >= 0) + continue; + fprintf(stderr, "Failed to write samples: %s\n", snd_strerror(r)); return r; } @@ -126,7 +129,7 @@ static int play_pcm(snd_pcm_t *pcm, float *samples, unsigned n_samples) { samples += t; } - /* snd_pcm_drain(pcm); */ + snd_pcm_drain(pcm); return 0; } @@ -221,6 +224,7 @@ int main(int argc, char *argv[]) { long min_discrete, max_discrete, step1, step2, step1_alsa_dB, step2_alsa_dB; double step1_dB, step2_dB, attenuation; float *signal1 = NULL, *signal2 = NULL; + double amplitude = 0.75; if (argc < 3 || argc > 5) { fprintf(stderr, @@ -303,14 +307,14 @@ int main(int argc, char *argv[]) { printf("Attenuation factor is %0.4f (%0.2f dB).\n", attenuation, linear_to_dB(attenuation)); - if (!(signal1 = generate_signal(rate, 1.0, 440)) | - !(signal2 = generate_signal(rate, attenuation, 440))) { + if (!(signal1 = generate_signal(rate, amplitude, 440)) | + !(signal2 = generate_signal(rate, amplitude * attenuation, 440))) { fprintf(stderr, "Failed to generate test signal.\n"); goto finish; } for (;;) { - printf("Playing 1s of audio at amplitude %0.4f, mixer set to %li (%0.2f dB).\n", 1.0, step1, step1_dB); + printf("Playing 1s of audio at amplitude %0.4f, mixer set to %li (%0.2f dB).\n", amplitude, step1, step1_dB); if ((r = snd_mixer_selem_set_playback_volume_all(selem, step1)) < 0) { fprintf(stderr, "Failed to set element volume step: %s\n", snd_strerror(r)); @@ -320,7 +324,10 @@ int main(int argc, char *argv[]) { if (play_pcm(pcm, signal1, rate) < 0) goto finish; - printf("Playing 1s of audio at amplitude %0.4f, mixer set to %li (%0.2f dB).\n", attenuation, step2, step2_dB); + printf("Sleeping 1s...\n"); + sleep(1); + + printf("Playing 1s of audio at amplitude %0.4f, mixer set to %li (%0.2f dB).\n", amplitude*attenuation, step2, step2_dB); if ((r = snd_mixer_selem_set_playback_volume_all(selem, step2)) < 0) { fprintf(stderr, "Failed to set element volume step: %s\n", snd_strerror(r)); @@ -330,6 +337,9 @@ int main(int argc, char *argv[]) { if (play_pcm(pcm, signal2, rate) < 0) goto finish; + printf("Sleeping 1s...\n"); + sleep(1); + printf("Looping. Press C-c to quit.\n"); } -- cgit