summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dbverify.c26
1 files 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 <asoundlib.h>
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");
}