This repository is based on FluidSynth repository, and contains some changes to build with Emscripten.
The original README is here: README.original.md
To use the synthesizer easily, consider using js-synthesizer, which wraps fluidsynth-emscripten.
Tested with Emscripten version 3.1.10.
- (Optional) Update
emscripten/exports.txt, containing export functions for JS program- The script
emscripten/make-exports.jswill update this automatically, gathering functions fromincludedirectory.
- The script
- Make sure that Emscripten is usable on the current environment
- Make
builddirectory - Enter
builddirectory and executeemcmake cmake -Denable-oss=off -DCMAKE_BUILD_TYPE=Release ..- If no other options are specified, and
cmakeis running withemcmake(oremconfigure), the build configurations are initialized for Emscripten-build mode.
- If no other options are specified, and
- In
builddirectory, executeemmake make
After successful build, libfluidsynth-<version>.js will be created at build/src directory.
- If
enable-debugspecified on thecmakeexecution (e.g.emcmake cmake -Denable-debug=on ..), a map filelibfluidsynth-<version>.wasm.mapis also generated.- Currently it seems that it cannot be used.
- If
enable-separate-wasmspecified on thecmakeexecution (e.g.emcmake cmake -Denable-separate-wasm=on ..),libfluidsynth-<version>.wasmandlibfluidsynth-<version>.wastare also generated.- For AudioWorklet, you cannot use
*.wasmfile directly.
- For AudioWorklet, you cannot use
- In Emscripten-build mode, standalone application named
fluidsynthis not emitted. - By default, if
libsndfileand its dependencies (FLAC, ogg, vorbis, vorbisenc, opus) are found, the library will be bundled and corresponding features will be enabled.-Denable-libsndfile=offwill disable the features.libsndfileand the dependencies must be built with Emscripten and installed in the Emscripten sysroot (e.g.path/to/emsdk/upstream/emscripten/cache/sysroot).
Please specify -D BUILD_SHARED_LIBS=off on calling emcmake. (e.g. emcmake cmake -D BUILD_SHARED_LIBS=off ..)
In this mode, you can also build sources under doc directory (e.g. cd build/doc && make fluidsynth_simple -j16), although all exportable functions will be exported.
Place libfluidsynth-<version>.js file to your space and load libfluidsynth-<version>.js. After load, almost all FluidSynth API functions are accessible via Module object (note that all function names have the prefix _).
To use libfluidsynth-<version>.js in AudioWorklet, load it into AudioWorklet before your worklet JS file. In your worklet JS file, you can access Module object via AudioWorkletGlobalScope.wasmModule.
- Currently only several APIs are tested. Some APIs such as for drivers may not work.
This program and all source codes, including the original FluidSynth program, its source codes, modifications of FluidSynth source codes for building library with Emscripten, and sources codes used only for building libfluidsynth-<version>.js, are licensed under GNU Lesser General Public License (v2.1) (LGPL v2.1).