UNPKG

@csound/browser

Version:

[![npm (scoped with tag)](https://shields.shivering-isles.com/npm/v/@csound/browser/latest)](https://www.npmjs.com/package/@csound/browser) [![GitHub Workflow Status](https://shields.shivering-isles.com/github/workflow/status/csound/csound/csound_wasm)](h

93 lines (82 loc) 4.42 kB
import { range } from "../utils.js"; import { freeStringPtr } from "../utils/string-pointers.js"; import { trimNull } from "../utils/trim-null.js"; import { structBufferToObject } from "../utils/structure-buffer-to-object.js"; import { CS_MIDIDEVICE_SIZE } from "../utils/native-sizes.js"; import { uint2String } from "../utils/text-encoders.js"; import { CS_MIDIDEVICE } from "../structures.js"; export const csoundSetMidiCallbacks = (wasm) => (csound /* CsoundInst */) => { wasm["exports"]["csoundSetMidiCallbacks"](csound); }; /** * This function can be called to obtain a list of available input or output midi devices. * If list is NULL, the function will only return the number of devices * (isOutput=1 for out devices, 0 for in devices). * @function */ export const csoundGetMIDIDevList = (wasm) => (csound /* CsoundInst */, isOutput /* number */) => { const { buffer } = wasm.wasi.memory; const numberOfDevices = wasm["exports"]["csoundGetMIDIDevList"]( csound, undefined, isOutput ? 1 : 0, ); if (numberOfDevices === 0) return []; const structLength = CS_MIDIDEVICE_SIZE; const structOffset = wasm["exports"]["allocCsMidiDeviceStruct"](numberOfDevices); wasm["exports"]["csoundGetMIDIDevList"](csound, structOffset, isOutput ? 1 : 0); const structBuffer = new Uint8Array(buffer, structOffset, structLength * numberOfDevices); /** @type CS_MIDIDEVICE */ const out = range(0, numberOfDevices).map((index) => structBufferToObject(CS_MIDIDEVICE, structBuffer.subarray(index * structLength, structLength)), ); wasm["exports"]["freeCsMidiDeviceStruct"](structOffset); return out; }; csoundGetMIDIDevList["toString"] = () => "getMIDIDevList = async (isOutput) => Object;"; /** * This function can be called to obtain a list of available input or output midi devices. * If list is NULL, the function will only return the number of devices * (isOutput=1 for out devices, 0 for in devices). * @function */ export const csoundGetRtMidiName = (wasm) => (csound /* CsoundInst */) => { const { buffer } = wasm.wasi.memory; const ptr = wasm["exports"]["getRtMidiName"](csound); const stringBuffer = new Uint8Array(buffer, ptr, 128); return trimNull(uint2String(stringBuffer)) || ""; }; csoundGetRtMidiName["toString"] = () => "getRtMidiName = async () => String;"; export const csoundGetMidiOutFileName = (wasm) => (csound /* CsoundInst */) => { const { buffer } = wasm.wasi.memory; const ptr = wasm.exports["getMidiOutFileName"](csound); const stringBuffer = new Uint8Array(buffer, ptr, 128); ptr && ptr.length > 0 && freeStringPtr(wasm, ptr); return trimNull(uint2String(stringBuffer)) || ""; }; export const _isRequestingRtMidiInput = (wasm) => (csound /* CsoundInst */) => { return wasm.exports["isRequestingRtMidiInput"](csound); }; /** * Emit a midi message with a given triplet of values * in the range of 0 to 127. * @function */ export const csoundPushMidiMessage = (wasm) => (csound /* CsoundInst */, status /* number */, data1 /* number */, data2 /* number */) => { wasm.exports["pushMidiMessage"](csound, status, data1, data2); }; csoundPushMidiMessage["toString"] = () => "midiMessage = async (status, data1, data2) => undefined;"; // PUBLIC void csoundSetMIDIModule (CSOUND *csound, const char *module) // PUBLIC void csoundSetHostImplementedMIDIIO (CSOUND *csound, int state) // PUBLIC int csoundGetMIDIDevList (CSOUND *csound, CS_MIDIDEVICE *list, int isOutput) // PUBLIC void csoundSetExternalMidiInOpenCallback (CSOUND *, int(*func)(CSOUND *, void **userData, const char *devName)) // PUBLIC void csoundSetExternalMidiReadCallback (CSOUND *, int(*func)(CSOUND *, void *userData, unsigned char *buf, int nBytes)) // PUBLIC void csoundSetExternalMidiInCloseCallback (CSOUND *, int(*func)(CSOUND *, void *userData)) // PUBLIC void csoundSetExternalMidiOutOpenCallback (CSOUND *, int(*func)(CSOUND *, void **userData, const char *devName)) // PUBLIC void csoundSetExternalMidiWriteCallback (CSOUND *, int(*func)(CSOUND *, void *userData, const unsigned char *buf, int nBytes)) // PUBLIC void csoundSetExternalMidiOutCloseCallback (CSOUND *, int(*func)(CSOUND *, void *userData)) // PUBLIC void csoundSetExternalMidiErrorStringCallback (CSOUND *, const char *(*func)(int)) // PUBLIC void csoundSetMIDIDeviceListCallback (CSOUND *csound, int(*mididevlist__)(CSOUND *, CS_MIDIDEVICE *list, int isOutput))