diff -Nraub mplayer.ori/libao2/ao_pcm.c mplayer/libao2/ao_pcm.c --- mplayer.ori/libao2/ao_pcm.c 2006-06-05 15:46:03.000000000 -0400 +++ mplayer/libao2/ao_pcm.c 2006-10-10 09:48:30.000000000 -0400 @@ -205,8 +205,20 @@ } #endif + if (ao_data.channels == 6 || ao_data.channels == 5) { + int i, samplesize = wavhdr.bits/8; + for (i = 0; i < len; i += samplesize*ao_data.channels) { + //L R SL SR C LFE -> L R C LFE SL SR + //L R SL SR C -> L R C SL SR + fwrite(data+i, samplesize, 2, fp); + fwrite(data+i+4*samplesize, samplesize, (ao_data.channels+1)%2+1, fp); + fwrite(data+i+2*samplesize, samplesize, 2, fp); + } + len -= len % (ao_data.channels*samplesize); + } else { //printf("PCM: Writing chunk!\n"); fwrite(data,len,1,fp); + } if(ao_pcm_waveheader) wavhdr.data_length += len;