コード例 #1
0
ファイル: MvgConDiv.cpp プロジェクト: hihiy/IntelliVoice
void MvgConDiv::transform_flush (ssi_stream_t &stream_in,
	ssi_stream_t &stream_out,
	ssi_size_t xtra_stream_in_num ,
	ssi_stream_t xtra_stream_in[]) {

	_mvgs->transform_flush (stream_in, _mvgs_tmp);
	_mvgl->transform_flush (stream_in, _mvgl_tmp);
	ssi_stream_destroy (_mvgs_tmp);
	ssi_stream_destroy (_mvgl_tmp);
	delete _mvgs; _mvgs = 0;
	delete _mvgl; _mvgl = 0;
}
コード例 #2
0
ファイル: PaintData.cpp プロジェクト: hihiy/IntelliVoice
PaintData::~PaintData() {

	delete _colormap;
	delete _pen;	
	delete _brush;
	delete _font;
	delete _font_pen;
	delete _font_brush;
	delete _painter;

	ssi_stream_destroy(_stream);
	ssi_stream_destroy(_resample);
	delete[] _mins;
	delete[] _maxs;
}
コード例 #3
0
ファイル: Chain.cpp プロジェクト: hihiy/IntelliVoice
void Chain::transform_flush (ssi_stream_t &stream_in,
	ssi_stream_t &stream_out,
	ssi_size_t xtra_stream_in_num,
	ssi_stream_t xtra_stream_in[]) {

	// destroy arrays and flush transformer
	_stream_tmp[0] = &stream_in; // first is always the input stream
	_stream_tmp[_stream_tmp_num-1] = &stream_out; // last is always the output stream
	for (ssi_size_t i = 0; i < _n_filters; i++) {
		_filters[i]->transform_flush (*_stream_tmp[i], *_stream_tmp[i+1]);
	}
	if (_n_features > 0) {
		for (ssi_size_t i = 0; i < _n_features; i++) {
			_stream_tmp[_stream_tmp_num-1]->dim = _feature_dim_out[i];				
			_features[i]->transform_flush (*_stream_tmp[_stream_tmp_num-2], *_stream_tmp[_stream_tmp_num-1]);	
		}
		_stream_tmp[_stream_tmp_num-1]->dim = _feature_dim_out_tot;	
	}
	for (ssi_size_t i = 1; i < _stream_tmp_num - 1; i++) {
		ssi_stream_destroy (*_stream_tmp[i]);
		delete _stream_tmp[i];
	}

	delete[] _stream_tmp; _stream_tmp = 0;
	delete[] _feature_dim_out; _feature_dim_out = 0;
}
コード例 #4
0
ファイル: AudioActivity.cpp プロジェクト: hihiy/IntelliVoice
void AudioActivity::transform_flush (ssi_stream_t &stream_in,
	ssi_stream_t &stream_out,
	ssi_size_t xtra_stream_in_num,
	ssi_stream_t xtra_stream_in[]) {

	

	if (_convert_input) {
		_feature->transform_flush (_stream_convert, _stream_feat);
		delete _convert; _convert = 0;
		ssi_stream_destroy (_stream_convert);
	} else {
		_feature->transform_flush (stream_in, _stream_feat);
	}

	delete _feature; _feature = 0;
	ssi_stream_destroy (_stream_feat);
}
コード例 #5
0
ファイル: Transformer.cpp プロジェクト: hcmlab/mobileSSI
Transformer::~Transformer () {

	if (_xtra_stream_num > 0) {
		for (ssi_size_t i = 0; i < _xtra_stream_num; i++) {
			ssi_stream_destroy (_xtra_streams[i]);
		}		
	}
	delete[] _xtra_streams;
	delete[] _xtra_stream_ids;
}
コード例 #6
0
ファイル: FileReader.cpp プロジェクト: hcmlab/mobileSSI
bool FileReader::disconnect () {

	ssi_msg(SSI_LOG_LEVEL_BASIC, "stop reading from '%s'", _options.path);

	delete _timer; _timer = 0;
	ssi_stream_destroy(_stream);

	if (!_file_stream_in.close())
	{
		ssi_err("could not close stream '%s'", _options.path);
	}

	return true;
}
コード例 #7
0
ファイル: FeatureFusion.cpp プロジェクト: hcmlab/mobileSSI
bool FeatureFusion::forward (ssi_size_t n_models,
	IModel **models,
	ssi_size_t n_streams,
	ssi_stream_t *streams[],
	ssi_size_t n_probs,
	ssi_real_t *probs) {

	if (!isTrained ()) {
		ssi_wrn ("not trained");
		return false;
	}

	if (n_streams != _n_streams) {
		ssi_wrn ("#streams (%u) differs from #streams (%u)", n_streams, _n_streams);
		return false;
	}

	if (_n_models != n_models) {
		ssi_wrn ("#models (%u) differs from #models (%u)", n_models, _n_models);
		return false;
	}

	if (_n_classes != n_probs) {
		ssi_wrn ("#probs (%u) differs from #classes (%u)", n_probs ,_n_classes);
		return false;
	}

	//No Missing Data:
	if(!_handle_md){

		IModel *model = 0;
		ssi_stream_t *stream = 0;

		model = models[0];

		ssi_stream_t *fusion_stream = new ssi_stream_t;

		ssi_size_t fusion_stream_dim = 0;
		for(ssi_size_t nstrm = 0; nstrm < _n_streams; nstrm++){
			fusion_stream_dim += streams[nstrm]->dim;
		}

		//create aligned streams
		ssi_stream_init (*fusion_stream, 1, fusion_stream_dim, streams[0]->byte, streams[0]->type, streams[0]->sr);
		
		ssi_byte_t *ptr = fusion_stream->ptr;
		for(ssi_size_t i = 0; i < _n_streams; i++){
			memcpy(ptr, streams[i]->ptr, ( streams[i]->byte * streams[i]->dim ) );
			ptr += ( streams[i]->byte * streams[i]->dim );
		}

		//clear probs
		for (ssi_size_t num_probs = 0; num_probs < n_probs; num_probs++){
			probs[num_probs] = 0.0f;
		}

		model->forward (*fusion_stream, n_probs, probs);

		ssi_stream_destroy(*fusion_stream);
		delete fusion_stream;
		fusion_stream = 0;

		///// is there a draw ? ///
		ssi_size_t max_ind = 0;
		ssi_size_t max_ind_draw = 0;
		ssi_real_t max_val = probs[0];
		bool draw = false;

		for (ssi_size_t i = 1; i < n_probs; i++) {
			if (probs[i] >= max_val) {
				if(probs[i] == max_val){
					draw = true;
					max_ind_draw = i;
				}
				max_val = probs[i];
				max_ind = i;
			}
		}
		
		if(draw && (max_ind == max_ind_draw)){
			return false;
		}else{
			return true;
		}

	}//No Missing Data


	//Missing Data:
	bool found_data = false;

	IModel *model = 0;
	ssi_stream_t *stream = 0;

	//calculate actual models
	ssi_size_t miss_counter = 0;
	ssi_size_t *available = new ssi_size_t[n_models];
	available[0] = 1;
	for (ssi_size_t n_model = 1; n_model < _n_models; n_model++) {
		stream = streams[n_model - 1];
		if (stream->num > 0) {
			found_data = true;
			available[n_model] = 1;
		}
		else{
			miss_counter++;
			available[n_model] = 0;
			if(available[0] == 1){
				available[0] = 0;
				miss_counter++;
			}
		}
	}
	ssi_size_t counter = 0;
	ssi_size_t *models_actual = new ssi_size_t[(n_models - miss_counter)];
	for (ssi_size_t n_model = 0; n_model < n_models; n_model++) {
		if(available[n_model] == 1){
			models_actual[counter] = n_model;
			counter++;
		}
	}

	if (ssi_log_level >= SSI_LOG_LEVEL_DEBUG) {
		ssi_print("\n\n-----------------------------\navailable models:\n");
		for(ssi_size_t i = 0; i < (n_models - miss_counter); i++){
			ssi_print("%d ", models_actual[i]);
		}ssi_print("\n");
	}

	if(found_data){

		if(available[0] == 1){
			//feature fusion possible
			if (ssi_log_level >= SSI_LOG_LEVEL_DEBUG) {
				ssi_print("\nfeature fusion possible\n");
			}

			model = models[0];
			stream = 0;
			ssi_stream_t *fusion_stream = new ssi_stream_t;

			ssi_size_t fusion_stream_dim = 0;
			for(ssi_size_t nstrm = 0; nstrm < _n_streams; nstrm++){
				fusion_stream_dim += streams[nstrm]->dim;
			}

			//create aligned streams
			ssi_stream_init (*fusion_stream, 1, fusion_stream_dim, streams[0]->byte, streams[0]->type, streams[0]->sr);
			
			ssi_byte_t *ptr = fusion_stream->ptr;
			for(ssi_size_t i = 0; i < _n_streams; i++){
				memcpy(ptr, streams[i]->ptr, ( streams[i]->byte * streams[i]->dim ) );
				ptr += ( streams[i]->byte * streams[i]->dim );
			}

			//clear probs
			for (ssi_size_t num_probs = 0; num_probs < n_probs; num_probs++){
				probs[num_probs] = 0.0f;
			}

			model->forward (*fusion_stream, n_probs, probs);

			ssi_stream_destroy(*fusion_stream);
			delete fusion_stream;
			fusion_stream = 0;

			if(available){
				delete [] available;
				available = 0;
			}
			if(models_actual){
				delete [] models_actual;
				models_actual = 0;
			}

			return true;

		}else{
			//feature fusion not possible, choose filler ...
			if (ssi_log_level >= SSI_LOG_LEVEL_DEBUG) {
				ssi_print("\nfeature fusion not possible: filler needed\n");
				ssi_print("\nfiller:\n");
				for (ssi_size_t n_model = 0; n_model < _n_streams; n_model++) {
					ssi_print("%d ", _filler[n_model]);
				}ssi_print("\n");
			}

			bool model_available = false;
			ssi_size_t model_id = 0;
			for(ssi_size_t h = 0; h < _n_streams; h++){
				model_id = _filler[h];
				for(ssi_size_t i = 0; i < (n_models - miss_counter); i++){
					if(model_id == models_actual[i]){
						model_available = true;
						break;
					}
				}
				if(model_available == true){
					model = models[model_id];
					if (ssi_log_level >= SSI_LOG_LEVEL_DEBUG) {
						ssi_print("\nSelected Model: %d", model_id);
					}
					break;
				}
			}

			model->forward(*streams[model_id - 1], n_probs, probs);

		}

	}

	if(available){
		delete [] available;
		available = 0;
	}
	if(models_actual){
		delete [] models_actual;
		models_actual = 0;
	}
	

	/// is there a draw ? ///
	ssi_size_t max_ind = 0;
	ssi_size_t max_ind_draw = 0;
	ssi_real_t max_val = probs[0];
	bool draw = false;

	for (ssi_size_t i = 1; i < n_probs; i++) {
		if (probs[i] >= max_val) {
			if(probs[i] == max_val){
				draw = true;
				max_ind_draw = i;
			}
			max_val = probs[i];
			max_ind = i;
		}
	}
	
	if(draw && (max_ind == max_ind_draw)){
		return false;
	}else{
		return found_data;
	}
}
コード例 #8
0
ファイル: ISMergeDim.cpp プロジェクト: hcmlab/mobileSSI
ISMergeDim::~ISMergeDim () {

	ssi_stream_destroy (_stream);
	delete[] _sample_out.streams;

}	
コード例 #9
0
ファイル: PaintData.cpp プロジェクト: hihiy/IntelliVoice
void PaintData::paint(ICanvas *canvas, ssi_handle_t context, ssi_rect_t area) {

	Lock lock(_mutex);

	if (_stream.num == 0) {
		return;
	}

	_painter->begin(context, area);

	if (_stream_has_changed) {

		if (_stream.dim != _dim) {
			ssi_stream_destroy(_resample);
			ssi_stream_init(_resample, 0, _stream.dim, _stream.byte, _stream.type, _stream.sr, _stream.time);
			_dim = _stream.dim;
			delete[] _mins; delete[] _maxs;
			_mins = new ssi_real_t[_dim];
			_maxs = new ssi_real_t[_dim];
		}

		switch (_type) {
		case TYPE::SIGNAL:
		case TYPE::AUDIO:
		case TYPE::IMAGE: {

			ssi_stream_adjust(_resample, ssi_cast(ssi_size_t, area.width));
			ssi_resample(_stream.num, _resample.num, _stream.dim, ssi_pcast(ssi_real_t, _stream.ptr), ssi_pcast(ssi_real_t, _resample.ptr), _type == TYPE::AUDIO ? ssi_max : ssi_mean);			

			break;
		}

		case TYPE::PATH:
		case TYPE::SCATTER: {

			ssi_stream_adjust(_resample, _stream.num);
			memcpy(_resample.ptr, _stream.ptr, _stream.tot);						

			break;
		}
		}

		if (!_fix_limits) {
			if (_reset_limits) {
				ssi_minmax(_resample.num, _resample.dim, ssi_pcast(ssi_real_t, _resample.ptr), _mins, _maxs);
				_reset_limits = false;
			}
			else {
				ssi_real_t *mins = new ssi_real_t[_dim];
				ssi_real_t *maxs = new ssi_real_t[_dim];
				ssi_minmax(_resample.num, _resample.dim, ssi_pcast(ssi_real_t, _resample.ptr), mins, maxs);
				for (ssi_size_t i = 0; i < _dim; i++) {
					_mins[i] = min(_mins[i], mins[i]);
					_maxs[i] = max(_maxs[i], maxs[i]);
				}
				delete[] mins;
				delete[] maxs;
			}
			if (_type == TYPE::AUDIO) {
				for (ssi_size_t i = 0; i < _dim; i++) {
					_maxs[i] = abs(_maxs[i]);
					_mins[i] = -_maxs[i];
				}
			}
		}
		else {
			for (ssi_size_t i = 0; i < _dim; i++) {
				_mins[i] = _fix_min;
				_maxs[i] = _fix_max;
			}
		}

		ssi_norm(_resample.num, _resample.dim, ssi_pcast(ssi_real_t, _resample.ptr), _mins, _maxs);

		_stream_has_changed = false;
	}

	if (_back_toggle) {
		_painter->fill(*_back_brush, area);
	}

	switch (_type) {
	case TYPE::SIGNAL:
		GraphicTools::PaintAsSignal(_resample, *_painter, *_pen);
		break;
	case TYPE::AUDIO:
		GraphicTools::PaintAsAudio(_resample, *_painter, *_pen);
		break;
	case TYPE::PATH:
		GraphicTools::PaintAsPath(_resample, _indx, _indy, *_painter, *_pen);
		break;
	case TYPE::SCATTER:
		GraphicTools::PaintAsScatter(_resample, _indx, _indy, *_painter, *_pen, *_brush, _point_size);
		break;
	case TYPE::IMAGE:
		GraphicTools::PaintAsImage(_resample, *_painter, *_colormap);
		break;
	}

	switch (_type) {
	case TYPE::SIGNAL:
	case TYPE::AUDIO:
		GraphicTools::PaintAxis(_stream.dim, _stream.time, _stream.time + (_stream.sr > 0 ? _stream.num / _stream.sr : 0), _mins, _maxs, *_painter, *_font, *_font_pen, *_font_brush, _precision);
		break;
	case TYPE::PATH:
	case TYPE::SCATTER:
	case TYPE::IMAGE:
		ssi_real_t minval, maxval, tmp;
		ssi_minmax(_dim, 1, _mins, &minval, &tmp);
		ssi_minmax(_dim, 1, _maxs, &tmp, &maxval);
		GraphicTools::PaintAxis(1, _stream.time, _stream.time + (_stream.sr > 0 ? _stream.num / _stream.sr : 0), &minval, &maxval, *_painter, *_font, *_font_pen, *_font_brush, _precision);
		break;
	}

	_painter->end();
}