void
RemotePluginClient::setCurrentProgram(int n)
{
    writeOpcode(&m_shmControl->ringBuffer, RemotePluginSetCurrentProgram);
    writeInt(&m_shmControl->ringBuffer, n);
    commitWrite(&m_shmControl->ringBuffer);
    waitForServer();
}
void
RemotePluginClient::setParameter(int p, float v)
{
    writeOpcode(&m_shmControl->ringBuffer, RemotePluginSetParameter);
    writeInt(&m_shmControl->ringBuffer, p);
    writeFloat(&m_shmControl->ringBuffer, v);
    commitWrite(&m_shmControl->ringBuffer);
}
void
RemotePluginClient::setSampleRate(int s)
{
    writeOpcode(&m_shmControl->ringBuffer, RemotePluginSetSampleRate);
    writeInt(&m_shmControl->ringBuffer, s);
    commitWrite(&m_shmControl->ringBuffer);
    waitForServer();
}
void
RemotePluginClient::setBufferSize(int s)
{
    if (s == m_bufferSize) return;
    m_bufferSize = s;
    sizeShm();
    writeOpcode(&m_shmControl->ringBuffer, RemotePluginSetBufferSize);
    writeInt(&m_shmControl->ringBuffer, s);
    commitWrite(&m_shmControl->ringBuffer);
    waitForServer();
}
示例#5
0
int Socket::writeImpl(const char* data,int size)
{
	if(m_socket == int(INVALID_SOCKET))
		return 0;

	m_write_buffer.append(data,size);
	
	commitWrite();
	
	return size;	
}
void
RemotePluginClient::process(float **inputs, float **outputs)
{
    //struct timeval start, finish;
    //gettimeofday(&start, 0);

    if (m_bufferSize < 0) {
	std::cerr << "ERROR: RemotePluginClient::setBufferSize must be called before RemotePluginClient::process" << std::endl;
	return;
    }
    if (m_numInputs < 0) {
	std::cerr << "ERROR: RemotePluginClient::getInputCount must be called before RemotePluginClient::process" << std::endl;
	return;
    }
    if (m_numOutputs < 0) {
	std::cerr << "ERROR: RemotePluginClient::getOutputCount must be called before RemotePluginClient::process" << std::endl;
	return;
    }
    if (!m_shm) {
	std::cerr << "ERROR: RemotePluginClient::process: no shared memory region available" << std::endl;
	return;
    }

    size_t blocksz = m_bufferSize * sizeof(float);

    //!!! put counter in shm to indicate number of blocks processed?
    // (so we know if we've screwed up)

    for (int i = 0; i < m_numInputs; ++i) {
	memcpy(m_shm + i * blocksz, inputs[i], blocksz);
    }

    writeOpcode(&m_shmControl->ringBuffer, RemotePluginProcess);
    commitWrite(&m_shmControl->ringBuffer);

    waitForServer();

    for (int i = 0; i < m_numOutputs; ++i) {
        memcpy(outputs[i], m_shm + (i + m_numInputs) * blocksz, blocksz);
    }


//    std::cout << "process: wrote opcode " << RemotePluginProcess << std::endl;

    //gettimeofday(&finish, 0);
//	std::cout << "process: time " << finish.tv_sec - start.tv_sec
//		  << " sec, " << finish.tv_usec - start.tv_usec << " usec"
//		  << std::endl;
    return;
}
void
RemotePluginClient::sendMIDIData(unsigned char *data, int *frameoffsets, int events)
{
    writeOpcode(&m_shmControl->ringBuffer, RemotePluginSendMIDIData);
    writeInt(&m_shmControl->ringBuffer, events);
    tryWrite(&m_shmControl->ringBuffer, data, events * 3);

    if (!frameoffsets) {
	// This should not happen with a good client, but we'd better
	// cope as well as possible with the lazy ol' degenerates
	frameoffsets = (int *)alloca(events * sizeof(int));
	memset(frameoffsets, 0, events * sizeof(int));
    }

//    std::cerr << "RemotePluginClient::sendMIDIData(" << events << ")" << std::endl;

    tryWrite(&m_shmControl->ringBuffer, frameoffsets, events * sizeof(int));
    commitWrite(&m_shmControl->ringBuffer);
}