mirror of
https://github.com/vale981/openAV-Luppp
synced 2025-03-05 17:11:40 -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* EventMasterInputTo::prettyName = "master:input_to";
|
||||||
const char* EventMasterInputToActive::prettyName = "master:input_to_active";
|
const char* EventMasterInputToActive::prettyName = "master:input_to_active";
|
||||||
|
|
||||||
|
const char* EventTrackPan::prettyName = "track:pan";
|
||||||
const char* EventTrackVol::prettyName = "track:volume";
|
const char* EventTrackVol::prettyName = "track:volume";
|
||||||
const char* EventTrackSend::prettyName = "track:send";
|
const char* EventTrackSend::prettyName = "track:send";
|
||||||
const char* EventTrackSendActive::prettyName = "track:send_active";
|
const char* EventTrackSendActive::prettyName = "track:send_active";
|
||||||
|
@ -73,6 +74,9 @@ const char* Event::getPrettyName( int type )
|
||||||
return EventMasterInputToActive::prettyName;
|
return EventMasterInputToActive::prettyName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case TRACK_PAN: {
|
||||||
|
return EventTrackPan::prettyName;
|
||||||
|
}
|
||||||
case TRACK_VOLUME: {
|
case TRACK_VOLUME: {
|
||||||
return EventTrackVol::prettyName;
|
return EventTrackVol::prettyName;
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,6 +87,7 @@ enum EVENT_TYPE {
|
||||||
TRACK_SEND_ACTIVE,
|
TRACK_SEND_ACTIVE,
|
||||||
TRACK_SIGNAL_LEVEL,
|
TRACK_SIGNAL_LEVEL,
|
||||||
TRACK_VOLUME,
|
TRACK_VOLUME,
|
||||||
|
TRACK_PAN,
|
||||||
TRACK_RECORD_ARM,
|
TRACK_RECORD_ARM,
|
||||||
|
|
||||||
FX_REVERB,
|
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
|
class EventTrackRecordArm : public EventBase
|
||||||
{
|
{
|
||||||
public:
|
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: {
|
case Event::TRACK_RECORD_ARM: {
|
||||||
if ( availableRead >= sizeof(EventTrackRecordArm) ) {
|
if ( availableRead >= sizeof(EventTrackRecordArm) ) {
|
||||||
EventTrackRecordArm ev;
|
EventTrackRecordArm ev;
|
||||||
|
|
|
@ -71,6 +71,14 @@ void Logic::masterReturn( int returnNum, float value )
|
||||||
jack->getControllerUpdater()->masterReturnVolume( 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)
|
void Logic::trackVolume(int t, float v)
|
||||||
{
|
{
|
||||||
if ( t == -1 ) { // master track
|
if ( t == -1 ) { // master track
|
||||||
|
|
|
@ -52,6 +52,7 @@ public:
|
||||||
|
|
||||||
void masterReturn( int returnNum, float v);
|
void masterReturn( int returnNum, float v);
|
||||||
|
|
||||||
|
void trackPan(int track, float pan);
|
||||||
void trackVolume(int track, float volume);
|
void trackVolume(int track, float volume);
|
||||||
void trackRecordArm(int track, bool armed);
|
void trackRecordArm(int track, bool armed);
|
||||||
void trackSendActive(int track, int send, bool active);
|
void trackSendActive(int track, int send, bool active);
|
||||||
|
|
|
@ -36,6 +36,7 @@ TrackOutput::TrackOutput(int t, AudioProcessor* ap) :
|
||||||
_toMaster = 0.8;
|
_toMaster = 0.8;
|
||||||
_toMasterLag = 0.8;
|
_toMasterLag = 0.8;
|
||||||
_toMasterDiff = 0;
|
_toMasterDiff = 0;
|
||||||
|
_toMasterPan = 0.f;
|
||||||
_toReverb = 0.0;
|
_toReverb = 0.0;
|
||||||
_toSidechain = 0.0;
|
_toSidechain = 0.0;
|
||||||
_toPostSidechain = 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 )
|
void TrackOutput::setSend( int send, float value )
|
||||||
{
|
{
|
||||||
switch( send ) {
|
switch( send ) {
|
||||||
|
@ -138,13 +144,20 @@ void TrackOutput::process(unsigned int nframes, Buffers* buffers)
|
||||||
|
|
||||||
float* jackoutput = buffers->audio[Buffers::JACK_TRACK_0+track];
|
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++) {
|
for(unsigned int i = 0; i < nframes; i++) {
|
||||||
// * master for "post-fader" sends
|
// * master for "post-fader" sends
|
||||||
float tmp = trackBuffer[i];
|
float tmp = trackBuffer[i];
|
||||||
|
|
||||||
// post-sidechain *moves* signal between "before/after" ducking, not add!
|
// post-sidechain *moves* signal between "before/after" ducking, not add!
|
||||||
masterL[i] += tmp * _toMasterLag * (1-_toPostSidechain);
|
masterL[i] += tmp * _toMasterLag * (1-_toPostSidechain) * pan_l;
|
||||||
masterR[i] += tmp * _toMasterLag * (1-_toPostSidechain);
|
masterR[i] += tmp * _toMasterLag * (1-_toPostSidechain) * pan_r;
|
||||||
if(jackoutput)
|
if(jackoutput)
|
||||||
jackoutput[i] = tmp * _toMasterLag * (1-_toPostSidechain);
|
jackoutput[i] = tmp * _toMasterLag * (1-_toPostSidechain);
|
||||||
if ( _toPostfaderActive )
|
if ( _toPostfaderActive )
|
||||||
|
|
|
@ -43,6 +43,9 @@ public:
|
||||||
|
|
||||||
float getMaster();
|
float getMaster();
|
||||||
|
|
||||||
|
// panning
|
||||||
|
void setPan ( float pan );
|
||||||
|
|
||||||
bool recordArm();
|
bool recordArm();
|
||||||
void recordArm(bool r);
|
void recordArm(bool r);
|
||||||
|
|
||||||
|
@ -64,6 +67,8 @@ private:
|
||||||
float _toMaster;
|
float _toMaster;
|
||||||
float _toMasterLag;
|
float _toMasterLag;
|
||||||
float _toMasterDiff;
|
float _toMasterDiff;
|
||||||
|
/* -1 indicates 100% left, 0 is centered, 1 indicates right */
|
||||||
|
float _toMasterPan;
|
||||||
|
|
||||||
float _toReverb;
|
float _toReverb;
|
||||||
float _toSidechain;
|
float _toSidechain;
|
||||||
|
|
Loading…
Add table
Reference in a new issue