33 |
#include "../common/RingBuffer.h" |
#include "../common/RingBuffer.h" |
34 |
#include "../drivers/audio/AudioOutputDevice.h" |
#include "../drivers/audio/AudioOutputDevice.h" |
35 |
#include "common/Event.h" |
#include "common/Event.h" |
36 |
|
#include "common/SignalUnitRack.h" |
37 |
|
|
38 |
namespace LinuxSampler { |
namespace LinuxSampler { |
39 |
|
|
65 |
|
|
66 |
void SetVoiceCount(uint Count);// Simple array wrapper just to make sure memory is freed |
void SetVoiceCount(uint Count);// Simple array wrapper just to make sure memory is freed |
67 |
// when liblinuxsampler is unloaded |
// when liblinuxsampler is unloaded |
68 |
|
|
69 |
class FloatTable { |
class FloatTable { |
70 |
private: |
private: |
71 |
const float* array; |
const float* array; |
80 |
static const FloatTable CrossfadeCurve; ///< Table that maps crossfade control change values 0..127 to amplitude. Unity gain is at 127. |
static const FloatTable CrossfadeCurve; ///< Table that maps crossfade control change values 0..127 to amplitude. Unity gain is at 127. |
81 |
|
|
82 |
AudioOutputDevice* pAudioOutputDevice; |
AudioOutputDevice* pAudioOutputDevice; |
83 |
|
|
84 |
|
//TODO: should be protected |
85 |
|
AudioChannel* pDedicatedVoiceChannelLeft; ///< encapsulates a special audio rendering buffer (left) for rendering and routing audio on a per voice basis (this is a very special case and only used for voices which lie on a note which was set with individual, dedicated FX send level) |
86 |
|
AudioChannel* pDedicatedVoiceChannelRight; ///< encapsulates a special audio rendering buffer (right) for rendering and routing audio on a per voice basis (this is a very special case and only used for voices which lie on a note which was set with individual, dedicated FX send level) |
87 |
|
|
88 |
friend class AbstractVoice; |
friend class AbstractVoice; |
89 |
friend class AbstractEngineChannel; |
friend class AbstractEngineChannel; |
105 |
int ActiveVoiceCountMax; ///< the maximum voice usage since application start |
int ActiveVoiceCountMax; ///< the maximum voice usage since application start |
106 |
atomic_t ActiveVoiceCount; ///< number of currently active voices |
atomic_t ActiveVoiceCount; ///< number of currently active voices |
107 |
int VoiceSpawnsLeft; ///< We only allow CONFIG_MAX_VOICES voices to be spawned per audio fragment, we use this variable to ensure this limit. |
int VoiceSpawnsLeft; ///< We only allow CONFIG_MAX_VOICES voices to be spawned per audio fragment, we use this variable to ensure this limit. |
108 |
|
EqSupport* pEq; ///< Used for per voice equalization |
109 |
|
|
110 |
void RouteAudio(EngineChannel* pEngineChannel, uint Samples); |
void RouteAudio(EngineChannel* pEngineChannel, uint Samples); |
111 |
|
void RouteDedicatedVoiceChannels(EngineChannel* pEngineChannel, optional<float> FxSendLevels[2], uint Samples); |
112 |
void ClearEventLists(); |
void ClearEventLists(); |
113 |
void ImportEvents(uint Samples); |
void ImportEvents(uint Samples); |
114 |
void ProcessSysex(Pool<Event>::Iterator& itSysexEvent); |
void ProcessSysex(Pool<Event>::Iterator& itSysexEvent); |
144 |
static float* InitCurve(const float* segments, int size = 128); |
static float* InitCurve(const float* segments, int size = 128); |
145 |
|
|
146 |
void AdjustScale(int8_t ScaleTunes[12]); |
void AdjustScale(int8_t ScaleTunes[12]); |
147 |
|
bool RouteFxSend(FxSend* pFxSend, AudioChannel* ppSource[2], float FxSendLevel, uint Samples); |
148 |
}; |
}; |
149 |
|
|
150 |
} // namespace LinuxSampler |
} // namespace LinuxSampler |