sound: sandbox: Use the correct frequency
authorSimon Glass <sjg@chromium.org>
Fri, 16 Nov 2018 02:56:14 +0000 (19:56 -0700)
committerSimon Glass <sjg@chromium.org>
Thu, 29 Nov 2018 16:30:05 +0000 (09:30 -0700)
At present we request a particular frequency but we may not get the exact
same frequency in response. So use the actual frequency for generation of
the square wave. This ensures that the pitch remains accurate on all host
machines.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/sandbox/cpu/sdl.c

index 36f1bf0c83bfe9e7b0692a0b26267ee1074962b5..c940a473d7c03e31c96d8556fe8852e2af26b567 100644 (file)
@@ -9,6 +9,10 @@
 #include <sound.h>
 #include <asm/state.h>
 
+enum {
+       SAMPLE_RATE     = 22050,
+};
+
 static struct sdl_info {
        SDL_Surface *screen;
        int width;
@@ -18,6 +22,7 @@ static struct sdl_info {
        uint frequency;
        uint audio_pos;
        uint audio_size;
+       uint sample_rate;
        uint8_t *audio_data;
        bool audio_active;
        bool inited;
@@ -283,7 +288,7 @@ int sandbox_sdl_sound_init(void)
        return 0;
 
        /* Set the audio format */
-       wanted.freq = 22050;
+       wanted.freq = SAMPLE_RATE;
        wanted.format = AUDIO_S16;
        wanted.channels = 1;    /* 1 = mono, 2 = stereo */
        wanted.samples = 1024;  /* Good low-latency value for callback */
@@ -309,6 +314,7 @@ int sandbox_sdl_sound_init(void)
                goto err;
        }
        sdl.audio_active = true;
+       sdl.sample_rate = wanted.freq;
 
        return 0;
 
@@ -322,7 +328,8 @@ int sandbox_sdl_sound_start(uint frequency)
        if (!sdl.audio_active)
                return -1;
        sdl.frequency = frequency;
-       sound_create_square_wave(22050, (unsigned short *)sdl.audio_data,
+       sound_create_square_wave(sdl.sample_rate,
+                                (unsigned short *)sdl.audio_data,
                                 sdl.audio_size, frequency);
        sdl.audio_pos = 0;
        SDL_PauseAudio(0);