コード例 #1
0
ファイル: QRSDetection.cpp プロジェクト: hcmlab/mobileSSI
bool QRSDetection::setEventListener (IEventListener *listener) {
	_listener = listener;	

	_send_etuple = _options.tuple;
	if(_send_etuple) {
		ssi_event_init (_r_event, SSI_ETYPE_MAP);
		ssi_event_adjust (_r_event, 1 * sizeof (ssi_event_map_t));
		ssi_event_map_t *ptr = ssi_pcast (ssi_event_map_t, _r_event.ptr);
		ptr[0].id = Factory::AddString ("delta");
	} else {
		ssi_event_init (_r_event, SSI_ETYPE_TUPLE);
		ssi_event_adjust (_r_event, 1 * sizeof (ssi_real_t));
	}

	_r_event.sender_id = Factory::AddString (_options.sname);
	if (_r_event.sender_id == SSI_FACTORY_STRINGS_INVALID_ID) {
		return false;
	}
	_r_event.event_id = Factory::AddString (_options.ename);
	if (_r_event.event_id == SSI_FACTORY_STRINGS_INVALID_ID) {
		return false;
	}
	
	_event_address.setSender (_options.sname);
	_event_address.setEvents (_options.ename);

	return true;
}
コード例 #2
0
ファイル: MyEventSender.cpp プロジェクト: hihiy/IntelliVoice
void MyEventSender::consume_enter(ssi_size_t stream_in_num,
	ssi_stream_t stream_in[]) {

	ssi_event_adjust(_event, stream_in[0].dim * sizeof(ssi_real_t));

	ssi_msg(SSI_LOG_LEVEL_BASIC, "enter()..ok");
}
コード例 #3
0
void SocketEventReader::message (const char *from,
	const ssi_char_t *id,
	osc_int32 time,
	osc_int32 dur,
	const ssi_char_t *msg) {
	
	if (_elistener) {
		_event_string.time = _frame->GetElapsedTimeMs ();
		_event_string.dur = dur;
		ssi_event_adjust (_event_string, ssi_strlen (msg) + 1);
		strcpy (_event_string.ptr, msg);
		_elistener->update (_event_string);
	}
}
コード例 #4
0
void TupleEventSender::consume_enter (ssi_size_t stream_in_num,
	ssi_stream_t stream_in[]) {

	if (stream_in[0].type != SSI_REAL) {
		ssi_err ("type '%s' not supported", SSI_TYPE_NAMES[stream_in[0].type]);
	}

	ssi_size_t dim = stream_in[0].dim;

	_n_tuple = 0;
	if (_options.mean) _n_tuple++;
	if (_options.var) _n_tuple++;
	if (_options.minval) _n_tuple++;
	if (_options.maxval) _n_tuple++;

	ssi_event_adjust(_event, _n_tuple * sizeof(ssi_event_tuple_t) * dim);
	ssi_event_tuple_t *dst = ssi_pcast(ssi_event_tuple_t, _event.ptr);

	if (_options.mean) {
		ssi_size_t id = Factory::AddString("mean");
		for (ssi_size_t i = 0; i < dim; i++) {
			dst++->id = id;
		}
	}
	if (_options.var) {
		ssi_size_t id = Factory::AddString("var");
		for (ssi_size_t i = 0; i < dim; i++) {
			dst++->id = id;
		}
	}
	if (_options.minval) {
		ssi_size_t id = Factory::AddString("min");
		for (ssi_size_t i = 0; i < dim; i++) {
			dst++->id = id;
		}
	}
	if (_options.maxval) {
		ssi_size_t id = Factory::AddString("max");
		for (ssi_size_t i = 0; i < dim; i++) {
			dst++->id = id;
		}
	}
}
コード例 #5
0
ファイル: MapEventSender.cpp プロジェクト: hcmlab/mobileSSI
void MapEventSender::consume_enter (ssi_size_t stream_in_num,
	ssi_stream_t stream_in[]) {

	if (stream_in[0].type != SSI_REAL) {
		ssi_err ("type '%s' not supported", SSI_TYPE_NAMES[stream_in[0].type]);
	}

	ssi_size_t dim = stream_in[0].dim;

	ssi_event_adjust(_event, sizeof(ssi_event_map_t) * dim);
	ssi_event_map_t *dst = ssi_pcast(ssi_event_map_t, _event.ptr);

	ssi_char_t **keys = 0;
	if (_options.keys[0] != '\0') {
		ssi_size_t n = ssi_split_string_count(_options.keys, ',');
		keys = new ssi_char_t *[dim];
		ssi_split_string(n, keys, _options.keys, ',');
		for (ssi_size_t i = n; i < dim; i++) {			
			keys[i] = ssi_strcpy(keys[i%n]);
		}
	}

	ssi_char_t str[512];
	if (keys) {
		for (ssi_size_t i = 0; i < dim; i++) {
			dst++->id = Factory::AddString(keys[i]);
		}
	} else {
		for (ssi_size_t i = 0; i < dim; i++) {
			ssi_sprint(str, "dim#%u", i);
			dst++->id = Factory::AddString(str);
		}
	}

	if (keys) {
		for (ssi_size_t i = 0; i < dim; i++) {
			delete[] keys[i];
		}
		delete[] keys; keys = 0;
	}
}
コード例 #6
0
void SocketEventReader::run () {

	int result = 0;
	
	if (_options.osc) {
		result = _socket_osc->recv (this, _options.timeout); 
	} else {
		result = _socket->recv (_buffer, _options.size, _options.timeout); 
		if (result > 0) {
			// send event
			if (_elistener) {
				_event_string.time = _frame->GetElapsedTimeMs ();
				_event_string.dur = 0;
				ssi_event_adjust (_event_string, ssi_strlen (_buffer) + 1);
				strcpy (_event_string.ptr, _buffer);
				_elistener->update (_event_string);
			}	
		}
	}

	SSI_DBG (SSI_LOG_LEVEL_DEBUG, "received %d bytes", result);
};
コード例 #7
0
ファイル: ClockEventSender.cpp プロジェクト: hcmlab/mobileSSI
bool ClockEventSender::setEventListener (IEventListener *listener) {

	if (_options.empty) {
		ssi_event_init(_event, SSI_ETYPE_EMPTY);
	}
	else {
		ssi_event_init(_event, SSI_ETYPE_STRING);
		ssi_event_adjust(_event, ssi_strlen(_options.string) + 1);
		ssi_strcpy(_event.ptr, _options.string);
	}

	_listener = listener;
	
	if (_options.address[0] != '\0') {

		SSI_OPTIONLIST_SET_ADDRESS(_options.address, _event_address, _event);

	}
	else {

		ssi_wrn("use of deprecated option 'sname' and 'ename', use 'address' instead")

		_event.sender_id = Factory::AddString(_options.sname);
		if (_event.sender_id == SSI_FACTORY_STRINGS_INVALID_ID) {
			return false;
		}
		_event.event_id = Factory::AddString(_options.ename);
		if (_event.event_id == SSI_FACTORY_STRINGS_INVALID_ID) {
			return false;
		}

		_event_address.setSender(_options.sname);
		_event_address.setEvents(_options.ename);
	}

	return true;
}
コード例 #8
0
ファイル: Tensorflow.cpp プロジェクト: hcmlab/mobileSSI
    void Tensorflow::EventHandler::handle(ssi_time_t time,
                                          ssi_time_t duration,
                                          ssi_size_t n_classes,
                                          ssi_size_t class_index,
                                          const ssi_real_t *probs,
                                          ssi_char_t *const *class_names,
                                          ssi_size_t n_metas,
                                          ssi_real_t *metas) {

        if (_event.tot == 0) {
            _class_ids = new ssi_size_t[n_classes];
            for (ssi_size_t i = 0; i < n_classes; i++) {
                _class_ids[i] = Factory::AddString(class_names[i]);
            }
            if (_winner_only) {
                ssi_event_adjust(_event, sizeof(ssi_event_map_t));
            } else if (_select) {
                ssi_event_adjust(_event, _n_select * sizeof(ssi_event_map_t));

                // check if indices are valid
                for (ssi_size_t i = 0; i < _n_select; i++) {
                    if (_select[i] < 0) {
                        ssi_wrn_static("index '%d' is negative and will be replaced by 0", _select[i]);
                        _select[i] = 0;
                    } else if (_select[i] >= n_classes) {
                        ssi_wrn_static("index '%d' out of range and will be replaced by 0", _select[i]);
                        _select[i] = 0;
                    }
                }

            } else {
                ssi_event_adjust(_event, n_classes * sizeof(ssi_event_map_t));
            }
        }

        ssi_event_map_t *ptr = ssi_pcast(ssi_event_map_t, _event.ptr);
        if (_winner_only) {
            ssi_real_t max_val = probs[0];
            ssi_size_t max_ind = 0;
            for (ssi_size_t i = 1; i < n_classes; i++) {
                if (probs[i] > max_val) {
                    max_val = probs[i];
                    max_ind = i;
                }
            }
            ptr[0].id = _class_ids[max_ind];
            ptr[0].value = probs[max_ind];
        } else if (_select) {
            for (ssi_size_t i = 0; i < _n_select; i++) {
                ptr[i].value = probs[_select[i]];
                ptr[i].id = _class_ids[_select[i]];
            }
        } else {
            for (ssi_size_t i = 0; i < n_classes; i++) {
                ptr[i].value = probs[i];
                ptr[i].id = _class_ids[i];
            }
        }
        _event.time = ssi_cast(ssi_size_t, time * 1000 + 0.5);
        _event.dur = ssi_cast(ssi_size_t, duration * 1000 + 0.5);
        _listener->update(_event);
    };