import loadable from "@loadable/component" export default { id: "player", icon: "PlayCircleOutlined", label: "Player", group: "app", onLoad: () => { if (app.cores.player.state.track_manifest && app.layout.tools_bar) { app.layout.tools_bar.toggleVisibility(true) } }, settings: [ // { // id: "player.gain", // title: "Gain", // icon: "MdGraphicEq", // group: "general", // description: "Adjust gain for audio output", // component: "Slider", // props: { // min: 1, // max: 2, // step: 0.1, // marks: { // 1: "Normal", // 1.5: "+50%", // 2: "+100%", // }, // }, // defaultValue: () => { // return app.cores.player.gain.values().gain // }, // onUpdate: (value) => { // app.cores.player.gain.modifyValues({ // gain: value, // }) // }, // storaged: false, // }, { id: "player.sample_rate", title: "Sample Rate", icon: "MdHearing", group: "general", description: "Internal sample rate for audio output", component: "Select", props: { options: [ { value: 44100, label: "44100 Hz", }, { value: 48000, label: "48000 Hz", }, { value: 96000, label: "96000 Hz", }, { value: 192000, label: "192000 Hz", }, ], }, defaultValue: (ctx) => { return app.cores.player.base().context.sampleRate }, onUpdate: async (value) => { const sampleRate = await app.cores.player.controls.setSampleRate(value) return sampleRate }, storaged: false, }, { id: "player.compressor.values", title: "Compression", icon: "FiSliders", group: "general", description: "Adjust compression values (Warning: may cause distortion when changing values)", experimental: true, dependsOn: { "player.compressor": true, }, component: loadable(() => import("./items/player.compressor")), switchDefault: () => { return app.cores.settings.get("player.compressor") }, onEnabledChange: (enabled) => { if (enabled === true) { app.cores.settings.set("player.compressor", true) //app.cores.player.compressor.attach() } else { app.cores.settings.set("player.compressor", false) //app.cores.player.compressor.detach() } }, extraActions: [ { id: "reset", title: "Default", icon: "MdRefresh", onClick: async (ctx) => { const values = await app.cores.player .base() .processors.compressor.presets.setCurrentPresetToDefault() ctx.updateCurrentValue(values) }, }, ], props: { valueFormat: (value) => `${value}dB`, sliders: [ { key: "threshold", label: "Threshold", min: -100, max: 0, }, { key: "knee", label: "Knee", min: 0, max: 40, }, { key: "ratio", label: "Ratio", min: 1, max: 20, valueFormat: (value) => `${value}:1`, }, { key: "attack", label: "Attack", min: 0, max: 1, valueFormat: (value) => `${value} s`, }, { key: "release", label: "Release", min: 0, max: 1, valueFormat: (value) => `${value} s`, }, ], }, onUpdate: (value) => { app.cores.player .base() .processors.compressor.presets.setToCurrent(value) return value }, storaged: false, }, { id: "player.eq", title: "Equalizer", group: "general", icon: "MdGraphicEq", description: "Enable equalizer for audio output", component: loadable(() => import("./items/player.eq")), extraActions: [ { id: "reset", title: "Reset", icon: "MdRefresh", onClick: (ctx) => { const values = app.cores.player .base() .processors.eq.presets.setCurrentPresetToDefault() ctx.updateCurrentValue(values) }, }, ], // dependsOn: { // "player.equalizer": true // }, props: { valueFormat: (value) => `${value}dB`, marks: [ { value: 0, }, ], step: 0.5, sliders: [ { key: 32, label: "32", max: 10, min: -10, }, { key: 64, label: "64", max: 10, min: -10, }, { key: 125, label: "125", max: 10, min: -10, }, { key: 250, label: "250", max: 10, min: -10, }, { key: 500, label: "500", max: 10, min: -10, }, { key: 1000, label: "1K", max: 10, min: -10, }, { key: 2000, label: "2K", max: 10, min: -10, }, { key: 4000, label: "4K", max: 10, min: -10, }, { key: 8000, label: "8K", max: 10, min: -10, }, { key: 16000, label: "16K", max: 10, min: -10, }, ], }, onUpdate: (value) => { const values = Object.keys(value).reduce((acc, key) => { acc[key] = value[key] return acc }, {}) app.cores.player .base() .processors.eq.presets.setToCurrent(values) return value }, storaged: false, }, ], }