From 0fcd4119656d44ac1ea695673180b8a4a8a88ea2 Mon Sep 17 00:00:00 2001 From: Brandon Low Date: Wed, 5 Apr 2006 13:00:31 +0000 Subject: Fix bug #4896 and make the beep code a bit cleaner git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9514 a1c6a512-1295-4272-9138-f99709370657 --- apps/pcmbuf.c | 52 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 22 deletions(-) (limited to 'apps') diff --git a/apps/pcmbuf.c b/apps/pcmbuf.c index 7a261fecbe..18ca40eaaa 100644 --- a/apps/pcmbuf.c +++ b/apps/pcmbuf.c @@ -835,44 +835,52 @@ static inline short* get_mix_insert_pos(void) { void pcmbuf_beep(unsigned int frequency, size_t duration, int amplitude) { unsigned int count = 0, i = 0; - bool state = false; unsigned int interval = NATIVE_FREQUENCY / frequency; + long sample; short *buf; short *pcmbuf_end = (short *)guardbuf; - bool playing = pcm_is_playing(); size_t samples = NATIVE_FREQUENCY / 1000 * duration; - if (playing) { - buf = get_mix_insert_pos(); - } else { - buf = (short *)audiobuffer; - } - while (i++ < samples) + if (pcm_is_playing()) { - long sample = *buf; - if (state) { + buf = get_mix_insert_pos(); + while (i++ < samples) + { + sample = *buf; *buf++ = MIN(MAX(sample + amplitude, -32768), 32767); if (buf > pcmbuf_end) buf = (short *)audiobuffer; sample = *buf; *buf++ = MIN(MAX(sample + amplitude, -32768), 32767); - } else { - *buf++ = MIN(MAX(sample - amplitude, -32768), 32767); + + /* Toggle square wav side */ + if (++count >= interval) + { + count = 0; + amplitude = -amplitude; + } if (buf > pcmbuf_end) buf = (short *)audiobuffer; - sample = *buf; - *buf++ = MIN(MAX(sample - amplitude, -32768), 32767); } - - if (++count >= interval) + } + else + { + buf = (short *)audiobuffer; + while (i++ < samples) { - count = 0; - state = !state; + *buf++ = amplitude; + if (buf > pcmbuf_end) + buf = (short *)audiobuffer; + *buf++ = amplitude; + + if (++count >= interval) + { + count = 0; + amplitude = -amplitude; + } + if (buf > pcmbuf_end) + buf = (short *)audiobuffer; } - if (buf > pcmbuf_end) - buf = (short *)audiobuffer; - } - if (!playing) { pcm_play_data(NULL, (unsigned char *)audiobuffer, samples * 4); } } -- cgit v1.2.3