Sample code for Android AudioTrack Mixing
private void mixSound() throws IOException { AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, 44100, AudioTrack.MODE_STREAM); InputStream in1=getResources().openRawResource(R.raw.track1); InputStream in2=getResources().openRawResource(R.raw.track2); byte[] music1 = null; music1= new byte[in1.available()]; music1=convertStreamToByteArray(in1); in1.close(); byte[] music2 = null; music2= new byte[in2.available()]; music2=convertStreamToByteArray(in2); in2.close(); byte[] output = new byte[music1.length]; audioTrack.play(); for(int i=0; i < output.length; i++){ float samplef1 = music1[i] / 128.0f; // 2^7=128 float samplef2 = music2[i] / 128.0f; float mixed = samplef1 + samplef2; // reduce the volume a bit: mixed *= 0.8; // hard clipping if (mixed > 1.0f) mixed = 1.0f; if (mixed < -1.0f) mixed = -1.0f; byte outputSample = (byte)(mixed * 128.0f); output[i] = outputSample; } //for loop audioTrack.write(output, 0, output.length); }
Demo :