00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __LS_ENGINECHANNEL_H__
00022 #define __LS_ENGINECHANNEL_H__
00023
00024 #include "../EventListeners.h"
00025 #include "../drivers/audio/AudioOutputDevice.h"
00026 #include "../drivers/midi/midi.h"
00027 #include "../drivers/midi/MidiInputDevice.h"
00028 #include "../drivers/midi/MidiInputPort.h"
00029 #include "../drivers/midi/VirtualMidiDevice.h"
00030 #include "Engine.h"
00031 #include "FxSend.h"
00032
00033 namespace LinuxSampler {
00034
00035
00036 class Sampler;
00037 class SamplerChannel;
00038 class AudioOutputDevice;
00039 class MidiInputPort;
00040 class FxSend;
00041
00042
00054 class EngineChannel {
00055 public:
00056
00058
00059
00060
00061 virtual void PrepareLoadInstrument(const char* FileName, uint Instrument) = 0;
00062 virtual void LoadInstrument() = 0;
00063 virtual void Reset() = 0;
00064 virtual void SendNoteOn(uint8_t Key, uint8_t Velocity) = 0;
00065 virtual void SendNoteOn(uint8_t Key, uint8_t Velocity, int32_t FragmentPos) = 0;
00066 virtual void SendNoteOff(uint8_t Key, uint8_t Velocity) = 0;
00067 virtual void SendNoteOff(uint8_t Key, uint8_t Velocity, int32_t FragmentPos) = 0;
00068 virtual void SendPitchbend(int Pitch) = 0;
00069 virtual void SendPitchbend(int Pitch, int32_t FragmentPos) = 0;
00070 virtual void SendControlChange(uint8_t Controller, uint8_t Value) = 0;
00071 virtual void SendControlChange(uint8_t Controller, uint8_t Value, int32_t FragmentPos) = 0;
00072 virtual void SendProgramChange(uint8_t Program) = 0;
00073 virtual bool StatusChanged(bool bNewStatus = false) = 0;
00074 virtual float Volume() = 0;
00075 virtual void Volume(float f) = 0;
00076 virtual float Pan() = 0;
00077 virtual void Pan(float f) = 0;
00078 virtual uint Channels() = 0;
00079 virtual void Connect(AudioOutputDevice* pAudioOut) = 0;
00080 virtual void DisconnectAudioOutputDevice() = 0;
00081 virtual AudioOutputDevice* GetAudioOutputDevice() = 0;
00082 virtual void SetOutputChannel(uint EngineAudioChannel, uint AudioDeviceChannel) = 0;
00083 virtual int OutputChannel(uint EngineAudioChannel) = 0;
00084 virtual void Connect(MidiInputPort* pMidiPort, midi_chan_t MidiChannel) = 0;
00085 virtual void DisconnectMidiInputPort() = 0;
00086 virtual MidiInputPort* GetMidiInputPort() = 0;
00087 virtual midi_chan_t MidiChannel() = 0;
00088 virtual String InstrumentFileName() = 0;
00089 virtual String InstrumentName() = 0;
00090 virtual int InstrumentIndex() = 0;
00091 virtual int InstrumentStatus() = 0;
00092 virtual Engine* GetEngine() = 0;
00093 virtual String EngineName() = 0;
00094 virtual FxSend* AddFxSend(uint8_t MidiCtrl, String Name = "") throw (Exception) = 0;
00095 virtual FxSend* GetFxSend(uint FxSendIndex) = 0;
00096 virtual uint GetFxSendCount() = 0;
00097 virtual void RemoveFxSend(FxSend* pFxSend) = 0;
00098 virtual void Connect(VirtualMidiDevice* pDevice) = 0;
00099 virtual void Disconnect(VirtualMidiDevice* pDevice) = 0;
00100
00101
00103
00104
00105
00113 void SetMute(int state) throw (Exception);
00114
00122 int GetMute();
00123
00129 void SetSolo(bool solo);
00130
00136 bool GetSolo();
00137
00142 uint8_t GetMidiProgram();
00143
00147 void SetMidiProgram(uint8_t Program);
00148
00153 uint8_t GetMidiBankMsb();
00154
00159 void SetMidiBankMsb(uint8_t BankMSB);
00160
00165 uint8_t GetMidiBankLsb();
00166
00171 void SetMidiBankLsb(uint8_t BankLSB);
00172
00181 bool UsesNoMidiInstrumentMap();
00182
00190 bool UsesDefaultMidiInstrumentMap();
00191
00206 int GetMidiInstrumentMap() throw (Exception);
00207
00215 void SetMidiInstrumentMapToNone();
00216
00224 void SetMidiInstrumentMapToDefault();
00225
00235 void SetMidiInstrumentMap(int MidiMap) throw (Exception);
00236
00241 void SetMidiRpnControllerMsb(uint8_t CtrlMSB);
00242
00247 void SetMidiRpnControllerLsb(uint8_t CtrlLSB);
00248
00252 void ResetMidiRpnController();
00253
00258 void AddFxSendCountListener(FxSendCountListener* l);
00259
00263 void RemoveFxSendCountListener(FxSendCountListener* l);
00264
00268 void RemoveAllFxSendCountListeners();
00269
00283 int GetMidiRpnController();
00284
00288 uint GetVoiceCount();
00289
00293 void SetVoiceCount(uint Voices);
00294
00298 uint GetDiskStreamCount();
00299
00303 void SetDiskStreamCount(uint Streams);
00304
00305 SamplerChannel* GetSamplerChannel();
00306
00307 void SetSamplerChannel(SamplerChannel* pChannel);
00308
00310 Sampler* GetSampler();
00311
00317 void ExecuteProgramChange(uint8_t Program);
00318
00319 protected:
00320 EngineChannel();
00321 virtual ~EngineChannel();
00322
00329 void fireFxSendCountChanged(int ChannelId, int NewCount);
00330
00331 friend class EngineChannelFactory;
00332
00333 private:
00334 struct private_data_t;
00335 private_data_t* const p;
00336 };
00337
00338 }
00339
00340 #endif // __LS_ENGINECHANNEL_H__