summaryrefslogtreecommitdiffstats
path: root/apps/pcmbuf.c
diff options
context:
space:
mode:
authorBrandon Low <lostlogic@rockbox.org>2006-04-05 13:00:31 +0000
committerBrandon Low <lostlogic@rockbox.org>2006-04-05 13:00:31 +0000
commit0fcd4119656d44ac1ea695673180b8a4a8a88ea2 (patch)
tree62454a9410b463f2d1381357141db79308e3cd69 /apps/pcmbuf.c
parent231d1d255c0568664a1b657d27b6e770610c3c9c (diff)
downloadrockbox-0fcd4119656d44ac1ea695673180b8a4a8a88ea2.tar.gz
rockbox-0fcd4119656d44ac1ea695673180b8a4a8a88ea2.zip
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
Diffstat (limited to 'apps/pcmbuf.c')
-rw-r--r--apps/pcmbuf.c52
1 files changed, 30 insertions, 22 deletions
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);
}
}