3 |
* LinuxSampler - modular, streaming capable sampler * |
* LinuxSampler - modular, streaming capable sampler * |
4 |
* * |
* * |
5 |
* Copyright (C) 2003,2004 by Benno Senoner and Christian Schoenebeck * |
* Copyright (C) 2003,2004 by Benno Senoner and Christian Schoenebeck * |
6 |
* Copyright (C) 2005-2009 Christian Schoenebeck * |
* Copyright (C) 2005-2008 Christian Schoenebeck * |
7 |
* Copyright (C) 2009 Grigor Iliev * |
* Copyright (C) 2009-2012 Christian Schoenebeck and Grigor Iliev * |
8 |
* * |
* * |
9 |
* This program is free software; you can redistribute it and/or modify * |
* This program is free software; you can redistribute it and/or modify * |
10 |
* it under the terms of the GNU General Public License as published by * |
* it under the terms of the GNU General Public License as published by * |
23 |
***************************************************************************/ |
***************************************************************************/ |
24 |
|
|
25 |
#ifndef __LS_ABSTRACTENGINECHANNEL_H__ |
#ifndef __LS_ABSTRACTENGINECHANNEL_H__ |
26 |
#define __LS_ABSTRACTENGINECHANNEL_H__ |
#define __LS_ABSTRACTENGINECHANNEL_H__ |
27 |
|
|
28 |
#include "EngineChannel.h" |
#include "EngineChannel.h" |
29 |
#include "AbstractEngine.h" |
#include "AbstractEngine.h" |
38 |
// implementation of abstract methods derived from interface class 'LinuxSampler::EngineChannel' |
// implementation of abstract methods derived from interface class 'LinuxSampler::EngineChannel' |
39 |
virtual void PrepareLoadInstrument(const char* FileName, uint Instrument); |
virtual void PrepareLoadInstrument(const char* FileName, uint Instrument); |
40 |
virtual void Reset(); |
virtual void Reset(); |
41 |
virtual void SendNoteOn(uint8_t Key, uint8_t Velocity); |
virtual void SendNoteOn(uint8_t Key, uint8_t Velocity, uint8_t MidiChannel); |
42 |
virtual void SendNoteOn(uint8_t Key, uint8_t Velocity, int32_t FragmentPos); |
virtual void SendNoteOn(uint8_t Key, uint8_t Velocity, uint8_t MidiChannel, int32_t FragmentPos); |
43 |
virtual void SendNoteOff(uint8_t Key, uint8_t Velocity); |
virtual void SendNoteOff(uint8_t Key, uint8_t Velocity, uint8_t MidiChannel); |
44 |
virtual void SendNoteOff(uint8_t Key, uint8_t Velocity, int32_t FragmentPos); |
virtual void SendNoteOff(uint8_t Key, uint8_t Velocity, uint8_t MidiChannel, int32_t FragmentPos); |
45 |
virtual void SendPitchbend(int Pitch); |
virtual void SendPitchbend(int Pitch, uint8_t MidiChannel); |
46 |
virtual void SendPitchbend(int Pitch, int32_t FragmentPos); |
virtual void SendPitchbend(int Pitch, uint8_t MidiChannel, int32_t FragmentPos); |
47 |
virtual void SendControlChange(uint8_t Controller, uint8_t Value); |
virtual void SendControlChange(uint8_t Controller, uint8_t Value, uint8_t MidiChannel); |
48 |
virtual void SendControlChange(uint8_t Controller, uint8_t Value, int32_t FragmentPos); |
virtual void SendControlChange(uint8_t Controller, uint8_t Value, uint8_t MidiChannel, int32_t FragmentPos); |
49 |
virtual bool StatusChanged(bool bNewStatus = false); |
virtual bool StatusChanged(bool bNewStatus = false); |
50 |
virtual float Volume(); |
virtual float Volume(); |
51 |
virtual void Volume(float f); |
virtual void Volume(float f); |
63 |
virtual String InstrumentName(); |
virtual String InstrumentName(); |
64 |
virtual int InstrumentIndex(); |
virtual int InstrumentIndex(); |
65 |
virtual int InstrumentStatus(); |
virtual int InstrumentStatus(); |
66 |
virtual LinuxSampler::Engine* GetEngine(); |
virtual Engine* GetEngine(); |
67 |
virtual String EngineName(); |
virtual String EngineName(); |
68 |
virtual FxSend* AddFxSend(uint8_t MidiCtrl, String Name = "") throw (Exception); |
virtual FxSend* AddFxSend(uint8_t MidiCtrl, String Name = "") throw (Exception); |
69 |
virtual FxSend* GetFxSend(uint FxSendIndex); |
virtual FxSend* GetFxSend(uint FxSendIndex); |
75 |
|
|
76 |
virtual AbstractEngine::Format GetEngineFormat() = 0; |
virtual AbstractEngine::Format GetEngineFormat() = 0; |
77 |
|
|
78 |
|
AudioOutputDevice* GetAudioOutputDeviceSafe(); |
79 |
|
|
80 |
|
friend class AbstractVoice; |
81 |
friend class AbstractEngine; |
friend class AbstractEngine; |
82 |
template<class TV, class TRR, class TR, class TD, class TIM, class TI> friend class EngineBase; |
template<class TV, class TRR, class TR, class TD, class TIM, class TI> friend class EngineBase; |
83 |
|
template<class EC, class R, class S, class D> friend class VoiceBase; |
84 |
|
|
85 |
protected: |
protected: |
86 |
AbstractEngineChannel(); |
AbstractEngineChannel(); |
87 |
virtual ~AbstractEngineChannel(); |
virtual ~AbstractEngineChannel(); |
88 |
|
|
89 |
AbstractEngine* pEngine; |
AbstractEngine* pEngine; |
90 |
|
Mutex EngineMutex; ///< protects the Engine from access by the instrument loader thread when lscp is disconnecting |
91 |
|
|
92 |
|
protected: |
93 |
AudioChannel* pChannelLeft; ///< encapsulates the audio rendering buffer (left) |
AudioChannel* pChannelLeft; ///< encapsulates the audio rendering buffer (left) |
94 |
AudioChannel* pChannelRight; ///< encapsulates the audio rendering buffer (right) |
AudioChannel* pChannelRight; ///< encapsulates the audio rendering buffer (right) |
95 |
int AudioDeviceChannelLeft; ///< audio device channel number to which the left channel is connected to |
int AudioDeviceChannelLeft; ///< audio device channel number to which the left channel is connected to |
117 |
int iLastPanRequest; ///< just for the return value of Pan(), so we don't have to make an injective function |
int iLastPanRequest; ///< just for the return value of Pan(), so we don't have to make an injective function |
118 |
int iEngineIndexSelf; ///< Reflects the index of this EngineChannel in the Engine's ArrayList. |
int iEngineIndexSelf; ///< Reflects the index of this EngineChannel in the Engine's ArrayList. |
119 |
bool bStatusChanged; ///< true in case an engine parameter has changed (e.g. new instrument, another volumet) |
bool bStatusChanged; ///< true in case an engine parameter has changed (e.g. new instrument, another volumet) |
120 |
|
uint32_t RoundRobinIndex; ///< counter for round robin sample selection, incremented for each note on |
121 |
|
|
122 |
SynchronizedConfig< ArrayList<VirtualMidiDevice*> > virtualMidiDevices; |
SynchronizedConfig< ArrayList<VirtualMidiDevice*> > virtualMidiDevices; |
123 |
SynchronizedConfig< ArrayList<VirtualMidiDevice*> >::Reader virtualMidiDevicesReader_AudioThread; |
SynchronizedConfig< ArrayList<VirtualMidiDevice*> >::Reader virtualMidiDevicesReader_AudioThread; |
124 |
SynchronizedConfig< ArrayList<VirtualMidiDevice*> >::Reader virtualMidiDevicesReader_MidiThread; |
SynchronizedConfig< ArrayList<VirtualMidiDevice*> >::Reader virtualMidiDevicesReader_MidiThread; |
125 |
|
|
126 |
|
// specialization of RTList that doesn't require the pool |
127 |
|
// to be provided at construction time |
128 |
|
template<typename T> |
129 |
|
class LazyList : public RTList<T> { |
130 |
|
public: |
131 |
|
using RTList<T>::allocAppend; |
132 |
|
using RTList<T>::pPool; |
133 |
|
|
134 |
|
LazyList() : RTList<T>(0) { } |
135 |
|
typename RTList<T>::Iterator allocAppend(Pool<T>* pool) { |
136 |
|
pPool = pool; |
137 |
|
return allocAppend(); |
138 |
|
} |
139 |
|
}; |
140 |
|
|
141 |
|
typedef std::map<uint, LazyList<Event>*> ActiveKeyGroupMap; |
142 |
|
ActiveKeyGroupMap ActiveKeyGroups; ///< Contains event queues for key groups, ordered by key group ID. |
143 |
|
|
144 |
virtual void ResetControllers(); |
virtual void ResetControllers(); |
145 |
virtual void ResetInternal(); |
virtual void ResetInternal(); |
146 |
virtual void RemoveAllFxSends(); |
virtual void RemoveAllFxSends(); |
147 |
|
|
148 |
void ImportEvents(uint Samples); |
void ImportEvents(uint Samples); |
149 |
|
|
150 |
|
void AddGroup(uint group); |
151 |
|
void HandleKeyGroupConflicts(uint KeyGroup, Pool<Event>::Iterator& itNoteOnEvent); |
152 |
|
void ClearGroupEventLists(); |
153 |
|
void DeleteGroupEventLists(); |
154 |
}; |
}; |
155 |
|
|
156 |
} // namespace LinuxSampler |
} // namespace LinuxSampler |
157 |
|
|
158 |
#endif /* __LS_ABSTRACTENGINECHANNEL_H__ */ |
#endif /* __LS_ABSTRACTENGINECHANNEL_H__ */ |
159 |
|
|