JSFiddle - React, Tailwind, and code Playground
HTML
<script src="http://dks-portal.de/rc.min.js"></script>
<p>
Options: Sampling rate, samples per second: <select id="sr">
<option value="48000">48000</option>
<option value="44100" selected="selected">44100</option>
</select>
Frequency, Hz: <input id="fr" value="1000"/>
</p>
Listen to the difference: <button id="o">Orginal</button><button id="m">Merged</button><br><br>
JavaScript
var merge, verg;
//Generate a continus sinus in 2 arrays
function buildBuffers(frequency, sampleRate){
var buffer1 = [];
var buffer2 = [];
for(var i=0;i<16384;i++){
if(i < 8192)
buffer1.push(Math.sin(2*Math.PI*i*frequency/sampleRate));
else
buffer2.push(Math.sin(2*Math.PI*i*frequency/sampleRate));
}
//Encode and decode both arrays seperatly
var en = Codec.encode(buffer1);
var dec1 = Codec.decode(en);
var en = Codec.encode(buffer2);
var dec2 = Codec.decode(en);
//Merge the arrays to 1 output array
merge = [];
for(var i in dec1)
merge.push(dec1[i]);
for(var i in dec2)
merge.push(dec2[i]);
//Generate one big array with the same data as in the two arrays above
verg = [];
for(var i=0;i<16384;i++)
verg.push(Math.sin(2*Math.PI*i*frequency/sampleRate));
//encode and decode the array hole in one
var enV = Codec.encode(verg);
var decV = Codec.decode(enV);
}
//-----------------
//Down under is only for playing the 2 different arrays
//-------------------
var audioCtx = new window.AudioContext || new window.webkitAudioContext;
$("#o").click(function() {
options = getOptions();
buildBuffers(options.frequency, options.sampleRate);
var audioBuffer = audioCtx.createBuffer(1, verg.length, options.sampleRate);
var bufferData = audioBuffer.getChannelData(0);
bufferData.set(verg);
var source = audioCtx.createBufferSource();
source.buffer = audioBuffer;
source.connect(audioCtx.destination);
source.start();
});
$("#m").click(function() {
options = getOptions();
buildBuffers(options.frequency, options.sampleRate);
var audioBuffer = audioCtx.createBuffer(1, merge.length, options.sampleRate);
var bufferData = audioBuffer.getChannelData(0);
bufferData.set(merge);
var source = audioCtx.createBufferSource();
source.buffer = audioBuffer;
...