diff --git a/.DS_Store b/.DS_Store index 4895092..2d4c5cf 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..9a0a2f5 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,19 @@ +{ + "configurations": [ + { + "name": "Mac", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [], + "macFrameworkPath": [ + "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks" + ], + "compilerPath": "/usr/bin/clang", + "cStandard": "c17", + "cppStandard": "c++17", + "intelliSenseMode": "macos-clang-arm64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..70c5658 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "files.associations": { + "*.sdp": "xml", + "*.json": "jsonc", + "vector": "cpp", + "type_traits": "cpp" + } +} \ No newline at end of file diff --git a/output/convert_image_to_webp.js b/output/convert_image_to_webp.js deleted file mode 100644 index e4f3ad1..0000000 --- a/output/convert_image_to_webp.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");var wasmBinaryFile;wasmBinaryFile="convert_image_to_webp.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw`failed to load wasm binary file at '${binaryFile}'`}return response["arrayBuffer"]()}).catch(()=>getBinarySync(binaryFile))}else if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["memory"];updateMemoryViews();addOnInit(wasmExports["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr];case"i8":return HEAP8[ptr];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":abort("to do getValue(i64) use WASM_BIGINT");case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort(`invalid type for getValue: ${type}`)}}var noExitRuntime=Module["noExitRuntime"]||true;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;var UTF8ArrayToString=(heapOrArray,idx,maxBytesToRead)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var ___assert_fail=(condition,filename,line,func)=>{abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])};var _emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var getHeapMax=()=>268435456;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var _fd_close=fd=>52;var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);return 70}var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}};var SYSCALLS={varargs:undefined,get(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={"string":str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},"array":arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};var wasmImports={__assert_fail:___assert_fail,emscripten_memcpy_js:_emscripten_memcpy_js,emscripten_resize_heap:_emscripten_resize_heap,fd_close:_fd_close,fd_seek:_fd_seek,fd_write:_fd_write};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["__wasm_call_ctors"])();var _malloc=Module["_malloc"]=a0=>(_malloc=Module["_malloc"]=wasmExports["malloc"])(a0);var _free=Module["_free"]=a0=>(_free=Module["_free"]=wasmExports["free"])(a0);var _convert_image_to_webp=Module["_convert_image_to_webp"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)=>(_convert_image_to_webp=Module["_convert_image_to_webp"]=wasmExports["convert_image_to_webp"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);var stackSave=()=>(stackSave=wasmExports["stackSave"])();var stackRestore=a0=>(stackRestore=wasmExports["stackRestore"])(a0);var stackAlloc=a0=>(stackAlloc=wasmExports["stackAlloc"])(a0);var dynCall_jiiiii=Module["dynCall_jiiiii"]=(a0,a1,a2,a3,a4,a5)=>(dynCall_jiiiii=Module["dynCall_jiiiii"]=wasmExports["dynCall_jiiiii"])(a0,a1,a2,a3,a4,a5);var dynCall_jiji=Module["dynCall_jiji"]=(a0,a1,a2,a3,a4)=>(dynCall_jiji=Module["dynCall_jiji"]=wasmExports["dynCall_jiji"])(a0,a1,a2,a3,a4);Module["cwrap"]=cwrap;Module["getValue"]=getValue;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); diff --git a/output/convert_image_to_webp.wasm b/output/convert_image_to_webp.wasm deleted file mode 100755 index f117386..0000000 Binary files a/output/convert_image_to_webp.wasm and /dev/null differ diff --git a/test/convert_image_to_webp.js b/test/convert_image_to_webp.js index 826656c..7ad0591 100644 --- a/test/convert_image_to_webp.js +++ b/test/convert_image_to_webp.js @@ -1111,16 +1111,79 @@ function dbg(...args) { var _emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num); var getHeapMax = () => - HEAPU8.length; + // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate + // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side + // for any code that deals with heap sizes, which would require special + // casing all heap size related code to treat 0 specially. + 2147483648; - var abortOnCannotGrowMemory = (requestedSize) => { - abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + var growMemory = (size) => { + var b = wasmMemory.buffer; + var pages = (size - b.byteLength + 65535) / 65536; + try { + // round size grow request up to wasm page size (fixed 64KB per spec) + wasmMemory.grow(pages); // .grow() takes a delta compared to the previous size + updateMemoryViews(); + return 1 /*success*/; + } catch(e) { + err(`growMemory: Attempted to grow heap from ${b.byteLength} bytes to ${size} bytes, but got error: ${e}`); + } + // implicit 0 return to save code size (caller will cast "undefined" into 0 + // anyhow) }; var _emscripten_resize_heap = (requestedSize) => { var oldSize = HEAPU8.length; // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. requestedSize >>>= 0; - abortOnCannotGrowMemory(requestedSize); + // With multithreaded builds, races can happen (another thread might increase the size + // in between), so return a failure, and let the caller retry. + assert(requestedSize > oldSize); + + // Memory resize rules: + // 1. Always increase heap size to at least the requested size, rounded up + // to next page multiple. + // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap + // geometrically: increase the heap size according to + // MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most + // overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB). + // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap + // linearly: increase the heap size by at least + // MEMORY_GROWTH_LINEAR_STEP bytes. + // 3. Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by + // MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest + // 4. If we were unable to allocate as much memory, it may be due to + // over-eager decision to excessively reserve due to (3) above. + // Hence if an allocation fails, cut down on the amount of excess + // growth, in an attempt to succeed to perform a smaller allocation. + + // A limit is set for how much we can grow. We should not exceed that + // (the wasm binary specifies it, so if we tried, we'd fail anyhow). + var maxHeapSize = getHeapMax(); + if (requestedSize > maxHeapSize) { + err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`); + return false; + } + + var alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple; + + // Loop through potential heap size increases. If we attempt a too eager + // reservation that fails, cut down on the attempted size and reserve a + // smaller bump instead. (max 3 times, chosen somewhat arbitrarily) + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth + // but limit overreserving (default to capping at +96MB overgrowth at most) + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296 ); + + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + + var replacement = growMemory(newSize); + if (replacement) { + + return true; + } + } + err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`); + return false; }; var SYSCALLS = { @@ -1406,7 +1469,6 @@ var missingLibrarySymbols = [ 'convertU32PairToI53', 'zeroMemory', 'exitJS', - 'growMemory', 'isLeapYear', 'ydayFromDate', 'arraySum', @@ -1601,7 +1663,7 @@ var unexportedSymbols = [ 'convertI32PairToI53Checked', 'ptrToString', 'getHeapMax', - 'abortOnCannotGrowMemory', + 'growMemory', 'ENV', 'MONTH_DAYS_REGULAR', 'MONTH_DAYS_LEAP', diff --git a/test/convert_image_to_webp.wasm b/test/convert_image_to_webp.wasm index 84a6676..8e56930 100755 Binary files a/test/convert_image_to_webp.wasm and b/test/convert_image_to_webp.wasm differ diff --git a/test/convert_image_to_webp.wasm.map b/test/convert_image_to_webp.wasm.map index 65f0829..c1059ed 100644 --- a/test/convert_image_to_webp.wasm.map +++ b/test/convert_image_to_webp.wasm.map @@ -1 +1 @@ -{"version":3,"sources":["../stb_image_resize.h","../convert_image_to_webp.cpp","../../emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/math.h","../stb_image.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdlib/bsearch.c","../../emsdk/emscripten/system/lib/libc/emscripten_memcpy.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/memmove.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/memset.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/__lockfile.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/fflush.c","../../emsdk/emscripten/system/lib/libc/musl/src/errno/__errno_location.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/__stdio_seek.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/__stdio_write.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/__stdio_close.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/fprintf.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/ldexp.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_divzero.c","../../emsdk/emscripten/system/lib/libc/musl/src/internal/libm.h","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_invalid.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/log.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/log10.c","../../emsdk/emscripten/system/lib/libc/musl/src/unistd/lseek.c","../../emsdk/emscripten/system/lib/pthread/library_pthread_stub.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/ofl.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_xflow.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_oflow.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_uflow.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/fabs.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/pow.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_invalidf.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_xflowf.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_oflowf.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_uflowf.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/powf.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdlib/qsort.c","../../emsdk/emscripten/system/lib/libc/musl/src/internal/atomic.h","../../emsdk/emscripten/system/lib/libc/musl/src/stdlib/qsort_nr.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/scalbn.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/strcmp.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/strncmp.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdlib/strtol.c","../../emsdk/emscripten/system/lib/libc/musl/include/ctype.h","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/__towrite.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/memchr.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/strnlen.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/frexp.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/fwrite.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/vfprintf.c","../../emsdk/emscripten/system/lib/libc/musl/include/math.h","../../emsdk/emscripten/system/lib/libc/wasi-helpers.c","../../emsdk/emscripten/system/lib/libc/emscripten_syscall_stubs.c","../../emsdk/emscripten/system/lib/libc/musl/src/unistd/getpid.c","../../emsdk/emscripten/system/lib/pthread/pthread_self_stub.c","../../emsdk/emscripten/system/lib/libc/musl/src/multibyte/wcrtomb.c","../../emsdk/emscripten/system/lib/libc/musl/src/multibyte/wctomb.c","../../emsdk/emscripten/system/lib/libc/emscripten_get_heap_size.c","../../emsdk/emscripten/system/lib/libc/sbrk.c","../../emsdk/emscripten/system/lib/dlmalloc.c","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/multi3.c","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/ashlti3.c","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/lshrti3.c","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/trunctfdf2.c","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/fp_trunc_impl.inc","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/fp_trunc.h","../../b/s/w/ir/x/w/install/emscripten/system/lib/compiler-rt/emscripten_tempret.s","../../emsdk/emscripten/system/lib/compiler-rt/stack_limits.S","../../emsdk/emscripten/system/lib/compiler-rt/stack_ops.S"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["../stb_image_resize.h","../convert_image_to_webp.cpp","../../emsdk/upstream/emscripten/cache/sysroot/include/c++/v1/math.h","../stb_image.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdlib/bsearch.c","../../emsdk/emscripten/system/lib/libc/emscripten_memcpy.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/memmove.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/memset.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/__lockfile.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/fflush.c","../../emsdk/emscripten/system/lib/libc/musl/src/errno/__errno_location.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/__stdio_seek.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/__stdio_write.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/__stdio_close.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/fprintf.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/ldexp.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_divzero.c","../../emsdk/emscripten/system/lib/libc/musl/src/internal/libm.h","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_invalid.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/log.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/log10.c","../../emsdk/emscripten/system/lib/libc/musl/src/unistd/lseek.c","../../emsdk/emscripten/system/lib/pthread/library_pthread_stub.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/ofl.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_xflow.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_oflow.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_uflow.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/fabs.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/pow.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_invalidf.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_xflowf.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_oflowf.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/__math_uflowf.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/powf.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdlib/qsort.c","../../emsdk/emscripten/system/lib/libc/musl/src/internal/atomic.h","../../emsdk/emscripten/system/lib/libc/musl/src/stdlib/qsort_nr.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/scalbn.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/strcmp.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/strncmp.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdlib/strtol.c","../../emsdk/emscripten/system/lib/libc/musl/include/ctype.h","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/__towrite.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/memchr.c","../../emsdk/emscripten/system/lib/libc/musl/src/string/strnlen.c","../../emsdk/emscripten/system/lib/libc/musl/src/math/frexp.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/fwrite.c","../../emsdk/emscripten/system/lib/libc/musl/src/stdio/vfprintf.c","../../emsdk/emscripten/system/lib/libc/musl/include/math.h","../../emsdk/emscripten/system/lib/libc/wasi-helpers.c","../../emsdk/emscripten/system/lib/libc/emscripten_syscall_stubs.c","../../emsdk/emscripten/system/lib/libc/musl/src/unistd/getpid.c","../../emsdk/emscripten/system/lib/pthread/pthread_self_stub.c","../../emsdk/emscripten/system/lib/libc/musl/src/multibyte/wcrtomb.c","../../emsdk/emscripten/system/lib/libc/musl/src/multibyte/wctomb.c","../../emsdk/emscripten/system/lib/libc/emscripten_get_heap_size.c","../../emsdk/emscripten/system/lib/libc/sbrk.c","../../emsdk/emscripten/system/lib/dlmalloc.c","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/multi3.c","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/ashlti3.c","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/lshrti3.c","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/trunctfdf2.c","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/fp_trunc_impl.inc","../../emsdk/emscripten/system/lib/compiler-rt/lib/builtins/fp_trunc.h","../../b/s/w/ir/x/w/install/emscripten/system/lib/compiler-rt/emscripten_tempret.s","../../emsdk/emscripten/system/lib/compiler-rt/stack_limits.S","../../emsdk/emscripten/system/lib/compiler-rt/stack_ops.S"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/test/image.bin b/test/image.bin new file mode 100644 index 0000000..bf0e1a3 Binary files /dev/null and b/test/image.bin differ diff --git a/test/image.bmp b/test/image.bmp new file mode 100644 index 0000000..527f019 Binary files /dev/null and b/test/image.bmp differ diff --git a/test/image.jpg b/test/image.jpg new file mode 100644 index 0000000..d5fd3f3 Binary files /dev/null and b/test/image.jpg differ diff --git a/test/index.html b/test/index.html index acd1d35..a0bdfa4 100644 --- a/test/index.html +++ b/test/index.html @@ -45,7 +45,7 @@ return btoa(binary); // 使用 JavaScript 的 btoa() 函数 } - var fileurl = './image.png' + var fileurl = './image.bin' // 初始化 WebAssembly 模块 var Module = { onRuntimeInitialized: function () { diff --git a/testCOut/a.out.js b/testCOut/a.out.js new file mode 100644 index 0000000..aa63089 --- /dev/null +++ b/testCOut/a.out.js @@ -0,0 +1,18 @@ + +var testWasm = (() => { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + + return ( +function(moduleArg = {}) { + +var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var crypto=globalThis?.crypto||{getRandomValues:array=>{for(var i=0;iDate.now()};var moduleOverrides=Object.assign({},Module);var arguments_=[];var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){return scriptDirectory+path}var read_,readAsync,readBinary;if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=read}readBinary=f=>{if(typeof readbuffer=="function"){return new Uint8Array(readbuffer(f))}let data=read(f,"binary");assert(typeof data=="object");return data};readAsync=(f,onload,onerror)=>{setTimeout(()=>onload(readBinary(f)))};if(typeof clearTimeout=="undefined"){globalThis.clearTimeout=id=>{}}if(typeof setTimeout=="undefined"){globalThis.setTimeout=f=>typeof f=="function"?f():abort()}if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit=="function"){quit_=(status,toThrow)=>{setTimeout(()=>{if(!(toThrow instanceof ExitStatus)){let toLog=toThrow;if(toThrow&&typeof toThrow=="object"&&toThrow.stack){toLog=[toThrow,toThrow.stack]}err(`exiting due to exception: ${toLog}`)}quit(status)});throw toThrow}}if(typeof print!="undefined"){if(typeof console=="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;var wasmBinary;if(typeof atob=="undefined"){if(typeof global!="undefined"&&typeof globalThis=="undefined"){globalThis=global}globalThis.atob=function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(ifilename.startsWith(dataURIPrefix);var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,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v4UETQRAIAC7IQEgA0EASARAIAFE0iEzf3zZEkCgEA4hAAwDCyABRNIhM3982RLAoBAOjCEADAILRBgtRFT7IRlARBgtRFT7IRnAIANBAEgbIAC7oBANIQAMAQsgAkGAgID8B08EQCAAIACTIQAMAQsgACAEQQhqECMhAiAEKwMIIQECQAJAAkACQCACQQNxDgMAAQIDCyABEA0hAAwDCyABEA4hAAwCCyABmhANIQAMAQsgARAOjCEACyAEQRBqJAAgAAvpAgMDfwF8AX0jAEEQayIDJAACfSAAvCICQf////8HcSIBQdqfpPoDTQRAQwAAgD8gAUGAgIDMA0kNARogALsQDgwBCyABQdGn7YMETQRAIAFB5JfbgARPBEBEGC1EVPshCUBEGC1EVPshCcAgAkEASBsgALugEA6MDAILIAC7IQQgAkEASARAIAREGC1EVPsh+T+gEA0MAgtEGC1EVPsh+T8gBKEQDQwBCyABQdXjiIcETQRAIAFB4Nu/hQRPBEBEGC1EVPshGUBEGC1EVPshGcAgAkEASBsgALugEA4MAgsgAkEASARARNIhM3982RLAIAC7oRANDAILIAC7RNIhM3982RLAoBANDAELIAAgAJMgAUGAgID8B08NABogACADQQhqECMhASADKwMIIQQCQAJAAkACQCABQQNxDgMAAQIDCyAEEA4MAwsgBJoQDQwCCyAEEA6MDAELIAQQDQshBSADQRBqJAAgBQuGAgEHfyABIAAoAggiAyAAKAIEIgJrQQN1TQRAIAAgAQR/IAIgAUEDdCIAEAQgAGoFIAILNgIEDwsCQCACIAAoAgAiBWtBA3UiByABaiIEQYCAgIACSQRAQf////8BIAMgBWsiA0ECdSIIIAQgBCAISRsgA0H4////B08bIgQEQCAEQYCAgIACTw0CIARBA3QQCCEGCyAHQQN0IAZqIgMgAUEDdCIBEAQgAWohASACIAVHBEADQCADQQhrIgMgAkEIayICKQIANwIAIAIgBUcNAAsgACgCACECCyAAIAYgBEEDdGo2AgggACABNgIEIAAgAzYCACACBEAgAhAGCw8LEAAACxAPAAusAgEDfwJAIAMgACgCCCIFIAAoAgAiBGtBAnVNBEAgAyAAKAIEIgYgBGsiBUECdUsEQCAEIAZHBEAgBCABIAUQEyAAKAIEIQQLIAIg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EUEATA0BRAAAAAAAAPA/QbA0KgIAu0QAAAAAAADgv6JEAAAAAAAA8L+go0QAAAAAAADwP6C2IQNBtDQoAgAhFQJAIBFBA3EiFEUEQCARIQAMAQsgESEAA0AgFSAAQQFrIgBBAnRqIhIgASADlCIBIBIqAgAiAiABIAJeGyIBOAIAIBNBAWoiEyAURw0ACwsgEUEETwRAIBVBCGshEyAVQQRrIRQDQCAUIABBAnQiEmoiFiABIAOUIgEgFioCACICIAEgAl4bIgE4AgAgEiATaiISIAEgA5QiASASKgIAIgIgASACXhsiATgCACAVIABBA2siEkECdGoiFiABIAOUIgEgFioCACICIAEgAl4bIgE4AgAgFSAAQQRrIgBBAnRqIhYgASADlCIBIBYqAgAiAiABIAJeGyIBOAIAIBJBAUsNAAsLIBFBA3EhGEEAIRMCQCARQQFrIhZBA0kEQEEAIQAMAQsgEUH8////B3EhF0EAIQBBACEUA0AgFSAAQQJ0aiISIAEgA5QiASASKgIAIgIgASACXhsiATgCACASIAEgA5QiASASKgIEIgIgASACXhsiATgCBCASIAEgA5QiASASKgIIIgIgASACXhsiATgCCCASIAEgA5QiASASKgIMIgIgASACXhsiATgCDCAAQQRqIQAgFEEEaiIUIBdHDQALCyAYBEADQCAVIABBAnRqIhQgASADlCIBIBQqAgAiAiABIAJeGyIBOAIAIABBAWohACATQQFqIhMgGEcNAAsLIBEhAANAIBUgAEEBayITQQJ0aiIUIAEgA5QiASAUKgIAIgIgASACXhsiATgCACAAQQFKIS0gEyEAIC0NAAsgEUEDcSEYQQAhEwJAIBZBA0kEQEEAIQAMAQsgEUH8////B3EhF0EAIQBBACEUA0AgFSAAQQJ0aiISIAEgA5QiASASKgIAIgIgASACXhsiATgCACASIAEgA5QiASASKgIEIgIgASACXhsiATgCBCASIAEgA5QiASASKgIIIgIgASACXhsiATgCCCASIAEgA5QiASASKgIMIgIgASACXhsiATgCDCAAQQRqIQAgFEEEaiIUIBdHDQALCyAYBEADQCAVIABBAnRqIhQgASADlCIBIBQqAgAiAiABIAJeGyIBOAIAIABBAWohACATQQFqIhMgGEcNAAsLIBFBAEwNAUMAAIA/IAOVIQNBtDQoAgAhFQJAIBFBA3EiFEUEQCARIQAMAQtBACETIBEhAANAIBUgAEEBayIAQQJ0aiISIAEgA5QiASASKgIAIgIgASACXRsiATgCACATQQFqIhMgFEcNAAsLIBZBA08EQCAVQQhrIRMgFUEEayEUA0AgFCAAQQJ0IhJqIhggASADlCIBIBgqAgAiAiABIAJdGyIBOAIAIBIgE2oiEiABIAOUIgEgEioCACICIAEgAl0bIgE4AgAgFSAAQQNrIhJBAnRqIhggASADlCIBIBgqAgAiAiABIAJdGyIBOAIAIBUgAEEEayIAQQJ0aiIYIAEgA5QiASAYKgIAIgIgASACXRsiATgCACASQQFLDQALCyARQQBMDQEgEUEDcSEYQQAhEwJAIBZBA0kEQEEAIQAMAQsgEUH8////B3EhF0EAIQBBACEUA0AgFSAAQQJ0aiISIAEgA5QiASASKgIAIgIgASACXRsiATgCACASIAEgA5QiASASKgIEIgIgASACXRsiATgCBCASIAEgA5QiASASKgIIIgIgASACXRsiATgCCCASIAEgA5QiASASKgIMIgIgASACXRsiATgCDCAAQQRqIQAgFEEEaiIUIBdHDQALCyAYBEADQCAVIABBAnRqIhQgASADlCIBIBQqAgAiAiABIAJdGyIBOAIAIABBAWohACATQQFqIhMgGEcNAAsLIBFBAEwNAQJAIBFBA3EiFEUEQCARIQAMAQtBACETIBEhAANAIBUgAEEBayIAQQJ0aiISIAEgA5QiASASKgIAIgIgASACXRsiATgCACATQQFqIhMgFEcNAAsLIBZBA08EQCAVQQhrIRMgFUEEayEUA0AgFCAAQQJ0IhJqIhggASADlCIBIBgqAgAiAiABIAJdGyIBOAIAIBIgE2oiEiABIAOUIgEgEioCACICIAEgAl0bIgE4AgAgFSAAQQNrIhJBAnRqIhggASADlCIBIBgqAgAiAiABIAJdGyIBOAIAIBUgAEEEayIAQQJ0aiIYIAEgA5QiASAYKgIAIgIgASACXRsiATgCACASQQFLDQALCyARQQBMDQEgEUEDcSESQQAhEwJAIBZBA0kEQEEAIQAMAQsgEUH8////B3EhFkEAIQBBACEUA0AgFSAAQQJ0aiIRIAEgA5QiASARKgIAIgIgASACXRsiATgCACARIAEgA5QiASAR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OAIAIAIgBkEEciIWaiADIBZqKgIAOAIAIAIgBkEIciIWaiADIBZqKgIAOAIAIAIgBkEMciIGaiADIAZqKgIAOAIAIABBBGohACAYQQRqIhggGkcNAAsLIBFFDQADQCACIABBAnQiBmogAyAGaioCADgCACAAQQFqIQAgF0EBaiIXIBFHDQALCwJAIAggC00NACAKIBVBAnRqIQZBACECIAchACASBEADQCAGIABBAnQiCmogAyAKaioCADgCACAAQQFqIQAgAkEBaiICIBJHDQALCyAcDQADQCAGIABBAnQiAmogAiADaioCADgCACAGIAJBBGoiCmogAyAKaioCADgCACAGIAJBCGoiCmogAyAKaioCADgCACAGIAJBDGoiAmogAiADaioCADgCACAAQQRqIgAgCEkNAAsLIAxBAWoiDCAPRw0AC0H0MSAIIBRqIA1wNgIAQfgyQfgyKAIAIAhqNgIAIB1DfR2QJl0NAkGUMEEBOgAAQZAwQQA2AgAMAgsgB0UEQCAIIAtNDQEgECAVQQJ0aiEGIAhBfHEhDCAIQQNxIQVBACEJIAhBBEkhDgNAIAYgCSANbEECdGohB0EAIQBBACECIA5FBEADQCAHIABBAnQiBGogAyAEaioCADgCACAHIARBBHIiC2ogAyALaioCADgCACAHIARBCHIiC2ogAyALaioCADgCACAHIARBDHIiBGogAyAEaioCADgCACAAQQRqIQAgAkEEaiICIAxHDQALC0EAIQIgBQRAA0AgByAAQQJ0IgRqIAMgBGoqAgA4AgAgAEEBaiEAIAJBAWoiAiAFRw0ACwsgCUEBaiIJIA9HDQALDAELIAggC0sEQCAHQXxxIQsgB0EDcSEGIAggB2tBA3EhDEEAIQkgB0EESSERIAcgCGtBfEshEgNAIBAgCSANbEECdGoiEyAOQQJ0aiEEQQAhAEEAIQIgEUUEQANAIAQgAEECdCIFaiADIAVqKgIAOAIAIAQgBUEEciIKaiADIApqKgIAOAIAIAQgBUEIciIKaiADIApqKgIAOAIAIAQgBUEMciIFaiADIAVqKgIAOAIAIABBBGohACACQQRqIgIgC0cNAAsLQQAhAiAGBEADQCAEIABBAnQiBWogAyAFaioCADgCACAAQQFqIQAgAkEBaiICIAZHDQALCyATIBVBAnRqIQRBACECIAch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";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={"a":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["e"];updateMemoryViews();addOnInit(wasmExports["f"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var noExitRuntime=true;var _abort=()=>{abort("")};var _emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var getHeapMax=()=>2147483648;var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){abortOnCannotGrowMemory(requestedSize)}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.5/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}abortOnCannotGrowMemory(requestedSize)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var _getentropy=(buffer,size)=>{randomFill(HEAPU8.subarray(buffer,buffer+size));return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;var UTF8ArrayToString=(heapOrArray,idx,maxBytesToRead)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var wasmImports={a:_abort,d:_emscripten_memcpy_js,c:_emscripten_resize_heap,b:_getentropy};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["f"])();var _setBuffers=Module["_setBuffers"]=(a0,a1)=>(_setBuffers=Module["_setBuffers"]=wasmExports["g"])(a0,a1);var _blockSamples=Module["_blockSamples"]=()=>(_blockSamples=Module["_blockSamples"]=wasmExports["h"])();var _intervalSamples=Module["_intervalSamples"]=()=>(_intervalSamples=Module["_intervalSamples"]=wasmExports["i"])();var _inputLatency=Module["_inputLatency"]=()=>(_inputLatency=Module["_inputLatency"]=wasmExports["j"])();var _outputLatency=Module["_outputLatency"]=()=>(_outputLatency=Module["_outputLatency"]=wasmExports["k"])();var _reset=Module["_reset"]=()=>(_reset=Module["_reset"]=wasmExports["l"])();var _presetDefault=Module["_presetDefault"]=(a0,a1)=>(_presetDefault=Module["_presetDefault"]=wasmExports["m"])(a0,a1);var _presetCheaper=Module["_presetCheaper"]=(a0,a1)=>(_presetCheaper=Module["_presetCheaper"]=wasmExports["n"])(a0,a1);var _configure=Module["_configure"]=(a0,a1,a2,a3)=>(_configure=Module["_configure"]=wasmExports["o"])(a0,a1,a2,a3);var _setTransposeFactor=Module["_setTransposeFactor"]=(a0,a1)=>(_setTransposeFactor=Module["_setTransposeFactor"]=wasmExports["p"])(a0,a1);var _setTransposeSemitones=Module["_setTransposeSemitones"]=(a0,a1)=>(_setTransposeSemitones=Module["_setTransposeSemitones"]=wasmExports["q"])(a0,a1);var _setFormantFactor=Module["_setFormantFactor"]=(a0,a1)=>(_setFormantFactor=Module["_setFormantFactor"]=wasmExports["r"])(a0,a1);var _setFormantSemitones=Module["_setFormantSemitones"]=(a0,a1)=>(_setFormantSemitones=Module["_setFormantSemitones"]=wasmExports["s"])(a0,a1);var _setFormantBase=Module["_setFormantBase"]=a0=>(_setFormantBase=Module["_setFormantBase"]=wasmExports["t"])(a0);var _seek=Module["_seek"]=(a0,a1)=>(_seek=Module["_seek"]=wasmExports["u"])(a0,a1);var _process=Module["_process"]=(a0,a1)=>(_process=Module["_process"]=wasmExports["v"])(a0,a1);var _flush=Module["_flush"]=a0=>(_flush=Module["_flush"]=wasmExports["w"])(a0);var _main=Module["_main"]=(a0,a1)=>(_main=Module["_main"]=wasmExports["x"])(a0,a1);Module["UTF8ToString"]=UTF8ToString;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(){var entryFunction=_main;var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(shouldRunNow)callMain();postRun()}{doRun()}}var shouldRunNow=true;run(); + + + return moduleArg.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = testWasm; +else if (typeof define === 'function' && define['amd']) + define([], () => testWasm); diff --git a/testCOut/main.cpp b/testCOut/main.cpp new file mode 100644 index 0000000..adba493 --- /dev/null +++ b/testCOut/main.cpp @@ -0,0 +1,79 @@ + + +#include "./signalsmith-stretch.h" +#include + +#include +int main() {} + +using Sample = float; +using Stretch = signalsmith::stretch::SignalsmithStretch; +Stretch stretch; + +// Allocates memory for buffers, and returns it +std::vector buffers; +std::vector buffersIn, buffersOut; + +extern "C" { + Sample * EMSCRIPTEN_KEEPALIVE setBuffers(int channels, int length) { + buffers.resize(length*channels*2); + Sample *data = buffers.data(); + buffersIn.resize(0); + buffersOut.resize(0); + for (int c = 0; c < channels; ++c) { + buffersIn.push_back(data + length*c); + buffersOut.push_back(data + length*(c + channels)); + } + return data; + } + + int EMSCRIPTEN_KEEPALIVE blockSamples() { + return stretch.blockSamples(); + } + int EMSCRIPTEN_KEEPALIVE intervalSamples() { + return stretch.intervalSamples(); + } + int EMSCRIPTEN_KEEPALIVE inputLatency() { + return stretch.inputLatency(); + } + int EMSCRIPTEN_KEEPALIVE outputLatency() { + return stretch.outputLatency(); + } + void EMSCRIPTEN_KEEPALIVE reset() { + stretch.reset(); + } + void EMSCRIPTEN_KEEPALIVE presetDefault(int nChannels, Sample sampleRate) { + stretch.presetDefault(nChannels, sampleRate); + } + void EMSCRIPTEN_KEEPALIVE presetCheaper(int nChannels, Sample sampleRate) { + stretch.presetCheaper(nChannels, sampleRate); + } + void EMSCRIPTEN_KEEPALIVE configure(int nChannels, int blockSamples, int intervalSamples, bool splitComputation) { + stretch.configure(nChannels, blockSamples, intervalSamples, splitComputation); + } + void EMSCRIPTEN_KEEPALIVE setTransposeFactor(Sample multiplier, Sample tonalityLimit) { + stretch.setTransposeFactor(multiplier, tonalityLimit); + } + void EMSCRIPTEN_KEEPALIVE setTransposeSemitones(Sample semitones, Sample tonalityLimit) { + stretch.setTransposeSemitones(semitones, tonalityLimit); + } + void EMSCRIPTEN_KEEPALIVE setFormantFactor(Sample multiplier, bool compensate) { + stretch.setFormantFactor(multiplier, compensate); + } + void EMSCRIPTEN_KEEPALIVE setFormantSemitones(Sample semitones, bool compensate) { + stretch.setFormantSemitones(semitones, compensate); + } + void EMSCRIPTEN_KEEPALIVE setFormantBase(Sample freq) { + stretch.setFormantBase(freq); + } + // We can't do setFreqMap() + void EMSCRIPTEN_KEEPALIVE seek(int inputSamples, double playbackRate) { + stretch.seek(buffersIn, inputSamples, playbackRate); + } + void EMSCRIPTEN_KEEPALIVE process(int inputSamples, int outputSamples) { + stretch.process(buffersIn, inputSamples, buffersOut, outputSamples); + } + void EMSCRIPTEN_KEEPALIVE flush(int outputSamples) { + stretch.flush(buffersOut, outputSamples); + } +} diff --git a/testCOut/pre.js b/testCOut/pre.js new file mode 100644 index 0000000..4010891 --- /dev/null +++ b/testCOut/pre.js @@ -0,0 +1,10 @@ +// Adapted from the Emscripten error message when initialising std::random_device +var crypto = globalThis?.crypto || { + getRandomValues: array => { + // Cryptographically insecure, but fine for audio + for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0; + } +}; +var performance = globalThis?.performance || { + now: _ => Date.now() +}; diff --git a/testCOut/signalsmith-linear/fft.h b/testCOut/signalsmith-linear/fft.h new file mode 100644 index 0000000..80b559b --- /dev/null +++ b/testCOut/signalsmith-linear/fft.h @@ -0,0 +1,1380 @@ +#ifndef SIGNALSMITH_AUDIO_LINEAR_FFT_H +#define SIGNALSMITH_AUDIO_LINEAR_FFT_H + +#include +#include +#include + +#if defined(__FAST_MATH__) && (__apple_build_version__ >= 16000000) && (__apple_build_version__ <= 16000099) && !defined(SIGNALSMITH_IGNORE_BROKEN_APPLECLANG) +# error Apple Clang 16.0.0 generates incorrect SIMD for ARM. If you HAVE to use this version of Clang, turn off -ffast-math. +#endif + +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif + +namespace signalsmith { namespace linear { + +namespace _impl { + // Helpers for complex arithmetic, ignoring the NaN/Inf edge-cases you get without `-ffast-math` + template + void complexMul(std::complex *a, const std::complex *b, const std::complex *c, size_t size) { + for (size_t i = 0; i < size; ++i) { + auto bi = b[i], ci = c[i]; + a[i] = {bi.real()*ci.real() - bi.imag()*ci.imag(), bi.imag()*ci.real() + bi.real()*ci.imag()}; + } + } + template + void complexMulConj(std::complex *a, const std::complex *b, const std::complex *c, size_t size) { + for (size_t i = 0; i < size; ++i) { + auto bi = b[i], ci = c[i]; + a[i] = {bi.real()*ci.real() + bi.imag()*ci.imag(), bi.imag()*ci.real() - bi.real()*ci.imag()}; + } + } + template + void complexMul(V *ar, V *ai, const V *br, const V *bi, const V *cr, const V *ci, size_t size) { + for (size_t i = 0; i < size; ++i) { + V rr = br[i]*cr[i] - bi[i]*ci[i]; + V ri = br[i]*ci[i] + bi[i]*cr[i]; + ar[i] = rr; + ai[i] = ri; + } + } + template + void complexMulConj(V *ar, V *ai, const V *br, const V *bi, const V *cr, const V *ci, size_t size) { + for (size_t i = 0; i < size; ++i) { + V rr = cr[i]*br[i] + ci[i]*bi[i]; + V ri = cr[i]*bi[i] - ci[i]*br[i]; + ar[i] = rr; + ai[i] = ri; + } + } + + // Input: aStride elements next to each other -> output with bStride + template + void interleaveCopy(const V *a, V *b, size_t bStride) { + for (size_t bi = 0; bi < bStride; ++bi) { + const V *offsetA = a + bi*aStride; + V *offsetB = b + bi; + for (size_t ai = 0; ai < aStride; ++ai) { + offsetB[ai*bStride] = offsetA[ai]; + } + } + } + template + void interleaveCopy(const V *a, V *b, size_t aStride, size_t bStride) { + for (size_t bi = 0; bi < bStride; ++bi) { + const V *offsetA = a + bi*aStride; + V *offsetB = b + bi; + for (size_t ai = 0; ai < aStride; ++ai) { + offsetB[ai*bStride] = offsetA[ai]; + } + } + } + template + void interleaveCopy(const V *aReal, const V *aImag, V *bReal, V *bImag, size_t bStride) { + for (size_t bi = 0; bi < bStride; ++bi) { + const V *offsetAr = aReal + bi*aStride; + const V *offsetAi = aImag + bi*aStride; + V *offsetBr = bReal + bi; + V *offsetBi = bImag + bi; + for (size_t ai = 0; ai < aStride; ++ai) { + offsetBr[ai*bStride] = offsetAr[ai]; + offsetBi[ai*bStride] = offsetAi[ai]; + } + } + } + template + void interleaveCopy(const V *aReal, const V *aImag, V *bReal, V *bImag, size_t aStride, size_t bStride) { + for (size_t bi = 0; bi < bStride; ++bi) { + const V *offsetAr = aReal + bi*aStride; + const V *offsetAi = aImag + bi*aStride; + V *offsetBr = bReal + bi; + V *offsetBi = bImag + bi; + for (size_t ai = 0; ai < aStride; ++ai) { + offsetBr[ai*bStride] = offsetAr[ai]; + offsetBi[ai*bStride] = offsetAi[ai]; + } + } + } +} + +/// Fairly simple and very portable power-of-2 FFT +template +struct SimpleFFT { + using Complex = std::complex; + + SimpleFFT(size_t size=0) { + resize(size); + } + + void resize(size_t size) { + twiddles.resize(size*3/4); + for (size_t i = 0; i < size*3/4; ++i) { + Sample twiddlePhase = -2*M_PI*i/size; + twiddles[i] = std::polar(Sample(1), twiddlePhase); + } + working.resize(size); + } + + void fft(const Complex *time, Complex *freq) { + size_t size = working.size(); + if (size <= 1) { + *freq = *time; + return; + } + fftPass(size, 1, time, freq, working.data()); + } + + void ifft(const Complex *freq, Complex *time) { + size_t size = working.size(); + if (size <= 1) { + *time = *freq; + return; + } + fftPass(size, 1, freq, time, working.data()); + } + + void fft(const Sample *inR, const Sample *inI, Sample *outR, Sample *outI) { + size_t size = working.size(); + if (size <= 1) { + *outR = *inR; + *outI = *inI; + return; + } + Sample *workingR = (Sample *)working.data(), *workingI = workingR + size; + fftPass(size, 1, inR, inI, outR, outI, workingR, workingI); + } + void ifft(const Sample *inR, const Sample *inI, Sample *outR, Sample *outI) { + size_t size = working.size(); + if (size <= 1) { + *outR = *inR; + *outI = *inI; + return; + } + Sample *workingR = (Sample *)working.data(), *workingI = workingR + size; + fftPass(size, 1, inR, inI, outR, outI, workingR, workingI); + } +private: + std::vector twiddles; + std::vector working; + + template + static Complex mul(const Complex &a, const Complex &b) { + return conjB ? Complex{ + a.real()*b.real() + a.imag()*b.imag(), + a.imag()*b.real() - a.real()*b.imag() + } : Complex{ + a.real()*b.real() - a.imag()*b.imag(), + a.imag()*b.real() + a.real()*b.imag() + }; + } + + // Calculate a [size]-point FFT, where each element is a block of [stride] values + template + void fftPass(size_t size, size_t stride, const Complex *input, Complex *output, Complex *working) { + if (size/4 > 1) { + // Calculate four quarter-size FFTs + fftPass(size/4, stride*4, input, working, output); + combine4(size, stride, working, output); + } else if (size == 4) { + combine4(4, stride, input, output); + } else { + // 2-point FFT + for (size_t s = 0; s < stride; ++s) { + Complex a = input[s]; + Complex b = input[s + stride]; + output[s] = a + b; + output[s + stride] = a - b; + } + } + } + + // Combine interleaved results into a single spectrum + template + void combine4(size_t size, size_t stride, const Complex *input, Complex *output) const { + auto twiddleStep = working.size()/size; + for (size_t i = 0; i < size/4; ++i) { + Complex twiddleB = twiddles[i*twiddleStep]; + Complex twiddleC = twiddles[i*2*twiddleStep]; + Complex twiddleD = twiddles[i*3*twiddleStep]; + + const Complex *inputA = input + 4*i*stride; + const Complex *inputB = input + (4*i + 1)*stride; + const Complex *inputC = input + (4*i + 2)*stride; + const Complex *inputD = input + (4*i + 3)*stride; + Complex *outputA = output + i*stride; + Complex *outputB = output + (i + size/4)*stride; + Complex *outputC = output + (i + size/4*2)*stride; + Complex *outputD = output + (i + size/4*3)*stride; + for (size_t s = 0; s < stride; ++s) { + Complex a = inputA[s]; + Complex b = mul(inputB[s], twiddleB); + Complex c = mul(inputC[s], twiddleC); + Complex d = mul(inputD[s], twiddleD); + Complex ac0 = a + c, ac1 = a - c; + Complex bd0 = b + d, bd1 = inverse ? (b - d) : (d - b); + Complex bd1i = {-bd1.imag(), bd1.real()}; + outputA[s] = ac0 + bd0; + outputB[s] = ac1 + bd1i; + outputC[s] = ac0 - bd0; + outputD[s] = ac1 - bd1i; + } + } + } + + // The same thing, but translated for split-complex input/output + template + void fftPass(size_t size, size_t stride, const Sample *inputR, const Sample *inputI, Sample *outputR, Sample *outputI, Sample *workingR, Sample *workingI) const { + if (size/4 > 1) { + // Calculate four quarter-size FFTs + fftPass(size/4, stride*4, inputR, inputI, workingR, workingI, outputR, outputI); + combine4(size, stride, workingR, workingI, outputR, outputI); + } else if (size == 4) { + combine4(4, stride, inputR, inputI, outputR, outputI); + } else { + // 2-point FFT + for (size_t s = 0; s < stride; ++s) { + Sample ar = inputR[s], ai = inputI[s]; + Sample br = inputR[s + stride], bi = inputI[s + stride]; + outputR[s] = ar + br; + outputI[s] = ai + bi; + outputR[s + stride] = ar - br; + outputI[s + stride] = ai - bi; + } + } + } + + // Combine interleaved results into a single spectrum + template + void combine4(size_t size, size_t stride, const Sample *inputR, const Sample *inputI, Sample *outputR, Sample *outputI) const { + auto twiddleStep = working.size()/size; + for (size_t i = 0; i < size/4; ++i) { + Complex twiddleB = twiddles[i*twiddleStep]; + Complex twiddleC = twiddles[i*2*twiddleStep]; + Complex twiddleD = twiddles[i*3*twiddleStep]; + + const Sample *inputAr = inputR + 4*i*stride, *inputAi = inputI + 4*i*stride; + const Sample *inputBr = inputR + (4*i + 1)*stride, *inputBi = inputI + (4*i + 1)*stride; + const Sample *inputCr = inputR + (4*i + 2)*stride, *inputCi = inputI + (4*i + 2)*stride; + const Sample *inputDr = inputR + (4*i + 3)*stride, *inputDi = inputI + (4*i + 3)*stride; + Sample *outputAr = outputR + i*stride, *outputAi = outputI + i*stride; + Sample *outputBr = outputR + (i + size/4)*stride, *outputBi = outputI + (i + size/4)*stride; + Sample *outputCr = outputR + (i + size/4*2)*stride, *outputCi = outputI + (i + size/4*2)*stride; + Sample *outputDr = outputR + (i + size/4*3)*stride, *outputDi = outputI + (i + size/4*3)*stride; + for (size_t s = 0; s < stride; ++s) { + Complex a = {inputAr[s], inputAi[s]}; + Complex b = mul({inputBr[s], inputBi[s]}, twiddleB); + Complex c = mul({inputCr[s], inputCi[s]}, twiddleC); + Complex d = mul({inputDr[s], inputDi[s]}, twiddleD); + Complex ac0 = a + c, ac1 = a - c; + Complex bd0 = b + d, bd1 = inverse ? (b - d) : (d - b); + Complex bd1i = {-bd1.imag(), bd1.real()}; + outputAr[s] = ac0.real() + bd0.real(); + outputAi[s] = ac0.imag() + bd0.imag(); + outputBr[s] = ac1.real() + bd1i.real(); + outputBi[s] = ac1.imag() + bd1i.imag(); + outputCr[s] = ac0.real() - bd0.real(); + outputCi[s] = ac0.imag() - bd0.imag(); + outputDr[s] = ac1.real() - bd1i.real(); + outputDi[s] = ac1.imag() - bd1i.imag(); + } + } + } +}; + +/// A power-of-2 only FFT, specialised with platform-specific fast implementations where available +template +struct Pow2FFT { + static constexpr bool prefersSplit = true; // whether this FFT implementation is faster when given split-complex inputs + using Complex = std::complex; + + Pow2FFT(size_t size=0) { + resize(size); + } + // Allow move, but not copy + Pow2FFT(const Pow2FFT &other) = delete; + Pow2FFT(Pow2FFT &&other) : tmp(std::move(other.tmp)), simpleFFT(std::move(other.simpleFFT)) {} + + void resize(size_t size) { + simpleFFT.resize(size); + tmp.resize(size); + } + + void fft(const Complex *time, Complex *freq) { + simpleFFT.fft(time, freq); + } + void fft(const Sample *inR, const Sample *inI, Sample *outR, Sample *outI) { + simpleFFT.fft(inR, inI, outR, outI); + } + + void ifft(const Complex *freq, Complex *time) { + simpleFFT.ifft(freq, time); + } + void ifft(const Sample *inR, const Sample *inI, Sample *outR, Sample *outI) { + simpleFFT.ifft(inR, inI, outR, outI); + } + +private: + std::vector tmp; + SimpleFFT simpleFFT; +}; + +/// An FFT which can handle multiples of 3 and 5, and can be computed in chunks +template +struct SplitFFT { + using Complex = std::complex; + static constexpr bool prefersSplit = Pow2FFT::prefersSplit; + + static constexpr size_t maxSplit = splitComputation ? 4 : 1; + static constexpr size_t minInnerSize = 32; + + static size_t fastSizeAbove(size_t size) { + size_t pow2 = 1; + while (pow2 < 16 && pow2 < size) pow2 *= 2; + while (pow2*8 < size) pow2 *= 2; + size_t multiple = (size + pow2 - 1)/pow2; // will be 1-8 + if (multiple == 7) ++multiple; + return multiple*pow2; + } + + SplitFFT(size_t size=0) { + resize(size); + } + + void resize(size_t size) { + innerSize = 1; + outerSize = size; + + dftTmp.resize(0); + dftTwists.resize(0); + plan.resize(0); + if (!size) return; + + // Inner size = largest power of 2 such that either the inner size >= minInnerSize, or we have the target number of splits + while (!(outerSize&1) && (outerSize > maxSplit || innerSize < minInnerSize)) { + innerSize *= 2; + outerSize /= 2; + } + tmpFreq.resize(size); + innerFFT.resize(innerSize); + + outerTwiddles.resize(innerSize*(outerSize - 1)); + outerTwiddlesR.resize(innerSize*(outerSize - 1)); + outerTwiddlesI.resize(innerSize*(outerSize - 1)); + for (size_t i = 0; i < innerSize; ++i) { + for (size_t s = 1; s < outerSize; ++s) { + Sample twiddlePhase = Sample(-2*M_PI*i/innerSize*s/outerSize); + outerTwiddles[i + (s - 1)*innerSize] = std::polar(Sample(1), twiddlePhase); + } + } + for (size_t i = 0; i < outerTwiddles.size(); ++i) { + outerTwiddlesR[i] = outerTwiddles[i].real(); + outerTwiddlesI[i] = outerTwiddles[i].imag(); + } + + StepType interleaveStep = StepType::interleaveOrderN; + StepType finalStep = StepType::finalOrderN; + if (outerSize == 2) { + interleaveStep = StepType::interleaveOrder2; + finalStep = StepType::finalOrder2; + } + if (outerSize == 3) { + interleaveStep = StepType::interleaveOrder3; + finalStep = StepType::finalOrder3; + } + if (outerSize == 4) { + interleaveStep = StepType::interleaveOrder4; + finalStep = StepType::finalOrder4; + } + if (outerSize == 5) { + interleaveStep = StepType::interleaveOrder5; + finalStep = StepType::finalOrder5; + } + + if (outerSize <= 1) { + if (size > 0) plan.push_back(Step{StepType::passthrough, 0}); + } else { + plan.push_back({interleaveStep, 0}); + plan.push_back({StepType::firstFFT, 0}); + for (size_t s = 1; s < outerSize; ++s) { + plan.push_back({StepType::middleFFT, s*innerSize}); + } + plan.push_back({StepType::twiddles, 0}); + plan.push_back({finalStep, 0}); + + if (finalStep == StepType::finalOrderN) { + dftTmp.resize(outerSize); + dftTwists.resize(outerSize); + for (size_t s = 0; s < outerSize; ++s) { + Sample dftPhase = Sample(-2*M_PI*s/outerSize); + dftTwists[s] = std::polar(Sample(1), dftPhase); + } + } + } + } + + size_t size() const { + return innerSize*outerSize; + } + size_t steps() const { + return plan.size(); + } + + void fft(const Complex *time, Complex *freq) { + for (auto &step : plan) { + fftStep(step, time, freq); + } + } + void fft(size_t step, const Complex *time, Complex *freq) { + fftStep(plan[step], time, freq); + } + void fft(const Sample *inR, const Sample *inI, Sample *outR, Sample *outI) { + for (auto &step : plan) { + fftStep(step, inR, inI, outR, outI); + } + } + void fft(size_t step, const Sample *inR, const Sample *inI, Sample *outR, Sample *outI) { + fftStep(plan[step], inR, inI, outR, outI); + } + + void ifft(const Complex *freq, Complex *time) { + for (auto &step : plan) { + fftStep(step, freq, time); + } + } + void ifft(size_t step, const Complex *freq, Complex *time) { + fftStep(plan[step], freq, time); + } + void ifft(const Sample *inR, const Sample *inI, Sample *outR, Sample *outI) { + for (auto &step : plan) { + fftStep(step, inR, inI, outR, outI); + } + } + void ifft(size_t step, const Sample *inR, const Sample *inI, Sample *outR, Sample *outI) { + fftStep(plan[step], inR, inI, outR, outI); + } +private: + using InnerFFT = Pow2FFT; + InnerFFT innerFFT; + + size_t innerSize, outerSize; + std::vector tmpFreq; + std::vector outerTwiddles; + std::vector outerTwiddlesR, outerTwiddlesI; + std::vector dftTwists, dftTmp; + + enum class StepType { + passthrough, + interleaveOrder2, interleaveOrder3, interleaveOrder4, interleaveOrder5, interleaveOrderN, + firstFFT, middleFFT, + twiddles, + finalOrder2, finalOrder3, finalOrder4, finalOrder5, finalOrderN + }; + struct Step { + StepType type; + size_t offset; + }; + std::vector plan; + + template + void fftStep(Step step, const Complex *time, Complex *freq) { + switch (step.type) { + case (StepType::passthrough): { + if (inverse) { + innerFFT.ifft(time, freq); + } else { + innerFFT.fft(time, freq); + } + break; + } + case (StepType::interleaveOrder2): { + _impl::interleaveCopy<2>(time, tmpFreq.data(), innerSize); + break; + } + case (StepType::interleaveOrder3): { + _impl::interleaveCopy<3>(time, tmpFreq.data(), innerSize); + break; + } + case (StepType::interleaveOrder4): { + _impl::interleaveCopy<4>(time, tmpFreq.data(), innerSize); + break; + } + case (StepType::interleaveOrder5): { + _impl::interleaveCopy<5>(time, tmpFreq.data(), innerSize); + break; + } + case (StepType::interleaveOrderN): { + _impl::interleaveCopy(time, tmpFreq.data(), outerSize, innerSize); + break; + } + case (StepType::firstFFT): { + if (inverse) { + innerFFT.ifft(tmpFreq.data(), freq); + } else { + innerFFT.fft(tmpFreq.data(), freq); + } + break; + } + case (StepType::middleFFT): { + Complex *offsetOut = freq + step.offset; + if (inverse) { + innerFFT.ifft(tmpFreq.data() + step.offset, offsetOut); + } else { + innerFFT.fft(tmpFreq.data() + step.offset, offsetOut); + } + break; + } + case (StepType::twiddles): { + if (inverse) { + _impl::complexMulConj(freq + innerSize, freq + innerSize, outerTwiddles.data(), innerSize*(outerSize - 1)); + } else { + _impl::complexMul(freq + innerSize, freq + innerSize, outerTwiddles.data(), innerSize*(outerSize - 1)); + } + break; + } + case StepType::finalOrder2: + finalPass2(freq); + break; + case StepType::finalOrder3: + finalPass3(freq); + break; + case StepType::finalOrder4: + finalPass4(freq); + break; + case StepType::finalOrder5: + finalPass5(freq); + break; + case StepType::finalOrderN: + finalPassN(freq); + break; + } + } + template + void fftStep(Step step, const Sample *inR, const Sample *inI, Sample *outR, Sample *outI) { + Sample *tmpR = (Sample *)tmpFreq.data(), *tmpI = tmpR + tmpFreq.size(); + switch (step.type) { + case (StepType::passthrough): { + if (inverse) { + innerFFT.ifft(inR, inI, outR, outI); + } else { + innerFFT.fft(inR, inI, outR, outI); + } + break; + } + case (StepType::interleaveOrder2): { + _impl::interleaveCopy<2>(inR, tmpR, innerSize); + _impl::interleaveCopy<2>(inI, tmpI, innerSize); + break; + } + case (StepType::interleaveOrder3): { + _impl::interleaveCopy<3>(inR, tmpR, innerSize); + _impl::interleaveCopy<3>(inI, tmpI, innerSize); + break; + } + case (StepType::interleaveOrder4): { + _impl::interleaveCopy<4>(inR, tmpR, innerSize); + _impl::interleaveCopy<4>(inI, tmpI, innerSize); + break; + } + case (StepType::interleaveOrder5): { + _impl::interleaveCopy<5>(inR, tmpR, innerSize); + _impl::interleaveCopy<5>(inI, tmpI, innerSize); + break; + } + case (StepType::interleaveOrderN): { + _impl::interleaveCopy(inR, inI, tmpR, tmpI, outerSize, innerSize); + break; + } + case (StepType::firstFFT): { + if (inverse) { + innerFFT.ifft(tmpR, tmpI, outR, outI); + } else { + innerFFT.fft(tmpR, tmpI, outR, outI); + } + break; + } + case (StepType::middleFFT): { + size_t offset = step.offset; + Sample *offsetOutR = outR + offset; + Sample *offsetOutI = outI + offset; + if (inverse) { + innerFFT.ifft(tmpR + offset, tmpI + offset, offsetOutR, offsetOutI); + } else { + innerFFT.fft(tmpR + offset, tmpI + offset, offsetOutR, offsetOutI); + } + break; + } + case(StepType::twiddles): { + auto *twiddlesR = outerTwiddlesR.data(); + auto *twiddlesI = outerTwiddlesI.data(); + if (inverse) { + _impl::complexMulConj(outR + innerSize, outI + innerSize, outR + innerSize, outI + innerSize, twiddlesR, twiddlesI, innerSize*(outerSize - 1)); + } else { + _impl::complexMul(outR + innerSize, outI + innerSize, outR + innerSize, outI + innerSize, twiddlesR, twiddlesI, innerSize*(outerSize - 1)); + } + break; + } + case StepType::finalOrder2: + finalPass2(outR, outI); + break; + case StepType::finalOrder3: + finalPass3(outR, outI); + break; + case StepType::finalOrder4: + finalPass4(outR, outI); + break; + case StepType::finalOrder5: + finalPass5(outR, outI); + break; + case StepType::finalOrderN: + finalPassN(outR, outI); + break; + } + } + + void finalPass2(Complex *f0) { + auto *f1 = f0 + innerSize; + for (size_t i = 0; i < innerSize; ++i) { + Complex a = f0[i], b = f1[i]; + f0[i] = a + b; + f1[i] = a - b; + } + } + void finalPass2(Sample *f0r, Sample *f0i) { + auto *f1r = f0r + innerSize; + auto *f1i = f0i + innerSize; + for (size_t i = 0; i < innerSize; ++i) { + Sample ar = f0r[i], ai = f0i[i]; + Sample br = f1r[i], bi = f1i[i]; + f0r[i] = ar + br; + f0i[i] = ai + bi; + f1r[i] = ar - br; + f1i[i] = ai - bi; + } + } + template + void finalPass3(Complex *f0) { + auto *f1 = f0 + innerSize; + auto *f2 = f0 + innerSize*2; + const Complex tw1{Sample(-0.5), Sample(-std::sqrt(0.75)*(inverse ? -1 : 1))}; + for (size_t i = 0; i < innerSize; ++i) { + Complex a = f0[i], b = f1[i], c = f2[i]; + Complex bc0 = b + c, bc1 = b - c; + f0[i] = a + bc0; + f1[i] = { + a.real() + bc0.real()*tw1.real() - bc1.imag()*tw1.imag(), + a.imag() + bc0.imag()*tw1.real() + bc1.real()*tw1.imag() + }; + f2[i] = { + a.real() + bc0.real()*tw1.real() + bc1.imag()*tw1.imag(), + a.imag() + bc0.imag()*tw1.real() - bc1.real()*tw1.imag() + }; + } + } + template + void finalPass3(Sample *f0r, Sample *f0i) { + auto *f1r = f0r + innerSize; + auto *f1i = f0i + innerSize; + auto *f2r = f0r + innerSize*2; + auto *f2i = f0i + innerSize*2; + const Sample tw1r = -0.5, tw1i = -std::sqrt(0.75)*(inverse ? -1 : 1); + + for (size_t i = 0; i < innerSize; ++i) { + Sample ar = f0r[i], ai = f0i[i], br = f1r[i], bi = f1i[i], cr = f2r[i], ci = f2i[i]; + + f0r[i] = ar + br + cr; + f0i[i] = ai + bi + ci; + f1r[i] = ar + br*tw1r - bi*tw1i + cr*tw1r + ci*tw1i; + f1i[i] = ai + bi*tw1r + br*tw1i - cr*tw1i + ci*tw1r; + f2r[i] = ar + br*tw1r + bi*tw1i + cr*tw1r - ci*tw1i; + f2i[i] = ai + bi*tw1r - br*tw1i + cr*tw1i + ci*tw1r; + } + } + template + void finalPass4(Complex *f0) { + auto *f1 = f0 + innerSize; + auto *f2 = f0 + innerSize*2; + auto *f3 = f0 + innerSize*3; + for (size_t i = 0; i < innerSize; ++i) { + Complex a = f0[i], b = f1[i], c = f2[i], d = f3[i]; + + Complex ac0 = a + c, ac1 = a - c; + Complex bd0 = b + d, bd1 = inverse ? (b - d) : (d - b); + Complex bd1i = {-bd1.imag(), bd1.real()}; + f0[i] = ac0 + bd0; + f1[i] = ac1 + bd1i; + f2[i] = ac0 - bd0; + f3[i] = ac1 - bd1i; + } + } + template + void finalPass4(Sample *f0r, Sample *f0i) { + auto *f1r = f0r + innerSize; + auto *f1i = f0i + innerSize; + auto *f2r = f0r + innerSize*2; + auto *f2i = f0i + innerSize*2; + auto *f3r = f0r + innerSize*3; + auto *f3i = f0i + innerSize*3; + for (size_t i = 0; i < innerSize; ++i) { + Sample ar = f0r[i], ai = f0i[i], br = f1r[i], bi = f1i[i], cr = f2r[i], ci = f2i[i], dr = f3r[i], di = f3i[i]; + + Sample ac0r = ar + cr, ac0i = ai + ci; + Sample ac1r = ar - cr, ac1i = ai - ci; + Sample bd0r = br + dr, bd0i = bi + di; + Sample bd1r = br - dr, bd1i = bi - di; + + f0r[i] = ac0r + bd0r; + f0i[i] = ac0i + bd0i; + f1r[i] = inverse ? (ac1r - bd1i) : (ac1r + bd1i); + f1i[i] = inverse ? (ac1i + bd1r) : (ac1i - bd1r); + f2r[i] = ac0r - bd0r; + f2i[i] = ac0i - bd0i; + f3r[i] = inverse ? (ac1r + bd1i) : (ac1r - bd1i); + f3i[i] = inverse ? (ac1i - bd1r) : (ac1i + bd1r); + } + } + template + void finalPass5(Complex *f0) { + auto *f1 = f0 + innerSize; + auto *f2 = f0 + innerSize*2; + auto *f3 = f0 + innerSize*3; + auto *f4 = f0 + innerSize*4; + const Sample tw1r = 0.30901699437494745; + const Sample tw1i = -0.9510565162951535*(inverse ? -1 : 1); + const Sample tw2r = -0.8090169943749473; + const Sample tw2i = -0.5877852522924732*(inverse ? -1 : 1); + for (size_t i = 0; i < innerSize; ++i) { + Complex a = f0[i], b = f1[i], c = f2[i], d = f3[i], e = f4[i]; + + Complex be0 = b + e, be1 = {e.imag() - b.imag(), b.real() - e.real()}; // (b - e)*i + Complex cd0 = c + d, cd1 = {d.imag() - c.imag(), c.real() - d.real()}; + + Complex bcde01 = be0*tw1r + cd0*tw2r; + Complex bcde02 = be0*tw2r + cd0*tw1r; + Complex bcde11 = be1*tw1i + cd1*tw2i; + Complex bcde12 = be1*tw2i - cd1*tw1i; + + f0[i] = a + be0 + cd0; + f1[i] = a + bcde01 + bcde11; + f2[i] = a + bcde02 + bcde12; + f3[i] = a + bcde02 - bcde12; + f4[i] = a + bcde01 - bcde11; + } + } + template + void finalPass5(Sample *f0r, Sample *f0i) { + auto *f1r = f0r + innerSize; + auto *f1i = f0i + innerSize; + auto *f2r = f0r + innerSize*2; + auto *f2i = f0i + innerSize*2; + auto *f3r = f0r + innerSize*3; + auto *f3i = f0i + innerSize*3; + auto *f4r = f0r + innerSize*4; + auto *f4i = f0i + innerSize*4; + + const Sample tw1r = 0.30901699437494745; + const Sample tw1i = -0.9510565162951535*(inverse ? -1 : 1); + const Sample tw2r = -0.8090169943749473; + const Sample tw2i = -0.5877852522924732*(inverse ? -1 : 1); + for (size_t i = 0; i < innerSize; ++i) { + Sample ar = f0r[i], ai = f0i[i], br = f1r[i], bi = f1i[i], cr = f2r[i], ci = f2i[i], dr = f3r[i], di = f3i[i], er = f4r[i], ei = f4i[i]; + + Sample be0r = br + er, be0i = bi + ei; + Sample be1r = ei - bi, be1i = br - er; + Sample cd0r = cr + dr, cd0i = ci + di; + Sample cd1r = di - ci, cd1i = cr - dr; + + Sample bcde01r = be0r*tw1r + cd0r*tw2r, bcde01i = be0i*tw1r + cd0i*tw2r; + Sample bcde02r = be0r*tw2r + cd0r*tw1r, bcde02i = be0i*tw2r + cd0i*tw1r; + Sample bcde11r = be1r*tw1i + cd1r*tw2i, bcde11i = be1i*tw1i + cd1i*tw2i; + Sample bcde12r = be1r*tw2i - cd1r*tw1i, bcde12i = be1i*tw2i - cd1i*tw1i; + + f0r[i] = ar + be0r + cd0r; + f0i[i] = ai + be0i + cd0i; + f1r[i] = ar + bcde01r + bcde11r; + f1i[i] = ai + bcde01i + bcde11i; + f2r[i] = ar + bcde02r + bcde12r; + f2i[i] = ai + bcde02i + bcde12i; + f3r[i] = ar + bcde02r - bcde12r; + f3i[i] = ai + bcde02i - bcde12i; + f4r[i] = ar + bcde01r - bcde11r; + f4i[i] = ai + bcde01i - bcde11i; + } + } + + template + void finalPassN(Complex *f0) { + for (size_t i = 0; i < innerSize; ++i) { + Complex *offsetFreq = f0 + i; + Complex sum = 0; + for (size_t i2 = 0; i2 < outerSize; ++i2) { + sum += (dftTmp[i2] = offsetFreq[i2*innerSize]); + } + offsetFreq[0] = sum; + + for (size_t f = 1; f < outerSize; ++f) { + Complex sum = dftTmp[0]; + + for (size_t i2 = 1; i2 < outerSize; ++i2) { + size_t twistIndex = (i2*f)%outerSize; + Complex twist = inverse ? std::conj(dftTwists[twistIndex]) : dftTwists[twistIndex]; + sum += Complex{ + dftTmp[i2].real()*twist.real() - dftTmp[i2].imag()*twist.imag(), + dftTmp[i2].imag()*twist.real() + dftTmp[i2].real()*twist.imag() + }; + } + + offsetFreq[f*innerSize] = sum; + } + } + } + template + void finalPassN(Sample *f0r, Sample *f0i) { + Sample *tmpR = (Sample *)dftTmp.data(), *tmpI = tmpR + outerSize; + + for (size_t i = 0; i < innerSize; ++i) { + Sample *offsetR = f0r + i; + Sample *offsetI = f0i + i; + Sample sumR = 0, sumI = 0; + for (size_t i2 = 0; i2 < outerSize; ++i2) { + sumR += (tmpR[i2] = offsetR[i2*innerSize]); + sumI += (tmpI[i2] = offsetI[i2*innerSize]); + } + offsetR[0] = sumR; + offsetI[0] = sumI; + + for (size_t f = 1; f < outerSize; ++f) { + Sample sumR = *tmpR, sumI = *tmpI; + + for (size_t i2 = 1; i2 < outerSize; ++i2) { + size_t twistIndex = (i2*f)%outerSize; + Complex twist = inverse ? std::conj(dftTwists[twistIndex]) : dftTwists[twistIndex]; + sumR += tmpR[i2]*twist.real() - tmpI[i2]*twist.imag(); + sumI += tmpI[i2]*twist.real() + tmpR[i2]*twist.imag(); + } + + offsetR[f*innerSize] = sumR; + offsetI[f*innerSize] = sumI; + } + } + } +}; + +template +using FFT = SplitFFT; + +// Wraps a complex FFT into a real one +template> +struct SimpleRealFFT { + using Complex = std::complex; + + static constexpr bool prefersSplit = ComplexFFT::prefersSplit; + + SimpleRealFFT(size_t size=0) { + resize(size); + } + + void resize(size_t size) { + complexFft.resize(size); + tmpTime.resize(size); + tmpFreq.resize(size); + } + + void fft(const Sample *time, Complex *freq) { + for (size_t i = 0; i < tmpTime.size(); ++i) { + tmpTime[i] = time[i]; + } + complexFft.fft(tmpTime.data(), tmpFreq.data()); + for (size_t i = 0; i < tmpFreq.size()/2; ++i) { + freq[i] = tmpFreq[i]; + } + freq[0] = { + tmpFreq[0].real(), + tmpFreq[tmpFreq.size()/2].real() + }; + } + void fft(const Sample *inR, Sample *outR, Sample *outI) { + Sample *tmpFreqR = (Sample *)tmpFreq.data(), *tmpFreqI = tmpFreqR + tmpFreq.size(); + for (size_t i = 0; i < tmpTime.size()/2; ++i) { + tmpTime[i] = 0; + } + complexFft.fft(inR, (const Sample *)tmpTime.data(), tmpFreqR, tmpFreqI); + for (size_t i = 0; i < tmpTime.size()/2; ++i) { + outR[i] = tmpFreqR[i]; + outI[i] = tmpFreqI[i]; + } + outI[0] = tmpFreqR[tmpFreq.size()/2]; + } + + void ifft(const Complex *freq, Sample *time) { + tmpFreq[0] = freq[0].real(); + tmpFreq[tmpFreq.size()/2] = freq[0].imag(); + for (size_t i = 1; i < tmpFreq.size()/2; ++i) { + tmpFreq[i] = freq[i]; + tmpFreq[tmpFreq.size() - i] = std::conj(freq[i]); + } + complexFft.ifft(tmpFreq.data(), tmpTime.data()); + for (size_t i = 0; i < tmpTime.size(); ++i) { + time[i] = tmpTime[i].real(); + } + } + void ifft(const Sample *inR, const Sample *inI, Sample *outR) { + Sample *tmpFreqR = (Sample *)tmpFreq.data(), *tmpFreqI = tmpFreqR + tmpFreq.size(); + tmpFreqR[0] = inR[0]; + tmpFreqR[tmpFreq.size()/2] = inI[0]; + tmpFreqI[0] = 0; + tmpFreqI[tmpFreq.size()/2] = 0; + for (size_t i = 1; i < tmpFreq.size()/2; ++i) { + tmpFreqR[i] = inR[i]; + tmpFreqI[i] = inI[i]; + tmpFreqR[tmpFreq.size() - i] = inR[i]; + tmpFreqI[tmpFreq.size() - i] = -inI[i]; + } + complexFft.ifft(tmpFreqR, tmpFreqI, outR, (Sample *)tmpTime.data()); + } + +private: + ComplexFFT complexFft; + std::vector tmpTime, tmpFreq; +}; + +/// A default power-of-2 FFT, specialised with platform-specific fast implementations where available +template +struct Pow2RealFFT : public SimpleRealFFT { + static constexpr bool prefersSplit = SimpleRealFFT::prefersSplit; + + using SimpleRealFFT::SimpleRealFFT; + + // Prevent copying, since it might be a problem for specialisations + Pow2RealFFT(const Pow2RealFFT &other) = delete; + // Pass move-constructor through, just to be explicit about it + Pow2RealFFT(Pow2RealFFT &&other) : SimpleRealFFT(std::move(other)) {} +}; + +/// A Real FFT which can handle multiples of 3 and 5, and can be computed in chunks +template +struct RealFFT { + using Complex = std::complex; + static constexpr bool prefersSplit = SplitFFT::prefersSplit; + + static size_t fastSizeAbove(size_t size) { + return ComplexFFT::fastSizeAbove((size + 1)/2)*2; + } + + RealFFT(size_t size=0) { + resize(size); + } + + void resize(size_t size) { + size_t hSize = size/2; + complexFft.resize(hSize); + tmpFreq.resize(hSize); + tmpTime.resize(hSize); + + twiddles.resize(hSize/2 + 1); + + if (!halfBinShift) { + for (size_t i = 0; i < twiddles.size(); ++i) { + Sample rotPhase = i*(-2*M_PI/size) - M_PI/2; // bake rotation by (-i) into twiddles + twiddles[i] = std::polar(Sample(1), rotPhase); + } + } else { + for (size_t i = 0; i < twiddles.size(); ++i) { + Sample rotPhase = (i + 0.5)*(-2*M_PI/size) - M_PI/2; + twiddles[i] = std::polar(Sample(1), rotPhase); + } + + halfBinTwists.resize(hSize); + for (size_t i = 0; i < hSize; ++i) { + Sample twistPhase = -2*M_PI*i/size; + halfBinTwists[i] = std::polar(Sample(1), twistPhase); + } + } + } + + size_t size() const { + return complexFft.size()*2; + } + size_t steps() const { + return complexFft.steps() + (splitComputation ? 3 : 2); + } + + void fft(const Sample *time, Complex *freq) { + for (size_t s = 0; s < steps(); ++s) { + fft(s, time, freq); + } + } + void fft(size_t step, const Sample *time, Complex *freq) { + if (complexPrefersSplit) { + size_t hSize = complexFft.size(); + Sample *tmpTimeR = (Sample *)tmpTime.data(), *tmpTimeI = tmpTimeR + hSize; + Sample *tmpFreqR = (Sample *)tmpFreq.data(), *tmpFreqI = tmpFreqR + hSize; + if (step-- == 0) { + size_t hSize = complexFft.size(); + if (halfBinShift) { + for (size_t i = 0; i < hSize; ++i) { + Sample tr = time[2*i], ti = time[2*i + 1]; + Complex twist = halfBinTwists[i]; + tmpTimeR[i] = tr*twist.real() - ti*twist.imag(); + tmpTimeI[i] = ti*twist.real() + tr*twist.imag(); + } + } else { + for (size_t i = 0; i < hSize; ++i) { + tmpTimeR[i] = time[2*i]; + tmpTimeI[i] = time[2*i + 1]; + } + } + } else if (step < complexFft.steps()) { + complexFft.fft(step, tmpTimeR, tmpTimeI, tmpFreqR, tmpFreqI); + } else { + if (!halfBinShift) { + Sample bin0r = tmpFreqR[0], bin0i = tmpFreqI[0]; + freq[0] = {bin0r + bin0i, bin0r - bin0i}; + } + + size_t startI = halfBinShift ? 0 : 1; + size_t endI = hSize/2 + 1; + if (splitComputation) { // Do this last twiddle in two halves + if (step == complexFft.steps()) { + endI = (startI + endI)/2; + } else { + startI = (startI + endI)/2; + } + } + for (size_t i = startI; i < endI; ++i) { + size_t conjI = halfBinShift ? (hSize - 1 - i) : (hSize - i); + Complex twiddle = twiddles[i]; + + Sample oddR = (tmpFreqR[i] + tmpFreqR[conjI])*Sample(0.5); + Sample oddI = (tmpFreqI[i] - tmpFreqI[conjI])*Sample(0.5); + Sample evenIR = (tmpFreqR[i] - tmpFreqR[conjI])*Sample(0.5); + Sample evenII = (tmpFreqI[i] + tmpFreqI[conjI])*Sample(0.5); + Sample evenRotMinusIR = evenIR*twiddle.real() - evenII*twiddle.imag(); + Sample evenRotMinusII = evenII*twiddle.real() + evenIR*twiddle.imag(); + + freq[i] = {oddR + evenRotMinusIR, oddI + evenRotMinusII}; + freq[conjI] = {oddR - evenRotMinusIR, evenRotMinusII - oddI}; + } + } + } else { + bool canUseTime = !halfBinShift && !(size_t(time)%alignof(Complex)); + if (step-- == 0) { + size_t hSize = complexFft.size(); + if (halfBinShift) { + for (size_t i = 0; i < hSize; ++i) { + Sample tr = time[2*i], ti = time[2*i + 1]; + Complex twist = halfBinTwists[i]; + tmpTime[i] = { + tr*twist.real() - ti*twist.imag(), + ti*twist.real() + tr*twist.imag() + }; + } + } else if (!canUseTime) { + std::memcpy(tmpTime.data(), time, sizeof(Complex)*hSize); + } + } else if (step < complexFft.steps()) { + complexFft.fft(step, canUseTime ? (const Complex *)time : tmpTime.data(), tmpFreq.data()); + } else { + if (!halfBinShift) { + Complex bin0 = tmpFreq[0]; + freq[0] = { // pack DC & Nyquist together + bin0.real() + bin0.imag(), + bin0.real() - bin0.imag() + }; + } + + size_t hSize = complexFft.size(); + size_t startI = halfBinShift ? 0 : 1; + size_t endI = hSize/2 + 1; + if (splitComputation) { // Do this last twiddle in two halves + if (step == complexFft.steps()) { + endI = (startI + endI)/2; + } else { + startI = (startI + endI)/2; + } + } + for (size_t i = startI; i < endI; ++i) { + size_t conjI = halfBinShift ? (hSize - 1 - i) : (hSize - i); + Complex twiddle = twiddles[i]; + + Complex odd = (tmpFreq[i] + std::conj(tmpFreq[conjI]))*Sample(0.5); + Complex evenI = (tmpFreq[i] - std::conj(tmpFreq[conjI]))*Sample(0.5); + Complex evenRotMinusI = { // twiddle includes a factor of -i + evenI.real()*twiddle.real() - evenI.imag()*twiddle.imag(), + evenI.imag()*twiddle.real() + evenI.real()*twiddle.imag() + }; + + freq[i] = odd + evenRotMinusI; + freq[conjI] = {odd.real() - evenRotMinusI.real(), evenRotMinusI.imag() - odd.imag()}; + } + } + } + } + void fft(const Sample *inR, Sample *outR, Sample *outI) { + for (size_t s = 0; s < steps(); ++s) { + fft(s, inR, outR, outI); + } + } + void fft(size_t step, const Sample *inR, Sample *outR, Sample *outI) { + size_t hSize = complexFft.size(); + Sample *tmpTimeR = (Sample *)tmpTime.data(), *tmpTimeI = tmpTimeR + hSize; + Sample *tmpFreqR = (Sample *)tmpFreq.data(), *tmpFreqI = tmpFreqR + hSize; + if (step-- == 0) { + size_t hSize = complexFft.size(); + if (halfBinShift) { + for (size_t i = 0; i < hSize; ++i) { + Sample tr = inR[2*i], ti = inR[2*i + 1]; + Complex twist = halfBinTwists[i]; + tmpTimeR[i] = tr*twist.real() - ti*twist.imag(); + tmpTimeI[i] = ti*twist.real() + tr*twist.imag(); + } + } else { + for (size_t i = 0; i < hSize; ++i) { + tmpTimeR[i] = inR[2*i]; + tmpTimeI[i] = inR[2*i + 1]; + } + } + } else if (step < complexFft.steps()) { + complexFft.fft(step, tmpTimeR, tmpTimeI, tmpFreqR, tmpFreqI); + } else { + if (!halfBinShift) { + Sample bin0r = tmpFreqR[0], bin0i = tmpFreqI[0]; + outR[0] = bin0r + bin0i; + outI[0] = bin0r - bin0i; + } + + size_t startI = halfBinShift ? 0 : 1; + size_t endI = hSize/2 + 1; + if (splitComputation) { // Do this last twiddle in two halves + if (step == complexFft.steps()) { + endI = (startI + endI)/2; + } else { + startI = (startI + endI)/2; + } + } + for (size_t i = startI; i < endI; ++i) { + size_t conjI = halfBinShift ? (hSize - 1 - i) : (hSize - i); + Complex twiddle = twiddles[i]; + + Sample oddR = (tmpFreqR[i] + tmpFreqR[conjI])*Sample(0.5); + Sample oddI = (tmpFreqI[i] - tmpFreqI[conjI])*Sample(0.5); + Sample evenIR = (tmpFreqR[i] - tmpFreqR[conjI])*Sample(0.5); + Sample evenII = (tmpFreqI[i] + tmpFreqI[conjI])*Sample(0.5); + Sample evenRotMinusIR = evenIR*twiddle.real() - evenII*twiddle.imag(); + Sample evenRotMinusII = evenII*twiddle.real() + evenIR*twiddle.imag(); + + outR[i] = oddR + evenRotMinusIR; + outI[i] = oddI + evenRotMinusII; + outR[conjI] = oddR - evenRotMinusIR; + outI[conjI] = evenRotMinusII - oddI; + } + } + } + + void ifft(const Complex *freq, Sample *time) { + for (size_t s = 0; s < steps(); ++s) { + ifft(s, freq, time); + } + } + void ifft(size_t step, const Complex *freq, Sample *time) { + if (complexPrefersSplit) { + size_t hSize = complexFft.size(); + Sample *tmpTimeR = (Sample *)tmpTime.data(), *tmpTimeI = tmpTimeR + hSize; + Sample *tmpFreqR = (Sample *)tmpFreq.data(), *tmpFreqI = tmpFreqR + hSize; + + bool splitFirst = splitComputation && (step-- == 0); + if (splitFirst || step-- == 0) { + Complex bin0 = freq[0]; + if (!halfBinShift) { + tmpFreqR[0] = bin0.real() + bin0.imag(); + tmpFreqI[0] = bin0.real() - bin0.imag(); + } + size_t startI = halfBinShift ? 0 : 1; + size_t endI = hSize/2 + 1; + if (splitComputation) { // Do this first twiddle in two halves + if (splitFirst) { + endI = (startI + endI)/2; + } else { + startI = (startI + endI)/2; + } + } + for (size_t i = startI; i < endI; ++i) { + size_t conjI = halfBinShift ? (hSize - 1 - i) : (hSize - i); + Complex twiddle = twiddles[i]; + + Complex odd = freq[i] + std::conj(freq[conjI]); + Complex evenRotMinusI = freq[i] - std::conj(freq[conjI]); + Complex evenI = { // Conjugate twiddle + evenRotMinusI.real()*twiddle.real() + evenRotMinusI.imag()*twiddle.imag(), + evenRotMinusI.imag()*twiddle.real() - evenRotMinusI.real()*twiddle.imag() + }; + + tmpFreqR[i] = odd.real() + evenI.real(); + tmpFreqI[i] = odd.imag() + evenI.imag(); + tmpFreqR[conjI] = odd.real() - evenI.real(); + tmpFreqI[conjI] = evenI.imag() - odd.imag(); + } + } else if (step < complexFft.steps()) { + complexFft.ifft(step, tmpFreqR, tmpFreqI, tmpTimeR, tmpTimeI); + } else { + size_t hSize = complexFft.size(); + if (halfBinShift) { + for (size_t i = 0; i < hSize; ++i) { + Sample tr = tmpTimeR[i], ti = tmpTimeI[i]; + Complex twist = halfBinTwists[i]; + time[2*i] = tr*twist.real() + ti*twist.imag(); + time[2*i + 1] = ti*twist.real() - tr*twist.imag(); + } + } else { + for (size_t i = 0; i < hSize; ++i) { + time[2*i] = tmpTimeR[i]; + time[2*i + 1] = tmpTimeI[i]; + } + } + } + } else { + bool canUseTime = !halfBinShift && !(size_t(time)%alignof(Complex)); + bool splitFirst = splitComputation && (step-- == 0); + if (splitFirst || step-- == 0) { + Complex bin0 = freq[0]; + if (!halfBinShift) { + tmpFreq[0] = { + bin0.real() + bin0.imag(), + bin0.real() - bin0.imag() + }; + } + size_t hSize = complexFft.size(); + size_t startI = halfBinShift ? 0 : 1; + size_t endI = hSize/2 + 1; + if (splitComputation) { // Do this first twiddle in two halves + if (splitFirst) { + endI = (startI + endI)/2; + } else { + startI = (startI + endI)/2; + } + } + for (size_t i = startI; i < endI; ++i) { + size_t conjI = halfBinShift ? (hSize - 1 - i) : (hSize - i); + Complex twiddle = twiddles[i]; + + Complex odd = freq[i] + std::conj(freq[conjI]); + Complex evenRotMinusI = freq[i] - std::conj(freq[conjI]); + Complex evenI = { // Conjugate twiddle + evenRotMinusI.real()*twiddle.real() + evenRotMinusI.imag()*twiddle.imag(), + evenRotMinusI.imag()*twiddle.real() - evenRotMinusI.real()*twiddle.imag() + }; + + tmpFreq[i] = odd + evenI; + tmpFreq[conjI] = {odd.real() - evenI.real(), evenI.imag() - odd.imag()}; + } + } else if (step < complexFft.steps()) { + // Can't just use time as (Complex *), since it might not be aligned properly + complexFft.ifft(step, tmpFreq.data(), canUseTime ? (Complex *)time : tmpTime.data()); + } else { + size_t hSize = complexFft.size(); + if (halfBinShift) { + for (size_t i = 0; i < hSize; ++i) { + Complex t = tmpTime[i]; + Complex twist = halfBinTwists[i]; + time[2*i] = t.real()*twist.real() + t.imag()*twist.imag(); + time[2*i + 1] = t.imag()*twist.real() - t.real()*twist.imag(); + } + } else if (!canUseTime) { + std::memcpy(time, tmpTime.data(), sizeof(Complex)*hSize); + } + } + } + } + void ifft(const Sample *inR, const Sample *inI, Sample *outR) { + for (size_t s = 0; s < steps(); ++s) { + ifft(s, inR, inI, outR); + } + } + void ifft(size_t step, const Sample *inR, const Sample *inI, Sample *outR) { + size_t hSize = complexFft.size(); + Sample *tmpTimeR = (Sample *)tmpTime.data(), *tmpTimeI = tmpTimeR + hSize; + Sample *tmpFreqR = (Sample *)tmpFreq.data(), *tmpFreqI = tmpFreqR + hSize; + + bool splitFirst = splitComputation && (step-- == 0); + if (splitFirst || step-- == 0) { + Sample bin0r = inR[0], bin0i = inI[0]; + if (!halfBinShift) { + tmpFreqR[0] = bin0r + bin0i; + tmpFreqI[0] = bin0r - bin0i; + } + size_t startI = halfBinShift ? 0 : 1; + size_t endI = hSize/2 + 1; + if (splitComputation) { // Do this first twiddle in two halves + if (splitFirst) { + endI = (startI + endI)/2; + } else { + startI = (startI + endI)/2; + } + } + for (size_t i = startI; i < endI; ++i) { + size_t conjI = halfBinShift ? (hSize - 1 - i) : (hSize - i); + Complex twiddle = twiddles[i]; + Sample fir = inR[i], fii = inI[i]; + Sample fcir = inR[conjI], fcii = inI[conjI]; + + Complex odd = {fir + fcir, fii - fcii}; + Complex evenRotMinusI = {fir - fcir, fii + fcii}; + Complex evenI = { // Conjugate twiddle + evenRotMinusI.real()*twiddle.real() + evenRotMinusI.imag()*twiddle.imag(), + evenRotMinusI.imag()*twiddle.real() - evenRotMinusI.real()*twiddle.imag() + }; + + tmpFreqR[i] = odd.real() + evenI.real(); + tmpFreqI[i] = odd.imag() + evenI.imag(); + tmpFreqR[conjI] = odd.real() - evenI.real(); + tmpFreqI[conjI] = evenI.imag() - odd.imag(); + } + } else if (step < complexFft.steps()) { + // Can't just use time as (Complex *), since it might not be aligned properly + complexFft.ifft(step, tmpFreqR, tmpFreqI, tmpTimeR, tmpTimeI); + } else { + if (halfBinShift) { + for (size_t i = 0; i < hSize; ++i) { + Sample tr = tmpTimeR[i], ti = tmpTimeI[i]; + Complex twist = halfBinTwists[i]; + outR[2*i] = tr*twist.real() + ti*twist.imag(); + outR[2*i + 1] = ti*twist.real() - tr*twist.imag(); + } + } else { + for (size_t i = 0; i < hSize; ++i) { + outR[2*i] = tmpTimeR[i]; + outR[2*i + 1] = tmpTimeI[i]; + } + } + } + } +private: + using ComplexFFT = SplitFFT; + ComplexFFT complexFft; + + static constexpr bool complexPrefersSplit = ComplexFFT::prefersSplit; + std::vector tmpFreq, tmpTime; + std::vector twiddles, halfBinTwists; +}; + +template +using ModifiedRealFFT = RealFFT; + +}} // namespace + +// Override `Pow2FFT` / `Pow2RealFFT` templates with faster implementations +#if defined(SIGNALSMITH_USE_PFFFT) || defined(SIGNALSMITH_USE_PFFFT_DOUBLE) +# if defined(SIGNALSMITH_USE_PFFFT) +# include "./platform/fft-pffft.h" +# endif +# if defined(SIGNALSMITH_USE_PFFFT_DOUBLE) +# include "./platform/fft-pffft-double.h" +# endif +#elif defined(SIGNALSMITH_USE_ACCELERATE) +# include "./platform/fft-accelerate.h" +#elif defined(SIGNALSMITH_USE_IPP) +# include "./platform/fft-ipp.h" +#endif + +#endif // include guard diff --git a/testCOut/signalsmith-linear/stft.h b/testCOut/signalsmith-linear/stft.h new file mode 100644 index 0000000..58e2d8e --- /dev/null +++ b/testCOut/signalsmith-linear/stft.h @@ -0,0 +1,631 @@ +#ifndef SIGNALSMITH_AUDIO_LINEAR_STFT_H +#define SIGNALSMITH_AUDIO_LINEAR_STFT_H + +#include "./fft.h" + +namespace signalsmith { namespace linear { + +enum { + STFT_SPECTRUM_PACKED=0, + STFT_SPECTRUM_MODIFIED=1, + STFT_SPECTRUM_UNPACKED=2, +}; + +/// A self-normalising STFT, with variable position/window for output blocks +template +struct DynamicSTFT { + static constexpr bool modified = (spectrumType == STFT_SPECTRUM_MODIFIED); + static constexpr bool unpacked = (spectrumType == STFT_SPECTRUM_UNPACKED); + RealFFT fft; + + using Complex = std::complex; + + enum class WindowShape {ignore, acg, kaiser}; + static constexpr WindowShape acg = WindowShape::acg; + static constexpr WindowShape kaiser = WindowShape::kaiser; + + void configure(size_t inChannels, size_t outChannels, size_t blockSamples, size_t extraInputHistory=0, size_t intervalSamples=0, Sample asymmetry=0) { + _analysisChannels = inChannels; + _synthesisChannels = outChannels; + _blockSamples = blockSamples; + _fftSamples = fft.fastSizeAbove((blockSamples + 1)/2)*2; + fft.resize(_fftSamples); + _fftBins = _fftSamples/2 + (spectrumType == STFT_SPECTRUM_UNPACKED); + + _inputLengthSamples = _blockSamples + extraInputHistory; + input.buffer.resize(_inputLengthSamples*_analysisChannels); + + output.buffer.resize(_blockSamples*_synthesisChannels); + output.windowProducts.resize(_blockSamples); + spectrumBuffer.resize(_fftBins*std::max(_analysisChannels, _synthesisChannels)); + timeBuffer.resize(_fftSamples); + + _analysisWindow.resize(_blockSamples); + _synthesisWindow.resize(_blockSamples); + setInterval(intervalSamples ? intervalSamples : blockSamples/4, acg, asymmetry); + + reset(); + } + + size_t blockSamples() const { + return _blockSamples; + } + size_t fftSamples() const { + return _fftSamples; + } + size_t defaultInterval() const { + return _defaultInterval; + } + size_t bands() const { + return _fftBins; + } + size_t analysisLatency() const { + return _blockSamples - _analysisOffset; + } + size_t synthesisLatency() const { + return _synthesisOffset; + } + size_t latency() const { + return synthesisLatency() + analysisLatency(); + } + Sample binToFreq(Sample b) const { + return (modified ? b + Sample(0.5) : b)/_fftSamples; + } + Sample freqToBin(Sample f) const { + return modified ? f*_fftSamples - Sample(0.5) : f*_fftSamples; + } + + void reset(Sample productWeight=1) { + input.pos = _blockSamples; + output.pos = 0; + for (auto &v : input.buffer) v = 0; + for (auto &v : output.buffer) v = 0; + for (auto &v : spectrumBuffer) v = 0; + for (auto &v : output.windowProducts) v = 0; + addWindowProduct(); + for (int i = int(_blockSamples) - int(_defaultInterval) - 1; i >= 0; --i) { + output.windowProducts[i] += output.windowProducts[i + _defaultInterval]; + } + for (auto &v : output.windowProducts) v = v*productWeight + almostZero; + moveOutput(_defaultInterval); // ready for first block immediately + } + + void writeInput(size_t channel, size_t offset, size_t length, const Sample *inputArray) { + Sample *buffer = input.buffer.data() + channel*_inputLengthSamples; + + size_t offsetPos = (input.pos + offset)%_inputLengthSamples; + size_t inputWrapIndex = _inputLengthSamples - offsetPos; + size_t chunk1 = std::min(length, inputWrapIndex); + for (size_t i = 0; i < chunk1; ++i) { + size_t i2 = offsetPos + i; + buffer[i2] = inputArray[i]; + } + for (size_t i = chunk1; i < length; ++i) { + size_t i2 = i + offsetPos -_inputLengthSamples; + buffer[i2] = inputArray[i]; + } + } + void writeInput(size_t channel, size_t length, const Sample *inputArray) { + writeInput(channel, 0, length, inputArray); + } + void moveInput(size_t samples, bool clearInput=false) { + if (clearInput) { + size_t inputWrapIndex = _inputLengthSamples - input.pos; + size_t chunk1 = std::min(samples, inputWrapIndex); + for (size_t c = 0; c < _analysisChannels; ++c) { + Sample *buffer = input.buffer.data() + c*_inputLengthSamples; + for (size_t i = 0; i < chunk1; ++i) { + size_t i2 = input.pos + i; + buffer[i2] = 0; + } + for (size_t i = chunk1; i < samples; ++i) { + size_t i2 = i + input.pos - _inputLengthSamples; + buffer[i2] = 0; + } + } + } + + input.pos = (input.pos + samples)%_inputLengthSamples; + _samplesSinceAnalysis += samples; + } + size_t samplesSinceAnalysis() const { + return _samplesSinceAnalysis; + } + + /// When no more synthesis is expected, let output taper away to 0 based on windowing. Otherwise, the output will be scaled as if there's just a very long block interval, which can exaggerate artefacts and numerical errors. You still can't read more than `blockSamples()` into the future. + void finishOutput(Sample strength=1, size_t offset=0) { + Sample maxWindowProduct = 0; + + size_t chunk1 = std::max(offset, std::min(_blockSamples, _blockSamples - output.pos)); + + for (size_t i = offset; i < chunk1; ++i) { + size_t i2 = output.pos + i; + Sample &wp = output.windowProducts[i2]; + maxWindowProduct = std::max(wp, maxWindowProduct); + wp += (maxWindowProduct - wp)*strength; + } + for (size_t i = chunk1; i < _blockSamples; ++i) { + size_t i2 = i + output.pos - _blockSamples; + Sample &wp = output.windowProducts[i2]; + maxWindowProduct = std::max(wp, maxWindowProduct); + wp += (maxWindowProduct - wp)*strength; + } + } + + void readOutput(size_t channel, size_t offset, size_t length, Sample *outputArray) { + Sample *buffer = output.buffer.data() + channel*_blockSamples; + size_t offsetPos = (output.pos + offset)%_blockSamples; + size_t outputWrapIndex = _blockSamples - offsetPos; + size_t chunk1 = std::min(length, outputWrapIndex); + for (size_t i = 0; i < chunk1; ++i) { + size_t i2 = offsetPos + i; + outputArray[i] = buffer[i2]/output.windowProducts[i2]; + } + for (size_t i = chunk1; i < length; ++i) { + size_t i2 = i + offsetPos - _blockSamples; + outputArray[i] = buffer[i2]/output.windowProducts[i2]; + } + } + void readOutput(size_t channel, size_t length, Sample *outputArray) { + return readOutput(channel, 0, length, outputArray); + } + void addOutput(size_t channel, size_t offset, size_t length, const Sample *newOutputArray) { + length = std::min(_blockSamples, length); + Sample *buffer = output.buffer.data() + channel*_blockSamples; + size_t offsetPos = (output.pos + offset)%_blockSamples; + size_t outputWrapIndex = _blockSamples - offsetPos; + size_t chunk1 = std::min(length, outputWrapIndex); + for (size_t i = 0; i < chunk1; ++i) { + size_t i2 = offsetPos + i; + buffer[i2] += newOutputArray[i]*output.windowProducts[i2]; + } + for (size_t i = chunk1; i < length; ++i) { + size_t i2 = i + offsetPos - _blockSamples; + buffer[i2] += newOutputArray[i]*output.windowProducts[i2]; + } + } + void addOutput(size_t channel, size_t length, const Sample *newOutputArray) { + return addOutput(channel, 0, length, newOutputArray); + } + void replaceOutput(size_t channel, size_t offset, size_t length, const Sample *newOutputArray) { + length = std::min(_blockSamples, length); + Sample *buffer = output.buffer.data() + channel*_blockSamples; + size_t offsetPos = (output.pos + offset)%_blockSamples; + size_t outputWrapIndex = _blockSamples - offsetPos; + size_t chunk1 = std::min(length, outputWrapIndex); + for (size_t i = 0; i < chunk1; ++i) { + size_t i2 = offsetPos + i; + buffer[i2] = newOutputArray[i]*output.windowProducts[i2]; + } + for (size_t i = chunk1; i < length; ++i) { + size_t i2 = i + offsetPos - _blockSamples; + buffer[i2] = newOutputArray[i]*output.windowProducts[i2]; + } + } + void replaceOutput(size_t channel, size_t length, const Sample *newOutputArray) { + return replaceOutput(channel, 0, length, newOutputArray); + } + void moveOutput(size_t samples) { + if (samples == 1) { // avoid all the loops/chunks if we can + for (size_t c = 0; c < _synthesisChannels; ++c) { + output.buffer[output.pos + c*_blockSamples] = 0; + } + output.windowProducts[output.pos] = almostZero; + if (++output.pos >= _blockSamples) output.pos = 0; + return; + } + // Zero the output buffer as we cross it + size_t outputWrapIndex = _blockSamples - output.pos; + size_t chunk1 = std::min(samples, outputWrapIndex); + for (size_t c = 0; c < _synthesisChannels; ++c) { + Sample *buffer = output.buffer.data() + c*_blockSamples; + for (size_t i = 0; i < chunk1; ++i) { + size_t i2 = output.pos + i; + buffer[i2] = 0; + } + for (size_t i = chunk1; i < samples; ++i) { + size_t i2 = i + output.pos - _blockSamples; + buffer[i2] = 0; + } + } + for (size_t i = 0; i < chunk1; ++i) { + size_t i2 = output.pos + i; + output.windowProducts[i2] = almostZero; + } + for (size_t i = chunk1; i < samples; ++i) { + size_t i2 = i + output.pos - _blockSamples; + output.windowProducts[i2] = almostZero; + } + output.pos = (output.pos + samples)%_blockSamples; + _samplesSinceSynthesis += samples; + } + size_t samplesSinceSynthesis() const { + return _samplesSinceSynthesis; + } + + Complex * spectrum(size_t channel) { + return spectrumBuffer.data() + channel*_fftBins; + } + const Complex * spectrum(size_t channel) const { + return spectrumBuffer.data() + channel*_fftBins; + } + + Sample * analysisWindow() { + return _analysisWindow.data(); + } + const Sample * analysisWindow() const { + return _analysisWindow.data(); + } + // Sets the centre index of the window + void analysisOffset(size_t offset) { + _analysisOffset = offset; + } + size_t analysisOffset() const { + return _analysisOffset; + } + Sample * synthesisWindow() { + return _synthesisWindow.data(); + } + const Sample * synthesisWindow() const { + return _synthesisWindow.data(); + } + // Sets the centre index of the window + void synthesisOffset(size_t offset) { + _synthesisOffset = offset; + } + size_t synthesisOffset() const { + return _synthesisOffset; + } + + void setInterval(size_t defaultInterval, WindowShape windowShape=WindowShape::ignore, Sample asymmetry=0) { + _defaultInterval = defaultInterval; + if (windowShape == WindowShape::ignore) return; + + if (windowShape == acg) { + auto window = ApproximateConfinedGaussian::withBandwidth(double(_blockSamples)/defaultInterval); + window.fill(_synthesisWindow, _blockSamples, asymmetry, false); + } else if (windowShape == kaiser) { + auto window = Kaiser::withBandwidth(double(_blockSamples)/defaultInterval, true); + window.fill(_synthesisWindow, _blockSamples, asymmetry, true); + } + + _analysisOffset = _synthesisOffset = _blockSamples/2; + if (_analysisChannels == 0) { + for (auto &v : _analysisWindow) v = 1; + } else if (asymmetry == 0) { + forcePerfectReconstruction(_synthesisWindow, _blockSamples, _defaultInterval); + for (size_t i = 0; i < _blockSamples; ++i) { + _analysisWindow[i] = _synthesisWindow[i]; + } + } else { + for (size_t i = 0; i < _blockSamples; ++i) { + _analysisWindow[i] = _synthesisWindow[_blockSamples - 1 - i]; + } + } + // Set offsets to peak's index + for (size_t i = 0; i < _blockSamples; ++i) { + if (_analysisWindow[i] > _analysisWindow[_analysisOffset]) _analysisOffset = i; + if (_synthesisWindow[i] > _synthesisWindow[_synthesisOffset]) _synthesisOffset = i; + } + } + + void analyse(size_t samplesInPast=0) { + for (size_t s = 0; s < analyseSteps(); ++s) { + analyseStep(s, samplesInPast); + } + } + size_t analyseSteps() const { + return splitComputation ? _analysisChannels*(fft.steps() + 1) : _analysisChannels; + } + void analyseStep(size_t step, std::size_t samplesInPast=0) { + size_t fftSteps = splitComputation ? fft.steps() : 0; + size_t channel = step/(fftSteps + 1); + step -= channel*(fftSteps + 1); + + if (step-- == 0) { // extra step at start of each channel: copy windowed input into buffer + size_t offsetPos = (_inputLengthSamples*2 + input.pos - _blockSamples - samplesInPast)%_inputLengthSamples; + size_t inputWrapIndex = _inputLengthSamples - offsetPos; + size_t chunk1 = std::min(_analysisOffset, inputWrapIndex); + size_t chunk2 = std::max(_analysisOffset, std::min(_blockSamples, inputWrapIndex)); + + _samplesSinceAnalysis = samplesInPast; + Sample *buffer = input.buffer.data() + channel*_inputLengthSamples; + for (size_t i = 0; i < chunk1; ++i) { + Sample w = modified ? -_analysisWindow[i] : _analysisWindow[i]; + size_t ti = i + (_fftSamples - _analysisOffset); + size_t bi = offsetPos + i; + timeBuffer[ti] = buffer[bi]*w; + } + for (size_t i = chunk1; i < _analysisOffset; ++i) { + Sample w = modified ? -_analysisWindow[i] : _analysisWindow[i]; + size_t ti = i + (_fftSamples - _analysisOffset); + size_t bi = i + offsetPos - _inputLengthSamples; + timeBuffer[ti] = buffer[bi]*w; + } + for (size_t i = _analysisOffset; i < chunk2; ++i) { + Sample w = _analysisWindow[i]; + size_t ti = i - _analysisOffset; + size_t bi = offsetPos + i; + timeBuffer[ti] = buffer[bi]*w; + } + for (size_t i = chunk2; i < _blockSamples; ++i) { + Sample w = _analysisWindow[i]; + size_t ti = i - _analysisOffset; + size_t bi = i + offsetPos - _inputLengthSamples; + timeBuffer[ti] = buffer[bi]*w; + } + for (size_t i = _blockSamples - _analysisOffset; i < _fftSamples - _analysisOffset; ++i) { + timeBuffer[i] = 0; + } + if (splitComputation) return; + } + auto *spectrumPtr = spectrum(channel); + if (splitComputation) { + fft.fft(step, timeBuffer.data(), spectrumPtr); + if (unpacked && step == fft.steps() - 1) { + spectrumPtr[_fftBins - 1] = spectrumPtr[0].imag(); + spectrumPtr[0].imag(0); + } + } else { + fft.fft(timeBuffer.data(), spectrum(channel)); + if (unpacked) { + spectrumPtr[_fftBins - 1] = spectrumPtr[0].imag(); + spectrumPtr[0].imag(0); + } + } + } + + void synthesise() { + for (size_t s = 0; s < synthesiseSteps(); ++s) { + synthesiseStep(s); + } + } + size_t synthesiseSteps() const { + return splitComputation ? (_synthesisChannels*(fft.steps() + 1) + 1) : _synthesisChannels; + } + void synthesiseStep(size_t step) { + if (step == 0) { // Extra first step which adds in the effective gain for a pure analysis-synthesis cycle + addWindowProduct(); + if (splitComputation) return; + } + if (splitComputation) --step; + + size_t fftSteps = splitComputation ? fft.steps() : 0; + size_t channel = step/(fftSteps + 1); + step -= channel*(fftSteps + 1); + + auto *spectrumPtr = spectrum(channel); + if (unpacked && step == 0) { // re-pack + spectrumPtr[0].imag(spectrumPtr[_fftBins - 1].real()); + } + + if (splitComputation) { + if (step < fftSteps) { + fft.ifft(step, spectrumPtr, timeBuffer.data()); + return; + } + } else { + fft.ifft(spectrumPtr, timeBuffer.data()); + } + + // extra step after each channel's FFT + Sample *buffer = output.buffer.data() + channel*_blockSamples; + size_t outputWrapIndex = _blockSamples - output.pos; + size_t chunk1 = std::min(_synthesisOffset, outputWrapIndex); + size_t chunk2 = std::min(_blockSamples, std::max(_synthesisOffset, outputWrapIndex)); + + for (size_t i = 0; i < chunk1; ++i) { + Sample w = modified ? -_synthesisWindow[i] : _synthesisWindow[i]; + size_t ti = i + (_fftSamples - _synthesisOffset); + size_t bi = output.pos + i; + buffer[bi] += timeBuffer[ti]*w; + } + for (size_t i = chunk1; i < _synthesisOffset; ++i) { + Sample w = modified ? -_synthesisWindow[i] : _synthesisWindow[i]; + size_t ti = i + (_fftSamples - _synthesisOffset); + size_t bi = i + output.pos - _blockSamples; + buffer[bi] += timeBuffer[ti]*w; + } + for (size_t i = _synthesisOffset; i < chunk2; ++i) { + Sample w = _synthesisWindow[i]; + size_t ti = i - _synthesisOffset; + size_t bi = output.pos + i; + buffer[bi] += timeBuffer[ti]*w; + } + for (size_t i = chunk2; i < _blockSamples; ++i) { + Sample w = _synthesisWindow[i]; + size_t ti = i - _synthesisOffset; + size_t bi = i + output.pos - _blockSamples; + buffer[bi] += timeBuffer[ti]*w; + } + } + +#define COMPAT_SPELLING(name, alt) \ + template \ + void alt(Args &&...args) { \ + name(std::forward(args)...); \ + } + COMPAT_SPELLING(analyse, analyze); + COMPAT_SPELLING(analyseStep, analyseStep); + COMPAT_SPELLING(analyseSteps, analyzeSteps); + COMPAT_SPELLING(synthesise, synthesize); + COMPAT_SPELLING(synthesiseStep, synthesizeStep); + COMPAT_SPELLING(synthesiseSteps, synthesizeSteps); + + /// Input (only available so we can save/restore the input state) + struct Input { + void swap(Input &other) { + std::swap(pos, other.pos); + std::swap(buffer, other.buffer); + } + + Input & operator=(const Input &other) { + pos = other.pos; + buffer.assign(other.buffer.begin(), other.buffer.end()); + return *this; + } + private: + friend struct DynamicSTFT; + size_t pos = 0; + std::vector buffer; + }; + Input input; + + /// Output (only available so we can save/restore the output state) + struct Output { + void swap(Output &other) { + std::swap(pos, other.pos); + std::swap(buffer, other.buffer); + std::swap(windowProducts, other.windowProducts); + } + + Output & operator=(const Output &other) { + pos = other.pos; + buffer.assign(other.buffer.begin(), other.buffer.end()); + windowProducts.assign(other.windowProducts.begin(), other.windowProducts.end()); + return *this; + } + private: + friend struct DynamicSTFT; + size_t pos = 0; + std::vector buffer; + std::vector windowProducts; + }; + Output output; + +private: + static constexpr Sample almostZero = 1e-30; + + size_t _analysisChannels, _synthesisChannels, _inputLengthSamples, _blockSamples, _fftSamples, _fftBins; + size_t _defaultInterval = 0; + + std::vector _analysisWindow, _synthesisWindow; + size_t _analysisOffset = 0, _synthesisOffset = 0; + + std::vector spectrumBuffer; + std::vector timeBuffer; + + size_t _samplesSinceSynthesis = 0, _samplesSinceAnalysis = 0; + + void addWindowProduct() { + _samplesSinceSynthesis = 0; + + int windowShift = int(_synthesisOffset) - int(_analysisOffset); + size_t wMin = std::max(0, windowShift); + size_t wMax = std::min(_blockSamples, int(_blockSamples) + windowShift); + + Sample *windowProduct = output.windowProducts.data(); + size_t outputWrapIndex = _blockSamples - output.pos; + size_t chunk1 = std::min(wMax, std::max(wMin, outputWrapIndex)); + for (size_t i = wMin; i < chunk1; ++i) { + Sample wa = _analysisWindow[i - windowShift]; + Sample ws = _synthesisWindow[i]; + size_t bi = output.pos + i; + windowProduct[bi] += wa*ws*_fftSamples; + } + for (size_t i = chunk1; i < wMax; ++i) { + Sample wa = _analysisWindow[i - windowShift]; + Sample ws = _synthesisWindow[i]; + size_t bi = i + output.pos - _blockSamples; + windowProduct[bi] += wa*ws*_fftSamples; + } + } + + // Copied from DSP library `windows.h` + class Kaiser { + inline static double bessel0(double x) { + const double significanceLimit = 1e-4; + double result = 0; + double term = 1; + double m = 0; + while (term > significanceLimit) { + result += term; + ++m; + term *= (x*x)/(4*m*m); + } + + return result; + } + double beta; + double invB0; + + static double heuristicBandwidth(double bandwidth) { + return bandwidth + 8/((bandwidth + 3)*(bandwidth + 3)) + 0.25*std::max(3 - bandwidth, 0.0); + } + public: + Kaiser(double beta) : beta(beta), invB0(1/bessel0(beta)) {} + + static Kaiser withBandwidth(double bandwidth, bool heuristicOptimal=false) { + return Kaiser(bandwidthToBeta(bandwidth, heuristicOptimal)); + } + static double bandwidthToBeta(double bandwidth, bool heuristicOptimal=false) { + if (heuristicOptimal) { // Heuristic based on numerical search + bandwidth = heuristicBandwidth(bandwidth); + } + bandwidth = std::max(bandwidth, 2.0); + double alpha = std::sqrt(bandwidth*bandwidth*0.25 - 1); + return alpha*M_PI; + } + + template + void fill(Data &&data, size_t size, double warp, bool isForSynthesis) const { + double invSize = 1.0/size; + size_t offsetI = (size&1) ? 1 : (isForSynthesis ? 0 : 2); + for (size_t i = 0; i < size; ++i) { + double r = (2*i + offsetI)*invSize - 1; + r = (r + warp)/(1 + r*warp); + double arg = std::sqrt(1 - r*r); + data[i] = bessel0(beta*arg)*invB0; + } + } + }; + + class ApproximateConfinedGaussian { + double gaussianFactor; + + double gaussian(double x) const { + return std::exp(-x*x*gaussianFactor); + } + public: + static double bandwidthToSigma(double bandwidth) { + return 0.3/std::sqrt(bandwidth); + } + static ApproximateConfinedGaussian withBandwidth(double bandwidth) { + return ApproximateConfinedGaussian(bandwidthToSigma(bandwidth)); + } + + ApproximateConfinedGaussian(double sigma) : gaussianFactor(0.0625/(sigma*sigma)) {} + + /// Fills an arbitrary container + template + void fill(Data &&data, size_t size, double warp, bool isForSynthesis) const { + double invSize = 1.0/size; + double offsetScale = gaussian(1)/(gaussian(3) + gaussian(-1)); + double norm = 1/(gaussian(0) - 2*offsetScale*(gaussian(2))); + size_t offsetI = (size&1) ? 1 : (isForSynthesis ? 0 : 2); + for (size_t i = 0; i < size; ++i) { + double r = (2*i + offsetI)*invSize - 1; + r = (r + warp)/(1 + r*warp); + data[i] = norm*(gaussian(r) - offsetScale*(gaussian(r - 2) + gaussian(r + 2))); + } + } + }; + + template + void forcePerfectReconstruction(Data &&data, size_t windowLength, size_t interval) { + for (size_t i = 0; i < interval; ++i) { + double sum2 = 0; + for (size_t index = i; index < windowLength; index += interval) { + sum2 += data[index]*data[index]; + } + double factor = 1/std::sqrt(sum2); + for (size_t index = i; index < windowLength; index += interval) { + data[index] *= factor; + } + } + } +}; + +}} // namespace + +#endif // include guard diff --git a/testCOut/signalsmith-stretch.h b/testCOut/signalsmith-stretch.h new file mode 100644 index 0000000..fe5098e --- /dev/null +++ b/testCOut/signalsmith-stretch.h @@ -0,0 +1,1060 @@ +#ifndef SIGNALSMITH_STRETCH_H +#define SIGNALSMITH_STRETCH_H + +#include "./signalsmith-linear/stft.h" // https://github.com/Signalsmith-Audio/linear + +#include +#include +#include +#include +#include +#include +#include + +namespace signalsmith { namespace stretch { + +namespace _impl { + template + static std::complex mul(const std::complex &a, const std::complex &b) { + return conjugateSecond ? std::complex{ + b.real()*a.real() + b.imag()*a.imag(), + b.real()*a.imag() - b.imag()*a.real() + } : std::complex{ + a.real()*b.real() - a.imag()*b.imag(), + a.real()*b.imag() + a.imag()*b.real() + }; + } + template + static V norm(const std::complex &a) { + V r = a.real(), i = a.imag(); + return r*r + i*i; + } +} + +template +struct SignalsmithStretch { + static constexpr size_t version[3] = {1, 3, 2}; + + SignalsmithStretch() : randomEngine(std::random_device{}()) {} + SignalsmithStretch(long seed) : randomEngine(seed) {} + + // The difference between the internal position (centre of a block) and the input samples you're supplying + int inputLatency() const { + return int(stft.analysisLatency()); + } + int outputLatency() const { + return int(stft.synthesisLatency() + _splitComputation*stft.defaultInterval()); + } + + void reset() { + stft.reset(0.1); + stashedInput = stft.input; + stashedOutput = stft.output; + + prevInputOffset = -1; + channelBands.assign(channelBands.size(), Band()); + silenceCounter = 0; + didSeek = false; + blockProcess = {}; + freqEstimateWeighted = freqEstimateWeight = 0; + } + + // Configures using a default preset + void presetDefault(int nChannels, Sample sampleRate, bool splitComputation=false) { + configure(nChannels, sampleRate*0.12, sampleRate*0.03, splitComputation); + } + void presetCheaper(int nChannels, Sample sampleRate, bool splitComputation=true) { + configure(nChannels, sampleRate*0.1, sampleRate*0.04, splitComputation); + } + + // Manual setup + void configure(int nChannels, int blockSamples, int intervalSamples, bool splitComputation=false) { + _splitComputation = splitComputation; + channels = nChannels; + stft.configure(channels, channels, blockSamples, intervalSamples + 1); + stft.setInterval(intervalSamples, stft.kaiser); + stft.reset(0.1); + stashedInput = stft.input; + stashedOutput = stft.output; + + bands = int(stft.bands()); + channelBands.assign(bands*channels, Band()); + + peaks.reserve(bands/2); + energy.resize(bands); + smoothedEnergy.resize(bands); + outputMap.resize(bands); + channelPredictions.resize(channels*bands); + + blockProcess = {}; + formantMetric.resize(bands + 2); + + tmpProcessBuffer.resize(blockSamples + intervalSamples); + tmpPreRollBuffer.resize(outputLatency()*channels); + } + // For querying the existing config + int blockSamples() const { + return int(stft.blockSamples()); + } + int intervalSamples() const { + return int(stft.defaultInterval()); + } + bool splitComputation() const { + return _splitComputation; + } + + /// Frequency multiplier, and optional tonality limit (as multiple of sample-rate) + void setTransposeFactor(Sample multiplier, Sample tonalityLimit=0) { + freqMultiplier = multiplier; + if (tonalityLimit > 0) { + freqTonalityLimit = tonalityLimit/std::sqrt(multiplier); // compromise between input and output limits + } else { + freqTonalityLimit = 1; + } + customFreqMap = nullptr; + } + void setTransposeSemitones(Sample semitones, Sample tonalityLimit=0) { + setTransposeFactor(std::pow(2, semitones/12), tonalityLimit); + } + // Sets a custom frequency map - should be monotonically increasing + void setFreqMap(std::function inputToOutput) { + customFreqMap = inputToOutput; + } + + void setFormantFactor(Sample multiplier, bool compensatePitch=false) { + formantMultiplier = multiplier; + invFormantMultiplier = 1/multiplier; + formantCompensation = compensatePitch; + } + void setFormantSemitones(Sample semitones, bool compensatePitch=false) { + setFormantFactor(std::pow(2, semitones/12), compensatePitch); + } + // Rough guesstimate of the fundamental frequency, used for formant analysis. 0 means attempting to detect the pitch + void setFormantBase(Sample baseFreq=0) { + formantBaseFreq = baseFreq; + } + + // Provide previous input ("pre-roll") to smoothly change the input location without interrupting the output. This doesn't do any calculation, just copies intput to a buffer. + // You should ideally feed it `seekLength()` frames of input, unless it's directly after a `.reset()` (in which case `.outputSeek()` might be a better choice) + template + void seek(Inputs &&inputs, int inputSamples, double playbackRate) { + tmpProcessBuffer.resize(0); + tmpProcessBuffer.resize(stft.blockSamples() + stft.defaultInterval()); + + int startIndex = std::max(0, inputSamples - int(tmpProcessBuffer.size())); // start position in input + int padStart = int(tmpProcessBuffer.size() + startIndex) - inputSamples; // start position in tmpProcessBuffer + + Sample totalEnergy = 0; + for (int c = 0; c < channels; ++c) { + auto &&inputChannel = inputs[c]; + for (int i = startIndex; i < inputSamples; ++i) { + Sample s = inputChannel[i]; + totalEnergy += s*s; + tmpProcessBuffer[i - startIndex + padStart] = s; + } + + stft.writeInput(c, tmpProcessBuffer.size(), tmpProcessBuffer.data()); + } + stft.moveInput(tmpProcessBuffer.size()); + if (totalEnergy >= noiseFloor) { + silenceCounter = 0; + silenceFirst = true; + } + didSeek = true; + seekTimeFactor = (playbackRate*stft.defaultInterval() > 1) ? 1/playbackRate : stft.defaultInterval(); + } + int seekLength() const { + return int(stft.blockSamples() + stft.defaultInterval()); + } + + // Moves the input position *and* pre-calculates some output, so that the next samples returned from `.process()` are aligned to the beginning of the sample. + // The time-stretch rate is inferred from `inputLength`, so use `.outputSeekLength()` to get a correct value for that. + template + void outputSeek(Inputs &&inputs, int inputLength) { + // TODO: add fade-out parameter to avoid clicks, instead of doing a full reset + reset(); + // Assume we've been handed enough surplus input to produce `outputLatency()` samples of pre-roll + int surplusInput = std::max(inputLength - inputLatency(), 0); + Sample playbackRate = surplusInput/Sample(outputLatency()); + + // Move the input position to the start of the sound + int seekSamples = inputLength - surplusInput; + seek(inputs, seekSamples, playbackRate); + + tmpPreRollBuffer.resize(outputLatency()*channels); + struct BufferOutput { + Sample *samples; + int length; + + Sample * operator[](int c) { + return samples + c*length; + } + } preRollOutput{tmpPreRollBuffer.data(), outputLatency()}; + + // Use the surplus input to produce pre-roll output + OffsetIO offsetInput{inputs, seekSamples}; + process(offsetInput, surplusInput, preRollOutput, preRollOutput.length); + + // put the thing down, flip it and reverse it + for (auto &v : tmpPreRollBuffer) v = -v; + for (int c = 0; c < channels; ++c) { + std::reverse(preRollOutput[c], preRollOutput[c] + preRollOutput.length); + stft.addOutput(c, preRollOutput.length, preRollOutput[c]); + } + } + int outputSeekLength(Sample playbackRate) const { + return inputLatency() + playbackRate*outputLatency(); + } + + template + void process(Inputs &&inputs, int inputSamples, Outputs &&outputs, int outputSamples) { +#ifdef SIGNALSMITH_STRETCH_PROFILE_PROCESS_START + SIGNALSMITH_STRETCH_PROFILE_PROCESS_START(inputSamples, outputSamples); +#endif + int prevCopiedInput = 0; + auto copyInput = [&](int toIndex){ + + int length = std::min(int(stft.blockSamples() + stft.defaultInterval()), toIndex - prevCopiedInput); + tmpProcessBuffer.resize(length); + int offset = toIndex - length; + for (int c = 0; c < channels; ++c) { + auto &&inputBuffer = inputs[c]; + for (int i = 0; i < length; ++i) { + tmpProcessBuffer[i] = inputBuffer[i + offset]; + } + stft.writeInput(c, length, tmpProcessBuffer.data()); + } + stft.moveInput(length); + prevCopiedInput = toIndex; + }; + + Sample totalEnergy = 0; + for (int c = 0; c < channels; ++c) { + auto &&inputChannel = inputs[c]; + for (int i = 0; i < inputSamples; ++i) { + Sample s = inputChannel[i]; + totalEnergy += s*s; + } + } + + if (totalEnergy < noiseFloor) { + if (silenceCounter >= 2*stft.blockSamples()) { + if (silenceFirst) { // first block of silence processing + silenceFirst = false; + //stft.reset(); + blockProcess = {}; + for (auto &b : channelBands) { + b.input = b.prevInput = b.output = 0; + b.inputEnergy = 0; + } + } + + if (inputSamples > 0) { + // copy from the input, wrapping around if needed + for (int outputIndex = 0; outputIndex < outputSamples; ++outputIndex) { + int inputIndex = outputIndex%inputSamples; + for (int c = 0; c < channels; ++c) { + outputs[c][outputIndex] = inputs[c][inputIndex]; + } + } + } else { + for (int c = 0; c < channels; ++c) { + auto &&outputChannel = outputs[c]; + for (int outputIndex = 0; outputIndex < outputSamples; ++outputIndex) { + outputChannel[outputIndex] = 0; + } + } + } + + // Store input in history buffer + copyInput(inputSamples); + return; + } else { + silenceCounter += inputSamples; + } + } else { + silenceCounter = 0; + silenceFirst = true; + } + + for (int outputIndex = 0; outputIndex < outputSamples; ++outputIndex) { + bool newBlock = blockProcess.samplesSinceLast >= stft.defaultInterval(); + if (newBlock) { + blockProcess.step = 0; + blockProcess.steps = 0; // how many processing steps this block will have + blockProcess.samplesSinceLast = 0; + + // Time to process a spectrum! Where should it come from in the input? + int inputOffset = std::round(outputIndex*Sample(inputSamples)/outputSamples); + int inputInterval = inputOffset - prevInputOffset; + prevInputOffset = inputOffset; + + copyInput(inputOffset); + stashedInput = stft.input; // save the input state, since that's what we'll analyse later + if (_splitComputation) { + stashedOutput = stft.output; // save the current output, and read from it + stft.moveOutput(stft.defaultInterval()); // the actual input jumps forward in time by one interval, ready for the synthesis + } + + blockProcess.newSpectrum = didSeek || (inputInterval > 0); + blockProcess.mappedFrequencies = customFreqMap || freqMultiplier != 1; + if (blockProcess.newSpectrum) { + // make sure the previous input is the correct distance in the past (give or take 1 sample) + blockProcess.reanalysePrev = didSeek || std::abs(inputInterval - int(stft.defaultInterval())) > 1; + if (blockProcess.reanalysePrev) blockProcess.steps += stft.analyseSteps() + 1; + + // analyse a new input + blockProcess.steps += stft.analyseSteps() + 1; + } + + blockProcess.processFormants = formantMultiplier != 1 || (formantCompensation && blockProcess.mappedFrequencies); + + blockProcess.timeFactor = didSeek ? seekTimeFactor : stft.defaultInterval()/std::max(1, inputInterval); + didSeek = false; + + updateProcessSpectrumSteps(); + blockProcess.steps += processSpectrumSteps; + + blockProcess.steps += stft.synthesiseSteps() + 1; + } + + size_t processToStep = newBlock ? blockProcess.steps : 0; + if (_splitComputation) { + Sample processRatio = Sample(blockProcess.samplesSinceLast + 1)/stft.defaultInterval(); + processToStep = std::min(blockProcess.steps, (blockProcess.steps + 0.999f)*processRatio); + } + + while (blockProcess.step < processToStep) { + size_t step = blockProcess.step++; +#ifdef SIGNALSMITH_STRETCH_PROFILE_PROCESS_STEP + SIGNALSMITH_STRETCH_PROFILE_PROCESS_STEP(step, blockProcess.steps); +#endif + if (blockProcess.newSpectrum) { + if (blockProcess.reanalysePrev) { + // analyse past input + if (step < stft.analyseSteps()) { + stashedInput.swap(stft.input); + stft.analyseStep(step, stft.defaultInterval()); + stashedInput.swap(stft.input); + continue; + } + step -= stft.analyseSteps(); + if (step < 1) { + // Copy previous analysis to our band objects + for (int c = 0; c < channels; ++c) { + auto channelBands = bandsForChannel(c); + auto *spectrumBands = stft.spectrum(c); + for (int b = 0; b < bands; ++b) { + channelBands[b].prevInput = spectrumBands[b]; + } + } + continue; + } + step -= 1; + } + + // Analyse latest (stashed) input + if (step < stft.analyseSteps()) { + stashedInput.swap(stft.input); + stft.analyseStep(step); + stashedInput.swap(stft.input); + continue; + } + step -= stft.analyseSteps(); + if (step < 1) { + // Copy analysed spectrum into our band objects + for (int c = 0; c < channels; ++c) { + auto channelBands = bandsForChannel(c); + auto *spectrumBands = stft.spectrum(c); + for (int b = 0; b < bands; ++b) { + channelBands[b].input = spectrumBands[b]; + } + } + continue; + } + step -= 1; + } + + if (step < processSpectrumSteps) { + processSpectrum(step); + continue; + } + step -= processSpectrumSteps; + + if (step < 1) { + // Copy band objects into spectrum + for (int c = 0; c < channels; ++c) { + auto channelBands = bandsForChannel(c); + auto *spectrumBands = stft.spectrum(c); + for (int b = 0; b < bands; ++b) { + spectrumBands[b] = channelBands[b].output; + } + } + continue; + } + step -= 1; + + if (step < stft.synthesiseSteps()) { + stft.synthesiseStep(step); + continue; + } + } +#ifdef SIGNALSMITH_STRETCH_PROFILE_PROCESS_ENDSTEP + SIGNALSMITH_STRETCH_PROFILE_PROCESS_ENDSTEP(); +#endif + + ++blockProcess.samplesSinceLast; + if (_splitComputation) stashedOutput.swap(stft.output); + for (int c = 0; c < channels; ++c) { + auto &&outputChannel = outputs[c]; + Sample v = 0; + stft.readOutput(c, 1, &v); + outputChannel[outputIndex] = v; + } + stft.moveOutput(1); + if (_splitComputation) stashedOutput.swap(stft.output); + } + + copyInput(inputSamples); + prevInputOffset -= inputSamples; +#ifdef SIGNALSMITH_STRETCH_PROFILE_PROCESS_END + SIGNALSMITH_STRETCH_PROFILE_PROCESS_END(); +#endif + } + + // Read the remaining output, providing no further input. If `outputSamples` is more than one interval, it will compute additional blocks assuming a zero-valued input + template + void flush(Outputs &&outputs, int outputSamples, Sample playbackRate=0) { + struct Zeros { + struct Channel { + Sample operator[](int) { + return 0; + } + }; + Channel operator[](int) { + return {}; + } + } zeros; + // If we're asked for more than an interval of extra output, then zero-pad the input + int outputBlock = std::max(0, outputSamples - stft.defaultInterval()); + if (outputBlock > 0) process(zeros, outputBlock*playbackRate, outputs, outputBlock); + + int tailSamples = outputSamples - outputBlock; // at most one interval + tmpProcessBuffer.resize(tailSamples); + stft.finishOutput(1); + for (int c = 0; c < channels; ++c) { + stft.readOutput(c, tailSamples, tmpProcessBuffer.data()); + auto &&outputChannel = outputs[c]; + for (int i = 0; i < tailSamples; ++i) { + outputChannel[outputBlock + i] = tmpProcessBuffer[i]; + } + stft.readOutput(c, tailSamples, tailSamples, tmpProcessBuffer.data()); + for (int i = 0; i < tailSamples; ++i) { + outputChannel[outputBlock + tailSamples - 1 - i] -= tmpProcessBuffer[i]; + } + } + stft.reset(0.1f); + // Reset the phase-vocoder stuff, so the next block gets a fresh start + for (int c = 0; c < channels; ++c) { + auto channelBands = bandsForChannel(c); + for (int b = 0; b < bands; ++b) { + channelBands[b].prevInput = channelBands[b].output = 0; + } + } + } + + // Process a complete audio buffer all in one go + template + bool exact(Inputs &&inputs, int inputSamples, Outputs &&outputs, int outputSamples) { + Sample playbackRate = inputSamples/Sample(outputSamples); + auto seekLength = outputSeekLength(playbackRate); + if (inputSamples < seekLength) { + // to short for this - zero the output just to be polite + for (int c = 0; c < channels; ++c) { + auto &&channel = outputs[c]; + for (int i = 0; i < outputSamples; ++i) { + channel[i] = 0; + } + } + return false; + } + + outputSeek(inputs, seekLength); + + int outputIndex = outputSamples - seekLength/playbackRate; + OffsetIO offsetInput{inputs, seekLength}; + process(offsetInput, inputSamples - seekLength, outputs, outputIndex); + + OffsetIO offsetOutput{outputs, outputIndex}; + flush(offsetOutput, outputSamples - outputIndex, playbackRate); + return true; + } + +private: + bool _splitComputation = false; + struct { + size_t samplesSinceLast = std::numeric_limits::max(); + size_t steps = 0; + size_t step = 0; + + bool newSpectrum = false; + bool reanalysePrev = false; + bool mappedFrequencies = false; + bool processFormants = false; + Sample timeFactor; + } blockProcess; + + using Complex = std::complex; + static constexpr Sample noiseFloor{1e-15}; + static constexpr Sample maxCleanStretch{2}; // time-stretch ratio before we start randomising phases + size_t silenceCounter = 0; + bool silenceFirst = true; + + Sample freqMultiplier = 1, freqTonalityLimit = 0.5; + std::function customFreqMap = nullptr; + + bool formantCompensation = false; // compensate for pitch/freq change + Sample formantMultiplier = 1, invFormantMultiplier = 1; + + using STFT = signalsmith::linear::DynamicSTFT; + STFT stft; + typename STFT::Input stashedInput; + typename STFT::Output stashedOutput; + + std::vector tmpProcessBuffer, tmpPreRollBuffer; + + int channels = 0, bands = 0; + int prevInputOffset = -1; + bool didSeek = false; + Sample seekTimeFactor = 1; + + Sample bandToFreq(Sample b) const { + return stft.binToFreq(b); + } + Sample freqToBand(Sample f) const { + return stft.freqToBin(f); + } + + struct Band { + Complex input, prevInput{0}; + Complex output{0}; + Sample inputEnergy; + }; + std::vector channelBands; + Band * bandsForChannel(int channel) { + return channelBands.data() + channel*bands; + } + template + Complex getBand(int channel, int index) { + if (index < 0 || index >= bands) return 0; + return channelBands[index + channel*bands].*member; + } + template + Complex getFractional(int channel, int lowIndex, Sample fractional) { + Complex low = getBand(channel, lowIndex); + Complex high = getBand(channel, lowIndex + 1); + return low + (high - low)*fractional; + } + template + Complex getFractional(int channel, Sample inputIndex) { + int lowIndex = std::floor(inputIndex); + Sample fracIndex = inputIndex - lowIndex; + return getFractional(channel, lowIndex, fracIndex); + } + template + Sample getBand(int channel, int index) { + if (index < 0 || index >= bands) return 0; + return channelBands[index + channel*bands].*member; + } + template + Sample getFractional(int channel, int lowIndex, Sample fractional) { + Sample low = getBand(channel, lowIndex); + Sample high = getBand(channel, lowIndex + 1); + return low + (high - low)*fractional; + } + template + Sample getFractional(int channel, Sample inputIndex) { + int lowIndex = std::floor(inputIndex); + Sample fracIndex = inputIndex - lowIndex; + return getFractional(channel, lowIndex, fracIndex); + } + + struct Peak { + Sample input, output; + }; + std::vector peaks; + std::vector energy, smoothedEnergy; + struct PitchMapPoint { + Sample inputBin, freqGrad; + }; + std::vector outputMap; + + struct Prediction { + Sample energy = 0; + Complex input; + + Complex makeOutput(Complex phase) { + Sample phaseNorm = _impl::norm(phase); + if (phaseNorm <= noiseFloor) { + phase = input; // prediction is too weak, fall back to the input + phaseNorm = _impl::norm(input) + noiseFloor; + } + return phase*std::sqrt(energy/phaseNorm); + } + }; + std::vector channelPredictions; + Prediction * predictionsForChannel(int c) { + return channelPredictions.data() + c*bands; + } + + // If RandomEngine=void, use std::default_random_engine; + using RandomEngineImpl = typename std::conditional< + std::is_void::value, + std::default_random_engine, + RandomEngine + >::type; + RandomEngineImpl randomEngine; + + size_t processSpectrumSteps = 0; + static constexpr size_t splitMainPrediction = 8; // it's just heavy, since we're blending up to 4 different phase predictions + void updateProcessSpectrumSteps() { + processSpectrumSteps = 0; + if (blockProcess.newSpectrum) processSpectrumSteps += channels; + if (blockProcess.mappedFrequencies) { + processSpectrumSteps += smoothEnergySteps; + processSpectrumSteps += 1; // findPeaks + } + processSpectrumSteps += 1; // updating the output map + processSpectrumSteps += channels; // preliminary phase-vocoder prediction + processSpectrumSteps += splitMainPrediction; + if (blockProcess.newSpectrum) processSpectrumSteps += 1; // .input -> .prevInput + if (blockProcess.processFormants) processSpectrumSteps += 3; + } + void processSpectrum(size_t step) { + Sample timeFactor = blockProcess.timeFactor; + + Sample smoothingBins = Sample(stft.fftSamples())/stft.defaultInterval(); + int longVerticalStep = std::round(smoothingBins); + timeFactor = std::max(timeFactor, 1/maxCleanStretch); + bool randomTimeFactor = (timeFactor > maxCleanStretch); + std::uniform_real_distribution timeFactorDist(maxCleanStretch*2*randomTimeFactor - timeFactor, timeFactor); + + if (blockProcess.newSpectrum) { + if (step < size_t(channels)) { + int channel = int(step); + auto bins = bandsForChannel(channel); + + Complex rot = std::polar(Sample(1), bandToFreq(0)*stft.defaultInterval()*Sample(2*M_PI)); + Sample freqStep = bandToFreq(1) - bandToFreq(0); + Complex rotStep = std::polar(Sample(1), freqStep*stft.defaultInterval()*Sample(2*M_PI)); + + for (int b = 0; b < bands; ++b) { + auto &bin = bins[b]; + bin.output = _impl::mul(bin.output, rot); + bin.prevInput = _impl::mul(bin.prevInput, rot); + rot = _impl::mul(rot, rotStep); + } + return; + } + step -= channels; + } + if (blockProcess.mappedFrequencies) { + if (step < smoothEnergySteps) { + smoothEnergy(step, smoothingBins); + return; + } + step -= smoothEnergySteps; + if (step-- == 0) { + findPeaks(); + return; + } + } + if (step-- == 0) { + if (blockProcess.mappedFrequencies) { + updateOutputMap(); + } else { // we're not pitch-shifting, so no need to find peaks etc. + for (int c = 0; c < channels; ++c) { + Band *bins = bandsForChannel(c); + for (int b = 0; b < bands; ++b) { + bins[b].inputEnergy = _impl::norm(bins[b].input); + } + } + + for (int b = 0; b < bands; ++b) { + outputMap[b] = {Sample(b), 1}; + } + } + return; + } + if (blockProcess.processFormants) { + if (step < 3) { + updateFormants(step); + return; + } + step -= 3; + } + // Preliminary output prediction from phase-vocoder + if (step < size_t(channels)) { + int c = int(step); + Band *bins = bandsForChannel(c); + auto *predictions = predictionsForChannel(c); + for (int b = 0; b < bands; ++b) { + auto mapPoint = outputMap[b]; + int lowIndex = std::floor(mapPoint.inputBin); + Sample fracIndex = mapPoint.inputBin - lowIndex; + + Prediction &prediction = predictions[b]; + Sample prevEnergy = prediction.energy; + prediction.energy = getFractional<&Band::inputEnergy>(c, lowIndex, fracIndex); + prediction.energy *= std::max(0, mapPoint.freqGrad); // scale the energy according to local stretch factor + prediction.input = getFractional<&Band::input>(c, lowIndex, fracIndex); + + auto &outputBin = bins[b]; + Complex prevInput = getFractional<&Band::prevInput>(c, lowIndex, fracIndex); + Complex freqTwist = _impl::mul(prediction.input, prevInput); + Complex phase = _impl::mul(outputBin.output, freqTwist); + outputBin.output = phase/(std::max(prevEnergy, prediction.energy) + noiseFloor); + } + return; + } + step -= channels; + + if (step < splitMainPrediction) { + // Re-predict using phase differences between frequencies + size_t chunk = step; + int startB = int(bands*chunk/splitMainPrediction); + int endB = int(bands*(chunk + 1)/splitMainPrediction); + for (int b = startB; b < endB; ++b) { + // Find maximum-energy channel and calculate that + int maxChannel = 0; + Sample maxEnergy = predictionsForChannel(0)[b].energy; + for (int c = 1; c < channels; ++c) { + Sample e = predictionsForChannel(c)[b].energy; + if (e > maxEnergy) { + maxChannel = c; + maxEnergy = e; + } + } + + auto *predictions = predictionsForChannel(maxChannel); + auto &prediction = predictions[b]; + auto *bins = bandsForChannel(maxChannel); + auto &outputBin = bins[b]; + + Complex phase = 0; + auto mapPoint = outputMap[b]; + + // Upwards vertical steps + if (b > 0) { + Sample binTimeFactor = randomTimeFactor ? timeFactorDist(randomEngine) : timeFactor; + Complex downInput = getFractional<&Band::input>(maxChannel, mapPoint.inputBin - binTimeFactor); + Complex shortVerticalTwist = _impl::mul(prediction.input, downInput); + + auto &downBin = bins[b - 1]; + phase += _impl::mul(downBin.output, shortVerticalTwist); + + if (b >= longVerticalStep) { + Complex longDownInput = getFractional<&Band::input>(maxChannel, mapPoint.inputBin - longVerticalStep*binTimeFactor); + Complex longVerticalTwist = _impl::mul(prediction.input, longDownInput); + + auto &longDownBin = bins[b - longVerticalStep]; + phase += _impl::mul(longDownBin.output, longVerticalTwist); + } + } + // Downwards vertical steps + if (b < bands - 1) { + auto &upPrediction = predictions[b + 1]; + auto &upMapPoint = outputMap[b + 1]; + + Sample binTimeFactor = randomTimeFactor ? timeFactorDist(randomEngine) : timeFactor; + Complex downInput = getFractional<&Band::input>(maxChannel, upMapPoint.inputBin - binTimeFactor); + Complex shortVerticalTwist = _impl::mul(upPrediction.input, downInput); + + auto &upBin = bins[b + 1]; + phase += _impl::mul(upBin.output, shortVerticalTwist); + + if (b < bands - longVerticalStep) { + auto &longUpPrediction = predictions[b + longVerticalStep]; + auto &longUpMapPoint = outputMap[b + longVerticalStep]; + + Complex longDownInput = getFractional<&Band::input>(maxChannel, longUpMapPoint.inputBin - longVerticalStep*binTimeFactor); + Complex longVerticalTwist = _impl::mul(longUpPrediction.input, longDownInput); + + auto &longUpBin = bins[b + longVerticalStep]; + phase += _impl::mul(longUpBin.output, longVerticalTwist); + } + } + + outputBin.output = prediction.makeOutput(phase); + + // All other bins are locked in phase + for (int c = 0; c < channels; ++c) { + if (c != maxChannel) { + auto &channelBin = bandsForChannel(c)[b]; + auto &channelPrediction = predictionsForChannel(c)[b]; + + Complex channelTwist = _impl::mul(channelPrediction.input, prediction.input); + Complex channelPhase = _impl::mul(outputBin.output, channelTwist); + channelBin.output = channelPrediction.makeOutput(channelPhase); + } + } + } + return; + } + step -= splitMainPrediction; + + if (blockProcess.newSpectrum) { + if (step-- == 0) { + for (auto &bin : channelBands) { + bin.prevInput = bin.input; + } + } + } + } + + // Produces smoothed energy across all channels + static constexpr size_t smoothEnergySteps = 3; + Sample smoothEnergyState = 0; + void smoothEnergy(size_t step, Sample smoothingBins) { + Sample smoothingSlew = 1/(1 + smoothingBins*Sample(0.5)); + if (step-- == 0) { + for (auto &e : energy) e = 0; + for (int c = 0; c < channels; ++c) { + Band *bins = bandsForChannel(c); + for (int b = 0; b < bands; ++b) { + Sample e = _impl::norm(bins[b].input); + bins[b].inputEnergy = e; // Used for interpolating prediction energy + energy[b] += e; + } + } + for (int b = 0; b < bands; ++b) { + smoothedEnergy[b] = energy[b]; + } + smoothEnergyState = 0; + return; + } + + // The two other steps are repeated smoothing passes, down and up + Sample e = smoothEnergyState; + for (int b = bands - 1; b >= 0; --b) { + e += (smoothedEnergy[b] - e)*smoothingSlew; + smoothedEnergy[b] = e; + } + for (int b = 0; b < bands; ++b) { + e += (smoothedEnergy[b] - e)*smoothingSlew; + smoothedEnergy[b] = e; + } + smoothEnergyState = e; + } + + Sample mapFreq(Sample freq) const { + if (customFreqMap) return customFreqMap(freq); + if (freq > freqTonalityLimit) { + return freq + (freqMultiplier - 1)*freqTonalityLimit; + } + return freq*freqMultiplier; + } + + // Identifies spectral peaks using energy across all channels + void findPeaks() { + peaks.resize(0); + + int start = 0; + while (start < bands) { + if (energy[start] > smoothedEnergy[start]) { + int end = start; + Sample bandSum = 0, energySum = 0; + while (end < bands && energy[end] > smoothedEnergy[end]) { + bandSum += end*energy[end]; + energySum += energy[end]; + ++end; + } + Sample avgBand = bandSum/energySum; + Sample avgFreq = bandToFreq(avgBand); + peaks.emplace_back(Peak{avgBand, freqToBand(mapFreq(avgFreq))}); + + start = end; + } + ++start; + } + } + + void updateOutputMap() { + if (peaks.empty()) { + for (int b = 0; b < bands; ++b) { + outputMap[b] = {Sample(b), 1}; + } + return; + } + Sample bottomOffset = peaks[0].input - peaks[0].output; + for (int b = 0; b < std::min(bands, std::ceil(peaks[0].output)); ++b) { + outputMap[b] = {b + bottomOffset, 1}; + } + // Interpolate between points + for (size_t p = 1; p < peaks.size(); ++p) { + const Peak &prev = peaks[p - 1], &next = peaks[p]; + Sample rangeScale = 1/(next.output - prev.output); + Sample outOffset = prev.input - prev.output; + Sample outScale = next.input - next.output - prev.input + prev.output; + Sample gradScale = outScale*rangeScale; + int startBin = std::max(0, std::ceil(prev.output)); + int endBin = std::min(bands, std::ceil(next.output)); + for (int b = startBin; b < endBin; ++b) { + Sample r = (b - prev.output)*rangeScale; + Sample h = r*r*(3 - 2*r); + Sample outB = b + outOffset + h*outScale; + + Sample gradH = 6*r*(1 - r); + Sample gradB = 1 + gradH*gradScale; + + outputMap[b] = {outB, gradB}; + } + } + Sample topOffset = peaks.back().input - peaks.back().output; + for (int b = std::max(0, peaks.back().output); b < bands; ++b) { + outputMap[b] = {b + topOffset, 1}; + } + } + + // If we mapped formants the same way as mapFreq(), this would be the inverse + Sample invMapFormant(Sample freq) const { + if (freq*invFormantMultiplier > freqTonalityLimit) { + return freq + (1 - formantMultiplier)*freqTonalityLimit; + } + return freq*invFormantMultiplier; + } + + Sample freqEstimateWeighted = 0; + Sample freqEstimateWeight = 0; + Sample estimateFrequency() { + // 3 highest peaks in the input + std::array peakIndices{0, 0, 0}; + for (int b = 1; b < bands - 1; ++b) { + Sample e = formantMetric[b]; + // local maxima only + if (e < formantMetric[b - 1] || e <= formantMetric[b + 1]) continue; + + if (e > formantMetric[peakIndices[0]]) { + if (e > formantMetric[peakIndices[1]]) { + if (e > formantMetric[peakIndices[2]]) { + peakIndices = {peakIndices[1], peakIndices[2], b}; + } else { + peakIndices = {peakIndices[1], b, peakIndices[2]}; + } + } else { + peakIndices[0] = b; + } + } + } + + // VERY rough pitch estimation + int peakEstimate = peakIndices[2]; + if (formantMetric[peakIndices[1]] > formantMetric[peakIndices[2]]*0.1) { + int diff = std::abs(peakEstimate - peakIndices[1]); + if (diff > peakEstimate/8 && diff < peakEstimate*7/8) peakEstimate = peakEstimate%diff; + if (formantMetric[peakIndices[0]] > formantMetric[peakIndices[2]]*0.01) { + int diff = std::abs(peakEstimate - peakIndices[0]); + if (diff > peakEstimate/8 && diff < peakEstimate*7/8) peakEstimate = peakEstimate%diff; + } + } + Sample weight = formantMetric[peakIndices[2]]; + // Smooth it out a bit + freqEstimateWeighted += (peakEstimate*weight - freqEstimateWeighted)*0.25; + freqEstimateWeight += (weight - freqEstimateWeight)*0.25; + + return freqEstimateWeighted/(freqEstimateWeight + Sample(1e-30)); + } + + Sample freqEstimate; + + std::vector formantMetric; + Sample formantBaseFreq = 0; + void updateFormants(size_t step) { + if (step-- == 0) { + for (auto &e : formantMetric) e = 0; + for (int c = 0; c < channels; ++c) { + Band *bins = bandsForChannel(c); + for (int b = 0; b < bands; ++b) { + formantMetric[b] += bins[b].inputEnergy; + } + } + + freqEstimate = freqToBand(formantBaseFreq); + if (formantBaseFreq <= 0) freqEstimate = estimateFrequency(); + } else if (step-- == 0) { + Sample decay = 1 - 1/(freqEstimate*0.5 + 1); + Sample e = 0; + for (size_t repeat = 0; repeat < 2; ++repeat) { + for (int b = bands - 1; b >= 0; --b) { + e = std::max(formantMetric[b], e*decay); + formantMetric[b] = e; + } + for (int b = 0; b < bands; ++b) { + e = std::max(formantMetric[b], e*decay); + formantMetric[b] = e; + } + } + decay = 1/decay; + for (size_t repeat = 0; repeat < 2; ++repeat) { + for (int b = bands - 1; b >= 0; --b) { + e = std::min(formantMetric[b], e*decay); + formantMetric[b] = e; + } + for (int b = 0; b < bands; ++b) { + e = std::min(formantMetric[b], e*decay); + formantMetric[b] = e; + } + } + } else { + auto getFormant = [&](Sample band) -> Sample { + if (band < 0) return 0; + band = std::min(band, bands); + int floorBand = std::floor(band); + Sample fracBand = band - floorBand; + Sample low = formantMetric[floorBand], high = formantMetric[floorBand + 1]; + return low + (high - low)*fracBand; + }; + + for (int b = 0; b < bands; ++b) { + Sample inputF = bandToFreq(b); + Sample outputF = formantCompensation ? mapFreq(inputF) : inputF; + outputF = invMapFormant(outputF); + + Sample inputE = formantMetric[b]; + Sample targetE = getFormant(freqToBand(outputF)); + + Sample formantRatio = targetE/(inputE + Sample(1e-30)); + Sample energyRatio = formantRatio; + + for (int c = 0; c < channels; ++c) { + Band *bins = bandsForChannel(c); + // This is what's used to decide the output energy, so this affects the output + bins[b].inputEnergy *= energyRatio; + } + } + } + } + + // Proxy class to avoid copying/allocating anything + template + struct OffsetIO { + Io &io; + int offset; + + struct Channel { + Io &io; + int channel; + int offset; + + auto operator[](int i) -> decltype(io[0][0]) { + return io[channel][i + offset]; + } + }; + Channel operator[](int c) { + return {io, c, offset}; + } + }; +}; + +}} // namespace +#endif // include guard diff --git a/testCOut/生成 b/testCOut/生成 new file mode 100644 index 0000000..56cd3c8 --- /dev/null +++ b/testCOut/生成 @@ -0,0 +1,11 @@ +docker run --rm -v $(pwd):/src emscripten/emsdk \ +bash -c "em++ main.cpp \ +-sEXPORT_NAME=testWasm -DEXPORT_NAME=testWasm \ +-I / \ +-std=c++11 -O3 -ffast-math -fno-exceptions -fno-rtti \ +--pre-js pre.js --closure 0 \ +-Wall -Wextra -Wfatal-errors -Wpedantic -pedantic-errors \ +-sSINGLE_FILE=1 -sMODULARIZE -sENVIRONMENT=web,worker,shell -sNO_EXIT_RUNTIME=1 \ +-sFILESYSTEM=0 -sEXPORTED_RUNTIME_METHODS=HEAP8,UTF8ToString \ +-sINITIAL_MEMORY=512kb -sALLOW_MEMORY_GROWTH=1 -sMEMORY_GROWTH_GEOMETRIC_STEP=0.5 -sABORTING_MALLOC=1 \ +-sSTRICT=1 -sDYNAMIC_EXECUTION=0" \ No newline at end of file diff --git a/utils(小程序兼容代码).js b/utils(小程序兼容代码).js new file mode 100644 index 0000000..02dfc85 --- /dev/null +++ b/utils(小程序兼容代码).js @@ -0,0 +1,131 @@ +// wasm图片压缩工具类 +const wasmMgr = { + // 存储已加载的wasm模块 + imageCompressModule: null, + + // 获取图片压缩模块 + getCompressImg() { + if (this.imageCompressModule) { + return Promise.resolve(this.imageCompressModule); + } + return new Promise((resolve, reject) => { + const wasmImports = { + __assert_fail: (condition, filename, line, func) => { + console.log(condition, filename, line, func); + }, + emscripten_resize_heap: (size, old_size) => { + console.log(size, old_size); + }, + fd_close: (fd) => { + console.log(fd); + }, + fd_seek: (fd, offset, whence) => { + console.log(fd, offset, whence); + }, + fd_write: (fd, buf, len, pos) => { + console.log(fd, buf, len, pos); + }, + emscripten_memcpy_js: (dest, src, len) => { + this.imageCompressModule.HEAPU8.copyWithin(dest, src, src + len); + }, + }; + + // 微信小程序环境 + if (typeof WXWebAssembly !== "undefined") { + WXWebAssembly.instantiate( + "/convert_image_to_webp.wasm", + { + env: wasmImports, + wasi_snapshot_preview1: wasmImports, + } + ).then((result) => { + this.imageCompressModule = { + _convert_image_to_webp: result.instance.exports.convert_image_to_webp, + _malloc: result.instance.exports.malloc, + _free: result.instance.exports.free, + }; + this.imageCompressModule.HEAPU8 = new Uint8Array( + result.instance.exports.memory.buffer + ); + console.log("convert_image_to_webp加载成功"); + resolve(this.imageCompressModule); + }).catch((err) => { + console.error("Failed to load wasm script", err); + reject(err); + }); + } else { + // H5环境或其他环境 + console.error("当前环境不支持WebAssembly"); + reject(new Error("当前环境不支持WebAssembly")); + } + }); + }, + + // 图片压缩函数 + async compressImg(file, quality = 0.5, w, h, target_w, target_h) { + const compressImgHandler = (inputData, module, isOrgin = false) => { + const inputDataPtr = module._malloc(inputData.length); + module.HEAPU8.set(inputData, inputDataPtr); + const outputSizePtr = module._malloc(4); + const webpPtr = module._convert_image_to_webp( + inputDataPtr, + inputData.length, + w, + h, + target_w, + target_h, + 80 * (quality > 1 ? 1 : quality), + outputSizePtr, + 1, + isOrgin ? 1 : 0 + ); + const outputSize = + module.HEAPU8[outputSizePtr] | + (module.HEAPU8[outputSizePtr + 1] << 8) | + (module.HEAPU8[outputSizePtr + 2] << 16) | + (module.HEAPU8[outputSizePtr + 3] << 24); + const webpData = new Uint8Array(module.HEAPU8.buffer, webpPtr, outputSize); + module._free(webpPtr); + module._free(outputSizePtr); + module._free(inputDataPtr); + //如果只需要二进制原始数据,可以直接返回webpdata 减少base64转换 + // return webpData + return 'data:image/webp;base64,' + this.arrayBufferToBase64(webpData); + }; + + try { + const module = await this.getCompressImg(); + + if (file instanceof Uint8Array) { + return compressImgHandler(file, module, true); + } else { + return new Promise((resolve, reject) => { + wx.getFileSystemManager().readFile({ + filePath: file, + success: res => { + resolve(compressImgHandler(new Uint8Array(res.data), module)); + }, + fail: e => { + console.error("读取文件失败", e); + reject(e); + }, + }); + }); + } + } catch (error) { + console.error("图片压缩失败", error); + throw error; + } + }, + + // 将ArrayBuffer转换为Base64 + arrayBufferToBase64(buffer) { + + return wx.arrayBufferToBase64(buffer); + + } +}; + +module.exports = { + wasmMgr +}; \ No newline at end of file diff --git a/wasm_webp_output.zip b/wasm_webp_output.zip new file mode 100644 index 0000000..4ff4791 Binary files /dev/null and b/wasm_webp_output.zip differ diff --git a/生成 b/生成 index 501d5da..6cb51f7 100644 --- a/生成 +++ b/生成 @@ -1,6 +1,6 @@ # 调试模式 -docker run --rm -v $(pwd):/src emscripten/emsdk emcc convert_image_to_webp.cpp stb_image.c libwebp.a libsharpyuv.a libwebpdecoder.a libwebpdemux.a libwebpmux.a -o ./test/convert_image_to_webp.js -g -s WASM=1 -s INITIAL_MEMORY=34340864 -s EXPORTED_FUNCTIONS="['_free','_malloc','_convert_image_to_webp']" -s EXTRA_EXPORTED_RUNTIME_METHODS='["cwrap", "getValue"]' -gsource-map +docker run --rm -v $(pwd):/src emscripten/emsdk emcc convert_image_to_webp.cpp stb_image.c libwebp.a libsharpyuv.a libwebpdecoder.a libwebpdemux.a libwebpmux.a -o ./test/convert_image_to_webp.js -g -s WASM=1 -s INITIAL_MEMORY=20MB -s ALLOW_MEMORY_GROWTH=1 -s EXPORTED_FUNCTIONS="['_free','_malloc','_convert_image_to_webp']" -s EXTRA_EXPORTED_RUNTIME_METHODS='["cwrap", "getValue"]' -gsource-map # 优化后的命令 -docker run --rm -v $(pwd):/src emscripten/emsdk emcc convert_image_to_webp.cpp stb_image.c libwebp.a libsharpyuv.a -o ./output/convert_image_to_webp.js -s WASM=1 -s NO_FILESYSTEM=1 -s INITIAL_MEMORY=34340864 -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=268435456 -s EXPORTED_FUNCTIONS="['_free','_malloc','_convert_image_to_webp']" -s EXTRA_EXPORTED_RUNTIME_METHODS='["cwrap", "getValue"]' -O2 \ No newline at end of file +docker run --rm -v $(pwd):/src emscripten/emsdk emcc convert_image_to_webp.cpp stb_image.c libwebp.a libsharpyuv.a -o ./output/convert_image_to_webp.js -s WASM=1 -s NO_FILESYSTEM=1 -s INITIAL_MEMORY=512MB -s EXPORTED_FUNCTIONS="['_free','_malloc','_convert_image_to_webp']" -s EXTRA_EXPORTED_RUNTIME_METHODS='["cwrap", "getValue"]' -O2 \ No newline at end of file