| import { workletMessageType } from "./worklet_system/message_protocol/worklet_message.js"; |
| import { |
| WorkletSoundfontManagerMessageType |
| } from "./worklet_system/worklet_methods/worklet_soundfont_manager/sfman_message.js"; |
| import { SpessaSynthWarn } from "../utils/loggin.js"; |
|
|
| export class SoundfontManager |
| { |
| |
| |
| |
| |
| constructor(synth) |
| { |
| |
| |
| |
| |
| |
| |
| |
| this.soundfontList = [{ |
| id: "main", |
| bankOffset: 0 |
| }]; |
| |
| |
| |
| |
| |
| this._port = synth.worklet.port; |
| this.synth = synth; |
| } |
| |
| |
| |
| |
| |
| |
| _sendToWorklet(type, data) |
| { |
| this._port.postMessage({ |
| messageType: workletMessageType.soundFontManager, |
| messageData: [ |
| type, |
| data |
| ] |
| }); |
| } |
| |
| |
| |
| |
| |
| |
| |
| async addNewSoundFont(soundfontBuffer, id, bankOffset = 0) |
| { |
| if (this.soundfontList.find(s => s.id === id) !== undefined) |
| { |
| throw new Error("Cannot overwrite the existing soundfont. Use soundfontManager.delete(id) instead."); |
| } |
| this._sendToWorklet(WorkletSoundfontManagerMessageType.addNewSoundFont, [soundfontBuffer, id, bankOffset]); |
| await new Promise(r => this.synth._resolveWhenReady = r); |
| this.soundfontList.push({ |
| id: id, |
| bankOffset: bankOffset |
| }); |
| } |
| |
| |
| |
| |
| |
| deleteSoundFont(id) |
| { |
| if (this.soundfontList.length === 0) |
| { |
| SpessaSynthWarn("1 soundfont left. Aborting!"); |
| return; |
| } |
| if (this.soundfontList.findIndex(s => s.id === id) === -1) |
| { |
| SpessaSynthWarn(`No soundfont with id of "${id}" found. Aborting!`); |
| return; |
| } |
| this._sendToWorklet(WorkletSoundfontManagerMessageType.deleteSoundFont, id); |
| } |
| |
| |
| |
| |
| |
| rearrangeSoundFonts(newList) |
| { |
| this._sendToWorklet(WorkletSoundfontManagerMessageType.rearrangeSoundFonts, newList); |
| this.soundfontList.sort((a, b) => |
| newList.indexOf(a.id) - newList.indexOf(b.id) |
| ); |
| } |
| |
| |
| |
| |
| |
| async reloadManager(newBuffer) |
| { |
| this._sendToWorklet(WorkletSoundfontManagerMessageType.reloadSoundFont, newBuffer); |
| await new Promise(r => this.synth._resolveWhenReady = r); |
| } |
| } |