Source Code (Use browser search to find items of interest.)
Class Index
kdelibs'AudioPort (./kdelibs/arts/flow/synthschedule.h:94)
class AudioPort : public Port {
protected:
AudioPort *source;
public:
StdScheduleNode *sourcemodule;
SynthBuffer *buffer, *lbuffer;
unsigned long destcount, position;
AudioPort(std::string name, void *ptr, long flags,StdScheduleNode *parent);
~AudioPort();
virtual class AudioPort *audioPort();
void setFloatValue(float f);
void connect(Port *psource);
void disconnect(Port *psource);
//------------- I/O ---------------------------------------------------------
inline unsigned long haveIn()
{
if(sourcemodule)
return(buffer->position - position);
else
return(buffer->size);// constant value; no read limitation
}
inline unsigned long outRoom()
{
long room;
room = buffer->size - buffer->needread;
if(room < 0) return 0;
return (unsigned long)room;
}
inline unsigned long readSegment(unsigned long offset, unsigned long len)
{
unsigned long rbsize = buffer->size;
unsigned long rbmask = buffer->size - 1;
unsigned long rbpos = (position+offset) & rbmask;
*((float **)_ptr) = &buffer->data[rbpos];
if(len > (rbsize-rbpos)) len = rbsize - rbpos;
return len;
}
inline unsigned long writeSegment(unsigned long offset, unsigned long len)
{
unsigned long rbsize = buffer->size;
unsigned long rbmask = buffer->size - 1;
unsigned long rbpos = (buffer->position+offset) & rbmask;
*((float **)_ptr) = &buffer->data[rbpos];
if(len > (rbsize-rbpos)) len = rbsize - rbpos;
return len;
}
inline void read(unsigned long cycles)
{
position += cycles;
buffer->needread -= cycles;
}
inline void write(unsigned long cycles)
{
buffer->position += cycles;
buffer->needread += cycles * destcount;
}
};
kdelibs'AudioPort::AudioPort() (./kdelibs/arts/flow/synthschedule.cc:146)
AudioPort::AudioPort(string name, void *ptr, long flags,StdScheduleNode *parent)
: Port(name,ptr,flags,parent)
{
position = 0;
destcount = 0;
sourcemodule = 0;
source = 0;
lbuffer = buffer = new SynthBuffer(0.0, requestSize());
}
kdelibs'AudioPort::~AudioPort() (./kdelibs/arts/flow/synthschedule.cc:156)
AudioPort::~AudioPort()
{
delete lbuffer;
}
kdelibs'AudioPort::audioPort() (./kdelibs/arts/flow/synthschedule.cc:161)
AudioPort *AudioPort::audioPort()
{
return this;
}
kdelibs'AudioPort::setFloatValue() (./kdelibs/arts/flow/synthschedule.cc:166)
void AudioPort::setFloatValue(float f)
{
buffer->setValue(f);
}
kdelibs'AudioPort::connect() (./kdelibs/arts/flow/synthschedule.cc:171)
void AudioPort::connect(Port *psource)
{
source = psource->audioPort();
assert(source);
addAutoDisconnect(psource);
buffer = source->buffer;
position = buffer->position;
source->destcount++;
sourcemodule = source->parent;
}
kdelibs'AudioPort::disconnect() (./kdelibs/arts/flow/synthschedule.cc:183)
void AudioPort::disconnect(Port *psource)
{
assert(source);
assert(source == psource->audioPort());
removeAutoDisconnect(psource);
assert(sourcemodule == source->parent);
sourcemodule = 0;
// skip the remaining stuff in the buffer
read(buffer->position - position);
source->destcount--;
source = 0;
position = lbuffer->position;
buffer = lbuffer;
}
// --------- MultiPort ----------
kdelibs'AudioPort::write() (./kdelibs/arts/flow/synthschedule.h:161)
inline void write(unsigned long cycles)
{
buffer->position += cycles;
buffer->needread += cycles * destcount;
}
};