0.0.3 • Published 4 years ago

wasm-mod-player v0.0.3

Weekly downloads
13
License
-
Repository
-
Last release
4 years ago

WebAssembly Mod Player

A mod player for WebAssembly.

How to render audio data from a mod file from node.js:

const fs = require('fs');

const NOT_IMPLEMENTED = () => {
    console.error('not implemented');
};
const ptmod = fs.readFileSync('some_protracker_module.mod');

async function start() {
    const xmp = await WebAssembly.instantiate(fs.readFileSync('wasm-mod-player.wasm'), {
        "wasi_snapshot_preview1": {
            "fd_close": NOT_IMPLEMENTED,
            "fd_write": NOT_IMPLEMENTED,
            "fd_seek": NOT_IMPLEMENTED,
            "fd_read": NOT_IMPLEMENTED,
            "environ_get": NOT_IMPLEMENTED,
            "environ_sizes_get": NOT_IMPLEMENTED,
            "args_sizes_get": NOT_IMPLEMENTED,
            "args_get": NOT_IMPLEMENTED,
            "proc_exit": NOT_IMPLEMENTED,
        }
    });
    
    const memaddr = xmp.instance.exports.allocMemoryForModule(ptmod.byteLength);
    const heap8 = new Uint8Array(xmp.instance.exports.memory.buffer);
    const heap32 = new Uint32Array(xmp.instance.exports.memory.buffer);
    heap8.set(ptmod, memaddr);
    xmp.instance.exports.loadModule(memaddr, ptmod.byteLength, 44100);
    xmp.instance.exports.setPlayerParameter(1,50); 

    for(var f=0; f<1024; f++) {
        const frameinfo = xmp.instance.exports.playFrame();
        const bufptr = heap32[(frameinfo/4) + 10];
        const bufsize = heap32[(frameinfo/4) + 11];
        
        process.stdout.write(heap8.subarray(bufptr, bufptr + bufsize));
    }
}
start();
0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago