Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/BizHawk.Emulation.Common/Sound/Utilities/Waves.cs
2 views
namespace BizHawk.Emulation.Common
{
	public static class Waves
	{
		public static short[] SquareWave;
		public static short[] ImperfectSquareWave;
		public static short[] NoiseWave;
		public static short[] PeriodicWave16;

		public static void InitWaves()
		{
			SquareWave = new short[] 
			{
				-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
				32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767
			};

			ImperfectSquareWave = new short[]
			{
				-32768,-30145,-27852,-26213,-24902,-23592,-22282,-20971,-19988,-19005,-18350,-17694,-17366,-17039,-16711,-16711,
				32767, 30145, 27852, 26213, 24902, 23592, 22282, 20971, 19988, 19005, 18350, 17694, 17366, 17039, 16711, 16711
			};

			PeriodicWave16 = new short[] { 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

			NoiseWave = new short[0x1000];
			var rnd = new System.Random(unchecked((int)0xDEADBEEF));
			for (int i = 0; i < NoiseWave.Length; i++)
			{
				int r = rnd.Next();
				if ((r & 1) > 0)
					NoiseWave[i] = short.MaxValue;
			}

			/*TriangleWave = new short[512];
			for (int i = 0; i < 256; i++)
				TriangleWave[i] = (short)((ushort.MaxValue*i/256)-short.MinValue);
			for (int i = 0; i < 256; i++)
				TriangleWave[256+i] = TriangleWave[256-i];
			TriangleWave[256] = short.MaxValue;

			SawWave = new short[512];
			for (int i = 0; i < 512; i++)
				SawWave[i] = (short)((ushort.MaxValue * i / 512) - short.MinValue);

			SineWave = new short[1024];
			for (int i=0; i<1024; i++)
			{
				SineWave[i] = (short) (Math.Sin(i*Math.PI*2/1024d)*32767);
			}*/
		}
	}
}