El uso del AudioTrack de Android para combinar bytes de muestras de sonido produce ruido

Estoy creando una aplicación para Android bastante simple (sdk revisión 14: ICS) que permite a los usuarios elegir dos clips de audio a la vez (todos en formato RIFF / WAV, little-endian, codificación PCM-16 de bits firmada) y combinarlos en Varias formas de crear nuevos sonidos. El método más básico que estoy usando para esta combinación es el siguiente:

//...sound samples are read in to memory as raw byte arrays elsewhere
//...offset is currently set to 45 so as to skip the 44 byte header of basic
//RIFF/WAV files
...
//Actual combination method
public byte[] makeChimeraAll(int offset){
    for(int i=offset;i<bigData.length;i++){
        if(i < littleData.length){
            bigData[i] = (byte) (bigData[i] + littleData[i]);
        }
        else{
            //leave bigData alone
        }
    } 
    return bigData;
}

la matriz de bytes devuelta se puede reproducir a través de la clase AudioTrack de esta manera:

....
hMain.setBigData(hMain.getAudioTransmutation().getBigData()); //set the shared bigData
// to the bigData in AudioTransmutation object
hMain.getAudioProc().playWavFromByteArray(hMain.getBigData(), 22050 + (22050*
(freqSeekSB.getProgress()/100)), 1024); //a SeekBar allows the user to adjust the freq
//ranging from 22050 hz to 44100 hz
....
public void playWavFromByteArray(byte[] audio,int sampleRate, int bufferSize){
    int minBufferSize = AudioTrack.getMinBufferSize(sampleRate, 
            AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
        AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, 
            AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
            minBufferSize, AudioTrack.MODE_STREAM);

        int i = 0;

        at.play();
        at.write(audio, 0, audio.length);     
        at.stop();
        at.release();

       for(i=0;i<audio.length;i++){
           Log.d("me","the byte value at audio index " + i + " is " + audio[i]);
       }

}

El resultado de una combinación y reproducción utilizando el código anterior es cercano a lo que quiero (ambas muestras aún son perceptibles en el sonido hibridado resultante) pero también hay muchas grietas, saltos y otros ruidos.

Entonces, tres preguntas: Primero, ¿estoy usando AudioTrack correctamente? En segundo lugar, ¿dónde se tiene en cuenta el endianness en la configuración de AudioTrack? Los sonidos se reproducen bien por sí mismos y suenan casi como lo que esperaría cuando se combinara, por lo que la naturaleza little-endian del formato RIFF / WAV parece estar comunicada en algún lugar, pero no estoy seguro de dónde. Finalmente, ¿cuál es el rango de valores de bytes que debería esperar para la codificación PCM de 16 bits firmada? Espero ver valores que van desde −32768 a 32767 en logcat desde la invocación Log.d (...) anterior, pero en cambio los resultados tienden a estar dentro del rango de -100 a 100 (con algunos valores atípicos más allá de eso). ¿Podrían los valores de bytes combinados más allá del rango de 16 bits explicar el ruido, tal vez?

gracias, CCJ

ACTUALIZACIÓN: gracias a Bjorne Roche y William the Coderer! Ahora leo los datos de audio en estructuras cortas [], el endianness del DataInputStream se contabiliza utilizando el EndianInputStream de William (http://stackoverflow.com/questions/8028094/java-datainputstream-replacement-for-endianness) y El método de combinación se ha cambiado a esto:

//Audio Chimera methods!
public short[] makeChimeraAll(int offset){
    //bigData and littleData are each short arrays, populated elsewhere
    int intBucket = 0;
    for(int i=offset;i<bigData.length;i++){
        if(i < littleData.length){
            intBucket = bigData[i] + littleData[i];
            if(intBucket > SIGNED_SHORT_MAX){
                intBucket = SIGNED_SHORT_MAX;
            }
            else if (intBucket < SIGNED_SHORT_MIN){
                intBucket = SIGNED_SHORT_MIN;
            }
            bigData[i] = (short) intBucket;
        }
        else{
            //leave bigData alone
        }
    } 
    return bigData;
}

¡La calidad de salida de audio híbrida con estas mejoras es impresionante!

Respuestas a la pregunta(1)

Su respuesta a la pregunta