예제 #1
0
    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;
    }
예제 #2
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;
    }
예제 #3
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;
  }