From 9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22 Mon Sep 17 00:00:00 2001 From: Richard Date: Sun, 13 Apr 2025 18:48:02 +0100 Subject: initial --- site/app/twine/flac fucking.js | 65 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 site/app/twine/flac fucking.js (limited to 'site/app/twine/flac fucking.js') diff --git a/site/app/twine/flac fucking.js b/site/app/twine/flac fucking.js new file mode 100644 index 0000000..dcac896 --- /dev/null +++ b/site/app/twine/flac fucking.js @@ -0,0 +1,65 @@ +var encoded = []; +var encodedLength = 0; + +function encWriteCallback(buffer, bytes, samples, currentFrame) { +encoded.push(buffer); +encodedLength += bytes; +} + +var source = await app.getCsound().getTable(113); +var encoder = Flac.create_libflac_encoder(48000, 1, 16, 5, source.length, false); +var init = Flac.init_encoder_stream(encoder, encWriteCallback, null, false, 0); +var response = Flac.FLAC__stream_encoder_process(encoder, source, source.length); +Flac.FLAC__stream_encoder_finish(encoder); +Flac.FLAC__stream_encoder_delete(encoder); + +let merged = new Uint8Array(encodedLength); +let offset = 0; +encoded.forEach(item => { +merged.set(item, offset); +offset += item.length; +}); +encoded = merged; + + +//var encodedArr = new Uint8Array(encoded); +var size = encoded.length; +var decoded = []; +var currentDataOffset = 0; +function decReadCallback(bufferSize) { +var end = currentDataOffset == size ? -1 : Math.min(currentDataOffset + bufferSize, size); +var _buffer; +var bytesRead; +if (end !== -1) { +//_buffer = encodedArr.subarray(currentDataOffset, end); +_buffer = encoded.slice(currentDataOffset, end); +bytesRead = end - currentDataOffset; +currentDataOffset = end; +} else { +bytesRead = 0; +} +return {buffer: _buffer, readDataLength: bytesRead, error: false}; +} + +function decWriteCallback(buffer, _frameHdr) { +decoded.push(buffer); +} + +function decErrorCallback(err, errMsg) { +console.log(err, errMsg); +} + +var decoder = Flac.create_libflac_decoder(false); +var init = Flac.init_decoder_stream(decoder, decReadCallback, decWriteCallback, decErrorCallback, null, false); +Flac.setOptions(decoder, {analyseSubframes: false, analyseResiduals: false, enableRawStreamMetadata: false}); +var response = Flac.FLAC__stream_decoder_process_until_end_of_stream(decoder); + +/* +var state = 0; +var response = true; +while (state <= 3 && response != false) { +response &= Flac.FLAC__stream_decoder_process_single(decoder); +state = Flac.FLAC__stream_decoder_get_state(decoder); +} +*/ +Flac.FLAC__stream_decoder_finish(decoder); \ No newline at end of file -- cgit v1.2.3