Line data Source code
1 : /*
2 : * SPDX-License-Identifier: GPL-3.0-only
3 : * MuseScore-CLA-applies
4 : *
5 : * MuseScore Studio
6 : * Music Composition & Notation
7 : *
8 : * Copyright (C) 2025 MuseScore Limited and others
9 : *
10 : * This program is free software: you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License version 3 as
12 : * published by the Free Software Foundation.
13 : *
14 : * This program is distributed in the hope that it will be useful,
15 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : * GNU General Public License for more details.
18 : *
19 : * You should have received a copy of the GNU General Public License
20 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 : */
22 :
23 : #pragma once
24 :
25 : #include "audio/engine/isynthresolver.h"
26 : #include "imusesamplerinfo.h"
27 :
28 : #include "modularity/ioc.h"
29 : #include "imusesamplerconfiguration.h"
30 :
31 : #include "libhandler.h"
32 :
33 : namespace muse::musesampler {
34 : class MuseSamplerResolver : public audio::synth::ISynthResolver::IResolver, public IMuseSamplerInfo
35 : {
36 : GlobalInject<IMuseSamplerConfiguration> configuration;
37 :
38 : public:
39 0 : MuseSamplerResolver() = default;
40 :
41 : void init();
42 : void deinit();
43 :
44 : bool reloadAllInstruments();
45 : int buildNumber() const;
46 :
47 : audio::synth::ISynthesizerPtr resolveSynth(const audio::TrackId trackId, const audio::AudioInputParams& params,
48 : const audio::OutputSpec& outputSpec) const override;
49 : bool hasCompatibleResources(const audio::PlaybackSetupData& setup) const override;
50 : audio::AudioResourceMetaList resolveResources() const override;
51 : audio::SoundPresetList resolveSoundPresets(const audio::AudioResourceMeta& resourceMeta) const override;
52 : void refresh() override;
53 : void clearSources() override;
54 :
55 : const Version& version() const override;
56 : bool isLoaded() const override;
57 : bool initFailed() const override;
58 :
59 : float defaultReverbLevel(const String& instrumentSoundId) const override;
60 :
61 : ByteArray drumMapping(int instrumentId) const override;
62 : std::vector<Instrument> instruments() const override;
63 :
64 : private:
65 : void loadSoundPresetAttributes(audio::SoundPresetAttributes& attributes, int instrumentId, const char* presetCode) const;
66 :
67 : String buildMuseInstrumentId(const String& category, const String& name, int uniqueId) const;
68 :
69 : MuseSamplerLibHandlerPtr m_libHandler = nullptr;
70 :
71 : Version m_samplerVersion;
72 : int m_samplerBuildNumber = -1;
73 : bool m_initFailed = false;
74 : };
75 : }
|