int JackNetInterface::MidiSend(NetMidiBuffer* buffer, int midi_channnels, int audio_channels) { if (midi_channnels > 0) { // set global header fields and get the number of midi packets fTxHeader.fDataType = 'm'; uint data_size = buffer->RenderFromJackPorts(); fTxHeader.fNumPacket = buffer->GetNumPackets(data_size, PACKET_AVAILABLE_SIZE(&fParams)); for (uint subproc = 0; subproc < fTxHeader.fNumPacket; subproc++) { fTxHeader.fSubCycle = subproc; fTxHeader.fIsLastPckt = ((subproc == (fTxHeader.fNumPacket - 1)) && audio_channels == 0) ? 1 : 0; fTxHeader.fPacketSize = HEADER_SIZE + buffer->RenderToNetwork(subproc, data_size); memcpy(fTxBuffer, &fTxHeader, HEADER_SIZE); if (Send(fTxHeader.fPacketSize, 0) == SOCKET_ERROR) { return SOCKET_ERROR; } } } return 0; }
// network sync------------------------------------------------------------------------ void JackNetSlaveInterface::EncodeSyncPacket() { // This method contains every step of sync packet informations coding // first of all, clear sync packet memset(fTxData, 0, PACKET_AVAILABLE_SIZE(&fParams)); // then first step : transport // Transport is not used for now... /* if (fParams.fTransportSync) { EncodeTransportData(); TransportDataHToN(&fReturnTransportData, &fReturnTransportData); // copy to TxBuffer memcpy(fTxData, &fReturnTransportData, sizeof(net_transport_data_t)); } // then others // ... */ // Write active ports list fTxHeader.fActivePorts = (fNetAudioCaptureBuffer) ? fNetAudioCaptureBuffer->ActivePortsToNetwork(fTxData) : 0; }
void JackNetMasterInterface::EncodeSyncPacket(int frames) { // This method contains every step of sync packet informations coding // first of all, clear sync packet memset(fTxData, 0, PACKET_AVAILABLE_SIZE(&fParams)); // Transport not used for now... /* // then, first step : transport if (fParams.fTransportSync) { EncodeTransportData(); TransportDataHToN(&fSendTransportData, &fSendTransportData); // copy to TxBuffer memcpy(fTxData, &fSendTransportData, sizeof(net_transport_data_t)); } // then others (freewheel etc.) // ... */ // Write active ports list fTxHeader.fActivePorts = (fNetAudioPlaybackBuffer) ? fNetAudioPlaybackBuffer->ActivePortsToNetwork(fTxData) : 0; fTxHeader.fFrames = frames; }