diff options
-rw-r--r-- | apps/pcmbuf.c | 52 |
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) { | |||
835 | void pcmbuf_beep(unsigned int frequency, size_t duration, int amplitude) | 835 | void pcmbuf_beep(unsigned int frequency, size_t duration, int amplitude) |
836 | { | 836 | { |
837 | unsigned int count = 0, i = 0; | 837 | unsigned int count = 0, i = 0; |
838 | bool state = false; | ||
839 | unsigned int interval = NATIVE_FREQUENCY / frequency; | 838 | unsigned int interval = NATIVE_FREQUENCY / frequency; |
839 | long sample; | ||
840 | short *buf; | 840 | short *buf; |
841 | short *pcmbuf_end = (short *)guardbuf; | 841 | short *pcmbuf_end = (short *)guardbuf; |
842 | bool playing = pcm_is_playing(); | ||
843 | size_t samples = NATIVE_FREQUENCY / 1000 * duration; | 842 | size_t samples = NATIVE_FREQUENCY / 1000 * duration; |
844 | 843 | ||
845 | if (playing) { | 844 | if (pcm_is_playing()) |
846 | buf = get_mix_insert_pos(); | ||
847 | } else { | ||
848 | buf = (short *)audiobuffer; | ||
849 | } | ||
850 | while (i++ < samples) | ||
851 | { | 845 | { |
852 | long sample = *buf; | 846 | buf = get_mix_insert_pos(); |
853 | if (state) { | 847 | while (i++ < samples) |
848 | { | ||
849 | sample = *buf; | ||
854 | *buf++ = MIN(MAX(sample + amplitude, -32768), 32767); | 850 | *buf++ = MIN(MAX(sample + amplitude, -32768), 32767); |
855 | if (buf > pcmbuf_end) | 851 | if (buf > pcmbuf_end) |
856 | buf = (short *)audiobuffer; | 852 | buf = (short *)audiobuffer; |
857 | sample = *buf; | 853 | sample = *buf; |
858 | *buf++ = MIN(MAX(sample + amplitude, -32768), 32767); | 854 | *buf++ = MIN(MAX(sample + amplitude, -32768), 32767); |
859 | } else { | 855 | |
860 | *buf++ = MIN(MAX(sample - amplitude, -32768), 32767); | 856 | /* Toggle square wav side */ |
857 | if (++count >= interval) | ||
858 | { | ||
859 | count = 0; | ||
860 | amplitude = -amplitude; | ||
861 | } | ||
861 | if (buf > pcmbuf_end) | 862 | if (buf > pcmbuf_end) |
862 | buf = (short *)audiobuffer; | 863 | buf = (short *)audiobuffer; |
863 | sample = *buf; | ||
864 | *buf++ = MIN(MAX(sample - amplitude, -32768), 32767); | ||
865 | } | 864 | } |
866 | 865 | } | |
867 | if (++count >= interval) | 866 | else |
867 | { | ||
868 | buf = (short *)audiobuffer; | ||
869 | while (i++ < samples) | ||
868 | { | 870 | { |
869 | count = 0; | 871 | *buf++ = amplitude; |
870 | state = !state; | 872 | if (buf > pcmbuf_end) |
873 | buf = (short *)audiobuffer; | ||
874 | *buf++ = amplitude; | ||
875 | |||
876 | if (++count >= interval) | ||
877 | { | ||
878 | count = 0; | ||
879 | amplitude = -amplitude; | ||
880 | } | ||
881 | if (buf > pcmbuf_end) | ||
882 | buf = (short *)audiobuffer; | ||
871 | } | 883 | } |
872 | if (buf > pcmbuf_end) | ||
873 | buf = (short *)audiobuffer; | ||
874 | } | ||
875 | if (!playing) { | ||
876 | pcm_play_data(NULL, (unsigned char *)audiobuffer, samples * 4); | 884 | pcm_play_data(NULL, (unsigned char *)audiobuffer, samples * 4); |
877 | } | 885 | } |
878 | } | 886 | } |