1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Brandon Low 2006-04-05 13:00:31 +00:00
parent 231d1d255c
commit 0fcd411965

View file

@ -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++ = 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);
if (buf > pcmbuf_end)
buf = (short *)audiobuffer;
sample = *buf;
*buf++ = MIN(MAX(sample - amplitude, -32768), 32767);
}
if (++count >= interval)
buf = get_mix_insert_pos();
while (i++ < samples)
{
count = 0;
state = !state;
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);
/* Toggle square wav side */
if (++count >= interval)
{
count = 0;
amplitude = -amplitude;
}
if (buf > pcmbuf_end)
buf = (short *)audiobuffer;
}
if (buf > pcmbuf_end)
buf = (short *)audiobuffer;
}
if (!playing) {
else
{
buf = (short *)audiobuffer;
while (i++ < samples)
{
*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;
}
pcm_play_data(NULL, (unsigned char *)audiobuffer, samples * 4);
}
}