UNPKG

webmscore

Version:

MuseScore's libmscore in WebAssembly! Read mscz data, and generate audio/MIDI/MusicXML/SVG/PNG/PDF sheets right in browsers

429 lines (237 loc) 9.32 kB
# Changelog All notable changes to this project will be documented in this file. ### Unreleased ### To be added * Stream audio file exporting * Python API * Pure WebAssembly API ## 1.2.1 - 2023-01-23 ### Added * Export `setLogLevel` on the WebMscore web worker ### Fixed * Static class fields cause error in babel-transpiled js ## 1.2.0 - 2023-01-23 ### Added * Throw `WasmError` when webmscore encounters score processing error ### Changed * The log level can now be set before `WebMscore.load(...)`, overrides the default behaviour which turns off logs in `WebMscore.load(...)`. ### Fixed * For score files created in MuseScore versions older than v3.6.0, instruments no longer all sound like piano in the exported audio. ## 1.1.0 - 2023-01-15 ### Added * Allowing to set log level ```js const score = await WebMscore.load(...) // set log level to `Off` by default await WebMscore.setLogLevel(2) // set log level to `Debug` ``` ### Changed * Logs are turned off by default * Incorporate [ccache](https://ccache.dev/) in the build script, could significantly speed up recompilation if `ccache` is installed ## 1.0.0 - 2023-01-13 ### BREAKING CHANGE * webmscore is now built based on MuseScore 4.0! ### Changed * Although there's no public API change comparing to `v0.22.0`, there might be some unintended internal changes or incompatibilities. ## 0.22.0 - 2022-12-31 ### Changed * Build over the `offscreen` [Qt Platform Plugin](https://doc.qt.io/qt-5/qpa.html) so that the wasm binary size has been significantly reduced * `webmscore.lib.wasm`:<br> 10.47 MB -> 7.42 MB * `webmscore.lib.mem.wasm`:<br> 4.97 MB -> 3.92 MB ## 0.21.0 - 2020-03-02 ### BREAKING CHANGE * [`SynthRes.chunk`](https://github.com/LibreScore/webmscore/blob/web/web-public/schemas.ts#L239) becomes **non-interleaved** float32 PCM data ``` SynthRes.chunk = Float32Array[ channelA 512 frames, channelB 512 frames ] ``` ## 0.20.4 - 2020-03-01 ### Fixed * Webpack import ## 0.20.2 - 2021-02-08 ### Changed * Improve `synthAudioBatch` performance ## 0.20.0 - 2021-02-08 ### Added * Synthesize audio frames in bulk (n * 512 frames) ```js const fn = await score.synthAudioBatch(starttime, batchSize) for (...) { const resArr = await fn(cancel?) } ``` ## 0.19.2 - 2021-01-25 ### Changed * Emit detailed debug info (function names) in a separate `.symbols` file This saves 2.45 MB (23%) uncompressed, 0.42 MB (13%) brotli'd for the generated wasm file, compared to `v0.19.1`. <details> <summary>How to look up function names in the .symbols file?</summary> ```log RuntimeError: function signature mismatch at wasm-function[1078]:0x315ac at wasm-function[28467]:0x99f067 ... ``` `webmscore.lib.symbols` ```symbols 1078:Ms::Element::abbox() const ... 28467:Ms::savePng(Ms::Score*, QIODevice*, int, bool, bool) ``` </details> ## 0.19.1 - 2021-01-25 ### Added * Support loading Guitar Pro files into webmscore ```js await WebMscore.load(format: 'gtp' | 'gp3' | 'gp4' | 'gp5' | 'gpx' | 'gp' | 'ptb', data, fonts, doLayout) ``` ### Changed * Generate detailed debug info <details> ```log // Before RuntimeError: function signature mismatch at <anonymous>:wasm-function[1117]:0x359ec at <anonymous>:wasm-function[28469]:0x99e040 ... // After RuntimeError: function signature mismatch at Ms::Element::abbox() const (wasm-function[1117]:0x359ec) at Ms::savePng(Ms::Score*, QIODevice*, int, bool, bool) (wasm-function[28469]:0x99e040) ... ``` </details> ## 0.19.0 - 2021-01-23 ### Added * Support loading MusicXML (`musicxml` or compressed `mxl`) and MIDI files into webmscore ```js await WebMscore.load(format: 'musicxml' | 'mxl' | 'midi', data, fonts, doLayout) ``` ## 0.18.0 - 2021-01-20 ### Added * Support MSCZ/MSCX internal file format version 3.02 ### Changed * Merge [upstream v3.6.0](https://github.com/musescore/MuseScore/releases/tag/v3.6) into webmscore, see the changelogs there ## 0.17.1 - 2021-01-12 ### Changed * The `fonts` parameter in `WebMscore.load` can now be passed as type of `Promisable<Uint8Array[]>`. This allows webmscore to initiate fonts and wasm assets simultaneously. ## 0.17.0 - 2021-01-12 ### Changed * For Webpack build, asset files (`webmscore.lib.*`) will be served via the jsDelivr CDN by default. (importing `webmscore` resolves to `webmscore/webmscore.cdn.mjs`) So those files will no longer appear in your `dist` directory, and the workaround is no longer needed. ## 0.16.0 - 2021-01-05 ### Added * Support raw PCM audio data export (for future internal use) ### Changed * The original error stack of worker errors is reported in the property `originalStack` * The workaround for Webpack 4 is no longer enabled by default. To enable it, run `cd node_modules/webmscore && npm run install:webpack` after package installation. ### Removed * The legacy browser support is removed ## 0.15.2 - 2020-12-31 ### Fixed * [Class fields compatibility issues](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Public_class_fields#Browser_compatibility) ## 0.15.1 - 2020-12-28 ### Fixed * Remove the previous SoundFont file when `setSoundFont` is called multiple times ## 0.15.0 - 2020-12-28 ### Added * Expose `setSoundFont` as a static method for Node.js This allows loading soundfonts in advance, before any score is loaded. ## 0.14.3 - 2020-12-28 ### Fixed * SoundFont related bug ([`2b07ee9`](https://github.com/LibreScore/webmscore/commit/2b07ee9095d243e831afc8128914af73a80228d7)) ## 0.14.2 - 2020-12-22 ### Changed * Data files are in `.wasm` file extension for Webpack. This makes web servers compress those files automatically. ## 0.14.1 - 2020-12-22 ### Changed * WebMscore web worker no longer extends the native `Worker` class ## 0.14.0 - 2020-12-18 ### Added * Support legacy browsers that have no WebAssembly support ## 0.13.4 - 2020-12-18 ### Fixed * ES5 compilation ## 0.13.3 - 2020-12-18 ### Added * ES5 Compatibility (Webpack only) ## 0.13.2 - 2020-12-16 ### Fixed * Handle exceptions sent from the webmscore web worker ## 0.13.1 - 2020-12-16 ### Fixed * Fixed an issue that webmscore catches all (and irrelevant) uncaught exceptions in Node.js ## 0.13.0 - 2020-12-14 ### Added * Allow to set custom `stdout` and `stderr` (Node.js exclusive feature) See the example in [web-public/src/index.js](https://github.com/LibreScore/webmscore/blob/e7a9f3bed0059842e7ca758f66e75ee8b6ccbd1a/web-public/src/index.js#L34-L67) ## 0.12.1 - 2020-12-14 ### Fixed * Throw file loading error instead of failing silently ## 0.12.0 - 2020-12-14 ### Added * Support MP3 export ```js await score.saveAudio('mp3') ``` ## 0.11.0 - 2020-12-13 ### Added * The `instrumentName` field of parts in Metadata JSON ## 0.10.3 - 2020-08-10 ### Added * Commonjs Compatibility ## 0.10.0 - 2020-08-01 ### BREAKING CHANGE * The return value of `synthAudio`'s iterator function has changed, see [`interface SynthRes` in schemas.ts](https://github.com/LibreScore/webmscore/blob/web/web-public/schemas.ts#L213) ## 0.9.1 - 2020-07-31 no production code change ## 0.9.0 - 2020-07-30 ### BREAKING CHANGE * The `.destory()` method is now having the `soft` parameter (default: `true`) * `true`: destroy the score instance only, or * `false`: destroy the whole WebMscore context > To retrieve the default `.destory()` behavior of webmscore in WebWorker prior to v0.9.0, set `soft` to `false` ### Fixed * Don't transfer the ownership of SoundFont data to the webworker context ## 0.8.3 - 2020-07-30 ### Added * Webpack Compatibility ### Changed * Use WOFF2 fonts and LZ4 compression to reduce the data file size (significantly) ## 0.8.1 - 2020-07-28 ### Added * TypeScript declaration (`.d.ts`) files ## 0.8.0 - 2020-07-28 ### Added * The `pageSize` (in pixels) field in position JSON (`measurePositions()` or `segmentPositions()`) ## 0.7.0 - 2020-05-31 ### Added * Save part score as MSCZ/MSCX file * Boost Mode (set the `doLayout` parameter in `WebMscore.load` to `false`) if you only need score metadata or midi file ### Fixed * Fixed the runtime error in `processSynth` ## 0.6.0 - 2020-05-29 ### Added * Generate audio files in WAV, OGG, or FLAC formats * Synthesize raw audio frames, can be used in the Web Audio API > A soudfont (sf2/sf3) file must be set using `setSoundFont` ### Changed * CJK fonts are no longer bundled inside webmscore. If you would like to export sheet PDF/images with those characters, pass an array of font file (ttf/ttc/otf/otc/woff/etc.) data (Uint8Array) to the `fonts` parameter in `WebMscore.load` ### Fixed * Always load scores in page mode ## 0.5.0 - 2020-05-13 ### Added * Generate excerpts (if no excerpts found) from parts using `await score.generateExcerpts()` ## 0.4.0 - 2020-05-13 ### Changed * The `name` param is replaced by `filetype` (`"mscz"` or `"mscx"`) in `WebMscore.load` ## 0.3.0 - 2020-05-13 ### Added * Export individual parts (or `excerpt`s, linked parts). Set the excerpt range of exported files using `await score.setExcerptId(n)`. * Excerpt information is available in score metadata ## 0.2.1 - 2020-05-12 > Changelog of early versions are omitted ## 0.2.0 - 2020-05-11 ## 0.1.0 - 2020-05-10