juicysfplugin/Source/FluidSynthModel.h

98 lines
2.3 KiB
C
Raw Normal View History

2018-02-27 08:25:20 +08:00
//
// Created by Alex Birch on 10/09/2017.
//
#pragma once
#include "../JuceLibraryCode/JuceHeader.h"
2018-04-10 08:17:50 +08:00
#include "SharesParams.h"
2018-02-27 08:25:20 +08:00
#include <fluidsynth.h>
#include <memory>
#include "BankAndPreset.h"
2018-02-27 08:25:20 +08:00
#include "PresetsToBanks.h"
// https://stackoverflow.com/a/13446565/5257399
//using std::shared_ptr;
using namespace std;
2018-02-27 08:25:20 +08:00
class FluidSynthModel {
public:
FluidSynthModel(shared_ptr<SharesParams> sharedParams);
2018-02-27 08:25:20 +08:00
~FluidSynthModel();
fluid_synth_t* getSynth();
2018-04-10 08:20:23 +08:00
void initialise();
2018-02-27 08:25:20 +08:00
BanksToPresets getBanks();
void changePreset(int bank, int preset);
int getChannel();
void onFileNameChanged(const String &absPath, int bank, int preset);
void setControllerValue(int controller, int value);
2018-02-27 08:25:20 +08:00
//==============================================================================
/**
Used to receive callbacks when a button is clicked.
@see Button::addListener, Button::removeListener
*/
class Listener
{
public:
/** Destructor. */
virtual ~Listener();
/** Called when the button is clicked. */
virtual void fontChanged (FluidSynthModel*, const String &absPath);
2018-02-27 08:25:20 +08:00
};
/** Registers a listener to receive events when this button's state changes.
If the listener is already registered, this will not register it again.
@see removeListener
*/
void addListener (Listener* newListener);
/** Removes a previously-registered button listener
@see addListener
*/
void removeListener (Listener* listener);
2018-04-16 04:32:26 +08:00
void setSampleRate(float sampleRate);
const String& getCurrentSoundFontAbsPath();
2018-02-27 08:25:20 +08:00
private:
shared_ptr<SharesParams> sharedParams;
2018-02-27 08:25:20 +08:00
fluid_synth_t* synth;
fluid_settings_t* settings;
// fluid_audio_driver_t* driver;
String currentSoundFontAbsPath;
2018-04-16 04:32:26 +08:00
float currentSampleRate;
fluid_preset_t* getFirstPreset();
2018-02-27 08:25:20 +08:00
void selectFirstPreset();
unique_ptr<BankAndPreset> getFirstBankAndPreset();
2018-02-27 08:25:20 +08:00
void unloadAndLoadFont(const String &absPath);
void loadFont(const String &absPath);
bool shouldLoadFont(const String &absPath);
2018-02-27 08:25:20 +08:00
void changePresetImpl(int bank, int preset);
2018-02-27 08:25:20 +08:00
bool initialised;
unsigned int sfont_id;
unsigned int channel;
// fluid_mod_t* mod;
2018-02-27 08:25:20 +08:00
ListenerList<Listener> eventListeners;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FluidSynthModel)
};