From 2e15e4addcbe63d98954e5b6edec998fd6abdbff Mon Sep 17 00:00:00 2001 From: Intel A80486DX2-66 Date: Wed, 31 Jan 2024 22:31:55 +0300 Subject: [PATCH] bytebeat-render.js: improve the loop algorithm --- js-programming/bytebeat-render.js | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/js-programming/bytebeat-render.js b/js-programming/bytebeat-render.js index 1f2bec9..d8ab2fd 100644 --- a/js-programming/bytebeat-render.js +++ b/js-programming/bytebeat-render.js @@ -90,11 +90,17 @@ let filePath = generateRandomFilePath() writeFileSync(filePath, Buffer.alloc(0)) // the loop of sequential file writing, created to ease load on RAM -for (let buffer = 0; t < PRODUCT; buffer++) { - let audioData = new Uint8Array(BUFFER_SIZE) +// (it doesn't work as intended) +const max = (PRODUCT + (BUFFER_SIZE - 1)) / BUFFER_SIZE - let idx = 0 - for (; idx < BUFFER_SIZE && t < PRODUCT; idx++) { +for (let seq = 0; seq < max; seq++) { + let calculatedSize = BUFFER_SIZE + if ((t + BUFFER_SIZE) >= PRODUCT) + calculatedSize = PRODUCT - t + + let audioData = new Uint8Array(calculatedSize) + + for (let idx = 0; t < PRODUCT && idx < BUFFER_SIZE; idx++, t++) { let sample = generateAudio(t * FINAL_SAMPLE_RATE_CONVERSION) if (sample.constructor === Array) sample.forEach((sample, index) => { @@ -102,13 +108,6 @@ for (let buffer = 0; t < PRODUCT; buffer++) { }) else audioData[idx] = constrainValue(sample) - t++ - } - - if (t >= PRODUCT) { - let truncatedArray = new Uint8Array(idx) - truncatedArray.set(audioData.subarray(0, idx)) - audioData = truncatedArray } appendFileSync(filePath, Buffer.from(audioData.buffer))