var audioFileChooser = document.getElementById('audioFileChooser'); audioFileChooser.addEventListener('change', readFile); function readFile() { // TODO: deal with multiple files var fileReader = new FileReader(); fileReader.readAsArrayBuffer(audioFileChooser.files[0]); fileReader.addEventListener('load', function(ev) { processFile(ev.target.result); }); } function processFile(file) { var context = new window.AudioContext(); context.decodeAudioData(file, function(buffer) { var monoData = buffer.getChannelData(0); // start with mono, do stereo later var thisLength = monoData.length; // AudioPlayMemory requires padding to 2.9 ms boundary (128 samples @ 44100) var padLength = padding(thisLength, 128); var arraylen = ((thisLength + padLength) * 2 + 3) / 4 + 1; console.log(10241, thisLength, padLength, arraylen); console.log(monoData); }); } // compute the extra padding needed function padding(sampleLength, block) { var extra = sampleLength % block; if (extra == 0) return 0; return block - extra; } function generateOutputFile(fileContents) { var textFileURL = null; var blob = new Blob([fileContents], {type: 'text/plain'}); textFileURL = window.URL.createObjectURL(blob); return textFileURL; } function generateCPPFile(fileName, audioData) { var out = ""; out += '// Audio data converted from audio file by wav2sketch_js\n\n'; out += '#include "AudioSample' + fileName + '.h"\n\n'; out += 'const unsigned int AudioSample' + fileName + '[' + audioData.length + '] = {'; out += audioData.join(',') + ',};'; return out; } var outputFileHolder = document.getElementById('outputFileHolder'); var downloadLink = document.createElement('a'); downloadLink.setAttribute('download', 'test.txt'); downloadLink.href = generateOutputFile(generateCPPFile('test.wav',[0,1,2,3])); downloadLink.innerHTML = 'download link'; outputFileHolder.appendChild(downloadLink);