+ // 8bit
+ unsigned char *snd_out = (unsigned char *) pbuf + i * shm->format.channels;
+ if (shm->format.channels == 8)
+ {
+ // 7.1 surround
+ if (snd_swapstereo.value)
+ {
+ for (i = 0;i < snd_frames;i++, snd_p++)
+ {
+ val = (snd_p->sample[1] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[0] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[3] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[2] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[4] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[5] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[6] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[7] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ }
+ }
+ else
+ {
+ for (i = 0;i < snd_frames;i++, snd_p++)
+ {
+ val = (snd_p->sample[0] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[1] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[2] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[3] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[4] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[5] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[6] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[7] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ }
+ }
+ }
+ else if (shm->format.channels == 6)
+ {
+ // 5.1 surround
+ if (snd_swapstereo.value)
+ {
+ for (i = 0;i < snd_frames;i++, snd_p++)
+ {
+ val = (snd_p->sample[1] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[0] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[3] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[2] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[4] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[5] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ }
+ }
+ else
+ {
+ for (i = 0;i < snd_frames;i++, snd_p++)
+ {
+ val = (snd_p->sample[0] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[1] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[2] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[3] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[4] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[5] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ }
+ }
+ }
+ else if (shm->format.channels == 4)
+ {
+ // 4.0 surround
+ if (snd_swapstereo.value)
+ {
+ for (i = 0;i < snd_frames;i++, snd_p++)
+ {
+ val = (snd_p->sample[1] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[0] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[3] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[2] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ }
+ }
+ else
+ {
+ for (i = 0;i < snd_frames;i++, snd_p++)
+ {
+ val = (snd_p->sample[0] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[1] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[2] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[3] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ }
+ }
+ }
+ else if (shm->format.channels == 2)
+ {
+ // 2.0 stereo
+ if (snd_swapstereo.value)
+ {
+ for (i = 0;i < snd_frames;i++, snd_p++)
+ {
+ val = (snd_p->sample[1] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[0] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ }
+ }
+ else
+ {
+ for (i = 0;i < snd_frames;i++, snd_p++)
+ {
+ val = (snd_p->sample[0] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ val = (snd_p->sample[1] >> 8) + 128;*snd_out++ = bound(0, val, 255);
+ }
+ }
+ }
+ else if (shm->format.channels == 1)