当前位置: 首页>>代码示例>>C++>>正文


C++ Workspace::get方法代码示例

本文整理汇总了C++中Workspace::get方法的典型用法代码示例。如果您正苦于以下问题:C++ Workspace::get方法的具体用法?C++ Workspace::get怎么用?C++ Workspace::get使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Workspace的用法示例。


在下文中一共展示了Workspace::get方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: pan

void HrtfPanner::pan(float* input, float *left_output, float *right_output) {
	//Do we need to crossfade? We do if we've moved more than the threshold and crossfading is being allowed.
	bool needsCrossfade = should_crossfade && fabs(azimuth-prev_azimuth)+fabs(elevation-prev_elevation) >= crossfade_threshold;
	if(azimuth != prev_azimuth || elevation != prev_elevation) {
		if(needsCrossfade) {
			std::swap(left_convolver, prev_left_convolver);
			std::swap(right_convolver, prev_right_convolver);
			left_convolver->reset();
			right_convolver->reset();
		}
		float* left_response_ptr = left_response_workspace.get(response_length);
		float* right_response_ptr = right_response_workspace.get(response_length);
		float leftDelay, rightDelay;
		std::tie(leftDelay, rightDelay) = hrtf->computeCoefficientsStereo(elevation, azimuth, left_response_ptr, right_response_ptr);
		left_convolver->setResponse(response_length, left_response_ptr);
		right_convolver->setResponse(response_length, right_response_ptr);
		left_delay->setDelay(leftDelay, needsCrossfade);
		right_delay->setDelay(rightDelay, needsCrossfade);
	}
	//These two convolutions always happen.
	left_convolver->convolve(input, left_output);
	right_convolver->convolve(input, right_output);
	if(needsCrossfade) {
		double delta = 1.0/block_size;
		float* crossfade_ptr = crossfade_workspace.get(block_size);
		prev_left_convolver->convolve(input, crossfade_ptr);
		for(int i = 0; i < block_size; i++) left_output[i] = (block_size-i)*delta*crossfade_ptr[i]+i*delta*left_output[i];
		prev_right_convolver->convolve(input, crossfade_ptr);
		for(int i = 0; i < block_size; i++) right_output[i] = (block_size-i)*delta*crossfade_ptr[i]+i*delta*right_output[i];
	}
	prev_azimuth = azimuth;
	prev_elevation = elevation;
	left_delay->process(block_size, left_output, left_output);
	right_delay->process(block_size, right_output, right_output);
}	
开发者ID:camlorn,项目名称:libaudioverse,代码行数:35,代码来源:hrtf_panner.cpp

示例2: sr

HrtfPanner::HrtfPanner(int _block_size, float _sr, std::shared_ptr<HrtfData> _hrtf): block_size(_block_size), sr(_sr), hrtf(_hrtf) {
	response_length = hrtf->getLength();
	float* left_response_ptr= left_response_workspace.get(response_length);
	float* right_response_ptr = right_response_workspace.get(response_length);
	hrtf->computeCoefficientsStereo(azimuth, elevation, left_response_ptr, right_response_ptr);
	left_convolver = new BlockConvolver(block_size);
	right_convolver = new BlockConvolver(block_size);
	prev_left_convolver = new BlockConvolver(block_size);
	prev_right_convolver = new BlockConvolver(block_size);
	left_convolver->setResponse(response_length, left_response_ptr);
	right_convolver->setResponse(response_length, right_response_ptr);
	left_delay = new DoppleringDelayLine(hrtf->getMaxDelay(), _sr);
	right_delay = new DoppleringDelayLine(hrtf->getMaxDelay(), _sr);
	// Move delay over 1 MS.
	left_delay->setInterpolationTime(0.003);
	right_delay->setInterpolationTime(0.003);
}
开发者ID:camlorn,项目名称:libaudioverse,代码行数:17,代码来源:hrtf_panner.cpp


注:本文中的Workspace::get方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。