⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synfilt.cpp

📁 < VC++视频音频开发>> 这本书的源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
					(vp[11] * dp[9]) +
					(vp[10] * dp[10]) +
					(vp[9] * dp[11]) +
					(vp[8] * dp[12]) +
					(vp[7] * dp[13]) +
					(vp[6] * dp[14]) +
					(vp[5] * dp[15])
					) /* * scalefactor */);

				buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 4:

		case 5: {
			// fat chance of having this loop unroll
			for( register const real *dp = d;
					 dp < d + (32 * 16);
					 dp += 16, vp += 16 ) {
				register real pcm_sample;

				pcm_sample = (real)(((vp[5] * dp[0]) +
					(vp[4] * dp[1]) +
					(vp[3] * dp[2]) +
					(vp[2] * dp[3]) +
					(vp[1] * dp[4]) +
					(vp[0] * dp[5]) +
					(vp[15] * dp[6]) +
					(vp[14] * dp[7]) +
					(vp[13] * dp[8]) +
					(vp[12] * dp[9]) +
					(vp[11] * dp[10]) +
					(vp[10] * dp[11]) +
					(vp[9] * dp[12]) +
					(vp[8] * dp[13]) +
					(vp[7] * dp[14]) +
					(vp[6] * dp[15])
					) /* * scalefactor */);

				buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 5:

		case 6: {
			// fat chance of having this loop unroll
			for( register const real *dp = d;
					 dp < d + (32 * 16);
					 dp += 16, vp += 16 ) {
				register real pcm_sample;

				pcm_sample = (real)(((vp[6] * dp[0]) +
					(vp[5] * dp[1]) +
					(vp[4] * dp[2]) +
					(vp[3] * dp[3]) +
					(vp[2] * dp[4]) +
					(vp[1] * dp[5]) +
					(vp[0] * dp[6]) +
					(vp[15] * dp[7]) +
					(vp[14] * dp[8]) +
					(vp[13] * dp[9]) +
					(vp[12] * dp[10]) +
					(vp[11] * dp[11]) +
					(vp[10] * dp[12]) +
					(vp[9] * dp[13]) +
					(vp[8] * dp[14]) +
					(vp[7] * dp[15])
					) /* * scalefactor */);

            buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 6:

		case 7: {
			// fat chance of having this loop unroll
			for( register const real *dp = d;
					 dp < d + (32 * 16);
					 dp += 16, vp += 16 ) {
				register real pcm_sample;

				pcm_sample = (real)(((vp[7] * dp[0]) +
					(vp[6] * dp[1]) +
					(vp[5] * dp[2]) +
					(vp[4] * dp[3]) +
					(vp[3] * dp[4]) +
					(vp[2] * dp[5]) +
					(vp[1] * dp[6]) +
					(vp[0] * dp[7]) +
					(vp[15] * dp[8]) +
					(vp[14] * dp[9]) +
					(vp[13] * dp[10]) +
					(vp[12] * dp[11]) +
					(vp[11] * dp[12]) +
					(vp[10] * dp[13]) +
					(vp[9] * dp[14]) +
					(vp[8] * dp[15])
					) /* * scalefactor */);

            buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 7:

		case 8: {
			// fat chance of having this loop unroll
			for( register const real *dp = d;
					 dp < d + (32 * 16);
					 dp += 16, vp += 16 ) {
				register real pcm_sample;

				pcm_sample = (real)(((vp[8] * dp[0]) +
					(vp[7] * dp[1]) +
					(vp[6] * dp[2]) +
					(vp[5] * dp[3]) +
					(vp[4] * dp[4]) +
					(vp[3] * dp[5]) +
					(vp[2] * dp[6]) +
					(vp[1] * dp[7]) +
					(vp[0] * dp[8]) +
					(vp[15] * dp[9]) +
					(vp[14] * dp[10]) +
					(vp[13] * dp[11]) +
					(vp[12] * dp[12]) +
					(vp[11] * dp[13]) +
					(vp[10] * dp[14]) +
					(vp[9] * dp[15])
					) /* * scalefactor */);

            buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 8:

		case 9: {
			// fat chance of having this loop unroll
			for( register const real *dp = d;
					 dp < d + (32 * 16);
					 dp += 16, vp += 16 ) {
				register real pcm_sample;

				pcm_sample = (real)(((vp[9] * dp[0]) +
					(vp[8] * dp[1]) +
					(vp[7] * dp[2]) +
					(vp[6] * dp[3]) +
					(vp[5] * dp[4]) +
					(vp[4] * dp[5]) +
					(vp[3] * dp[6]) +
					(vp[2] * dp[7]) +
					(vp[1] * dp[8]) +
					(vp[0] * dp[9]) +
					(vp[15] * dp[10]) +
					(vp[14] * dp[11]) +
					(vp[13] * dp[12]) +
					(vp[12] * dp[13]) +
					(vp[11] * dp[14]) +
					(vp[10] * dp[15])
					) /* * scalefactor */);

            buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 9:

		case 10: {
			// fat chance of having this loop unroll
			for( register const real *dp = d;
					 dp < d + (32 * 16);
					 dp += 16, vp += 16 ) {
				register real pcm_sample;

				pcm_sample = (real)(((vp[10] * dp[0]) +
					(vp[9] * dp[1]) +
					(vp[8] * dp[2]) +
					(vp[7] * dp[3]) +
					(vp[6] * dp[4]) +
					(vp[5] * dp[5]) +
					(vp[4] * dp[6]) +
					(vp[3] * dp[7]) +
					(vp[2] * dp[8]) +
					(vp[1] * dp[9]) +
					(vp[0] * dp[10]) +
					(vp[15] * dp[11]) +
					(vp[14] * dp[12]) +
					(vp[13] * dp[13]) +
					(vp[12] * dp[14]) +
					(vp[11] * dp[15])
					) /* * scalefactor */);

            buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 10:

		case 11: {
			// fat chance of having this loop unroll
			for( register const real *dp = d;
					 dp < d + (32 * 16);
					 dp += 16, vp += 16 ) {
				register real pcm_sample;

				pcm_sample = (real)(((vp[11] * dp[0]) +
					(vp[10] * dp[1]) +
					(vp[9] * dp[2]) +
					(vp[8] * dp[3]) +
					(vp[7] * dp[4]) +
					(vp[6] * dp[5]) +
					(vp[5] * dp[6]) +
					(vp[4] * dp[7]) +
					(vp[3] * dp[8]) +
					(vp[2] * dp[9]) +
					(vp[1] * dp[10]) +
					(vp[0] * dp[11]) +
					(vp[15] * dp[12]) +
					(vp[14] * dp[13]) +
					(vp[13] * dp[14]) +
					(vp[12] * dp[15])
					) /* * scalefactor */);

            buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 11:

		case 12: {
			// fat chance of having this loop unroll
			for( register const real *dp = d;
					 dp < d + (32 * 16);
					 dp += 16, vp += 16 ) {
				register real pcm_sample;

				pcm_sample = (real)(((vp[12] * dp[0]) +
					(vp[11] * dp[1]) +
					(vp[10] * dp[2]) +
					(vp[9] * dp[3]) +
					(vp[8] * dp[4]) +
					(vp[7] * dp[5]) +
					(vp[6] * dp[6]) +
					(vp[5] * dp[7]) +
					(vp[4] * dp[8]) +
					(vp[3] * dp[9]) +
					(vp[2] * dp[10]) +
					(vp[1] * dp[11]) +
					(vp[0] * dp[12]) +
					(vp[15] * dp[13]) +
					(vp[14] * dp[14]) +
					(vp[13] * dp[15])
					) /* * scalefactor */);

            buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 12:

		case 13: {
			// fat chance of having this loop unroll
			for( register const real *dp = d;
					 dp < d + (32 * 16);
					 dp += 16, vp += 16 ) {
				register real pcm_sample;

				pcm_sample = (real)(((vp[13] * dp[0]) +
					(vp[12] * dp[1]) +
					(vp[11] * dp[2]) +
					(vp[10] * dp[3]) +
					(vp[9] * dp[4]) +
					(vp[8] * dp[5]) +
					(vp[7] * dp[6]) +
					(vp[6] * dp[7]) +
					(vp[5] * dp[8]) +
					(vp[4] * dp[9]) +
					(vp[3] * dp[10]) +
					(vp[2] * dp[11]) +
					(vp[1] * dp[12]) +
					(vp[0] * dp[13]) +
					(vp[15] * dp[14]) +
					(vp[14] * dp[15])
					) /* * scalefactor */);

            buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 13:

		case 14: {
			// fat chance of having this loop unroll
			for( register const real *dp = d;
					 dp < d + (32 * 16);
					 dp += 16, vp += 16 ) {
				register real pcm_sample;

				pcm_sample = (real)(((vp[14] * dp[0]) +
					(vp[13] * dp[1]) +
					(vp[12] * dp[2]) +
					(vp[11] * dp[3]) +
					(vp[10] * dp[4]) +
					(vp[9] * dp[5]) +
					(vp[8] * dp[6]) +
					(vp[7] * dp[7]) +
					(vp[6] * dp[8]) +
					(vp[5] * dp[9]) +
					(vp[4] * dp[10]) +
					(vp[3] * dp[11]) +
					(vp[2] * dp[12]) +
					(vp[1] * dp[13]) +
					(vp[0] * dp[14]) +
					(vp[15] * dp[15])
					) /* * scalefactor */);

            buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 14:

		case 15: {
			// fat chance of having this loop unroll
			for( register const real *dp = d;
					 dp < d + (32 * 16);
					 dp += 16, vp += 16 ) {
				register real pcm_sample;

				pcm_sample = (real)(((vp[15] * dp[0]) +
					(vp[14] * dp[1]) +
					(vp[13] * dp[2]) +
					(vp[12] * dp[3]) +
					(vp[11] * dp[4]) +
					(vp[10] * dp[5]) +
					(vp[9] * dp[6]) +
					(vp[8] * dp[7]) +
					(vp[7] * dp[8]) +
					(vp[6] * dp[9]) +
					(vp[5] * dp[10]) +
					(vp[4] * dp[11]) +
					(vp[3] * dp[12]) +
					(vp[2] * dp[13]) +
					(vp[1] * dp[14]) +
					(vp[0] * dp[15])
					) /* * scalefactor */);

            buffer->append (channel, (int16)pcm_sample);
			} // for
		} break; // case 15:
	}; // switch (actual_write_pos)

	//buffer->appendblock (channel, a, 32);

}

void SynthesisFilter::calculate_pcm_samples(Obuffer *buffer)
{
	compute_new_v();
	compute_pcm_samples(buffer);

   actual_write_pos = (actual_write_pos + 1) & 0xf;
	actual_v = (actual_v == v1) ? v2 : v1;

	// initialize samples[]:
  for (register real *floatp = samples + 32; floatp > samples; )
	 *--floatp = 0.0f;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -