mirror of
https://github.com/vale981/openAV-Luppp
synced 2025-03-04 16:51:37 -05:00
dsp: pan implemented in trackoutput, event added
This commit is contained in:
parent
e8b15b394c
commit
fdec6fedbf
7 changed files with 73 additions and 2 deletions
|
@ -25,6 +25,7 @@ const char* EventMasterInputVol::prettyName = "master:input_vol";
|
|||
const char* EventMasterInputTo::prettyName = "master:input_to";
|
||||
const char* EventMasterInputToActive::prettyName = "master:input_to_active";
|
||||
|
||||
const char* EventTrackPan::prettyName = "track:pan";
|
||||
const char* EventTrackVol::prettyName = "track:volume";
|
||||
const char* EventTrackSend::prettyName = "track:send";
|
||||
const char* EventTrackSendActive::prettyName = "track:send_active";
|
||||
|
@ -73,6 +74,9 @@ const char* Event::getPrettyName( int type )
|
|||
return EventMasterInputToActive::prettyName;
|
||||
}
|
||||
|
||||
case TRACK_PAN: {
|
||||
return EventTrackPan::prettyName;
|
||||
}
|
||||
case TRACK_VOLUME: {
|
||||
return EventTrackVol::prettyName;
|
||||
}
|
||||
|
|
|
@ -87,6 +87,7 @@ enum EVENT_TYPE {
|
|||
TRACK_SEND_ACTIVE,
|
||||
TRACK_SIGNAL_LEVEL,
|
||||
TRACK_VOLUME,
|
||||
TRACK_PAN,
|
||||
TRACK_RECORD_ARM,
|
||||
|
||||
FX_REVERB,
|
||||
|
@ -477,6 +478,35 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class EventTrackPan : public EventBase
|
||||
{
|
||||
public:
|
||||
int type()
|
||||
{
|
||||
return int(TRACK_PAN);
|
||||
}
|
||||
uint32_t size()
|
||||
{
|
||||
return sizeof(EventTrackPan);
|
||||
}
|
||||
static const char* prettyName;
|
||||
const char* name()
|
||||
{
|
||||
return prettyName;
|
||||
}
|
||||
|
||||
int track;
|
||||
float pan;
|
||||
|
||||
EventTrackPan() {};
|
||||
EventTrackPan(int t, float p)
|
||||
{
|
||||
track = t;
|
||||
pan = p;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class EventTrackRecordArm : public EventBase
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -322,6 +322,16 @@ void handleDspEvents()
|
|||
}
|
||||
}
|
||||
|
||||
case Event::TRACK_PAN: {
|
||||
if ( availableRead >= sizeof(EventTrackPan) ) {
|
||||
EventTrackPan ev;
|
||||
jack_ringbuffer_read( rbToDsp, (char*)&ev, sizeof(EventTrackPan) );
|
||||
jack->getLogic()->trackPan( ev.track, ev.pan );
|
||||
//jack->bindingTrack = ev.track;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
case Event::TRACK_RECORD_ARM: {
|
||||
if ( availableRead >= sizeof(EventTrackRecordArm) ) {
|
||||
EventTrackRecordArm ev;
|
||||
|
|
|
@ -71,6 +71,14 @@ void Logic::masterReturn( int returnNum, float value )
|
|||
jack->getControllerUpdater()->masterReturnVolume( value );
|
||||
}
|
||||
|
||||
void Logic::trackPan(int t, float p)
|
||||
{
|
||||
if ( t >= 0 && t < NTRACKS ) {
|
||||
jack->getTrackOutput( t )->setPan( p );
|
||||
//jack->getControllerUpdater()->volume( t, v );
|
||||
}
|
||||
}
|
||||
|
||||
void Logic::trackVolume(int t, float v)
|
||||
{
|
||||
if ( t == -1 ) { // master track
|
||||
|
|
|
@ -52,6 +52,7 @@ public:
|
|||
|
||||
void masterReturn( int returnNum, float v);
|
||||
|
||||
void trackPan(int track, float pan);
|
||||
void trackVolume(int track, float volume);
|
||||
void trackRecordArm(int track, bool armed);
|
||||
void trackSendActive(int track, int send, bool active);
|
||||
|
|
|
@ -36,6 +36,7 @@ TrackOutput::TrackOutput(int t, AudioProcessor* ap) :
|
|||
_toMaster = 0.8;
|
||||
_toMasterLag = 0.8;
|
||||
_toMasterDiff = 0;
|
||||
_toMasterPan = 0.f;
|
||||
_toReverb = 0.0;
|
||||
_toSidechain = 0.0;
|
||||
_toPostSidechain = 0.0;
|
||||
|
@ -86,6 +87,11 @@ void TrackOutput::setSendActive( int send, bool a )
|
|||
}
|
||||
}
|
||||
|
||||
void TrackOutput::setPan( float pan )
|
||||
{
|
||||
_toMasterPan = pan;
|
||||
}
|
||||
|
||||
void TrackOutput::setSend( int send, float value )
|
||||
{
|
||||
switch( send ) {
|
||||
|
@ -138,13 +144,20 @@ void TrackOutput::process(unsigned int nframes, Buffers* buffers)
|
|||
|
||||
float* jackoutput = buffers->audio[Buffers::JACK_TRACK_0+track];
|
||||
|
||||
/* Trial + Error leads to this algo - its cheap and cheerful */
|
||||
float p = ((_toMasterPan + 1.0f) * 0.5f) * (M_PI * 0.5);
|
||||
float sin_p = sin(p);
|
||||
float cos_p = cos(p);
|
||||
float pan_r = sin_p * sin_p;
|
||||
float pan_l = cos_p * cos_p;
|
||||
|
||||
for(unsigned int i = 0; i < nframes; i++) {
|
||||
// * master for "post-fader" sends
|
||||
float tmp = trackBuffer[i];
|
||||
|
||||
// post-sidechain *moves* signal between "before/after" ducking, not add!
|
||||
masterL[i] += tmp * _toMasterLag * (1-_toPostSidechain);
|
||||
masterR[i] += tmp * _toMasterLag * (1-_toPostSidechain);
|
||||
masterL[i] += tmp * _toMasterLag * (1-_toPostSidechain) * pan_l;
|
||||
masterR[i] += tmp * _toMasterLag * (1-_toPostSidechain) * pan_r;
|
||||
if(jackoutput)
|
||||
jackoutput[i] = tmp * _toMasterLag * (1-_toPostSidechain);
|
||||
if ( _toPostfaderActive )
|
||||
|
|
|
@ -43,6 +43,9 @@ public:
|
|||
|
||||
float getMaster();
|
||||
|
||||
// panning
|
||||
void setPan ( float pan );
|
||||
|
||||
bool recordArm();
|
||||
void recordArm(bool r);
|
||||
|
||||
|
@ -64,6 +67,8 @@ private:
|
|||
float _toMaster;
|
||||
float _toMasterLag;
|
||||
float _toMasterDiff;
|
||||
/* -1 indicates 100% left, 0 is centered, 1 indicates right */
|
||||
float _toMasterPan;
|
||||
|
||||
float _toReverb;
|
||||
float _toSidechain;
|
||||
|
|
Loading…
Add table
Reference in a new issue