-#ifndef EXTERNAL_YM2612\r
- if (mix_buffer_length < length) {\r
- mix_buffer = realloc(mix_buffer, length*4<<stereo); // FIXME: need to free this at some point\r
- if (!mix_buffer) return;\r
- mix_buffer_length = length;\r
- }\r
-#endif\r
- memset(mix_buffer, 0, length*4<<stereo);\r
-\r
- /* mix to 32bit temporary buffer */\r
- chan_render(mix_buffer, length, &ym2612.CH[0], stereo|((pan&0x003)<<4)); // flags: stereo, lastchan, disabled, ?, pan_r, pan_l\r
- chan_render(mix_buffer, length, &ym2612.CH[1], stereo|((pan&0x00c)<<2));\r
- chan_render(mix_buffer, length, &ym2612.CH[2], stereo|((pan&0x030) ));\r
- chan_render(mix_buffer, length, &ym2612.CH[3], stereo|((pan&0x0c0)>>2));\r
- chan_render(mix_buffer, length, &ym2612.CH[4], stereo|((pan&0x300)>>4));\r
- chan_render(mix_buffer, length, &ym2612.CH[5], stereo|((pan&0xc00)>>6)|(ym2612.dacen<<2)|2);\r
+ /* mix to 32bit dest */\r
+ // flags: stereo, lastchan, disabled, ?, pan_r, pan_l\r
+ active_chs |= chan_render(buffer, length, &ym2612.CH[0], stereo|((pan&0x003)<<4)) << 0;\r
+ active_chs |= chan_render(buffer, length, &ym2612.CH[1], stereo|((pan&0x00c)<<2)) << 1;\r
+ active_chs |= chan_render(buffer, length, &ym2612.CH[2], stereo|((pan&0x030) )) << 2;\r
+ active_chs |= chan_render(buffer, length, &ym2612.CH[3], stereo|((pan&0x0c0)>>2)) << 3;\r
+ active_chs |= chan_render(buffer, length, &ym2612.CH[4], stereo|((pan&0x300)>>4)) << 4;\r
+ active_chs |= chan_render(buffer, length, &ym2612.CH[5], stereo|((pan&0xc00)>>6)|(ym2612.dacen<<2)|2) << 5;\r