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(); }
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); }