accessing other inlets within code

wkdside's icon

Hi there

I am developing a code to make a comb filter within maxmsp using java. However I have stumbled upon a problem. Here is my code
public class IntelliTest extends MSPPerformer{
float []_circBuffer = sr; //defined in dsp setup method
int _delayTime = getInlet();
int _readIndex1 = 0;
int _writeIndex = _delayTime;

float _feedBack = 0.0f;
float _feedForward = 0.0f;
float _blend = 0.0f;

//constructor
IntelliTest(){
declareInlets(new int[]{SIGNAL, DataTypes.FLOAT,DataTypes.FLOAT,DataTypes.FLOAT,DataTypes.INT,SIGNAL});
declareOutlets(new int[]{SIGNAL});
}

// user set delaytime
public void inlet (int i) {
if(i >= 0 && i < _circBuffer.length){
_delayTime = i; // need to convert to samples
}
else{
post("Delay cannot be negative or exceed the buffer size");
}
}

// user set feedback
public void inlet (float f){
if(f > 0 && f < 0.99){
_feedBack = f;
}
else{
post("Feedback cannot be negative or exceed 0.99"); //need to establish processing of other float inlets
}
}

}

As you can see I have missed out part of the code as I can't work out how to establish the other inlets within the code. For example I can access the delay time via float..but can't access any of the other inlets as I don't know how to number them. Do I use atoms?

Any help would be appreciated.

Wkdside

crispypancakes's icon

you need to tell the object to check which inlet has been used, this code is for 6 inlets (0,1,2,3,4,5) so for your float inlets you need to have the code like so ....

public void inlet(float f)
{
int floatInlet;
floatInlet = getInlet(); // this tells your inlet to check what inlet the signals are coming from

if (floatInlet == 1){ // this says if the info is coming in on inlet 1 then do such and such with the info
do something
}
if (floatInlet == 2){ // this says if the info is coming in on inlet 2 then do such and such with the info
do something else
}
etc....

good luck with the comb filter.

ps. you might wanna change Daves delay post comments. :-P

nick rothwell | project cassiel's icon

As an aside, I've yet to be convinced that this technique (explicit callback to determine the inlet used) is thread-safe. It depends, I suppose, whether getInlet() contains a link to the thread which made the initial call to inlet(), but there's no mention of this in any of the documentation. So, you might want to think about using a pak upstream to pack messages into one inlet with a prefix string to distinguish them.