From 09d515682bef4ad7382aea04708fa7a6b648bfba Mon Sep 17 00:00:00 2001 From: goyuken Date: Wed, 18 Dec 2013 20:37:32 +0000 Subject: [PATCH] add release envelope to super secret tone generator. make NullEmulator date aware --- .../Base Implementations/NullEmulator.cs | 55 ++++++++++++++----- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/BizHawk.Emulation.Common/Interfaces/Base Implementations/NullEmulator.cs b/BizHawk.Emulation.Common/Interfaces/Base Implementations/NullEmulator.cs index c88ee8f62f..87c638e4f7 100644 --- a/BizHawk.Emulation.Common/Interfaces/Base Implementations/NullEmulator.cs +++ b/BizHawk.Emulation.Common/Interfaces/Base Implementations/NullEmulator.cs @@ -30,6 +30,11 @@ namespace BizHawk.Emulation.Common new MemoryDomain("Main RAM", 1, MemoryDomain.Endian.Little, addr => 0, (a, v) => { }) }); memoryDomains = new MemoryDomainList(domains); + + var d = DateTime.Now; + xmas = d.Month == 12 && d.Day >= 17 && d.Day <= 27; + if (xmas) + pleg = new Pleg(); } public void ResetCounters() { @@ -43,8 +48,10 @@ namespace BizHawk.Emulation.Common for (int i = 0; i < 256 * 192; i++) { byte b = (byte)rand.Next(); - frameBuffer[i] = Colors.ARGB(b, (byte)(255 - b), 0, 255); - //frameBuffer[i] = Colors.Luminosity((byte) rand.Next()); + if (xmas) + frameBuffer[i] = Colors.ARGB(b, (byte)(255 - b), 0, 255); + else + frameBuffer[i] = Colors.Luminosity((byte) rand.Next()); } } public ControllerDefinition ControllerDefinition { get { return NullController; } } @@ -79,7 +86,8 @@ namespace BizHawk.Emulation.Common return new List>(); } - Pleg pleg = new Pleg(); + bool xmas; + Pleg pleg; short[] sampbuff = new short[735 * 2]; @@ -87,7 +95,8 @@ namespace BizHawk.Emulation.Common { nsamp = 735; samples = sampbuff; - pleg.Generate(samples); + if (xmas) + pleg.Generate(samples); } public void DiscardSamples() @@ -96,7 +105,8 @@ namespace BizHawk.Emulation.Common public void GetSamples(short[] samples) { - pleg.Generate(samples); + if (xmas) + pleg.Generate(samples); } public int MaxVolume @@ -115,6 +125,8 @@ namespace BizHawk.Emulation.Common public int MaxVolume { get; set; } } + #region super tone generator + class Pleg { string data = "H4sICI/2sVICAG91dDMudHh0AOxazdLbIAy8d6bvgkFImFsvufb936Yt3YyKvjBY5UvS6XDSxOZndyULy9H3ylLD1y8/baxHs/Lb5rNG2IT7zVKq9Msmrmf7Tb/st3qcP4ff7rdhb7itw04eXrVzsYWOTuXTt7yzl/OXvYHtDWwN+0cQi0IcqzJnxtchy9lDbo5rVODAAJvbdXWk1PiQooBiMBQPnxcOnYbhfkoCSgGUMmLxbgsoCSgdoCSgFEApwxZQArZ0uryWTp227DUBxVzDpbXLNUhlAVIGJELsZ6hb+kzACdePGqFqxPiE8QnjEualCcUZtb+mRKAUP0tlfyxHQAiIZUEsJ6gZYVXtTlVOiGWBmhk29qoS+zIQ6zQvJZ3rUHFtSwm9I++q5WJUS1At90mNAywhA/CqausZIPaPG/Jtgwhq6ug3qU5GdZMRMg+OmNR7IxfjjQwbDLXD5Q09Yta9QcfqKQfkz4Aw3fptrP0xNVfsCVu++j1S55KPJem01Yi2Bw/R27N2yxfj9znNI9TnESo1dikyT7J68aledNqi6vO1yjUI5RkQplu/mTWRf8u7LVTzZeXaaBRNeUxDTozimi8HRhuNqM/XJZOoiK5IeLJFOF5bEV3XSBGxeHiwjDSbaTXRBkhmuBUBU83T9IiK/wEPUmQOf3RIZxqxI2YVEQfDy7C3VZzJuWTqDuTkDzmW9PUT49KfXHIAlzD0s+qk6CJWx2ptFdzt9mqWsuYF6KT6aBoRAmWGK3MPMfEIkoHg2JIRPfajC39U1/K2TCeQ3SrqHi4V+YSK8VUq2hJoriKDd3So+NJYtBTUnvV4jaqq1omtCVYGsdi9RVmIyDdzqJoPNLdZ6O0q5MhzKh8LUAIFGQSIraFFA8VSg0QOagAJ+5xY1xpaBrGel2I9j2Nd63Kiv8u7tBDb5Mu7xaiYH6uovAcq0ttV5KIxvq6iMxb/HxV7CmpLPV6i6vhrGZdRHp5Us/SEPEwmD5eaXQEzycN5kIfZ5GHjDS7LediftAaxH/DN0r5riPWOLXld3xiI/unqWhgqnbCHieGzU8v9/YJK2wWrSqxHA0404bv+7yjpy1G7HwGBFAoiOIJw9PsABHVVHhBc+G8UJyAAYwv1lJASaZZAiPFbzCN6Pq7zKPq+pUWdtuy7oo9qp2YCNe59xGwe0RmWco1CWaDAfeKUA95KfXmA6+qlWKOpwieUZlTW/0NNSqH9DoAcAfmosUuYx2d5wf+MpP4ZYYbqAdBpoP5x73ExrRFHXwuKpSa+Z0R0mo+aFqsygKRrj9SerYqrZu1V3CRuqRbougPdId0qxLlfR6Psgam9PBxhT+wd+71zcKmeg05bVBWQboBkIF7Zq8xWxdXJ2iuZfILTSuil/SxIqSxDu+bX+RHOYjIxwUZTQIgeKoOuQ2Ac993tbsTdjbi7EXc34u5G3N2IuxtxdyPubsTdjbi7EXc34u5G3N2IuxtxdyPubsTdjbi7EXc34o927dAGAACEgeB27D8SEoVBleRmqGg+ORqRRqQRaUQakUakEWlEGjG1rmlEGpFGpBFpRBqRRqQRaUQakUakEWlEGpFGpBFpRBqRRqQRaUQakUakEWlEGpFGpBFpRBqRRqQRaUQakUb86OhoRBqRRqQRk+qaRqQRaUQakUakEWlEGpFGpBFvGnFXiHMetSzUwqZz46p5AAA="; @@ -138,14 +150,10 @@ namespace BizHawk.Emulation.Common void Off(int c, int n) { - for (int i = 0; i < SinMen.Count; i++) + foreach (var s in SinMen) { - var s = SinMen[i]; - if (s.c == c && s.n == n) - { - SinMen.RemoveAt(i); - break; - } + if (s.c == c && s.n == n && !s.fading) + s.fading = true; } } void On(int c, int n) @@ -161,8 +169,19 @@ namespace BizHawk.Emulation.Common short Next() { int ret = 0; - foreach (var s in SinMen) - ret += s.Next(); + for (int i = 0; i < SinMen.Count; i++) + { + var s = SinMen[i]; + if (s.Done) + { + SinMen.RemoveAt(i); + i--; + } + else + { + ret += s.Next(); + } + } if (ret > 32767) ret = 32767; if (ret < -32767) ret = -32767; return (short)ret; @@ -214,6 +233,10 @@ namespace BizHawk.Emulation.Common double freq; double amp; + public bool fading = false; + + public bool Done { get { return amp < 2.0; } } + static double GetFreq(int note) { return Math.Pow(2.0, note / 12.0) * 13.0; @@ -225,6 +248,8 @@ namespace BizHawk.Emulation.Common theta += freq * Math.PI / 22050.0; if (theta >= Math.PI * 2.0) theta -= Math.PI * 2.0; + if (fading) + amp *= 0.87; return result; } @@ -235,4 +260,6 @@ namespace BizHawk.Emulation.Common } } + + #endregion }