1 /* 2 * Copyright 2006-2014, Haiku. 3 * 4 * Copyright (c) 2004-2005 Matthijs Hollemans 5 * Copyright (c) 2003 Jerome Leveque 6 * Distributed under the terms of the MIT License. 7 * 8 * Authors: 9 * Jérôme Duval 10 * Jérôme Leveque 11 * Matthijs Hollemans 12 * Pete Goodeve 13 */ 14 15 #ifndef _SOFT_SYNTH_H 16 #define _SOFT_SYNTH_H 17 18 /* 19 This version of SoftSynth is a wrapper libfluidsynth.so. 20 */ 21 22 #include <fluidlite.h> 23 #include <Midi.h> 24 #include <SoundPlayer.h> 25 #include <Synth.h> 26 27 class BMidiConsumer; 28 class BMidiSynth; 29 class BSynth; 30 31 namespace BPrivate { 32 33 class BSoftSynth { 34 public: 35 bool InitCheck(); 36 37 void Unload(); 38 bool IsLoaded() const; 39 40 status_t SetDefaultInstrumentsFile(); 41 status_t SetInstrumentsFile(const char* path); 42 43 status_t LoadAllInstruments(); 44 status_t LoadInstrument(int16 instrument); 45 status_t UnloadInstrument(int16 instrument); 46 status_t RemapInstrument(int16 from, int16 to); 47 void FlushInstrumentCache(bool startStopCache); 48 49 void SetVolume(double volume); 50 double Volume(void) const; 51 52 status_t SetSamplingRate(int32 rate); 53 int32 SamplingRate() const; 54 55 status_t SetInterpolation(interpolation_mode mode); 56 interpolation_mode Interpolation() const; 57 58 status_t EnableReverb(bool enabled); 59 bool IsReverbEnabled() const; 60 void SetReverb(reverb_mode mode); 61 reverb_mode Reverb() const; 62 63 status_t SetMaxVoices(int32 max); 64 int16 MaxVoices(void) const; 65 66 status_t SetLimiterThreshold(int32 threshold); 67 int16 LimiterThreshold(void) const; 68 69 void Pause(void); 70 void Resume(void); 71 72 void NoteOff(uchar, uchar, uchar, uint32); 73 void NoteOn(uchar, uchar, uchar, uint32); 74 void KeyPressure(uchar, uchar, uchar, uint32); 75 void ControlChange(uchar, uchar, uchar, uint32); 76 void ProgramChange(uchar, uchar, uint32); 77 void ChannelPressure(uchar, uchar, uint32); 78 void PitchBend(uchar, uchar, uchar, uint32); 79 void SystemExclusive(void*, size_t, uint32); 80 void SystemCommon(uchar, uchar, uchar, uint32); 81 void SystemRealTime(uchar, uint32); 82 void TempoChange(int32, uint32); 83 void AllNotesOff(bool, uint32); 84 85 private: 86 87 friend class ::BSynth; 88 friend class ::BMidiSynth; 89 90 BSoftSynth(); 91 ~BSoftSynth(); 92 93 void _Init(); 94 void _Done(); 95 static void PlayBuffer(void* cookie, void* data, size_t size, 96 const media_raw_audio_format& format); 97 98 bool fInitCheck; 99 char* fInstrumentsFile; 100 int32 fSampleRate; 101 interpolation_mode fInterpMode; 102 int16 fMaxVoices; 103 int16 fLimiterThreshold; 104 reverb_mode fReverbMode; 105 bool fReverbEnabled; 106 107 fluid_synth_t* fSynth; 108 fluid_settings_t* fSettings; 109 110 BSoundPlayer* fSoundPlayer; 111 112 float* fMonitor; 113 size_t fMonitorSize; 114 int16 fMonitorChans; 115 }; 116 117 } // namespace BPrivate 118 119 #endif // _SOFT_SYNTH_H 120