PCM sound, refactored code940
[picodrive.git] / Pico / sound / mix.c
1 #define MAXOUT          (+32767)
2 #define MINOUT          (-32768)
3
4 /* limitter */
5 #define Limit(val, max,min) { \
6         if ( val > max )      val = max; \
7         else if ( val < min ) val = min; \
8 }
9
10
11
12
13 void memcpy32(int *dest, int *src, int count)
14 {
15         while (count--)
16                 *dest++ = *src++;
17 }
18
19
20 void memset32(int *dest, int c, int count)
21 {
22         while (count--)
23                 *dest++ = c;
24 }
25
26
27 void mix_32_to_16l_stereo(short *dest, int *src, int count)
28 {
29         int l, r;
30
31         for (; count > 0; count--)
32         {
33                 l = r = *dest;
34                 l += *src++;
35                 r += *src++;
36                 Limit( l, MAXOUT, MINOUT );
37                 Limit( r, MAXOUT, MINOUT );
38                 *dest++ = l;
39                 *dest++ = r;
40         }
41 }
42
43
44 void mix_32_to_16_mono(short *dest, int *src, int count)
45 {
46         int l;
47
48         for (; count > 0; count--)
49         {
50                 l = *dest;
51                 l += *src++;
52                 Limit( l, MAXOUT, MINOUT );
53                 *dest++ = l;
54         }
55 }
56
57