Welcome to %s forums

BrainModular Users Forum

Login Register

smooth volume change

Create your own modules in C++
Post Reply
User avatar
oli_lab
Member
Posts: 1261
Location: Brittany, France
Contact:

Unread post by oli_lab » 30 May 2015, 19:46

is this is the right fonction to smooth volume changes ?

void sdkSmoothEvent (TPrecision &oldValue, UsineEventPtr currentEvent, TPrecision target, TPrecision factor)

is someone has a working example ?

I want to use it on the volume series I did few weeks ago.

I think I should put it on top, to have it process only once each time all the audio channel are processed

am I right ?

void AudioVolumeDCblock::onProcess ()
{
sdkSmoothEvent(m_smoothOldCoeff, m_tevtSmoothCurrentCoeff, coeffGain, SMOOTH_FAST);
for (int i = 0; i < numOfAudiotInsOuts; i++)
{
sdkCopyEvt(audioInputs, audioOutputs);

for (int j = 0; j < sdkGetEvtSize(audioOutputs); j++)
{
audioOutputsM1 = 0.995f*audioOutputsM1 - audioInputsM1 + sdkGetEvtArrayData(audioInputs, j);
sdkSetEvtArrayData(audioOutputs, j, audioOutputsM1);
audioInputsM1 = sdkGetEvtArrayData(audioInputs[i], j);
//y = x - xm1 + 0.995 * ym1;
//xm1 = x;
//ym1 = y;
}
sdkMultEvt2Audio(m_tevtSmoothCurrentCoeff, audioOutputs[i]);
}
}
http://oli-lab.org

Win11 Ryzen9/32GB RAM - RME MADIFACE - SSL alpha link 4-16 - OSC capable interfaces

follow OLI_LAB adventures on Mastodon
@olivar_premier@mastodon.social

User avatar
oli_lab
Member
Posts: 1261
Location: Brittany, France
Contact:

Unread post by oli_lab » 30 May 2015, 22:59

does not work : I get an "on process" error
http://oli-lab.org

Win11 Ryzen9/32GB RAM - RME MADIFACE - SSL alpha link 4-16 - OSC capable interfaces

follow OLI_LAB adventures on Mastodon
@olivar_premier@mastodon.social

martignasse
Site Admin
Posts: 611
Location: Lyon, FRANCE
Contact:

Unread post by martignasse » 31 May 2015, 15:47

hi oli_lab,

you can found an implementation example in the onProcess of the matrix audio sources

MatrixAudio.cpp, line 765
Martin FLEURENT - Usine Developer - SDK maintainer

User avatar
oli_lab
Member
Posts: 1261
Location: Brittany, France
Contact:

Unread post by oli_lab » 31 May 2015, 17:25

765 ?
I tried few over things but I still amazed at the speed I get lost !
as soon as coeffgain is >0 I get a massive "on process"error

void AudioVolumeDCblock::onProcess ()
{
//sdkSmoothEvent(m_smoothOldCoeff, m_tevtSmoothCurrentCoeff, coeffGain, SMOOTH_SLOW);
for (int i = 0; i < numOfAudiotInsOuts; i++)
{
sdkCopyEvt(audioInputs, audioOutputs);
//sdkClearAudioEvt(audioOutputs);


for (int j = 0; j < sdkGetEvtSize(audioOutputs); j++)
{
audioOutputsM1 = 0.995f*audioOutputsM1 - audioInputsM1 + sdkGetEvtArrayData(audioInputs, j);
sdkSetEvtArrayData(audioOutputs, j, audioOutputsM1);
audioInputsM1[i] = sdkGetEvtArrayData(audioInputs[i], j);
//y = x - xm1 + 0.995 * ym1;
//xm1 = x;
//ym1 = y;
}
//sdkMultEvt1(coeffGain, audioOutputs[i]);
if ((coeffGain > 0) || (m_smoothOldCoeff[i] > 0.0f)) //
{
float tmp = std::pow(coeffGain, 4.0f);
sdkSmoothEvent(m_smoothOldCoeff[i], m_tevtSmoothCurrentCoeff[i], tmp, SMOOTH_SLOW);
//sdkMultEvt2Audio(m_tevtSmoothCurrentCoeff[i], audioOutputs[i]);
//sdkMultEvt2Audio(m_tevtSmoothCurrentCoeff[i], m_tevtAudioMixBuffer);
sdkMultEvt2Audio(m_tevtSmoothCurrentCoeff[i], audioOutputs[i]);
//sdkAddEvt2(m_tevtAudioMixBuffer, audioOutputs[i]);
}
}
}
http://oli-lab.org

Win11 Ryzen9/32GB RAM - RME MADIFACE - SSL alpha link 4-16 - OSC capable interfaces

follow OLI_LAB adventures on Mastodon
@olivar_premier@mastodon.social

User avatar
oli_lab
Member
Posts: 1261
Location: Brittany, France
Contact:

Unread post by oli_lab » 01 Jun 2015, 20:32

YEAHAAAAA I finally made it !

did that :

//-------------------------------------------------------------------------
// module constructors/destructors
//-------------------------------------------------------------------------

// constructor
AudioVolumeExample::AudioVolumeExample()
: coeffGain (1)
{
// audio smooth
m_tevtSmoothCurrentCoeff = NULL;
}

// destructor
AudioVolumeExample::~AudioVolumeExample()
{
if (m_tevtSmoothCurrentCoeff != NULL)
sdkDestroyEvt(m_tevtSmoothCurrentCoeff);
}

...

// Called after the query popup
void AudioVolumeExample::onAfterQuery (MasterInfo* pMasterInfo, ModuleInfo* pModuleInfo, int queryIndex)
{
sdkCreateEvt(m_tevtSmoothCurrentCoeff, pMasterInfo->BlocSize);
}

{
sdkSmoothEvent(m_smoothOldCoeff, m_tevtSmoothCurrentCoeff, coeffGain , SMOOTH_SLOW);
for (int i = 0; i < numOfAudiotInsOuts; i++)
{
sdkCopyEvt (audioInputs, audioOutputs);
if ((coeffGain > 0) || (m_smoothOldCoeff > 0.0f)) //
{
sdkMultEvt2Audio(m_tevtSmoothCurrentCoeff, audioOutputs);
}

//y = x / (1 + | x | ) softclipping formula
for (int j = 0; j < sdkGetEvtSize(audioOutputs); j++)
{
tempValue = sdkGetEvtArrayData(audioOutputs, j) / (1.1f + abs(sdkGetEvtArrayData(audioOutputs, j)));
sdkSetEvtArrayData(audioOutputs, j, tempValue);
}
}
}
http://oli-lab.org

Win11 Ryzen9/32GB RAM - RME MADIFACE - SSL alpha link 4-16 - OSC capable interfaces

follow OLI_LAB adventures on Mastodon
@olivar_premier@mastodon.social

Post Reply

Who is online

Users browsing this forum: No registered users and 112 guests