sound: sandbox: Use the correct frequency
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>
diff --git a/arch/sandbox/cpu/sdl.c b/arch/sandbox/cpu/sdl.c
index 36f1bf0..c940a47 100644
--- a/arch/sandbox/cpu/sdl.c
+++ b/arch/sandbox/cpu/sdl.c
@@ -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 @@
uint frequency;
uint audio_pos;
uint audio_size;
+ uint sample_rate;
uint8_t *audio_data;
bool audio_active;
bool inited;
@@ -283,7 +288,7 @@
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 @@
goto err;
}
sdl.audio_active = true;
+ sdl.sample_rate = wanted.freq;
return 0;
@@ -322,7 +328,8 @@
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);