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


C++ WaveFile::GetOOR方法代码示例

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


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

示例1: main


//.........这里部分代码省略.........
			}
			break;
		case 2:
			if (--susTimeCR <= 0)
				envState = 3;
			break;
		case 3:
			if ((volume -= decIncrCR) <= 0)
			{
				volume = 0;
				envState = 4;
			}
			break;
		}
		wf.Output1(volume * volume * sinv(phase)); // convex curve
		//wf.Output1(volume * sinv(phase)); // linear
		if ((phase += phaseIncr) >= twoPI)
			phase -= twoPI;
	}
	for (n = 0; n < silence; n++)
		wf.Output1(0);

	/////////////////////////////////////////////////
	// Method 5 - constant rate ADSR, transformed
	/////////////////////////////////////////////////

	float envTblLen = 960; // 96 dB range
	float envTblNdx = 0;
	float atkTblCR[960];
	float decTblCR[960];
	atkTblCR[0] = 0.0;
	decTblCR[0] = 0.0;
	for (n = 1; n < envTblLen; n++)
	{
		volume = pow(10, (double)(959 - n) / -200.0);
		atkTblCR[n] = volume;
		decTblCR[n] = volume;
	}

	sustainAmpCR = 0.5;
	atkIncrCR = 960.0 / (atkTimeCR * synthParams.sampleRate);
	decIncrCR = 960.0 / (decTimeCR * synthParams.sampleRate);
	relIncrCR = 960.0 / (relTimeCR * synthParams.sampleRate);

	susTimeCR = totalSamples - ((relTimeCR * synthParams.sampleRate) * sustainAmpCR);
	phase = 0;
	volume = 0;
	envState = 0;
	for (n = 0; n < totalSamples; n++)
	{
		switch (envState)
		{
		case 0:
			if ((envTblNdx += atkIncrCR) >= envTblLen)
			{
				envTblNdx = envTblLen-1;
				envState = 1;
			}
			volume = atkTblCR[(int)envTblNdx];
			break;
		case 1:
			if ((envTblNdx -= decIncrCR) < 0)
				envTblNdx = 0;
			volume = decTblCR[(int)envTblNdx];
			if (volume <= sustainAmpCR)
			{
				volume = sustainAmpCR;
				envState = 2;
				susTimeCR = totalSamples - n - ((relTimeCR * synthParams.sampleRate) * sustainAmpCR);
			}
			break;
		case 2:
			if (--susTimeCR <= 0)
				envState = 3;
			break;
		case 3:
			if ((envTblNdx -= decIncrCR) <= 0)
			{
				envTblNdx = 0;
				envState = 4;
			}
			volume = decTblCR[(int)envTblNdx];
			break;
		}
		wf.Output1(volume * sinv(phase));
		if ((phase += phaseIncr) >= twoPI)
			phase -= twoPI;
	}

	for (n = 0; n < silence; n++)
		wf.Output1(0);

	wf.CloseWaveFile();

	int oor = wf.GetOOR();
	if (oor)
		printf("%d Samples out of range...\n", oor);

	return 0;
}
开发者ID:travisgoodspeed,项目名称:basicsynth,代码行数:101,代码来源:main.cpp


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