¿Es mi impresión, o el array llamado PCM va a ser el contenido del audio en mono? No sé, igual estoy algo confundido, pero eso de que opere con buffer[2*i+1] y buffer[2*i] da toda la impresión de que se estén mezclando ambos canales, en ese caso la operación adecuada para sumar ambos canales sea esa con shl y or.
Salu2, y perdón si sólo estoy confundido y no te he ayudado
.