예제 #1
0
void cPack_onMessage(HvBase *_c, ControlPack *o, int letIn, const HvMessage *const m,
    void (*sendMessage)(HvBase *, int, const HvMessage *const)) {
  // ensure let index is less than number elements in internal msg
  int numElements = msg_getNumElements(o->msg);
  switch (letIn) {
    case 0: { // first inlet stores all values of input msg and triggers an output
      for (int i = hv_min_i(numElements, msg_getNumElements(m))-1; i >= 0; --i) {
        switch (msg_getType(m, i)) {
          case HV_MSG_FLOAT: msg_setFloat(o->msg, i, msg_getFloat(m, i)); break;
          case HV_MSG_SYMBOL:
          case HV_MSG_HASH: msg_setHash(o->msg, i, msg_getHash(m, i)); break;
          default: break;
        }
      }
      msg_setTimestamp(o->msg, msg_getTimestamp(m));
      sendMessage(_c, 0, o->msg);
      break;
    }
    default: { // rest of inlets just store values
      switch (msg_getType(m, 0)) {
        case HV_MSG_FLOAT: msg_setFloat(o->msg, letIn, msg_getFloat(m, 0)); break;
        case HV_MSG_SYMBOL:
        case HV_MSG_HASH: msg_setHash(o->msg, letIn, msg_getHash(m, 0)); break;
        default: break;
      }
      break;
    }
  }
}
예제 #2
0
hv_size_t cPack_init(ControlPack *o, int n) {
  hv_size_t numBytes = msg_getByteSize(n);
  o->msg = (HvMessage *) hv_malloc(numBytes);
  msg_init(o->msg, n, 0);
  for (int i = 0; i < n; ++i) {
    msg_setFloat(o->msg, i, 0.0f);
  }
  return numBytes;
}
예제 #3
0
파일: Heavy.c 프로젝트: mhroth/firehelix
void hv_msg_setFloat(HvMessage *m, int i, float f) {
  msg_setFloat(m,i,f);
}