+static void mix_samples(short *dest_buf, int *ym_buf, short *mp3_buf, int len, int stereo)\r
+{\r
+ if (mp3_buf)\r
+ {\r
+ if (stereo)\r
+ {\r
+ for (; len > 0; len--)\r
+ {\r
+ int l, r, lm, rm;\r
+ l = r = *dest_buf;\r
+ l += *ym_buf++; r += *ym_buf++;\r
+ lm = *mp3_buf++; rm = *mp3_buf++;\r
+ l += lm - lm/2; r += rm - rm/2;\r
+ Limit( l, MAXOUT, MINOUT );\r
+ Limit( r, MAXOUT, MINOUT );\r
+ *dest_buf++ = l; *dest_buf++ = r;\r
+ }\r
+ } else {\r
+ for (; len > 0; len--)\r
+ {\r
+ // TODO: normalize\r
+ int l = *ym_buf++;\r
+ l += *dest_buf;\r
+ l += *mp3_buf++;\r
+ Limit( l, MAXOUT, MINOUT );\r
+ *dest_buf++ = l;\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if (stereo)\r
+ {\r
+ for (; len > 0; len--)\r
+ {\r
+ int l, r;\r
+ l = r = *dest_buf;\r
+ l += *ym_buf++, r += *ym_buf++;\r
+ Limit( l, MAXOUT, MINOUT );\r
+ Limit( r, MAXOUT, MINOUT );\r
+ *dest_buf++ = l; *dest_buf++ = r;\r
+ }\r
+ } else {\r
+ for (; len > 0; len--)\r
+ {\r
+ int l = *ym_buf++;\r
+ l += *dest_buf;\r
+ Limit( l, MAXOUT, MINOUT );\r
+ *dest_buf++ = l;\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+\r
+// here we assume that length is different between games, but constant in one game\r
+\r
+static FILE *loaded_mp3 = 0;\r
+\r