Friday, June 27, 2025

TOTAL NAMESPACE TO WRITE THE THEORY FOR SANJOY NATH'S QHENOMENOLOGY REASONING FOR WAVES DSP

      public class ContainerAABB

        {

            public int StartIndex;

            public int EndIndex;

            public int LocalMaximaCount;

            public int LocalMinimaCount;

            public int MonotonicIncreasingSegments;

            public int MonotonicDecreasingSegments;

            public List<int> CrestStartIndices = new List<int>();

            public List<int> TroughStartIndices = new List<int>();

            public ContainerAABB(int start, int end, float[] samples)

            {

                StartIndex = start;

                EndIndex = end;

                AnalyzeTopology(samples); // strict scale-invariant analysis

            }

            private void AnalyzeTopology(float[] samples)

            {

                LocalMaximaCount = 0;

                LocalMinimaCount = 0;

                MonotonicIncreasingSegments = 0;

                MonotonicDecreasingSegments = 0;

                bool? increasing = null;

                for (int i = StartIndex + 1; i < EndIndex - 1; i++)

                {

                    float prev = samples[i - 1];

                    float curr = samples[i];

                    float next = samples[i + 1];

                    if (curr > prev && curr > next)

                    {

                        LocalMaximaCount++;

                        CrestStartIndices.Add(i);

                    }

                    if (curr < prev && curr < next)

                    {

                        LocalMinimaCount++;

                        TroughStartIndices.Add(i);

                    }

                    if (curr > prev)

                    {

                        if (increasing != true)

                        {

                            MonotonicIncreasingSegments++;

                            increasing = true;

                        }

                    }

                    else if (curr < prev)

                    {

                        if (increasing != false)

                        {

                            MonotonicDecreasingSegments++;

                            increasing = false;

                        }

                    }

                }

            }

            public bool IsValidTopology()

            {

                // Allow many crests and troughs in one container; minimal condition for valid container

                return (CrestStartIndices.Count >= 1 && TroughStartIndices.Count >= 1);

            }

        }// public class ContainerAABB

      public static List<string> Get100msTopologyBasedFrequencyReport___SAANS_STYLES_TOPOLOGY_ZERO_CROSSINGS_NEIGHBOURHOODS_USED(float[] samples, int sampleRate, double millisecondsPerWindow)

        {

            //THIS IS DONE THROUGH ZERO CROSSINGS NEIGHBOURHOODS TOPOLOGY SYSTEMS

            int windowSize = (int)((millisecondsPerWindow / 1000.0) * sampleRate);

            int totalWindows = samples.Length / windowSize;

            List<string> reportLines = new List<string>();

            reportLines.Add("Start_ms,End_ms,ContainerAABBCount,TopologyBasedFrequencyHz");

            for (int w = 0; w < totalWindows; w++)

            {

                int startIndex = w * windowSize;

                int endIndex = Math.Min(startIndex + windowSize, samples.Length);

                int neighbourhoods_planning_samples_countsfor___Get100msTopologyBasedFrequencyReport___SAANS_STYLES_TOPOLOGY_ZERO_CROSSINGS_NEIGHBOURHOODS_USED

                      =

                       windowSize * 3;//saan has to find deeper calculations for this topology searchings sample counts for the neighbourhoods at zero crossings

                List<ContainerAABB> containerCycles 

                    =

                    ExtractContainerAABBCycles___SAAN_STYLES_AABB_WITH_ZERO_CROSSINGS_TOPOLOGY

                    (samples, startIndex, endIndex, neighbourhoods_planning_samples_countsfor___Get100msTopologyBasedFrequencyReport___SAANS_STYLES_TOPOLOGY_ZERO_CROSSINGS_NEIGHBOURHOODS_USED);

                int containerCount = containerCycles.Count;

                float durationSec = (endIndex - startIndex) / (float)sampleRate;

                float frequency = containerCount / durationSec;

                int startMs = (int)(startIndex * 1000.0 / sampleRate);

                int endMs = (int)(endIndex * 1000.0 / sampleRate);

                reportLines.Add($"{startMs},{endMs},{containerCount},{frequency:F2}");

            }//for (int w = 0; w < totalWindows; w++)

            return reportLines;

        }// public static List<string> Get100msTopologyBasedFrequencyReport___SAANS_STYLES_TOPOLOGY_ZERO_CROSSINGS_NEIGHBOURHOODS_USED(float[] samples, int sampleRate, double millisecondsPerWindow)

       private static List<ContainerAABB> ExtractContainerAABBCycles___SAAN_STYLES_AABB_WITH_ZERO_CROSSINGS_TOPOLOGY(float[] samples, int start, int end,int NUMBER_OF_SAMPLES_NECESSARY_TO_CHECK_LOCAL_TOPOLOGY_SIMILARITY_AT_ZERO_CROSSINGS)

        {

            List<ContainerAABB> containerList = new List<ContainerAABB>();

            int lastZCP = -1;

            int lookBack = NUMBER_OF_SAMPLES_NECESSARY_TO_CHECK_LOCAL_TOPOLOGY_SIMILARITY_AT_ZERO_CROSSINGS;// 6; // how many samples before and after ZCP to check for local topology

            for (int i = start + lookBack; i < end - lookBack; i++)

            {

                bool isZCP = (samples[i - 1] >= 0 && samples[i] < 0) || (samples[i - 1] < 0 && samples[i] >= 0);

                if (!isZCP) continue;

                if (lastZCP >= 0)

                {

                    int regionStart = lastZCP;

                    int regionEnd = i;

                    ContainerAABB container = new ContainerAABB(regionStart, regionEnd, samples);

                    if (container.IsValidTopology())

                    {

                        containerList.Add(container);

                    }// if (container.IsValidTopology())

                }//if (lastZCP >= 0)

                lastZCP = i;

            }//for (int i = start + lookBack; i < end - lookBack; i++)

            return containerList;

        }// private static List<ContainerAABB> ExtractContainerAABBCycles___SAAN_STYLES_AABB_WITH_ZERO_CROSSINGS_TOPOLOGY(float[] samples, int start, int end,int NUMBER_OF_SAMPLES_NECESSARY_TO_CHECK_LOCAL_TOPOLOGY_SIMILARITY_AT_ZERO_CROSSINGS)

THE MIDI NOTES FOUND WITH NON FOURIER SANJOY NATH'S STYLES

Start_ms,End_ms,ContainerAABBCount,TopologyBasedFrequencyHz

0,300,99,330.00

300,600,115,383.33

600,900,165,550.00

900,1200,122,406.67

1200,1500,130,433.33

1500,1800,169,563.33

1800,2100,44,146.67

2100,2400,48,160.00

2400,2700,117,390.00

2700,3000,156,520.00

3000,3300,159,530.00

3300,3600,181,603.33

3600,3900,154,513.33

3900,4200,166,553.33

4200,4500,175,583.33

4500,4800,161,536.67

4800,5100,106,353.33

5100,5400,145,483.33

5400,5700,192,640.00

5700,6000,182,606.67

6000,6300,162,540.00

6300,6600,144,480.00

6600,6900,169,563.33

6900,7200,177,590.00

7200,7500,136,453.33

7500,7800,95,316.67

7800,8100,77,256.67

8100,8400,150,500.00

8400,8700,155,516.67

8700,9000,100,333.33

9000,9300,135,450.00

9300,9600,148,493.33

9600,9900,129,430.00

9900,10200,97,323.33

10200,10500,99,330.00

10500,10800,119,396.67

10800,11100,88,293.33

11100,11400,71,236.67

11400,11700,80,266.67

11700,12000,72,240.00

12000,12300,80,266.67

12300,12600,70,233.33

12600,12900,71,236.67

12900,13200,126,420.00

13200,13500,137,456.67

13500,13800,167,556.67

13800,14100,178,593.33

14100,14400,155,516.67

14400,14700,153,510.00

14700,15000,120,400.00

15000,15300,171,570.00

15300,15600,82,273.33

15600,15900,104,346.67

15900,16200,122,406.67

16200,16500,65,216.67

16500,16800,68,226.67

16800,17100,53,176.67

17100,17400,58,193.33

17400,17700,68,226.67

17700,18000,68,226.67

18000,18300,79,263.33

18300,18600,76,253.33

18600,18900,88,293.33

18900,19200,85,283.33

19200,19500,72,240.00

19500,19800,143,476.67

19800,20100,196,653.33

20100,20400,161,536.67

20400,20700,154,513.33

20700,21000,137,456.67

21000,21300,171,570.00

21300,21600,146,486.67

21600,21900,128,426.67

21900,22200,62,206.67

22200,22500,56,186.67

22500,22800,49,163.33

22800,23100,43,143.33

23100,23400,16,53.33

23400,23700,50,166.67

23700,24000,92,306.67

24000,24300,147,490.00

24300,24600,161,536.67

24600,24900,131,436.67

24900,25200,144,480.00

25200,25500,109,363.33

25500,25800,94,313.33

25800,26100,90,300.00

26100,26400,68,226.67

26400,26700,77,256.67

26700,27000,100,333.33

27000,27300,135,450.00

27300,27600,105,350.00

27600,27900,90,300.00

27900,28200,120,400.00

28200,28500,96,320.00

28500,28800,107,356.67

28800,29100,121,403.33

29100,29400,114,380.00

29400,29700,127,423.33

29700,30000,146,486.67

30000,30300,123,410.00

30300,30600,150,500.00

30600,30900,173,576.67

30900,31200,159,530.00

31200,31500,159,530.00

31500,31800,172,573.33

31800,32100,97,323.33

32100,32400,119,396.67

32400,32700,145,483.33

32700,33000,179,596.67

33000,33300,173,576.67

33300,33600,154,513.33

33600,33900,190,633.33

33900,34200,80,266.67

34200,34500,116,386.67

34500,34800,107,356.67

34800,35100,169,563.33

35100,35400,114,380.00

35400,35700,130,433.33

35700,36000,154,513.33

36000,36300,236,786.67

36300,36600,253,843.33

36600,36900,107,356.67

36900,37200,177,590.00

37200,37500,143,476.67

37500,37800,178,593.33

37800,38100,155,516.67

38100,38400,161,536.67

38400,38700,47,156.67

38700,39000,118,393.33

39000,39300,110,366.67

39300,39600,119,396.67

39600,39900,94,313.33

39900,40200,108,360.00

40200,40500,147,490.00

40500,40800,203,676.67

40800,41100,221,736.67

41100,41400,135,450.00

41400,41700,133,443.33

41700,42000,176,586.67

42000,42300,119,396.67

42300,42600,144,480.00

42600,42900,168,560.00

42900,43200,168,560.00

43200,43500,191,636.67

43500,43800,150,500.00

43800,44100,176,586.67

44100,44400,104,346.67

44400,44700,171,570.00

44700,45000,190,633.33

45000,45300,126,420.00

45300,45600,111,370.00

45600,45900,108,360.00

45900,46200,131,436.67

46200,46500,122,406.67

46500,46800,112,373.33

46800,47100,108,360.00

47100,47400,177,590.00

47400,47700,161,536.67

47700,48000,222,740.00

48000,48300,219,730.00

48300,48600,214,713.33

48600,48900,221,736.67

48900,49200,200,666.67

49200,49500,197,656.67

49500,49800,132,440.00

49800,50100,114,380.00

50100,50400,111,370.00

50400,50700,157,523.33

50700,51000,102,340.00

51000,51300,93,310.00

51300,51600,138,460.00

51600,51900,169,563.33

51900,52200,143,476.67

52200,52500,142,473.33

52500,52800,111,370.00

52800,53100,99,330.00

53100,53400,122,406.67

53400,53700,106,353.33

53700,54000,52,173.33

54000,54300,38,126.67

54300,54600,118,393.33

54600,54900,122,406.67

54900,55200,121,403.33

55200,55500,91,303.33

55500,55800,124,413.33

55800,56100,156,520.00

56100,56400,141,470.00

56400,56700,121,403.33

56700,57000,150,500.00

57000,57300,203,676.67

57300,57600,171,570.00

57600,57900,137,456.67

57900,58200,137,456.67

58200,58500,118,393.33

58500,58800,122,406.67

58800,59100,173,576.67

59100,59400,142,473.33

59400,59700,133,443.33

59700,60000,108,360.00

60000,60300,102,340.00

60300,60600,136,453.33

60600,60900,114,380.00

60900,61200,126,420.00

61200,61500,130,433.33

61500,61800,164,546.67

61800,62100,144,480.00

62100,62400,200,666.67

62400,62700,177,590.00

62700,63000,165,550.00

63000,63300,138,460.00

63300,63600,208,693.33

63600,63900,224,746.67

63900,64200,200,666.67

64200,64500,145,483.33

64500,64800,150,500.00

64800,65100,96,320.00

65100,65400,144,480.00

65400,65700,100,333.33

65700,66000,106,353.33

66000,66300,117,390.00

66300,66600,111,370.00

66600,66900,107,356.67

66900,67200,115,383.33

67200,67500,154,513.33

67500,67800,140,466.67

67800,68100,101,336.67

68100,68400,78,260.00

68400,68700,110,366.67

68700,69000,71,236.67

69000,69300,87,290.00

69300,69600,98,326.67

69600,69900,105,350.00

69900,70200,145,483.33

70200,70500,132,440.00

70500,70800,83,276.67

70800,71100,87,290.00

71100,71400,115,383.33

71400,71700,173,576.67

71700,72000,254,846.67

72000,72300,230,766.67

72300,72600,151,503.33

72600,72900,93,310.00

72900,73200,175,583.33

73200,73500,147,490.00

73500,73800,178,593.33

73800,74100,91,303.33

74100,74400,58,193.33

74400,74700,64,213.33

74700,75000,126,420.00

75000,75300,139,463.33

75300,75600,88,293.33

75600,75900,145,483.33

75900,76200,124,413.33

76200,76500,176,586.67

76500,76800,167,556.67

76800,77100,139,463.33

77100,77400,121,403.33

77400,77700,109,363.33

77700,78000,97,323.33

78000,78300,122,406.67

78300,78600,170,566.67

78600,78900,125,416.67

78900,79200,66,220.00

79200,79500,173,576.67

79500,79800,174,580.00

79800,80100,81,270.00

80100,80400,80,266.67

80400,80700,77,256.67

80700,81000,93,310.00

81000,81300,164,546.67

81300,81600,112,373.33

81600,81900,143,476.67

81900,82200,170,566.67

82200,82500,174,580.00

82500,82800,190,633.33

82800,83100,188,626.67

83100,83400,179,596.67

83400,83700,172,573.33

83700,84000,109,363.33

84000,84300,194,646.67

84300,84600,231,770.00

84600,84900,190,633.33

84900,85200,133,443.33

85200,85500,132,440.00

85500,85800,140,466.67

85800,86100,163,543.33

86100,86400,183,610.00

86400,86700,225,750.00

86700,87000,229,763.33

87000,87300,218,726.67

87300,87600,138,460.00

87600,87900,111,370.00

87900,88200,154,513.33

88200,88500,131,436.67

88500,88800,147,490.00

88800,89100,96,320.00

89100,89400,114,380.00

89400,89700,89,296.67

89700,90000,71,236.67

90000,90300,113,376.67

90300,90600,83,276.67

90600,90900,124,413.33

90900,91200,138,460.00

91200,91500,158,526.67

91500,91800,131,436.67

91800,92100,115,383.33

92100,92400,192,640.00

92400,92700,181,603.33

92700,93000,177,590.00

93000,93300,133,443.33

93300,93600,126,420.00

93600,93900,164,546.67

93900,94200,144,480.00

94200,94500,206,686.67

94500,94800,137,456.67

94800,95100,173,576.67

95100,95400,158,526.67

95400,95700,172,573.33

95700,96000,171,570.00

96000,96300,158,526.67

96300,96600,155,516.67

96600,96900,96,320.00

96900,97200,101,336.67

97200,97500,129,430.00

97500,97800,148,493.33

97800,98100,118,393.33

98100,98400,136,453.33

98400,98700,109,363.33

98700,99000,118,393.33

99000,99300,98,326.67

99300,99600,127,423.33

99600,99900,132,440.00

99900,100200,128,426.67

100200,100500,125,416.67

100500,100800,119,396.67

100800,101100,82,273.33

101100,101400,91,303.33

101400,101700,51,170.00

101700,102000,67,223.33

102000,102300,79,263.33

102300,102600,88,293.33

102600,102900,73,243.33

102900,103200,83,276.67

103200,103500,101,336.67

103500,103800,118,393.33

103800,104100,113,376.67

104100,104400,122,406.67

104400,104700,100,333.33

104700,105000,74,246.67

105000,105300,76,253.33

105300,105600,180,600.00

105600,105900,120,400.00

105900,106200,153,510.00

106200,106500,133,443.33

106500,106800,162,540.00

106800,107100,191,636.67

107100,107400,215,716.67

107400,107700,117,390.00

107700,108000,92,306.67

108000,108300,120,400.00

108300,108600,113,376.67

108600,108900,154,513.33

108900,109200,149,496.67

109200,109500,114,380.00

109500,109800,114,380.00

109800,110100,114,380.00

110100,110400,84,280.00

110400,110700,95,316.67

110700,111000,84,280.00

111000,111300,111,370.00

111300,111600,98,326.67

111600,111900,96,320.00

111900,112200,132,440.00

112200,112500,130,433.33

112500,112800,129,430.00

112800,113100,163,543.33

113100,113400,133,443.33

113400,113700,186,620.00

113700,114000,148,493.33

114000,114300,168,560.00

114300,114600,147,490.00

114600,114900,131,436.67

114900,115200,159,530.00

115200,115500,168,560.00

115500,115800,144,480.00

115800,116100,95,316.67

116100,116400,131,436.67

116400,116700,119,396.67

116700,117000,103,343.33

117000,117300,102,340.00

117300,117600,134,446.67

117600,117900,110,366.67

117900,118200,144,480.00

118200,118500,151,503.33

118500,118800,175,583.33

118800,119100,183,610.00

119100,119400,120,400.00

119400,119700,135,450.00

119700,120000,166,553.33

120000,120300,134,446.67

120300,120600,155,516.67

120600,120900,117,390.00

120900,121200,112,373.33

121200,121500,110,366.67

121500,121800,123,410.00

121800,122100,102,340.00

122100,122400,101,336.67

122400,122700,103,343.33

122700,123000,109,363.33

123000,123300,74,246.67

123300,123600,87,290.00

123600,123900,129,430.00

123900,124200,132,440.00

124200,124500,125,416.67

124500,124800,139,463.33

124800,125100,151,503.33

125100,125400,163,543.33

125400,125700,131,436.67

125700,126000,92,306.67

126000,126300,72,240.00

126300,126600,100,333.33

126600,126900,104,346.67

126900,127200,103,343.33

127200,127500,116,386.67

127500,127800,118,393.33

127800,128100,90,300.00

128100,128400,92,306.67

128400,128700,85,283.33

128700,129000,72,240.00

129000,129300,104,346.67

129300,129600,148,493.33

129600,129900,85,283.33

129900,130200,124,413.33

130200,130500,106,353.33

130500,130800,89,296.67

130800,131100,162,540.00

131100,131400,144,480.00

131400,131700,126,420.00

131700,132000,141,470.00

132000,132300,136,453.33

132300,132600,188,626.67

132600,132900,156,520.00

132900,133200,155,516.67

133200,133500,126,420.00

133500,133800,148,493.33

133800,134100,153,510.00

134100,134400,153,510.00

134400,134700,99,330.00

134700,135000,123,410.00

135000,135300,117,390.00

135300,135600,86,286.67

135600,135900,79,263.33

135900,136200,81,270.00

136200,136500,70,233.33

136500,136800,89,296.67

136800,137100,115,383.33

137100,137400,90,300.00

137400,137700,29,96.67

137700,138000,72,240.00

138000,138300,92,306.67

138300,138600,125,416.67

138600,138900,135,450.00

138900,139200,168,560.00

139200,139500,170,566.67

139500,139800,152,506.67

139800,140100,139,463.33

140100,140400,186,620.00

140400,140700,144,480.00

140700,141000,167,556.67

141000,141300,135,450.00

141300,141600,156,520.00

141600,141900,181,603.33

141900,142200,195,650.00

142200,142500,156,520.00

142500,142800,144,480.00

142800,143100,154,513.33

143100,143400,159,530.00

143400,143700,165,550.00

143700,144000,160,533.33

144000,144300,172,573.33

144300,144600,189,630.00

144600,144900,160,533.33

144900,145200,197,656.67

145200,145500,83,276.67

145500,145800,73,243.33

145800,146100,91,303.33

146100,146400,85,283.33

146400,146700,95,316.67

146700,147000,100,333.33

147000,147300,110,366.67

147300,147600,89,296.67

147600,147900,41,136.67

147900,148200,99,330.00

148200,148500,83,276.67

148500,148800,127,423.33

148800,149100,146,486.67

149100,149400,123,410.00

149400,149700,165,550.00

149700,150000,161,536.67

150000,150300,114,380.00

150300,150600,133,443.33

150600,150900,110,366.67

150900,151200,159,530.00

151200,151500,133,443.33

151500,151800,217,723.33

151800,152100,141,470.00

152100,152400,137,456.67

152400,152700,143,476.67

152700,153000,189,630.00

153000,153300,180,600.00

153300,153600,187,623.33

153600,153900,161,536.67

153900,154200,156,520.00

154200,154500,120,400.00

154500,154800,120,400.00

154800,155100,128,426.67

155100,155400,107,356.67

155400,155700,136,453.33

155700,156000,101,336.67

156000,156300,85,283.33

156300,156600,80,266.67

156600,156900,87,290.00

156900,157200,123,410.00

157200,157500,84,280.00

157500,157800,130,433.33

157800,158100,159,530.00

158100,158400,102,340.00

158400,158700,87,290.00

158700,159000,93,310.00

159000,159300,102,340.00

159300,159600,93,310.00

159600,159900,68,226.67

159900,160200,81,270.00

160200,160500,83,276.67

160500,160800,100,333.33

160800,161100,151,503.33

161100,161400,132,440.00

161400,161700,150,500.00

161700,162000,95,316.67

162000,162300,155,516.67

162300,162600,218,726.67

162600,162900,189,630.00

162900,163200,194,646.67

163200,163500,131,436.67

163500,163800,99,330.00

163800,164100,134,446.67

164100,164400,135,450.00

164400,164700,194,646.67

164700,165000,172,573.33

165000,165300,149,496.67

165300,165600,170,566.67

165600,165900,103,343.33

165900,166200,95,316.67

166200,166500,88,293.33

166500,166800,130,433.33

166800,167100,132,440.00

167100,167400,95,316.67

167400,167700,68,226.67

167700,168000,66,220.00

168000,168300,55,183.33

168300,168600,26,86.67

168600,168900,76,253.33

168900,169200,88,293.33

169200,169500,102,340.00

169500,169800,73,243.33

169800,170100,76,253.33

170100,170400,77,256.67

170400,170700,175,583.33

170700,171000,150,500.00

171000,171300,121,403.33

171300,171600,144,480.00

171600,171900,163,543.33

171900,172200,149,496.67

172200,172500,102,340.00

172500,172800,143,476.67

172800,173100,180,600.00

173100,173400,126,420.00

173400,173700,187,623.33

173700,174000,185,616.67

174000,174300,132,440.00

174300,174600,139,463.33

174600,174900,109,363.33

174900,175200,108,360.00

175200,175500,95,316.67

175500,175800,126,420.00

175800,176100,139,463.33

176100,176400,127,423.33

176400,176700,168,560.00

176700,177000,145,483.33

177000,177300,187,623.33

177300,177600,148,493.33

177600,177900,181,603.33

177900,178200,128,426.67

178200,178500,212,706.67

178500,178800,193,643.33

178800,179100,237,790.00

179100,179400,179,596.67

179400,179700,164,546.67

179700,180000,136,453.33

180000,180300,147,490.00

180300,180600,141,470.00

180600,180900,106,353.33

180900,181200,86,286.67

181200,181500,76,253.33

181500,181800,109,363.33

181800,182100,124,413.33

182100,182400,102,340.00

182400,182700,101,336.67

182700,183000,113,376.67

183000,183300,69,230.00

183300,183600,92,306.67

183600,183900,99,330.00

183900,184200,82,273.33

184200,184500,111,370.00

184500,184800,92,306.67

184800,185100,113,376.67

185100,185400,147,490.00

185400,185700,142,473.33

185700,186000,134,446.67

186000,186300,144,480.00

186300,186600,137,456.67

186600,186900,141,470.00

186900,187200,143,476.67

187200,187500,141,470.00

187500,187800,144,480.00

187800,188100,138,460.00

188100,188400,130,433.33

188400,188700,101,336.67

188700,189000,145,483.33

189000,189300,133,443.33

189300,189600,124,413.33

189600,189900,153,510.00

189900,190200,209,696.67

190200,190500,158,526.67

190500,190800,208,693.33

190800,191100,150,500.00

191100,191400,147,490.00

191400,191700,123,410.00

191700,192000,118,393.33

192000,192300,98,326.67

192300,192600,99,330.00

192600,192900,108,360.00

192900,193200,128,426.67

193200,193500,82,273.33

193500,193800,119,396.67

193800,194100,136,453.33

194100,194400,141,470.00

194400,194700,138,460.00

194700,195000,124,413.33

195000,195300,136,453.33

195300,195600,118,393.33

195600,195900,120,400.00

195900,196200,141,470.00

196200,196500,163,543.33

196500,196800,204,680.00

196800,197100,146,486.67

197100,197400,178,593.33

197400,197700,153,510.00

197700,198000,141,470.00

198000,198300,122,406.67

198300,198600,112,373.33

198600,198900,108,360.00

198900,199200,94,313.33

199200,199500,132,440.00

199500,199800,114,380.00

199800,200100,89,296.67

200100,200400,106,353.33

200400,200700,99,330.00

200700,201000,81,270.00

201000,201300,108,360.00

201300,201600,123,410.00

201600,201900,91,303.33

201900,202200,125,416.67

202200,202500,146,486.67

202500,202800,127,423.33

202800,203100,149,496.67

203100,203400,134,446.67

203400,203700,133,443.33

203700,204000,131,436.67

204000,204300,132,440.00

204300,204600,129,430.00

204600,204900,133,443.33

204900,205200,117,390.00

205200,205500,85,283.33

205500,205800,118,393.33

205800,206100,124,413.33

206100,206400,135,450.00

206400,206700,115,383.33

206700,207000,136,453.33

207000,207300,127,423.33

207300,207600,137,456.67

207600,207900,88,293.33

207900,208200,132,440.00

208200,208500,114,380.00

208500,208800,125,416.67

208800,209100,138,460.00

209100,209400,207,690.00

209400,209700,166,553.33

209700,210000,162,540.00

210000,210300,164,546.67

210300,210600,189,630.00

210600,210900,134,446.67

210900,211200,167,556.67

211200,211500,97,323.33

211500,211800,102,340.00

211800,212100,122,406.67

212100,212400,116,386.67

212400,212700,129,430.00

212700,213000,99,330.00

213000,213300,76,253.33

213300,213600,87,290.00

213600,213900,102,340.00

213900,214200,97,323.33

214200,214500,89,296.67

214500,214800,79,263.33

214800,215100,126,420.00

215100,215400,121,403.33

215400,215700,114,380.00

215700,216000,78,260.00

216000,216300,87,290.00

216300,216600,113,376.67

216600,216900,107,356.67

216900,217200,76,253.33

217200,217500,77,256.67

217500,217800,105,350.00

217800,218100,125,416.67

218100,218400,132,440.00

218400,218700,111,370.00

218700,219000,116,386.67

219000,219300,133,443.33

219300,219600,89,296.67

219600,219900,84,280.00

219900,220200,154,513.33

220200,220500,124,413.33

220500,220800,130,433.33

220800,221100,142,473.33

221100,221400,129,430.00

221400,221700,136,453.33

221700,222000,48,160.00

222000,222300,163,543.33

222300,222600,145,483.33

222600,222900,195,650.00

222900,223200,147,490.00

223200,223500,185,616.67

223500,223800,169,563.33

223800,224100,153,510.00

224100,224400,164,546.67

224400,224700,100,333.33

224700,225000,142,473.33

225000,225300,94,313.33

225300,225600,113,376.67

225600,225900,89,296.67

225900,226200,63,210.00

226200,226500,128,426.67

226500,226800,211,703.33

226800,227100,194,646.67

227100,227400,145,483.33

227400,227700,142,473.33

227700,228000,157,523.33

228000,228300,129,430.00

228300,228600,160,533.33

228600,228900,179,596.67

228900,229200,138,460.00

229200,229500,98,326.67

229500,229800,107,356.67

229800,230100,107,356.67

230100,230400,82,273.33

230400,230700,110,366.67

230700,231000,119,396.67

231000,231300,194,646.67

231300,231600,177,590.00

231600,231900,168,560.00

231900,232200,138,460.00

232200,232500,117,390.00

232500,232800,107,356.67

232800,233100,140,466.67

233100,233400,163,543.33

233400,233700,156,520.00

233700,234000,118,393.33

234000,234300,144,480.00

234300,234600,123,410.00

234600,234900,88,293.33

234900,235200,150,500.00

235200,235500,188,626.67

235500,235800,181,603.33

235800,236100,184,613.33

236100,236400,152,506.67

236400,236700,151,503.33

236700,237000,117,390.00

237000,237300,169,563.33

237300,237600,217,723.33

237600,237900,211,703.33

237900,238200,169,563.33

238200,238500,137,456.67

238500,238800,96,320.00

238800,239100,98,326.67

239100,239400,91,303.33

239400,239700,94,313.33

239700,240000,127,423.33

240000,240300,162,540.00

240300,240600,130,433.33

240600,240900,149,496.67

240900,241200,134,446.67

241200,241500,157,523.33

241500,241800,163,543.33

241800,242100,124,413.33

242100,242400,104,346.67

242400,242700,111,370.00

242700,243000,137,456.67

243000,243300,155,516.67

243300,243600,170,566.67

243600,243900,172,573.33

243900,244200,159,530.00

244200,244500,164,546.67

244500,244800,95,316.67

244800,245100,99,330.00

245100,245400,193,643.33

245400,245700,176,586.67

245700,246000,148,493.33

246000,246300,166,553.33

246300,246600,148,493.33

246600,246900,169,563.33

246900,247200,155,516.67

247200,247500,54,180.00

247500,247800,63,210.00

247800,248100,28,93.33

248100,248400,10,33.33

248400,248700,27,90.00

248700,249000,39,130.00

249000,249300,113,376.67

249300,249600,93,310.00

249600,249900,89,296.67

249900,250200,80,266.67

250200,250500,133,443.33

250500,250800,208,693.33

250800,251100,137,456.67

251100,251400,142,473.33

251400,251700,177,590.00

251700,252000,152,506.67

252000,252300,149,496.67

252300,252600,127,423.33

252600,252900,183,610.00

252900,253200,150,500.00

253200,253500,93,310.00

253500,253800,145,483.33

253800,254100,162,540.00

254100,254400,150,500.00

254400,254700,139,463.33

ON THE SAME WAVE FILES THE FOURIER HAS FOUND THE FREQUENCIES LIKE THIS

THE BELOW DATA COMES FROM THE FOURIER STYLE 

FREQ,NOTES_NUMBER,INDINOTES_LEFT,INDINOTES_RIGHT,DURATIONS_MILLIS

640,75,E5,,300

1003.33,83,C6,,300

1080,84,C#6   /   Db6,,300

1318.33,87,F6,,300

1195,86,D#6   /   Eb6,,300

880,80,A#5   /   Bb5,,300

703.33,76,F#5   /   Gb5,,300

646.67,75,E5,,300

643.33,75,E5,,300

1015,83,C6,,300

1055,83,C#6   /   Db6,,300

996.67,82,C6,,300

1188.33,86,D#6   /   Eb6,,300

1216.67,86,D#6   /   Eb6,,300

1041.67,83,C6,,300

761.67,78,G5,,300

651.67,75,E5,,300

651.67,75,E5,,300

748.33,78,G5,,300

931.67,81,B5,,300

1105,84,D6,,300

1273.33,87,E6,,300

1288.33,87,E6,,300

966.67,82,B5,,300

803.33,79,G#5   /   Ab5,,300

688.33,76,F5,,300

630,75,E5,,300

676.67,76,F5,,300

995,82,C6,,300

1015,83,C6,,300

928.33,81,A#5   /   Bb5,,300

913.33,81,A#5   /   Bb5,,300

935,81,B5,,300

836.67,79,A5,,300

873.33,80,A5,,300

966.67,82,B5,,300

1133.33,85,D6,,300

1120,85,D6,,300

1105,84,D6,,300

1125,85,D6,,300

1163.33,85,D6,,300

1193.33,86,D#6   /   Eb6,,300

1196.67,86,D#6   /   Eb6,,300

940,81,B5,,300

845,80,A5,,300

816.67,79,G#5   /   Ab5,,300

908.33,81,A#5   /   Bb5,,300

908.33,81,A#5   /   Bb5,,300

730,77,F#5   /   Gb5,,300

821.67,79,G#5   /   Ab5,,300

740,77,G5,,300

753.33,78,G5,,300

751.67,78,G5,,300

780,78,G5,,300

1201.67,86,D#6   /   Eb6,,300

1201.67,86,D#6   /   Eb6,,300

1241.67,86,E6,,300

1313.33,87,F6,,300

1200,86,D#6   /   Eb6,,300

1205,86,D#6   /   Eb6,,300

1236.67,86,D#6   /   Eb6,,300

1170,85,D#6   /   Eb6,,300

1206.67,86,D#6   /   Eb6,,300

1233.33,86,D#6   /   Eb6,,300

1288.33,87,E6,,300

1063.33,84,C#6   /   Db6,,300

961.67,82,B5,,300

1020,83,C6,,300

1161.67,85,D6,,300

891.67,81,A#5   /   Bb5,,300

740,77,G5,,300

713.33,77,F#5   /   Gb5,,300

940,81,B5,,300

1270,87,E6,,300

1256.67,86,E6,,300

1348.33,88,F6,,300

1501.67,90,G6,,300

1593.33,91,G#6   /   Ab6,,300

1396.67,88,F#6   /   Gb6,,300

1188.33,86,D#6   /   Eb6,,300

1031.67,83,C6,,300

1021.67,83,C6,,300

1061.67,84,C#6   /   Db6,,300

1056.67,83,C#6   /   Db6,,300

1135,85,D6,,300

1210,86,D#6   /   Eb6,,300

1143.33,85,D6,,300

1091.67,84,C#6   /   Db6,,300

1108.33,84,D6,,300

1065,84,C#6   /   Db6,,300

1035,83,C6,,300

1098.33,84,C#6   /   Db6,,300

1110,84,D6,,300

981.67,82,B5,,300

1046.67,83,C#6   /   Db6,,300

1095,84,C#6   /   Db6,,300

968.33,82,B5,,300

1050,83,C#6   /   Db6,,300

925,81,A#5   /   Bb5,,300

896.67,81,A#5   /   Bb5,,300

906.67,81,A#5   /   Bb5,,300

941.67,82,B5,,300

866.67,80,A5,,300

898.33,81,A#5   /   Bb5,,300

855,80,A5,,300

786.67,78,G#5   /   Ab5,,300

743.33,77,G5,,300

631.67,75,E5,,300

648.33,75,E5,,300

813.33,79,G#5   /   Ab5,,300

826.67,79,G#5   /   Ab5,,300

1020,83,C6,,300

806.67,79,G#5   /   Ab5,,300

778.33,78,G5,,300

723.33,77,F#5   /   Gb5,,300

1021.67,83,C6,,300

788.33,78,G#5   /   Ab5,,300

1061.67,84,C#6   /   Db6,,300

1170,85,D#6   /   Eb6,,300

1158.33,85,D6,,300

921.67,81,A#5   /   Bb5,,300

945,82,B5,,300

1205,86,D#6   /   Eb6,,300

993.33,82,C6,,300

841.67,80,A5,,300

896.67,81,A#5   /   Bb5,,300

716.67,77,F#5   /   Gb5,,300

846.67,80,A5,,300

1230,86,D#6   /   Eb6,,300

883.33,80,A#5   /   Bb5,,300

768.33,78,G5,,300

771.67,78,G5,,300

600,74,D#5   /   Eb5,,300

745,77,G5,,300

758.33,78,G5,,300

796.67,79,G#5   /   Ab5,,300

720,77,F#5   /   Gb5,,300

681.67,76,F5,,300

795,79,G#5   /   Ab5,,300

688.33,76,F5,,300

655,75,E5,,300

745,77,G5,,300

830,79,A5,,300

688.33,76,F5,,300

700,76,F#5   /   Gb5,,300

901.67,81,A#5   /   Bb5,,300

878.33,80,A#5   /   Bb5,,300

646.67,75,E5,,300

751.67,78,G5,,300

756.67,78,G5,,300

926.67,81,A#5   /   Bb5,,300

906.67,81,A#5   /   Bb5,,300

928.33,81,A#5   /   Bb5,,300

745,77,G5,,300

610,74,D#5   /   Eb5,,300

648.33,75,E5,,300

1008.33,83,C6,,300

626.67,74,E5,,300

618.33,74,D#5   /   Eb5,,300

763.33,78,G5,,300

925,81,A#5   /   Bb5,,300

923.33,81,A#5   /   Bb5,,300

908.33,81,A#5   /   Bb5,,300

950,82,B5,,300

970,82,B5,,300

450,69,A#4   /   Bb4,,300

463.33,69,A#4   /   Bb4,,300

700,76,F#5   /   Gb5,,300

880,80,A#5   /   Bb5,,300

908.33,81,A#5   /   Bb5,,300

911.67,81,A#5   /   Bb5,,300

891.67,81,A#5   /   Bb5,,300

856.67,80,A5,,300

771.67,78,G5,,300

726.67,77,F#5   /   Gb5,,300

641.67,75,E5,,300

495,70,C5,,300

491.67,70,B4,,300

416.67,67,A4 concert pitch,,300

596.67,74,D#5   /   Eb5,,300

598.33,74,D#5   /   Eb5,,300

576.67,73,D5,,300

1215,86,D#6   /   Eb6,,300

1290,87,E6,,300

1081.67,84,C#6   /   Db6,,300

1135,85,D6,,300

1145,85,D6,,300

925,81,A#5   /   Bb5,,300

980,82,B5,,300

1018.33,83,C6,,300

803.33,79,G#5   /   Ab5,,300

576.67,73,D5,,300

786.67,78,G#5   /   Ab5,,300

988.33,82,C6,,300

1073.33,84,C#6   /   Db6,,300

768.33,78,G5,,300

778.33,78,G5,,300

571.67,73,D5,,300

495,70,C5,,300

836.67,79,A5,,300

946.67,82,B5,,300

863.33,80,A5,,300

680,76,F5,,300

625,74,E5,,300

656.67,75,F5,,300

703.33,76,F#5   /   Gb5,,300

978.33,82,B5,,300

923.33,81,A#5   /   Bb5,,300

570,73,D5,,300

615,74,D#5   /   Eb5,,300

753.33,78,G5,,300

745,77,G5,,300

613.33,74,D#5   /   Eb5,,300

740,77,G5,,300

581.67,73,D5,,300

748.33,78,G5,,300

941.67,82,B5,,300

730,77,F#5   /   Gb5,,300

648.33,75,E5,,300

448.33,69,A#4   /   Bb4,,300

421.67,68,A4 concert pitch,,300

560,73,D5,,300

521.67,71,C#5   /   Db5,,300

618.33,74,D#5   /   Eb5,,300

505,71,C5,,300

463.33,69,A#4   /   Bb4,,300

561.67,73,D5,,300

693.33,76,F5,,300

650,75,E5,,300

468.33,69,B4,,300

220,56,A#3   /   Bb3,,300

365,65,F#4   /   Gb4,,300

383.33,66,G4,,300

775,78,G5,,300

631.67,75,E5,,300

425,68,A4 concert pitch,,300

363.33,65,F#4   /   Gb4,,300

618.33,74,D#5   /   Eb5,,300

668.33,76,F5,,300

780,78,G5,,300

750,78,G5,,300

1005,83,C6,,300

1171.67,85,D#6   /   Eb6,,300

970,82,B5,,300

1116.67,84,D6,,300

853.33,80,A5,,300

788.33,78,G#5   /   Ab5,,300

875,80,A5,,300

910,81,A#5   /   Bb5,,300

943.33,82,B5,,300

960,82,B5,,300

980,82,B5,,300

731.67,77,F#5   /   Gb5,,300

773.33,78,G5,,300

903.33,81,A#5   /   Bb5,,300

1025,83,C6,,300

1198.33,86,D#6   /   Eb6,,300

1358.33,88,F6,,300

793.33,79,G#5   /   Ab5,,300

925,81,A#5   /   Bb5,,300

1266.67,87,E6,,300

1208.33,86,D#6   /   Eb6,,300

1028.33,83,C6,,300

1383.33,88,F6,,300

970,82,B5,,300

1026.67,83,C6,,300

1078.33,84,C#6   /   Db6,,300

1270,87,E6,,300

1250,86,E6,,300

1248.33,86,E6,,300

998.33,83,C6,,300

1103.33,84,C#6   /   Db6,,300

1018.33,83,C6,,300

943.33,82,B5,,300

805,79,G#5   /   Ab5,,300

1053.33,83,C#6   /   Db6,,300

961.67,82,B5,,300

966.67,82,B5,,300

878.33,80,A#5   /   Bb5,,300

1395,88,F#6   /   Gb6,,300

1056.67,83,C#6   /   Db6,,300

636.67,75,E5,,300

750,78,G5,,300

448.33,69,A#4   /   Bb4,,300

563.33,73,D5,,300

703.33,76,F#5   /   Gb5,,300

703.33,76,F#5   /   Gb5,,300

656.67,75,F5,,300

725,77,F#5   /   Gb5,,300

743.33,77,G5,,300

711.67,77,F#5   /   Gb5,,300

726.67,77,F#5   /   Gb5,,300

631.67,75,E5,,300

883.33,80,A#5   /   Bb5,,300

1043.33,83,C#6   /   Db6,,300

978.33,82,B5,,300

1241.67,86,E6,,300

1186.67,86,D#6   /   Eb6,,300

1141.67,85,D6,,300

1076.67,84,C#6   /   Db6,,300

1060,84,C#6   /   Db6,,300

1278.33,87,E6,,300

1146.67,85,D6,,300

1048.33,83,C#6   /   Db6,,300

818.33,79,G#5   /   Ab5,,300

668.33,76,F5,,300

746.67,77,G5,,300

666.67,76,F5,,300

630,75,E5,,300

681.67,76,F5,,300

826.67,79,G#5   /   Ab5,,300

690,76,F5,,300

781.67,78,G#5   /   Ab5,,300

940,81,B5,,300

855,80,A5,,300

501.67,71,C5,,300

796.67,79,G#5   /   Ab5,,300

721.67,77,F#5   /   Gb5,,300

991.67,82,C6,,300

850,80,A5,,300

555,72,D5,,300

623.33,74,E5,,300

870,80,A5,,300

925,81,A#5   /   Bb5,,300

748.33,78,G5,,300

651.67,75,E5,,300

421.67,68,A4 concert pitch,,300

570,73,D5,,300

676.67,76,F5,,300

606.67,74,D#5   /   Eb5,,300

660,75,F5,,300

483.33,70,B4,,300

561.67,73,D5,,300

691.67,76,F5,,300

671.67,76,F5,,300

643.33,75,E5,,300

291.67,61,D4,,300

826.67,79,G#5   /   Ab5,,300

1220,86,D#6   /   Eb6,,300

1183.33,85,D#6   /   Eb6,,300

1101.67,84,C#6   /   Db6,,300

1121.67,85,D6,,300

1075,84,C#6   /   Db6,,300

1110,84,D6,,300

1130,85,D6,,300

1143.33,85,D6,,300

966.67,82,B5,,300

1056.67,83,C#6   /   Db6,,300

1138.33,85,D6,,300

1231.67,86,D#6   /   Eb6,,300

1213.33,86,D#6   /   Eb6,,300

891.67,81,A#5   /   Bb5,,300

1048.33,83,C#6   /   Db6,,300

1045,83,C#6   /   Db6,,300

925,81,A#5   /   Bb5,,300

778.33,78,G5,,300

795,79,G#5   /   Ab5,,300

805,79,G#5   /   Ab5,,300

841.67,80,A5,,300

1201.67,86,D#6   /   Eb6,,300

986.67,82,C6,,300

1001.67,83,C6,,300

815,79,G#5   /   Ab5,,300

801.67,79,G#5   /   Ab5,,300

613.33,74,D#5   /   Eb5,,300

731.67,77,F#5   /   Gb5,,300

933.33,81,B5,,300

1045,83,C#6   /   Db6,,300

1053.33,83,C#6   /   Db6,,300

1023.33,83,C6,,300

1018.33,83,C6,,300

1070,84,C#6   /   Db6,,300

1031.67,83,C6,,300

886.67,80,A#5   /   Bb5,,300

826.67,79,G#5   /   Ab5,,300

925,81,A#5   /   Bb5,,300

731.67,77,F#5   /   Gb5,,300

851.67,80,A5,,300

848.33,80,A5,,300

678.33,76,F5,,300

720,77,F#5   /   Gb5,,300

790,78,G#5   /   Ab5,,300

1110,84,D6,,300

801.67,79,G#5   /   Ab5,,300

745,77,G5,,300

655,75,E5,,300

943.33,82,B5,,300

755,78,G5,,300

770,78,G5,,300

583.33,73,D5,,300

446.67,69,A#4   /   Bb4,,300

613.33,74,D#5   /   Eb5,,300

656.67,75,F5,,300

708.33,77,F#5   /   Gb5,,300

763.33,78,G5,,300

646.67,75,E5,,300

710,77,F#5   /   Gb5,,300

1116.67,84,D6,,300

991.67,82,C6,,300

931.67,81,B5,,300

720,77,F#5   /   Gb5,,300

780,78,G5,,300

1013.33,83,C6,,300

1040,83,C6,,300

986.67,82,C6,,300

990,82,C6,,300

1041.67,83,C6,,300

981.67,82,B5,,300

1026.67,83,C6,,300

975,82,B5,,300

1001.67,83,C6,,300

1036.67,83,C6,,300

988.33,82,C6,,300

1030,83,C6,,300

951.67,82,B5,,300

888.33,80,A#5   /   Bb5,,300

946.67,82,B5,,300

955,82,B5,,300

681.67,76,F5,,300

1028.33,83,C6,,300

1086.67,84,C#6   /   Db6,,300

871.67,80,A5,,300

995,82,C6,,300

966.67,82,B5,,300

806.67,79,G#5   /   Ab5,,300

871.67,80,A5,,300

1031.67,83,C6,,300

1041.67,83,C6,,300

1095,84,C#6   /   Db6,,300

996.67,82,C6,,300

1023.33,83,C6,,300

863.33,80,A5,,300

963.33,82,B5,,300

995,82,C6,,300

1145,85,D6,,300

1063.33,84,C#6   /   Db6,,300

793.33,79,G#5   /   Ab5,,300

728.33,77,F#5   /   Gb5,,300

708.33,77,F#5   /   Gb5,,300

693.33,76,F5,,300

873.33,80,A5,,300

823.33,79,G#5   /   Ab5,,300

710,77,F#5   /   Gb5,,300

546.67,72,C#5   /   Db5,,300

766.67,78,G5,,300

968.33,82,B5,,300

613.33,74,D#5   /   Eb5,,300

560,73,D5,,300

468.33,69,B4,,300

566.67,73,D5,,300

573.33,73,D5,,300

645,75,E5,,300

636.67,75,E5,,300

740,77,G5,,300

1216.67,86,D#6   /   Eb6,,300

1226.67,86,D#6   /   Eb6,,300

1111.67,84,D6,,300

1145,85,D6,,300

1380,88,F6,,300

1253.33,86,E6,,300

1126.67,85,D6,,300

1036.67,83,C6,,300

1041.67,83,C6,,300

938.33,81,B5,,300

955,82,B5,,300

1001.67,83,C6,,300

983.33,82,B5,,300

900,81,A#5   /   Bb5,,300

1098.33,84,C#6   /   Db6,,300

983.33,82,B5,,300

1146.67,85,D6,,300

968.33,82,B5,,300

941.67,82,B5,,300

933.33,81,B5,,300

1001.67,83,C6,,300

888.33,80,A#5   /   Bb5,,300

1025,83,C6,,300

935,81,B5,,300

1006.67,83,C6,,300

1016.67,83,C6,,300

1038.33,83,C6,,300

916.67,81,A#5   /   Bb5,,300

1060,84,C#6   /   Db6,,300

733.33,77,F#5   /   Gb5,,300

520,71,C5,,300

221.67,56,A#3   /   Bb3,,300

650,75,E5,,300

1165,85,D6,,300

1155,85,D6,,300

1058.33,84,C#6   /   Db6,,300

1118.33,84,D6,,300

1205,86,D#6   /   Eb6,,300

1413.33,89,F#6   /   Gb6,,300

1215,86,D#6   /   Eb6,,300

1281.67,87,E6,,300

946.67,82,B5,,300

1001.67,83,C6,,300

1063.33,84,C#6   /   Db6,,300

915,81,A#5   /   Bb5,,300

1003.33,83,C6,,300

1041.67,83,C6,,300

646.67,75,E5,,300

878.33,80,A#5   /   Bb5,,300

795,79,G#5   /   Ab5,,300

828.33,79,A5,,300

866.67,80,A5,,300

646.67,75,E5,,300

625,74,E5,,300

903.33,81,A#5   /   Bb5,,300

870,80,A5,,300

711.67,77,F#5   /   Gb5,,300

911.67,81,A#5   /   Bb5,,300

716.67,77,F#5   /   Gb5,,300

763.33,78,G5,,300

795,79,G#5   /   Ab5,,300

718.33,77,F#5   /   Gb5,,300

660,75,F5,,300

465,69,B4,,300

553.33,72,D5,,300

496.67,70,C5,,300

550,72,C#5   /   Db5,,300

638.33,75,E5,,300

591.67,73,D#5   /   Eb5,,300

470,69,B4,,300

605,74,D#5   /   Eb5,,300

630,75,E5,,300

733.33,77,F#5   /   Gb5,,300

431.67,68,A4 concert pitch,,300

286.67,61,D4,,300

870,80,A5,,300

1136.67,85,D6,,300

1138.33,85,D6,,300

1278.33,87,E6,,300

1161.67,85,D6,,300

1215,86,D#6   /   Eb6,,300

1136.67,85,D6,,300

998.33,83,C6,,300

973.33,82,B5,,300

738.33,77,G5,,300

778.33,78,G5,,300

950,82,B5,,300

783.33,78,G#5   /   Ab5,,300

666.67,76,F5,,300

751.67,78,G5,,300

1006.67,83,C6,,300

1156.67,85,D6,,300

1093.33,84,C#6   /   Db6,,300

878.33,80,A#5   /   Bb5,,300

670,76,F5,,300

958.33,82,B5,,300

1251.67,86,E6,,300

768.33,78,G5,,300

455,69,A#4   /   Bb4,,300

551.67,72,C#5   /   Db5,,300

583.33,73,D5,,300

911.67,81,A#5   /   Bb5,,300

1010,83,C6,,300

1243.33,86,E6,,300

1385,88,F6,,300

1386.67,88,F6,,300

1443.33,89,F#6   /   Gb6,,300

1543.33,90,G6,,300

1380,88,F6,,300

1293.33,87,E6,,300

1266.67,87,E6,,300

1313.33,87,F6,,300

1311.67,87,E6,,300

1330,87,F6,,300

1000,83,C6,,300

985,82,C6,,300

905,81,A#5   /   Bb5,,300

1031.67,83,C6,,300

948.33,82,B5,,300

996.67,82,C6,,300

1196.67,86,D#6   /   Eb6,,300

986.67,82,C6,,300

835,79,A5,,300

1018.33,83,C6,,300

880,80,A#5   /   Bb5,,300

890,81,A#5   /   Bb5,,300

960,82,B5,,300

846.67,80,A5,,300

1106.67,84,D6,,300

1073.33,84,C#6   /   Db6,,300

1051.67,83,C#6   /   Db6,,300

760,78,G5,,300

695,76,F5,,300

648.33,75,E5,,300

850,80,A5,,300

881.67,80,A#5   /   Bb5,,300

911.67,81,A#5   /   Bb5,,300

538.33,72,C#5   /   Db5,,300

686.67,76,F5,,300

615,74,D#5   /   Eb5,,300

696.67,76,F#5   /   Gb5,,300

771.67,78,G5,,300

831.67,79,A5,,300

756.67,78,G5,,300

736.67,77,F#5   /   Gb5,,300

806.67,79,G#5   /   Ab5,,300

740,77,G5,,300

690,76,F5,,300

526.67,71,C#5   /   Db5,,300

480,70,B4,,300

591.67,73,D#5   /   Eb5,,300

951.67,82,B5,,300

990,82,C6,,300

1126.67,85,D6,,300

1158.33,85,D6,,300

1163.33,85,D6,,300

1361.67,88,F6,,300

1205,86,D#6   /   Eb6,,300

1120,85,D6,,300

1060,84,C#6   /   Db6,,300

1185,85,D#6   /   Eb6,,300

1091.67,84,C#6   /   Db6,,300

1108.33,84,D6,,300

1041.67,83,C6,,300

963.33,82,B5,,300

945,82,B5,,300

960,82,B5,,300

981.67,82,B5,,300

1026.67,83,C6,,300

951.67,82,B5,,300

886.67,80,A#5   /   Bb5,,300

896.67,81,A#5   /   Bb5,,300

906.67,81,A#5   /   Bb5,,300

926.67,81,A#5   /   Bb5,,300

655,75,E5,,300

698.33,76,F#5   /   Gb5,,300

716.67,77,F#5   /   Gb5,,300

781.67,78,G#5   /   Ab5,,300

1011.67,83,C6,,300

853.33,80,A5,,300

648.33,75,E5,,300

653.33,75,E5,,300

730,77,F#5   /   Gb5,,300

793.33,79,G#5   /   Ab5,,300

530,72,C#5   /   Db5,,300

746.67,77,G5,,300

1010,83,C6,,300

1068.33,84,C#6   /   Db6,,300

1025,83,C6,,300

1015,83,C6,,300

1110,84,D6,,300

961.67,82,B5,,300

1036.67,83,C6,,300

938.33,81,B5,,300

830,79,A5,,300

765,78,G5,,300

698.33,76,F#5   /   Gb5,,300

761.67,78,G5,,300

666.67,76,F5,,300

781.67,78,G#5   /   Ab5,,300

1011.67,83,C6,,300

855,80,A5,,300

573.33,73,D5,,300

646.67,75,E5,,300

730,77,F#5   /   Gb5,,300

753.33,78,G5,,300

635,75,E5,,300

681.67,76,F5,,300

1050,83,C#6   /   Db6,,300

1028.33,83,C6,,300

966.67,82,B5,,300

1115,84,D6,,300

1186.67,86,D#6   /   Eb6,,300

1153.33,85,D6,,300

1131.67,85,D6,,300

1153.33,85,D6,,300

1166.67,85,D6,,300

1131.67,85,D6,,300

1025,83,C6,,300

955,82,B5,,300

1063.33,84,C#6   /   Db6,,300

1020,83,C6,,300

945,82,B5,,300

883.33,80,A#5   /   Bb5,,300

885,80,A#5   /   Bb5,,300

1015,83,C6,,300

1028.33,83,C6,,300

1045,83,C#6   /   Db6,,300

1116.67,84,D6,,300

1043.33,83,C#6   /   Db6,,300

1021.67,83,C6,,300

951.67,82,B5,,300

1123.33,85,D6,,300

1065,84,C#6   /   Db6,,300

1043.33,83,C#6   /   Db6,,300

988.33,82,C6,,300

956.67,82,B5,,300

833.33,79,A5,,300

688.33,76,F5,,300

651.67,75,E5,,300

781.67,78,G#5   /   Ab5,,300

745,77,G5,,300

818.33,79,G#5   /   Ab5,,300

895,81,A#5   /   Bb5,,300

766.67,78,G5,,300

526.67,71,C#5   /   Db5,,300

691.67,76,F5,,300

763.33,78,G5,,300

550,72,C#5   /   Db5,,300

648.33,75,E5,,300

308.33,62,D#4   /   Eb4,,300

441.67,68,A#4   /   Bb4,,300

668.33,76,F5,,300

660,75,F5,,300

731.67,77,F#5   /   Gb5,,300

746.67,77,G5,,300

1105,84,D6,,300

1103.33,84,C#6   /   Db6,,300

995,82,C6,,300

1083.33,84,C#6   /   Db6,,300

1126.67,85,D6,,300

1241.67,86,E6,,300

980,82,B5,,300

901.67,81,A#5   /   Bb5,,300

930,81,B5,,300

1086.67,84,C#6   /   Db6,,300

821.67,79,G#5   /   Ab5,,300

1048.33,83,C#6   /   Db6,,300

916.67,81,A#5   /   Bb5,,300

1070,84,C#6   /   Db6,,300

1065,84,C#6   /   Db6,,300

1078.33,84,C#6   /   Db6,,300

1048.33,83,C#6   /   Db6,,300

1063.33,84,C#6   /   Db6,,300

990,82,C6,,300

885,80,A#5   /   Bb5,,300

795,79,G#5   /   Ab5,,300

1103.33,84,C#6   /   Db6,,300

1260,87,E6,,300

935,81,B5,,300

855,80,A5,,300

745,77,G5,,300

730,77,F#5   /   Gb5,,300

770,78,G5,,300

825,79,G#5   /   Ab5,,300

751.67,78,G5,,300

838.33,79,A5,,300

688.33,76,F5,,300

865,80,A5,,300

900,81,A#5   /   Bb5,,300

780,78,G5,,300

790,78,G#5   /   Ab5,,300

748.33,78,G5,,300

805,79,G#5   /   Ab5,,300

970,82,B5,,300

823.33,79,G#5   /   Ab5,,300

775,78,G5,,300

716.67,77,F#5   /   Gb5,,300

606.67,74,D#5   /   Eb5,,300

950,82,B5,,300

703.33,76,F#5   /   Gb5,,300

738.33,77,G5,,300

760,78,G5,,300

580,73,D5,,300

750,78,G5,,300

661.67,75,F5,,300

566.67,73,D5,,300

810,79,G#5   /   Ab5,,300

673.33,76,F5,,300

611.67,74,D#5   /   Eb5,,300

921.67,81,A#5   /   Bb5,,300

1036.67,83,C6,,300

1098.33,84,C#6   /   Db6,,300

1211.67,86,D#6   /   Eb6,,300

1076.67,84,C#6   /   Db6,,300

1111.67,84,D6,,300

766.67,78,G5,,300

1043.33,83,C#6   /   Db6,,300

985,82,C6,,300

550,72,C#5   /   Db5,,300

800,79,G#5   /   Ab5,,300

666.67,76,F5,,300

763.33,78,G5,,300

693.33,76,F5,,300

570,73,D5,,300

600,74,D#5   /   Eb5,,300

801.67,79,G#5   /   Ab5,,300

700,76,F#5   /   Gb5,,300

685,76,F5,,300

581.67,73,D5,,300

790,78,G#5   /   Ab5,,300

576.67,73,D5,,300

783.33,78,G#5   /   Ab5,,300

661.67,75,F5,,300

648.33,75,E5,,300

463.33,69,A#4   /   Bb4,,300

708.33,77,F#5   /   Gb5,,300

868.33,80,A5,,300

861.67,80,A5,,300

765,78,G5,,300

883.33,80,A#5   /   Bb5,,300

903.33,81,A#5   /   Bb5,,300

901.67,81,A#5   /   Bb5,,300

851.67,80,A5,,300

765,78,G5,,300

523.33,71,C#5   /   Db5,,300

643.33,75,E5,,300

658.33,75,F5,,300

633.33,75,E5,,300

498.33,70,C5,,300

496.67,70,C5,,300

598.33,74,D#5   /   Eb5,,300

518.33,71,C5,,300

521.67,71,C#5   /   Db5,,300

566.67,73,D5,,300

543.33,72,C#5   /   Db5,,300

723.33,77,F#5   /   Gb5,,300

811.67,79,G#5   /   Ab5,,300

1041.67,83,C6,,300

1285,87,E6,,300

928.33,81,A#5   /   Bb5,,300

718.33,77,F#5   /   Gb5,,300

670,76,F5,,300

690,76,F5,,300

851.67,80,A5,,300

1036.67,83,C6,,300

1218.33,86,D#6   /   Eb6,,300

1216.67,86,D#6   /   Eb6,,300

1146.67,85,D6,,300

811.67,79,G#5   /   Ab5,,300

641.67,75,E5,,300

350,64,F#4   /   Gb4,,300

66.67,36,C#2   /   Db2,,300

91.67,41,F#2   /   Gb2,,300

80,39,E2,,300

166.67,52,F3,,300

753.33,78,G5,,300

1221.67,86,D#6   /   Eb6,,300

1181.67,85,D#6   /   Eb6,,300

1080,84,C#6   /   Db6,,300

863.33,80,A5,,300

725,77,F#5   /   Gb5,,300

790,78,G#5   /   Ab5,,300

736.67,77,F#5   /   Gb5,,300

781.67,78,G#5   /   Ab5,,300

871.67,80,A5,,300

991.67,82,C6,,300

916.67,81,A#5   /   Bb5,,300

745,77,G5,,300

715,77,F#5   /   Gb5,,300

755,78,G5,,300

661.67,75,F5,,300

893.33,81,A#5   /   Bb5,,300

948.33,82,B5,,300

876.67,80,A#5   /   Bb5,,300

WHOLE HANDLINGS

namespace SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES_GETTING_VERTICAL_SPECTRUMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS__ANALYSISWaveform___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS

{

    //UNTIL THE BOOLEAN LOGIC FREGES LOGIC CANTORS LOGIC RUSSSELS LOGIC TYPE THEORY , SET THEORY WAS THERE IT  WAS NOT POSSIBLE TO FORMALIZE THE COMPUTATION (THEORETICAL COMPUTATIONS)  . THE BIT (NO/YES) SYSTEMS AND THE BINARY NUMBER SYSTEMS ARE THE BASIS FOR THE ELECTRONIC WAYS TO DEFINE THE CONCEPTS OF COMPUTATIONS. THEN THE PROCESSOR ARCHITECTURES WERE DEFINED DESIGNED AND CONSTRUCTED. THEN KEYBOARD ASCII SYSTEMS WERE DESIGNED (FIRST DEFINED CONCRETIZATIONS OF ABSTRACT CONCEPTS TURNED INTO THE CLARITY TO TEAM MEMBERS OF THE WHOLE PROCESS (THAT IS SOCIAL AWARENESS OF SOME FUNDAMENTAL THINGS ARE IMPORTANT TO PROCEED TO NEXT STAGES OF DEVELOPMENT AND NEXT STAGES OF CONCEPTS ARISE ONLY AFTER THE PREVIOUS BASIS CONCEPTS ARE CLEARED CONCRETIZED TO SOCIETY TO THE LEVEL OF REGULAR USES AND WHEN ALL MEMBERS IN TEAM/(SOCIETY AS TEAM) CONCRETIZED THE IDEA TO USABLE PRACTICALLY AND THEN NEXT LEVEL CONCEPTS GET PLATFORMS TO ARISE OTHERWISE NEXT LEVEL OF CONCEPTS DONT ARISE IN HUMANS MIND... THIS IS THE FUNDAMENTAL CONCRETE QUEUEDNESS REASONING BASIS THAT SANJOY NATH CONSIDERS AS THE BASIS OF PRACTICAL REASONING AND NEURAL NETWORK IS SECONDARY OR ALMOST IRRELEVANT IN THIS REASONING PROCESS... THE STRICT ORDERLINESS STRICT COMPARABILITY STRICT RECURSIVE STAGE WISE CONCRETIZATIONS STRICT QUEUEDNESS OF CONCEPT CONCRETIZATION IS THE FUNDAMENTAL BASIS FOR SANJOY NATH'S QHENOMENOLOGY REASONING SYSTEM WHERE TOPOLOGICAL CLASSIFICATION OF CONCEPTS IS ALSO NECESSARY SO NUMBERING OF THE CONCEPTS AND QUEUEDNES OF EVERY WORDS(AS C++ CLASS ALL OF WHICH ARE CONCRETE CLASS NO ABSTRACT CLASS IS ALLOWED SINCE CONCRETIZED CONCEPTS ARE USED FOR NEXT LEVEL CONCEPTS AND WHEREVER NON CONCRETE CONCEPTS ARE INTRODUCED TO USE THAT ... IT IS TO MANIPILATE THE SYSTEM SO SANJOY NATH TRIES TO DESIGN THE QHENOMENOLOGY REASONING SYSTEM SUCH THAT NO HUMAN CAN DO ANY KIND OF MANIPULATIONS WHILE DOING REASONING)  THIS REASONING SYSTEM TAKES CARE FOR ALL HUMANS WORDS AND THEN PROCEED TO NEXT WORD... UNTIL THE CONCEPT OF GOD IS CONCRETIZED NO ONE CAN CONCRETIZE THE CONCEPT CHURCH...C FOR CHURCH AND G FOR GOD SO GOD COMES FIRST CHURCH COMES AFTER THAT... WHOLE DICTIONARY NEEDS TO REVISE ITS QUEUEDNESS AS PER QHENOMENOLOGY REASONING SYSTEMS... ALL HUMANS REASONING ARE MANIPULATED REASONING SYSTEMS AND HUMANS INVOLVE EMOTIONS AND DO BIASED REASONING... EVEN NEURAL NETWORKS USE HUMANS DATA SO IT IS ALSO FLAWED...  STRICTLY DONT USE NEURAL NETWORK TO GET BIAS FREE REASONING SYSTEMS... STRICTLY FOLLOW THE COMPILER (LEXER PARSER TO COMPILER LIKE VERIFICATIONS TO ALL HUMANS SENTENCES...SANJOY NATH'S QHENOMENOLOGY REASONING SYSTEM ENFORCES ENFORCES STRICTLY ENFORCES TO SPLIT ALL HUMANS ALL KIND OF SENTENCES AS IF ALL THESE THINGS ARE CONCRETE C++ CLASSES AND THE PRECOMPILATION OF ONE CLASS IS STRICTLY IMPORTANT BEFORE DEFINING NEXT LEVEL CLASS... FOR EXAMPLE UNTIL BIT CLASS IS DEFINED , COMPUTER ARCHITECTURE SYSTEMS CLASS IS NOT POSSIBLE... UNTIL PROCESSOR ARCHITECTURES ARE NOT CONCRETIZED WITH THE CONCEPTS OF BIT STRINGING WE CANNOT CONCRETIZE THE BIT STRINGS NOR BIT STREAMS ...SO STRING OF BITS CLASS GETS CONCRETIZED... STRINGS OF BITS ... STREAMS OF BITS ARE MORE FUNDAMENTAL THAN BYTE CLASS... THEN THE CHUNK OF BITS CLASS IS CONCRETIZED ... THEN COMPILED ... THEN ONLY WE CAN THINK OF LEAST SIGNIFICANT BITS ...MOST SIGNIFICANT BITS CLASSES AND THEN ONLY NIBBLE CLASS GETS COMPILED... THEN ONLY BYTE CLASS GETS COMPILED... THEN ONLY INPUT OUTPUT STREAM CLASSES ARE ALLOWED TO COMPILE... THEN ONLY THE BYTE TO CHAR AND CHARACTER CLASS ARE POSSIBLE TO CONCRETIZED SO CHARACTER CLASS IS SUB CLASS OF BIT CLASS .. BYTE CLASS... IN THIS WAY NEXT LEVEL DATATYPES ARE INTEGER CLASS ... THEN FLOAT CLASS... THEN DOUBLE CLASS ETC.........  SO DICTIONARY (VOCABULARY ) ARE ALSO GENERATED THROUGH CONCEPT CONCRETIZATIONS...STRICT CONCEPT CONCRETIZATIONS ARE DONE STRICTKY STAGEWISE AND RECURSIVELY ONE CLASS CONCRETIZED COMPILED THEN NEXT LEVEL CLASS IS DEFINABLE... IN THIS WAY ALL HUMANS VOCABULARY ARE CONCRETIZED (C++ CLASS WRITEN ONE AFTER ANOTHER... ONE STAGE COMPILES FIRST THEN NEXT STAGE COMPILES... NO REASONING ARE ALLOWED UNTIL PREVIOUS LEVEL CLASSES(VOCABULARY WORDS ARE JUST MEANINGLESS C++ CLASSES) COMPILES STAGEWISE AND THEN WHOLE DICTIONARY (HUMANS VOCABULARY SYSTEMS FOLLOW STRICT COMPILABILITY CLOSURE PRINCIPLES AS PER SANJOY NATH'S QHENOMENOLOGY REASONING SYSTEMS)GETS COMPILED STAGEWISE 

    //ACTUALLY QHENOMENOLOGY IS DONE FOR THE STRICT QUEUEDNESS ANALYSIS STRICT STACKEDNESS ANALYSIS STRICT DEPENDENCY CHAINS ANALYSIS 

    //////    Axiom wise talks in Qhenomenology reasoning system

    //////    Proposition Example "Conscuousness" is Just an english word Its Just a cpp class name which if compiles means prooves its existence.if any class dont compile then that class dont exist yet now we will try to check can we have compilability for consciousness class?

    //////    What other classes are necessary to define consciousness class? Consciousness class constructor obviously use some instances of other classes(those other classes are more independent classes than consciousness class) untill those more independent classes are completely COMPILED we cannot create their instance variables inside constructor of consciousness class. Same system of checking necessary for all dictionary words in qhenomenology reasoning system.

    //////   Axiom All human emotions are also just cpp class name They dont have any meaning

    //////   Axiom Dictionary has no words All words are just cpp class names Some class compiles first before other classes and more independent classes compile before.more dependent classes compilable later.this compilability ordering governs dictionary order.alphabetical ordering not allowed

    //////   Axiom Whichever class is more independent compiles before and dictionary orders are created as per independent class names come before dependent class names in dictionary

    //////   Axiom Every cpp class in this system can have overridable main method and these are strict not static . None of members in these classes are allowed to have static members.All the members in every classes are non static.

    //////Axiom

    //////Humans interventions cannot enforce compilability.Compilers follow strict grammars and dont bother humans intentions but consistency from base class to current class governs strength of bias free fallacy free ambiguity free reasoning so reasoning consistency areverified.at each  stage of classdefinitions.Compilability itself is the proof of meaningfulness in Sanjoy Nath's qhenomenology reasoning system.

    //////We analyse any proposition or text using this style of reasoning when using Sanjoy Nath 's qhenomenology reasoning system

    //  AXIOMS BEFORE AXIOM 1     //ACTUALLY QHENOMENOLOGY IS DONE FOR THE STRICT QUEUEDNESS ANALYSIS STRICT STACKEDNESS ANALYSIS STRICT DEPENDENCY CHAINS ANALYSIS 

    //SANJOY NATH'S PHILOSOPHY OF QHENOMENOLOGY (QUEDNESS IN EVERY PHENOMENON TRANSFORMABLE TO STACKEDNESS AND STACKS TO QUEUE OR QUEUE TO STACK FIFO O LIFO LIFO TO FIFO RANDOMIZABLE TRANSPARENT STACKS NON REARRANGABLE QUEUES TO REARRANGABLE QUEUES , PARTITIONABLE PRIME NUMBERS(WE KNOW WE CAN DO ADDITIVE PARTITIONING OF PRIME NUMBERS ARE ALSO POSSIBLE WE KNOW  THAT ADDITIVE PARTITIONING OF ANY WHOLE NUMBER IS POSSIBLE  AND WE CAN CHOOSE ANY PARTITION FROM ONE WHOLE NUMBER AND RECOMBINE SOME OF PARTITION COMPONENTS OF WHOLE NUMBERS TO GET OTHER WHOLE NUMBERS THERE ARE CATALAN STYLES OF PARTITIONING RAMANUJAN STYLES OF PARTITIONING AND OTHER STYLES OF MULTIPLE COUNTING TO DO COMBINATORIAL CONCLUSIONS) IN WAVES SANJOY NATH DONT BREAK COMPONENTS OF WAVES AS SINUSOIDAL COMPONENTS INSTEAD SANJOY NATH REARRANGES THE TIME LINE PORTIONS TO FIND THE TIME SEGMENTS TO DO THE WAVE ANALYSIS WITH CHOSEN SUB QUEUE OBJECTS IN THE TIMELINE WHERE PHILOSOPHY OF WAVE ANALYSIS IS DONE THROUGH FINDING THE RIGHT GROUPS OF ZERO CROSSING POINTS WHICH COMPLETE CYCLES SUCH THAT CONTAINER AABB OBJECTS ARE CONSTRUCTED... THESE CONTAINER AABB OBJECTS CONTAINS SEVERAL SUBQUEUE OF CREST AABB OBJECTS AND TROUGH AABB OBJECTS)    NOW WE WILL DESCRIBE THE SPECIALIZED TOPOLOGY TERMS  SPECIALIZED GEOMETRY TERMS TO CLASSIFY THE CREST AABB OBJECTS AND TROUGH AABB OBJECTS SUCH THAT WE CAN CLASSIFY THE CREST ABB OBJECTS AND CLASSIFY THE TROUGH AABB OBJECTS SUCH THAT WE CAN IMPLEMENT THE CLASSIFICATIONS NUMBER SYSTEMS (AS WE DO IN THE  BUILDING INFORMATIONS MODELING PHILOSOPHY WHERE BUILDING BLOCKS ARE NUMBERED (AS WE DO IN TEKLA REVIT CAD ETC... SUCH THAT WE CAN PREPARE BILL OF QUANTITIES OF THE SIMILAR KIND OF CLASSIFIED OBJECTS) IN SANJOY NATH'S QHENOMENOLOGY OF WAVES ANALYSIS CREST AABB OBJECTS AND TROUGH AABB OBJECTS CAN HAVE THE CLASSIFICATION CATEGORIZATION NUMBERING PROCESS TO CLASSIFY THE CREST OBJECTS AND TROUGH OBJECTS SUCH THAT WE CAN IDENTIFY THE SPECIFIC   NATURES OF CREST AABB (TOPOLOGICALLY AND GEOMETRICALLY ) SUCH THAT WE CAN CLASSIFY THE SPECIFIC NATURES OF TROUGHAABB TYPE  OBJECTS ( THESE ARE THE CORE BUILDING BLOCKS OF THE WAVE SIGNAL OBJECT INSTEAD OF THE SUPERPOSITION OF THE COS SIN COMPONENTS IGNORING THE COS COMPONENTS SIN COMPONENTS AS WAVE CONSTRUCTOR) SANJOY NATH REMODELS THE WAVE LIKE SIGNALS AS THE  COMBINATORIALLY CHOSEN SUBQUEUE OBJECTS OR CHAINED QUEUE OBJECTS   QUEUE OF CREST AABB OBJECTS AND TROUGH AABB OBJECTS  OUT OF WHICH SOME SUBQUEUE FORMS COMPLETE WAVE CYCLES WITH TIME PERIODS AND WAVE LENGTHS.    THE CONTAINER AABB OBJECTS CONTAINS THE COMPLETE CYCLE AND THESE CONTAINER AABB OBJECTS ALSO HAVE COMBINED CENTER OF GRAVITY (CG OF ALL TIP POINTS OF ALL CONTAINED SAMPLE AMPLITUDES IN THE WHOLE CONTAINER AABB OBJECTS)   THE NUMBERING METHODS (BIM LIKE BUILDING INFORMATIONS MODELING LIKE NUMBERING TO CLASSIFY THE CREST AABB OBJECTS(SUB PART FABRICATIONS BUILDING BLOCKS ) , TROUGH AABB OBJECTS(SUB PART FABRICATIONS BUILDING BLOCKS)  , CONTAINER AABB OBJECTS (ASSEMBLY OF SEVERAL PARTS HAVE DIFFERENT NUMBERING SCHEMES TO  CATEGORIZE TOPOLOGICALLY GEOMETRICALLY CATEGORIZE TOPOLOGICALLY AND GEOMETRICALLY AND NUMBERED AS PER COMPLEXITY AND FABRICABILITY AS WE DO IN THE BUILDING INFORMATIONS MODELING SYSTEMS NUMBERING TO PREPARE CLASSIFIED TABLES OF BILL OF MATERIALS AND COUNTING NUMBER OF SAME CATEGORY OBJECTS AS BUILDING BLOCKS)IDENTIFY AND THEN THE BILL OF QUANTITY ARE ALSO DIVIDED AS PER TRANPORTATION SEQUENCE NUMBERING , CONSTRUCTIONS PHASING NUMBERS ETC...... IN THE SAME WAYS SANJOY NATH CONSIDERS SAME CONTAINER AABB OBJECT ARE SQUIZABLE (SCALED DOWN HORIZONTALLY OR SCALED DOWN  VERTICALLY        SCALING (DOWN SCALING OR  UPSCALING WHATEVER) DONT CHANGE TOPOLOGY_NUMBER OF THE CONTAINER AABB OBJECTS )  THE TOPOLOGICAL PROPERTIES OF CONTAINER AABB OBJECTS OR GEOMETRIC PROPERTIES OF CONTAINER AABB OBJECTS ARE SUCH INVARIANT PROPERTIES OF THE CONTAINER AABB OBJECTS (OR ANY CREST AABB OBJECT OR TROUGH AABB OBJECTS ) WHICH DONT ALTER EVEN WE SCALE DOWN THE THINGS OR SCALE UP THE THINGS ... EXAMPLE OF SUCH TOPOLOGICAL PROPERTIES ARE NUMBER OF LOCAL MINIMA PRESENT , NUMBER OF LOCAL MAXIMA PRESENT  , NUMBER OF SAMPLES PRESENT  , NUMBER OF NEGATIVE SAMPLE PRESENT IN CONTAINER AABB , NUMBER OF POSITIVE SAMPLES PRESENT IN THE CONTAINER AABB  , NUMBER OF POSITIVE AMPLITUDES INVOLVED IN MONOTONICALLY INCREASING AMPLITUDE SETS IN CREST AABB (IN CONTAINER AABB ) , NUMBER OF POSITIVE AMPLITUDES INVOLVED IN MONOTONICALLY DECREASING AMPLITUUDE SETS(IN THE CREST AABB(OR IN CONTAINER AABB) , SIMILARLY FOR TROUGH OBJECTS NUMBER OF NEGATIVE AMPLITUDES INVOLVED IN MONOTONICALLY DECREASING(INCREASING NEGATIVE VALUES) IN A TROUGH AABB OBJECT (OR IN A CONTAINER AABB OBJECT) SIMILARLY NUMBER OF MONOTONICALLY INCREASING (DECREASING NEGATIVE VALUES)AMPLITUDES  PRESENT IN THE TROUGH OBJECT (OR IN THE CONTAINER AABB OBJECT ... THEN CONSIDERING THE NEIGHBOURHOOD TOPOLOGY PROPERTIES IN  STRICT QUEUEDNESS OF CRESTS AND TROUGHS (WHICH NEIGHBOUR TO NEIGHBOUR VISCINITY SAMPLES PROPERTIES ARE ALSO TOPOLOGICAL PROPERTIES WHICH ARE ALSO INVARIANTS AND USED TO CLASSIFY THE AABB OBJECTS OF EVERY KIND AND THESE PROPERTIES ALSO NOT CHANGE IF WE SCALE DOWN OR SCALE UP THE AABB OBJECTS.. FOR EXAMPLE IF WE TEMPORARILY ARRANGE ALL THE SAMPLES PRESENT IN THE AABB OBJECT AND RANK THE AMPLITUDES ABSOLUTE LENGTHS IN ASCENDING OR DESCENDING ORDER WE GET THE RANKS OF THE AMPLITUDES IN PARTICULAR AABB OBJECTS) NOW IF WE CLASSIFY THE RANKING OF THESE AMPLITUDE VALUES FOR ALL AMPLITUDES IN AABB OBJECTS THEN WE CAN HAVE THE RANK VALUES OF LEFTMOST AMPLITUDE IN ANY PARTICULAR AABB OBJECT AND WE CAN ALSO GET THE RANK NUMBER OF THE RIGHTMOST AMPLITUDE FOR ANY PARTICULAR AABB OBJECT) ... THESE RANKINGS ARE ALSO TOPOLOGY PROPERTIES WHICH DONT CHANGE WHEN WE SCALE DOWN THE AABB OBJECT OR SCALE UP THE AABB OBJECTS... THESE RIGHTMOST RANK OF N_TH AABB OBJECT AND LEFTMOST RANK OF (N+1)TH AABB OBJECT DECIDES THE INTERFACING NEIGHBOURHOODS PROPERTIES... TO DO MORE STRONGER INTERFACING CHECKING WE CAN TAKE RIGHTMOST 3 RANKS OF CURRENT AABB TO THE LEFTMOST 3 RANKS OF NEXT AABB WHICH CAN HELP US CLASSIFY THE NEIGHBOURINGNESS OF QUEUED STRUCTURES AND THESE INTERFACINGNESS NEIGHBOURHOODS ARE ALSO CLASSIFIABLE SO WE CAN DO THE NUMBERING(PURE TOPOLOGICAL SCHEMATIC NUMBERING OF ZERO CROSSING POINTS ) AND THESE ZERO CROSSING POINTS CAN HAVE JUNCTIONS CLASSIFICATIONS NUMBERING WHICH ARE ALSO INVARIANT (SINCE THESE ARE TOPOLOGICAL ) AND THIS WAYS WE CAN CLASSIFY THE NATURES OF ZERO CROSSING POINTS AND EVEN IF WE SCALE DOWN OR SCALE UP ANY CONTAINER AABB AT ANY LOCATION , THESE DONT ALTER THE NATURES OF ZERO CROSSING POINTS (IF THE DC OFFSETTING(VERTICAL SHIFTING OF ZERO AMPLITUDE LINE REFERENCE LINE TO FIND ZERO CROSSINGS )  ARE NOT DONE(NO CHANGE OF ZERO LINE ONCE NUMBERINGS ARE DONE... EVERY TIME WE NEED TO RENUMBER EVERYTHING WHEN WE CHANGE THE REFERENCE ZERO AMPLITUDE LINES ) IN THE MIDDLE OF THE PROCESS)... SO THE BUILDING INFORMATIONS MODELING TECHNICS ARE USED DRASTICALLY FOR TOPOLOGICAL NUMBERING SYSTEMS , GEOMETRIC NUMBERING SYSTEMS TO CLASSIFY EACH AND EVERY ZERO CROSSING POINTS... THE ZERO CROSSING POINTS ARE CLASSIFIED FUNDAMENTALLY AS CREST TO TROUGH TYPE OR TROUGH TO CREST TYPE OT TROUGH TO TROUGH TYPE(WHEN ONE TROUGH ENDS AT ZERO AMPLITUDE THEN AGAIN ANOTHER TROUGH STARTS WITHOUT ENTERING INTO ANY CREST) , SIMILARLY CREST TO CREST ZERO CROSSING CAN ALSO OCCUR WHERE NO INTERMEDIATE TROUGH OCCUR... IN THIS WAY WE CAN CLASSIFY THE REGIONS OF CONTIGUOUS SILENCES ALSO sO WE CAN HAVE THE FUNDAMENTAL TOPOLOGICAL CLASSIFICATIONS ON TIME LINE AS SS MEANS SILENCE CONTINUING... SEQUENCE OF SSSSSSSSSSSSSS (CHARACTER COUNT OF SSS... MEANS A LONG CHAIN OF SILENCES ZERO AMPLITUDE NO CREST NO TROUGH ARE THERE TOPOLOGICALLY THIS IS A KIND OF TOPOLOGICAL  REGION  ON TIMELINE OF WAVES ... SIMILARLY THERE ARE CREST TO TROUGH CT TYPE REGIONS TT TYPE REGIONS TROUGH TO1 SAMPLE SILENCE IN BETWEEN ... SIMILARLY WE CAN HAVE THE CC TYPES OF TOPOLOGICALLY CLASSIFIED ZERO CROSSING ON TIME LINES CREST TO CREST (ONE SAMPLE SILENCE IN BETWEEN TWO CONSEQUETIVE CRESTS) SIMILARLY WE CAN HAVE CREST TO TROUGHS  CT TYPE CASES (WITH RANKED SAMPLES INTERFACINGS AS DISCUSSED) SIMILARLY WE CAN HAVE TC TYPES OF NUMBERING FOR THE ZERO CROSSING POINTS ... WE CAN HAVE ST OR TS (SILENCE TO TROUGH  OR TROUGH TO SILENCES  ZERO CROSSINGS TOPOLOGY) WE CAN HAVE SC OR CS (SILENCE REGION ENDS AND CREST STARTS OR CREST ENDS AND ENTERS SSSSSS REGIONS ... INTHIS WAY WE CAN CLASSIFY THE  ZERO CROSSING POINTS WITH NEIGHBOURHOOD AMPLITUDES RANKS (1 RANK FROM LEFT 1 RANK FROM RIGHT IS OK BECAUSE SEVERAL CASES CAN HAVE ONLY 2 SAMPLE IN CREST OR 2 SAMPLE IN TROUGH WHICH ARE VERY COMMON IN 8000 SAMPLES PER SECOND CASES AS SANJOY NATH HAS FOUND IN 380000 WAV FILES EXPERIMENTS)   SO THE TOPOLOGY DEPENDENT NUMBERING SCHEMES OF JUNCTIONS ARE VERY IMPORTANT TO UNDERSTAND CLASSIFICATIONS OF CREST AABB , TROUGH AABB , ZERO CROSSING NEIGHBOURING JUNCTIONS CLASSIFICATIONS AND FROM THESE WE CAN FIND THE REPEAT NATURES OF SIMILAR KINDS OF JUNCTIONS ON THE TIMELINES AND WE CAN EASILY COUNT (USING THE REGULAR EXPRESSIONS ON JUNCTION TYPES ON THE TIMELINES TOPOLOGICALLY) TO IDENTIFY THE NUMBERS OF DIFFERENT KINDS OF CONTAINER AABB OBJECTS PRESENT IN WHOLE QUEUED AABB OBJECTS WHICH ARE FORMING THE QHENOMENOLOGICAL REASONING ON THE WAVE SIGNAL OBJECTS... SCALING OF AABB OBJECTS WILL NOT CHANGE TOPOLOGICAL NUMBERING CLASSIFIERS OF AABB OBJECTS... SANJOY NATH'S PHILOSOPHY OF QHENOMENOLOGICAL REASONING SYSTEMS CONVERTS THE TIME LINE OF WAVES AS REGULAR EXPRESSION PROBLEM (OR GRAMMAR PARSER SYSTEM , COMPILER LIKE VERIFIER SYSTEMS ON THE CLASSIFIED ZERO CROSSINGS AS STRINGS CREST AABB OBJECTS AS SYMBOLS , TROUGH AABB OBJECTS AS SYMBOLS , CONTAINER AABB OBJECTS AS SYMBOLS AND SEQUENCE(STRICT QUEUE OF SYMBOLS ARE FILTERAABLE WITH REGULAR EXPRESSIONS AND THE PATTERN MATCHING PROBLEMS APPLICABLE ON THE WAVE SIGNAL OBJECTS) THIS MEANS THE WHOLE DIGITAL SIGNAL PROCESSING SYSTEMS TURN INTO TOPOLOGICALLY NUMBERED SYMBOLS AND SEQUENCE OF SUCH SYMBOLS MEANS IT IS STRINGOLOGY NOW AND STRINGS ARE PARSABLE IN SEVERAL STYLES TO HAVE GRAMMAR LIKE SYNTAX LIKE PARSING SYSTEMS AND COMPILABILITY CHECKING AND CLOSURE PRINCIPLES USED TO HAVE ALGEBRAIC STRUCTURES ON THE WHOLE TIMELINE AS STRINGS OF SYMBOLS... 

    //SANJOY NATH HAS TESTED WITH 380000  WAV FILES OF 8000 SAMPLES PER SECOND 16 BIT (FLOAT SAMPLE BIT DEPTH NOT SHORT IS PREFERED SINCE THE SHORT DATATYPE IS NOT KEEPING SUFFICIENT DETAILS )  THEN SANJOY NATH HAS FOUND THAT THE ALL SAME AMPLIUTUDE (-1 0 OR +1 ONLY DB SCALES AMPLITUDE) KEEPS SAME LEVEL OF UNDERSTANDABLE DETAIL IN THE MUSIK OR OTHER SOUNDS EVEN THE WAVE FORMS ARE NOT PRESERVED . SO THE WAVE FORMS INFORMATIONS DETAIL ARE NOT TOO MUCH INFORMATIVE AND ONLY TOPOLOGY OF THE CRESTS AABB AND TOPOLOGY OF TROUGH AABB ARE SUFFICIENT TO EXTRACT THE INFORMATIONS IN WAVE SIGNALS WHICH ARE QUE OF PURE RECTANGLE LIKE CRESTS AND PURE RECTANGLE LIKE TROUGHS . THE COMPLICATED HARMONIC SUPERPOSITIONS OF SEVERAL SIN COMPONENTS NOT NECESSARY NOR SEVERAL COS COMPONENTS ARE NECESSARY TO KEEP SUFFICIENTLY DISTINGUISED SONG INFORMATIONS EVEN THE SAMPLES OF VALUES OF -1 , 0 , +1 ARE SUFFICIENT TO GET THE PROPER WORKINGS , PROPER TUNES , PROPER PERCUSSIONSPOSITIONS.... THE PATTERNS OF SILENCES AND PATTERNS OF BUNCH OF INTERMITTENT QUEUED NATURES (QUEUING PATTERNS OF SAME SIZED AMPLITUDES ARE SUFFICIENT TO LISTEN THE SONGS , TONALITY , PERCUSSIONS , CNC VIBRATIONS DATA DISTINCTIVE FEATURES , BUILDING INFORMATIONS MODELING  VIBRATIONS INFORMATIONS , STRUCTURAL HEALTH MONITORING VIBRATIONS RELATED INFORMATIONS INFORMATIONS EXTRAACTIONS) VERTICAL NEGATIVE LINES OR BUNCH OF VERTICAL EQUAL SIZED POSITIVE AMPLITUDES ARE SUFFICIENT TO DISTINGISH THE VOICES , DISTINGUISH SOUND INSTRUMENTS , , TO DISTINGUISH THE TONALITY GLIDING EFFECTS PITCH BENDS EFFECTS , KEY PRESSURE FEATURES ETC...  WHY ????????????????????? WHAT IS THE CAUSE BEHINGD SUCH NON DISTINGUISHABILITY?????????????? ANOTHER DOUBT IS THAT IF WE TAKE DIFFERENT PROPORTIONS OF NEGATIVE ALL EQUAL SIZED AMPLITUDES AND DIFFERENT PROPORTIONS OF ALL EQUAL POSITIVE AMPLITUDES  CAUSE THE SAME LEVEL OF INDISTINGUISABILITY????????? WILL DC SHIFT ON SUCH ALL EQUAL AMPLITUDES CASES (BASE LINE SHIFTING VERTICALLY CONSTANT AMOUNT VERTICAL SHIFT OF ZERO  AMPLITUDE BASE LINE) CAUSE THE PROBLEMS IN SIGNALS QUALITY DRASTICALLY ????? WHY ????? WHAT DOES THE CONVENTIONAL WAVE SIGNAL PROCESSING SAY ABOUTH THIS??????????????????    STILL SANJOY NATH HAS DECIDED TO WORK WITH WAVE FORMS SEGMENTING.    WAVE FORMS SEGMENTING IN SANJOUY NATH'S QHENOMENOLOGY PHYSICS OF WAVE HANDLES WITH THE RECTANGULAR AABB OF CREST , RECTANGULAR AABB OF TROUGHS IN STRICT QUEUE OF AABB ZIG ZAG PLACED OBJETS.......      NOW AFTER EXPERIMENTING WITH THESE KINDS OF HARMONIC MIXED WAVES SANJOY NATH HAS SEEN THAT IF WE CAN IMAGINE A BIGGER CONTAINER AABB WHICH ENCLOSES A BUNCH OF CREST AABB AND A BUNCH OF TROUGH AABB CONTAINED IN A SINGLE CONTAINER AABB) WHERE THIS CONTAINER AABB OBJECTS ENCLOSES A WHOLE CYCLE OF WAVE WHERE THE LENGTH OF THIS CONTAINER AABB IS INTERPRETED AS ONE SINGLE TIME PERIOD (ONE WAVELENGTH SEGMENT WHICH CONTAINS A COMPLETE CYCLE OF WAVE FORMS)    WE NEED A FITTING OF BASE LINE (PARTICULARLY FOR ASYMMETRIC WAVE FORMS OR SYMMETRIC WAVE FORMS WHATEVER  IT IS) WE CAN DO PRECALCULATED  DC OFFSETS OF BASE LINE SUCH THAT WE CAN DISTINGUISH THE CYCLE COMPLETIONS CRISP ZERO CROSSINGS POINTS.SO THAT AFTER CALIBRATING THE ZERO AMPLITUDE LEVEL BASE LINE  WE WILL PRECALCULATE AND CALIBRATE THE BASE LINES SUCH THAT  THE ZERO CROSSING POINTS WILL CLEARLY IDENTIFY WHERE A CONTAINER AABB BOUNDING BOX SHOULD START AND WHERE IT NEEDS TO COMPLETE. EVERY SUCH CONTAINER BOUNDING BOX WILL HAVE CG (CENTER OF GRAVITY CALCULATED WITH ALL SAMPLES AMPLITUDES TIP POINTS PRESENT IN THE CONTAINER BOUNDING BOX WHERE EACH CONTAINER BOUNDING BOX WILL CONTAIN A SUB QUEUE OF SOME CRESTS AND SOME TROUGHS WHERE SOME OF THESE CRESTS AND SOME OF THESE TROUGHS ARE REDUNDANT SINCE IT CARRIES EXTRA INFORMATIONS WHICH ARE NOT NECESSARY TO DISTINGUISH THE FEATURES OF A SONG ... ALL THE WORDS ARE LISTENABLE ALL THE TONALITY ARE LISTENABLE AND IDENTIFIABLE ALL PERCUSSIONS BITS ARE LISTENABLE AND DISTINGUISABLE ...  THIS MEANS WE NEED THE LIMITING CASES WHERE THE MINIMUM NECESSARY INFORMATION STARTS AND WHERE THE SUFFICIENT INFORMATION STAGES COMPLETES AND WHERE THE EXCESS INFORMATION IN THE WAVE CONTENT STARTS???????????????????????? SANJOY NATH'S AABB MODEL OF QHENOMENOLOGY QUEUE STRUCTURE OF WAVE FOCUS ON THESE LIMITING CASES OF START OF NECESSARY , COMPLETE UPPER LIMIT OF SUFFICIENCY AND THE MINIMUM POINT OF CONTENT OF LISTENABLE AND JUST NOTICEABLE DISTINCTIONS OF  INFORMATION WHERE EXCESS INFORMATION STARTS... SANJOY NATH HAS ALSO EXPERIMENTED AND FOUND THAT SOME OF THE CRESTS AABB  (SUB PART OF WHOLE CYCLE) AND SOME OF THE TROUGH AABB ARE REDUNDANT IN THE BOUNDING BOX WHICH ARE EXCESS INFORMATIONS CARRIERS EVEN WE DO SILENCE OUT OF THESE RDUNDANT CRESTS AND SILENCE OUT THESE REDUNDANT TROUGHS THAT DONT HAMPER THE LISTENABLE DISTINGUISABLE CONTENTS OF INFORMATIONS IN THESE WAVES  WHY SUCH CASES OCCUR???? WHICH THEORIES EXPLAIN THESE?????????)

    // SANJOY NATH PROPOSES A TOOTH PICK MODEL FOR COMBINATORIAL QUEUE STRUCTURE OF WAVE WHICH RESEMBLES LIKE QUEUE OF CREST AABB AND TROUGH AABB PLACED ALONG THE BASE LINE IN ZIGZAG WAYS ) . TAKE A BOX OF TOOTHPICKS WHICH ARE ALL OF SAME LENGTH BUT BREAK THESE (USE PARTITIONS LIKE CATALAN AND RAMANUJAN STYLES OF PARTITIONING) AND TAKE SOME OF THESE PIECES OF TOOTH PICKS AS THE BLUE COLOURED PIECES WHICH RESEMBLES THE CREST SUBPART AABB AND SOME OF THESE PIECES AS  THE RED COLOURED PIECES WHICH ARE THE TROUGH AABB OBJECT AND ALL THE PIECES OF THE PARTITIONS ARE NOT NECESSARY TO    CARRY SUFFICIENT INFORMATIONS FOR NECESSARY PURPOSE.  PURPOSE NECESSITY IS A LIMIT GOVERNING FACTOR AND EXCESS GOVERNING FACTOR AND THE SURPLUS GOVERNING FACTOR ...   THE COMBINATORIAL NATURES OF SUCH CREST AABB AND TROUGH AABB OBJECT IS IMORTANT QUEUE STRUCTURING WHERE THE SUB QUEUE OF SOME CREST AABB AND TROUGH AABB WITHIN THE CONTAINER AABB ACTUALLY CARRY THE NON REDUNDANT NECESSARY  AND SUFFICIENT INFORMATIONS)

        //WHEN SAMPLES PER SECONDS ARE KNOWN FOR ANY WAVES (WAV FILES MONO CHANNEL 16 BIT FLOATING)BIT DEPTH FOR AMPLITUDES ARE THERE AND IN A FIRST SCANNING (WITH 380000 WAV FILES STUDY SANJOY NATH HAS FOUND THAT IF MEAN+STANDARD DEVIATION IS TAKEN TO FILTER OUT ABSOLUTE AMPLITUDES AND THEN TAKE 10000 AMPLITUDES FOR THE ABSOLUTE VALUES OF THE AMPLITUDES AND  ENFORCING ZERO AMPLITUDES FOR WHICH THE  ABSOLUTE ACTUAL WAVE FILES SAMPLE VALUE <(MEAN+1* STANDARD DEVIATION ) ARE ALL SILENCED (ENFORCING ZERO AMPLITUDES) AND REGENERATED WAV FILES WITH SAME SAMPLE COUNT ... THE WHOLE SONG REMAINS LISTENABLE AND UNDERSTANDABLE QUITE CLEARLY ... SOME NOISES OCCUR DUE TO ENFORCED  ZERO AMPLITUDES THROUGH FILTERING BUT LISTENABILITY OF ALL WORDS , INSTRUMENTS , TUNES ARE NOT HAMPERED TOO MUCH) THEN WHEN WE TRY TO FILTER OUT THE NOTES WE CAN FILTER OUT NOTES... TO MIDI FILES... SO WE CAN DO THE STRICT NUMBERING OF ZERO CROSSING POINTS (AFTER FIRST TIME SCANNING COUNTING THE INDEXES OF ZERO CROSSING POINTS ARE DONE) THEN THROUGH THE ANALYSIS OF NEIGHBOUTHOODS(FEW SAMPLES ON LEFT OF ZERO CROSSING POINT AND FEW SAMPLES FROM RIGHT SIDE OF THAT ZERO CROSSING POINT ) CAN HAVE SIMILAR TOPOLOGICAL PROPERTIES WHICH DONT CHANGE DUE TO SCALING OF THE CONTAINER AABB OBJECTS... USING THIS PHILOSOPHY SANJOY NATH'S QHENOMENOLOGY REASONING ON QUEUEDNESS OF WAVE COMPONENTS(ALREADY TOPOLOGICALLY NUMBERED RENUMBERED RE RE NUMBERED REFINED NUMBERED IN N TIMES SCANNING IF NECESSARY ... CURRENTLY THE THEORY IS IN BUILDING... WE ARE TRYING TO CROSS VERIFY THE OUTPUTS WITH CONVENTIONAL THEORY OF WAVES AND CONVENTIONAL FOURIER SPECTRUMS FREQUENCY DOMAIN DATA TO CHECK IF WE ARE GETTING SAME KIND  OF OUTPUTS OR BETTER OUTPUTS THAN FOURIER OR NOT...)  SO WE WANT TO ACHIEVE THE PITCH BENDS  MANAGEMENTS(CONSTRUCTING PITCH BENDS THROUGH MAERGE OF MONOTONICALLY INCREASING NOTES AS SINGLE START NOTE AND CLUBBING ALL THESE NOTES WITH PITCH BENDS GLIDING  UPTO 2 SEMITONES AND THEN AGAIN NEW NOTE START IF FREQUENCY RANGE CHANGES BEYOND 2 SEMITONES AS PER DEFAULT MIDI STANDARDS... SIMILARLY MERGING THE NOTES (MONOTONICALLY DECREASING... DUE TO 30 SAMPLES WINDOWING TO 300 SAMPLES WINDOWING ... WHICH EVER FITS BEST AS PER GIVEN SAMPLES PER SECOND (FOR 8000 SPS 8 SAMPLES PER MILLISECOND...AS EXAMPLES) AND SANJOY NATH THINKS AT LEAST K*SAMPLES PER MILLISECONDS NECESSARY (THE VALUE OF K NEED TO CALCULATE FROM THE FIRST TIME SCANNING AND GETTING THE CHARACTERISTICS OF THE WAVES THROUGH TOPOLOGY NUMBERING DONE AT ALL ZERO CROSSING CONDITIONS AND NEIGHBOURHOOD TO IDENTIFY WHERE SIMILAR TOPOLOGY (NEIGHBOURHOOD (SCALE INVARIANT TOPOLOGY PROPERTIES OF NEIGHBOURHOOD SAMPLES REGIONS ARE IMPORTANT TO CLASSIFY THE ZERO CROSSING POINTS AND THROUGH THAT SYSTEMS WE CAN IDENTIFY THE BEST WINDOW SIZES TO IDENTIFY FREQUENCIES) SANJOY NATH'S PHILOSOPHY FOR WAVE ANALYSIS HANDLES THE ZERO CROSSING POINTS AS CONNECTORS BETWEEN TWO DIFFERENT COMPLETE CYCLES (LEFT SIDE CONTAINER AABB MEANS ONE CYCLE COMPLETE AND RIGHT SIDE CONTAINER AABB MEANS ANOTHER CYCLE STARTS) AND NUMBER OF COMPLETE CYCLES PER SECOND IMPLIES FREQUENCY WHICH IS INTERPRETED AS NUMBER OF COMPLETE CONTAINER AABB OBJECTS PRESENT IN 1 NUMBER OF SAMPLES PER SECONDS VALUES IN A MONO WAVE FILES

        // AS IN THE BUILDING INFORMATIONS MODELING LIKE TEKLA , ADVANCE STEEL , REVIT SYSTEMS NUMBERING ARE IMPORTANT AND EVERYTHING HAS SOME KIND OF CONCRETELY WELL DEFINED CLASSIFICATIONS (TOPOLOGICALLY CLASSIFIED OR GEOMETRICALLY CLASSIFIED) AND EVERYTHING HAS SOME CLASSIFIED NUMBERING /TOPOLOGICAL SIMILARITY /GEOMETRICAL SIMILARITY EVERY OBJECTS HAVE SOME NUMBERS AND SO EVERY CRESTS HAVE SOME NUMBERS (GEOMETRICALLY SIMILAR OR TOPOLOGICALLY SIMILAR THINGS HAVE SAME NUMBERING SYSTEMS) BILL OF QUANTITIES ARE CONCTRUCTED AS PER SAME KIND OF NUMBERS ASSIGNED TO SAME KIND OF TOPOLOGY... ALL CREST AABB ARE CLASSIFIED THROUGH BIM LIKE NUMBERING SCHEMES ... ALL TROUGH AABB ARE NUMBERED STRICTKY FOLLOWING TOPOLOGICAL SIMILARITY GEOMETRICAL SIMILARITY KIND OF THINSS AND STRICTNOTE... THE ZERO CROSSINGS IN THE WAVES ARE ALSO NUMBERED(AS BIM PROJECTS ) WHERE ZERO CROSSING POINTS ARE CONSIDERED AS THE CONNECTIONS BETWEEN THE LEFT SIDE CONTAINER AABB OBJECT(OR PART AABB OBJECT)(WHICH IS A STUCTURAL MEMBER) AND RIGHT SIDE AABB OBJECT... AABB OBJECTS ARE PARTS OR SUBPARTS ALL HAVE SOME TOPOLOGY PROPERTY(WHOLE WAVE CAN HAVE SAME NUMBERED AABB OBJECTS PRESENT MULTIPLE TIMES WITH SEVERAL KINDS OF DIFFERENTLY SCALED ... SCALING DONT CHANGE THE TOPOLOGY... EVERY AABB OBJECTS HAVE SOME KIND OF TOPOLOGY PROPERTIES WHICH REMAINS UNALTERED DUE TO SCALING , ROTATING , TRANSLATING... BUT MIRRORING IS NOT LLOWED... IF MIRRORED THEN THE TOPOLOGY PROPERTIES OF AABB CHANGES SO NUMBERING CHANGES(AS PER SANJOY NATH'S QHENOMENOLOGY WAVE THEORY REASONING SYSTEMS) SO FIRST ALL ZERO CROSSING POINTS ARE IDENTIFIED AND NO NUMBERING ARE DONE TO THESE... THEN ALL CREST AABB OBJECTS ARE CONCRETELY IDENTIFIED AND THEIR TOPOLOGY NUMBERING ARE DONE ON THE BASIS OF INTERNAL INVARIANT GEOMETRIES PRESENT IN THE CREST AABB OBJECTS AND IN THE TROUGH AABB OBJECTS... CLUE IS THAT NUMBER OF SAMPLES PRESENT IS NOT IMPORTANT TOPOLOGY PROPERTY... BUT NUMBER OF LOCAL MAXIMA AND NUMBER OF LOCAL MINIMA PRESENT IS THE CONCRETE INVARIANT TOPOLOGICAL PROPERTY... PROPORTION OF ( AREA UNDER ALL AMPLITUDES TAKING THE INTER SAMPLE DISTANCES MEASURED IN THE MICROSECONDS AND AMPLITUDES MEASURED WITH AMPLITUDES UNIT  / TOTAL AREA FORMED WITH AABB WIDTH IN MICROSECONDS AND THE AABB HEIGHT MEASURED AS THE MAXIMUM AMPLITUDE FOUND IN THE AABB OBJECT WHERE AMPLITUDES ARE MEASURED IN THE AMPLITUDE UNIT)   THIS PROPORTION IS A TOPOLOGICAL INVARIANT... AND THE NUMBER OF MONOTONICALLY INCREASING AMPLITUDES INVOLVED IN TOTAL SAMPLES IN AABB IS A TOPOLOGICAL INVARIANT ... NUMBER OF MONOTONICALLY DECREASING AMPLITUDES INVOLVED PER UNIT TOTAL SAMPLES IN THE AABB OBJECT IS ANOTHER TOPOLOGICAL INVARIANT... FIRST WE DO NUMBERING(TOPOLOGICAL NUMBERING AS WE DO IN THE BUILDING INFORMATIONS MODELING PROCESS TO CLASSIFY THE BUILDING PARTS SUBPARTS ASSEMBLIES... WE DO THE BIM LIKE REASONING ON THE PARTS(CREST AABB , TROUGH AABB SILENCES AABB , ZERO CROSSING POINTS AS BUILDING PARTS (CONNECTOR PARTS) AND AFTER ALL THE CREST AABB GETS TOPOLOGICAL NUMBERING , ALL THE TROUGHS AABB GETS TOPOLOGICAL NUMBERING ... WE SEARCH THE REPEATS OF TOPOLOGICALLY SAME KIND OF AABB OBJECTS PRESENT IN THE WHOLE WAVE (WHOLE WAVE IS CONSIDERED AS THE BUILDING AND CRESTS AABB ARE PARTS , TROUGH AABB ARE PARTS ... ZERO CROSSING POINTS ARE SPECIAL KINDS OF CONNECTORS BETWEEN PARTS ... CONTAINER AABB OBJECTS HOLDS SUB PARTS (THESE ARE CREST AABB AS SUB PART , TROUGH AABB AS SUB PART... INTERMEDIATE ZERO CROSSING POINTS AS SUB CONNECTORS... ) SCALING DONT CHANGE THE TOPOLOGICAL NUMBERING... SCALING CHANGES THE GEOMETRIC NUMBERING BUT THE TOPOLOGICAL NUMBERING DONT CHANGE... TOPOLOGICAL NUMBERING SYSTEMS CLASSIFY THE TIMBRE , TONALITY ETC... GEOMETRIC SCALING CHANGES FREQUENCY... BUT THE TIMBRE REMAINS SAME... INSTRUMENTS OF HUMANS VOICES HAVE SAME TOPOLOGY NUMBER FOR A SINGLE VOICE BUT GEOMETRY NUMBERING CHANGES WHEN GEOMETRY SCALES CHANGES... SO SAME INSTRUMENTS CAN HAVE DIFFERENT FREQUENCIES BECAUSE ALL SAME TOPOLOGY NUMBERED THINGS(IMPLIES SAME INSTRUMENT OR SAME HUMANS VOICE TIMBRE QUALITY) AND GEOMETRIC NUMBERING ARE THE FREQUENCY CHANGING... THIS WAY SANJOY NATH'S QHENOMENOLOGY REASONING SYSTEMS ON WAVR THEORY IS DIFFERENTLY AXIOMATIZED AND COMPLETELY IGNORES THE HARMONIC ANALYSIS COMPLETELY IGNORES FOURIER STYLES TO UNDERSTAND THE THEORY OF WAVES... SANJOY NATH'S QHENOMENOLOGY REASONING SYSTEMS COMPLETELY AVOIDS CONVENTIONAL THEORY OF WAVES AND LOOK AT IT AS BUILDING INFORMATIONS MODELING AND GEOMETRY RELATED PROBLEM OR TOPOLOGY RELATED PROBLEMS

        //SANJOY NATH'S PROOF OF HIS CLAIMS IN SANJOY NATH'S QHENOMENOLOGY(Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS 

    //fourier tried to explain the different wave forms as vertical summation of amplitudes (superposition of multiple sinusoidal shapes) and due to that superpositions the cycles natures of waves changes.  And when superpositions are done the waves (each cycles ) shapes changes and also the timeperiod (in microseconds) per shape cycle changes similarly the wave forms crest counts changes wave forms trough counts changes and ultimately we see one wave cycle has several crest and troughs involve to form single wave cycles... In conventional theory of waves frequency is described as the number of complete cycles per second(1000000 microsecond as width of a second along timelines)  Fourier used to look at the complete cycle (zero crossing points as effect of superposition) But Sanjoy Nath looks at frequency as combinatorial packing factor of different AABB widths along the timeline. So in Sanjoy Nath's interprretation (not taking vertical superposition as cause of zero crossing instead considering zero crossing are the combinatorial counting property and CATALAN NUMBERS , Integer partitioning like reasoning over timeline is used which means whole wave cycles are partitioned as CREST AABB WIDTH in microseconds and TROUGH AABB Widths in microseconds ultimately whole wavecycle is summation of well partitioned different sized AABB objects and total energy in a wave form depends upon CG of all amplitudes in the all AABB objects of crest and Trough objects which governs the waves features energy is scalar and scalarly addable so pure arithmetic is applicable and total cycle width in microsecond is time period of wave which is same in Sanjoy Nath's Qhenomenology linear queue model of crests and troughs but combinatorial juxtapositions of crest AABB Trough AABB can also achieve same time period but wave cycle will not look like complete wave cycle but when stacked with left margins aligned for all these AABB objects will not hamper the CG positioningcycle  )  Different Crest AABB Widths +6 Different Trough AABB Widths summed togather to form single wave cycle and that is TimePeriod of wave (as in conventional Theory of waves where superimposition of different sinusoidal components governs zero crossing points... Sanjoy Nath looks at these scanario from other point of view where Sanjoy Nath Takes zero crossing points as governing factors and Combinatorial clustering of Crest AABB Trough AABB and arranging these in specific strict ORDERED QUEUE OF particular CRESTS after PARTICULAR Troughs make a wave cycle and one time period is found  but TOPOLOGICALLY  that dont help us to think different kinds of QUEUING nor gives us bigger pictures of combinatorial packing problems of different sized AABB to achieve same cycle (Complete cycle of same Time Period) . On the other hand conventional theory of waves consider 1 second(1000000 micro second as reference) and number of complete time periods per second as frequency .  In the conventional theory of waves it is considered that certain cycle shape is rolling on a horizontal surface and when one complete cycle complets then certain distance is covered per cycle but while plotting the waves and whole showing the wave lengths the conventional theory of waves show wave lengths along the time axis. Sanjoy Nath considers total wave lengths as total time covered per cycle so time period and wave lengths look geometrically same in Sanjoy Nath's Qhenomenology Theory of Waves. So number of complete widths of complete cycle (after queuing of Crests AABB Trough AABB the full cycle completes and total time period covered as T microseconds which is a PACKET OF sOME AABB objects) When T squizes then packing count increases which is actually frequency increases... Frequency is nothing but the packing factor of complete AABB of a complete cycle in 1000000 micro seconds length. When frequency is packing factor then it is a scale facor of widths. When scale factor s is involved that scales the x coordinates of all CG points ) So when single cycles AABB gets squized the frequency increases so X coordinate of CG of Whole cycle AABB also squizes and so proportionately x coordinates of all component Crest AABB  and Trough AABB also squizes...) This way packing and partitioning of AABB Queue along time lines take different packing to form multi frequency waves. This justifies the horizontal AABB packing with conventional superimposition of waves(which are done vertically) Now consider the vertical sides that is Y values of CG for every AABB components... These vary due to frequency change and when the energy per CREST AABB and Energy per Trough AABB remains same horizontal squizing of AABB increases the Y values of CG (virtual bult modulus of these AABB to consider) So while stacking one AABB above another keeping left margins aligned will generate different y for differently squized x so vertical spectral lines are seen when we see the stacks of AABB from top views. This prooves the Justifications of conventional theory with Sanjoy Nath's Qhenomenological Theory of Waves

    // AXIOM 1 SANJOY NATH'S QHENOMENOLOGY(Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS ARE NOT AT ALL CONSIDERING THE WAVES AS COMBINATIONS OF COS COMPONENTS AND SIN COMPONENTS. SO SANJOY NATH'S QHENOMENOLOGY REASONING ON DIGITAL SIGNAL PROCESSING WILL NEVER USE FOURIER PROCESS NOR USE FFT LIKE THINGS TO DO WAVES ANALYSIS OR DIGITAL SIGNAL PROCESSINGS

    // AXIOM 2  SANJOY NATH'S QHENOMENOLOGY (Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing)  PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS CONSIDERS A HORIZONTAL 0 0 LINE (ZERO AMPLITUDE LINE IS THERE WHICH IS AVERAGE OF ALL THE AMPLITUDES IN THE GLOBAL DATA OF FLUCTUATING AMPLITUDE LIKE VALUES AND ZERO CROSSING ARE CALCULATED WITH REFERENCE TO THIS 0 0 LINE WHICH IS AVERAGE VALUE LINE) AND AMPLITUDES BELOW THIS AVERAGE ARE NEGATIVE AMPLITUDES AND AMPLITUDES ABOVE THIS AVERAGE VALUE IS POSITIVE AMPLITUDES

    // AXIOM 3 SANJOY NATH'S QHENOMENOLOGY (Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS CONSIDERS WAVES AS SERIES(STRICT QUEUES OF CREST AABB OBJECTS AND TROUGH AABB OBJECTS ) ALL THESE CREST AND TROUGH  AABB OBJECTS ARE TRANSPARENT TRACING PAPERS LIKE AABBR RECTANGLES BOUNDING BOXES WHICH ALL HAVE SOME CENTER OF GRAVITY CALCULATED FROM THE POINTS OF AMPLITUDE TIPS BOUNDED INSIDE THESE CREST AND TROUGH  AABB LIKE TRANSPARENT TRACING PAPER LIKE OBJECTS) FOR CREST OBJECTS THE ORIGIN OF AABB RECTANGULAR BOUNDING BOXES ARE AT LEFT BOTTOM CORNER OF THE RECTANGULAR BOUNDING BOXES AND FOR TROUGH LIKE OBJECTS THE ORIGIN IS AT LEFT TOP CORNER OF AABB RECTANGLE BOUNDING BOXES AND THESE ORIGINS ARE PLACED ON THE 0 0 (AVERAGE AMPLITUDE LINE ) SUCH THAT QUEUE LIKE SEQUENCE OF CREST TROUGH CREST TROUGH ARE PLACED ONE AFTER ANOTHER AND EVERY CREST OBJECT HAS A STRICT SEQUENCE NUMBER AND EVERY TROUGH HAS STRICT SEQUENCE NUMBER SO EVERY CREST AND TROUGH ARE UNIQUELY PLACED IN THE STRICT QUEUE TO GENERATE THE WHOLE WAVE OBJECT(WHOLE SIGNAL OBJECT)

    // AXIOM 3+ SANJOY NATH'S QHENOMENOLOGY (Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS  THE ANALYSIS STARTS WITH THE CONDITION THAT FORGET THE ACTUAL AMPLITUDES VALUES AND REMEMBERS ONLY THE MAX WIDTH OF EACH AABB (IN MICROSECONDS OR LIKE THAT MEASURE OR  METRIK)  , MAX HEIGHT OF EACH AABB(OR AMPLITUDE LIKE MEASURES METRIKS) CG , STANDARD DEVIATIONS OF AMPLITUDES , SKEWNESS OF AMPLITUDES , KURTOSIS OF AMPLITUDES IN THESTATISTICAL  MOMENTS CALCULATED ON THE AMPLITUDES IN THE CREST AABB OBJECT OR IN THE TROUGH AABB OBJECTS ... THE ACTUAL AMPLITUDE VALUES ARE FORGOTTEN ENTIRELY WHILE DOING SIGNALS PROPERTY ANALYSIS)

    // AXIOM 3++ SANJOY NATH'S QHENOMENOLOGY(Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing)  PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS THE ANALYSIS IS DONE ON THE STACKS (DISMANTLED QUEUE OF CREST AABB AND TROUGH AABB AND THE QUEUE OBJECT IS TRANSFORMED TO (0,0) ALIGNED (LEFT MARGIN ALIGNED) AABB RECTANGLES BOUNDING BOXES SUCH THAT THE (AFTER DISMANTLED QUEUE AND STACKING DONE)STACK OF TRANSPARENT CREST BOUNDING BOXES AND TROUGH BOUNDING BOXES ARE PLACED IN STACK ALL THE LEFT MARGINS ARE ALIGNED AS OVERALL LEFT MARGINS (SANJOY NATH HAS TESTED ON 380000 SOUND WAV FILES DIGITAL WAV FILES) AND FOUND THAT CG (BLUE DOTS FOR CREST AABB AMPLITUDES) AND RED DOTS FOR CG ON THE TROUGH AABB AMPLITUDES) LIE ON THE VERTICAL LINES OF SPECTRUMS LIKE VERTICAL STRIPS WHEN ALL THESE TRANSPARENT RECTANGLES AABB  BOUNDING BOXES (LEFT MARGIN ALIGNED ORIGINS OF ALL AABB RECTANGULAR TRACING PAPERS  PLACED ON ORIGINS OF OTHERS SO THAT ALL ORIGINS ARE PLACED ON SAME LOCATION IN STACK) ARE SHOWING THAT IF THERE ARE N DIFFERENT FREQUENCIES PRESENT IN THE WAVE THEN THERE ARE N SHARP VERTICAL LINES ARE THERE IF WE LOOK AT THE STACK OF TRANSPARENT ALIGNED AABB OBJECTS WHICH SIGNIFIES THE FREQUENCY ANALYSIS IS EASIER TO HANDLE AND NO NEED OF FFT LIKE DATA HANDLING NECESSARY AT ALL NO NEED TO COS COMPONENTS NO NEED OF SIN COMPONENTS NECESSARY TO DO SPECTRAL ANALYSIS ON TEH WAVES LIKE OBJECTS.

    // AXIOM 7   SANJOY NATH'S QHENOMENOLOGY(Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing)  PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS HAS FOUND THAT(ON TESTING ON 380000 WAV FILES)     THE TERMS LIKE WAVE LENGTH IS NOT NECESSARY TO ANALYSE WAVE LIKE DIGITAL SIGNALS THE TERMS LIKE FREQUENCY ARE NOT NECESSARY TO HANDLE DIGITAL SIGNAL PROCESSINGS NOR WE NEED THE COS COMPONENTS TO DESCRIBE WAVE LIKE DATA NOR WE NEED SIN COMPONENTS LIKE OBJECTS TO DESCRIBE WAVE OR DIGITAL SIGNAL LIKE DATA (THE QUEUE OF AABB RECTANGLES BEHAVE AS WAVE NATURE OF THE LIGHT AND STACKS OF SAME AABB RECTANGLES  BEHAVE AS THE PARTICLE NATURE OF LIGHT AND SPECTRAL NATURE OF LIGHTS ARE NOTHING BUT THE ALIGNMENTS OF CG OF THESE AABB OBJECTS STACKED AND OBSERVED FROM TOP VIEWS) SANJOY NATH'S QHENOMENOLOGICAL REASONING ON THEORY OF WAVE IS COMPLETELY IGNORING THE TERMS LIKE FREQUENCY TERMS LIKE WAVE LENGTHS AND TREATS WAVES AS QUEUE OF AABB OBJECTS OR STACKS OF AABB OBJECTS

    // AXIOM 6 SANJOY NATH'S QHENOMENOLOGY(Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing)  PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS       HAVE SEEN THAT IF THE CREST AABB BOXES HAS WIDTHS (IN MICRO SECONDS TAKEN) HAS W_C_1 , W_C_2 ... W_C_N   AND THE WITHS IN MICROSECONDS FOR TROUGHS OBJECTS AS W_T_1 , W_T_2 ... W_T_N  (TOTAL NUMBER OF CRESTS AND TOTAL NUMBER OF TROUGHS ARE NOT NECESSARILY SAME BECAUSE SOMETIMES THERE ARE JUST ZERO TOUCHING CRESTS AND JUST ZERO TOUCHING TROUGHS ARE THERE STILL THE PROPERTIES HOLDS) AFTER OBSERVING THE STACKS OF TRANSPARENT AABB OBJECTS ...... THE OBSERVATIONS ON 380000 WAVE FILES STUDY REVEALS THAT  WHEN FREQUENCY OF SAME SOUND (TONE) INCREASES THE WIDTHS SQUIZES AND WHEN THE FREQUENCY OF SAME SOUND (TONE) DECREASES  THEN THE WIDTHS OF CREST TROUGH INCREASES SO THE NUMBER OF CRESTS PER SECOND(1000000 MICROSECOND) CHANGES AS THE FREQUENCY (TONE) OF THE SOUND CHANGES AND NUMBER OF SHARP VERTICAL LINES (FORMED DUE TO ALIGNMENT OF SUCH MARKED  CG POINTS)VISIBLE ON STACK OF TRANSPARENT AABB  OF CREST OBJECTS AND TROUGH OBJECTS ULTIMATELY GIVES CLARITY OF NUMBER OF FREQUENCIES INVOLVED IN THE WAVE (SPECTRAL ANALYSIS IS EASY) SINCE ALL TEH CREST AND TROUGHS HAVE QUEUE_SERIAL_NUMBERS SO WE CAN RE ARRANGE THE STACK TO QUEUE AGAIN AFTER THE ANALYSIS IS DONE

    // AXIOM 8  SANJOY NATH'S QHENOMENOLOGY (Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS  WE PRESERVE THESE OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA  BEFORE STACKING DONE FROM THE QUEUE STRUCTURE AND WE CAN ALSO ALTER THE WHOLE SIGNAL TO RECONSTRUCT RANDOM VALUES OF AMPLITUDES FOR CREST AABB FOR TROUGH AABB PRESERVING THE GEOMETRY OF CG POINTS AS THESE ARE AND THESE KIND OF RECONSTRUCTIONS OF WAVES WITH COMPLETELY OTHER SETS OF AMPLITUDES WILL GENERATE SAME SPECTRAL BEHAVIORS AS THE ACTUAL WAVE OBJECTS THIS IS INTERESTING PROPERTY OF  SANJOY NATH'S QHENOMENOLOGY PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS 

    // AXIOM 9   SANJOY NATH'S QHENOMENOLOGY (Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS  CONSIDERS ALL PHOTON LIKE THINGS ARE NOT EXISTING WHILE INSTEAD THE WAVES CRESTS AND TROUGHS QUE DISMATLES TO STACKS OF AABB (AS IN THE AXIOMS HERE)WHILE LIGHT PASS THROUGH SLITS OR WHILE LIGHT PASS THROUGH CRYSTALS THE CREST AABB QUEUES AND TROUGH AABB QUEUES CLOOAPSES (DISMANTLES) AND THE STACKS ARE FORMED AS PER SANJOY NATHS DESCRIPTIONS IN  SANJOY NATH'S QHENOMENOLOGY PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS  SO WE GET THE SPECTRUMS OF CG ALIGNED WHICH WE MISTAKE AS FREQUENCY SPECTRUMS...  SANJOY NATH'S QHENOMENOLOGY PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS  CLAIMS THAT THESE ARE NOT AT ALL FREQUENCY SPECTRUMS BUT THESE ARE CG ALIGGNED ON STACKS OF AABB LOOKS LIKE VERTICAL LINE SPECTRUMS DUE TO STACKING OF CREST AABB STACKING OF TROUGH AABB OBJECTS

    public static class SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

    {

        //////public class ContainerAABB

        //////{

        //////    // this is a specialized different architecture followed to find the frequencies considering containerAABB for full cycles

        //////    //Sanjoy Nath's theory of waves AABB systems 

        //////    public int StartIndex;

        //////    public int EndIndex;

        //////    public int LocalMaximaCount;

        //////    public int LocalMinimaCount;

        //////    public int MonotonicIncreasingSegments;

        //////    public int MonotonicDecreasingSegments;

        //////    public ContainerAABB(int start, int end, float[] samples)

        //////    {

        //////        StartIndex = start;

        //////        EndIndex = end;

        //////        AnalyzeTopology(samples);// TOPOLOGY NUMBERING SYSTEMS USED

        //////    }//public ContainerAABB(int start, int end, float[] samples)

        //////    // but the neighbourhood natures (topologically scale invatiant neighbourhoods of zero crossings) are to use to find these

        //////    //several crest AABB several trough AABB can come inside one single cycle so one single container AABB object can hold several numbers of crest AABB several numbers of Trough AABB objects

        //////    private void AnalyzeTopology(float[] samples)

        //////    {

        //////        LocalMaximaCount = 0;

        //////        LocalMinimaCount = 0;

        //////        MonotonicIncreasingSegments = 0;

        //////        MonotonicDecreasingSegments = 0;

        //////        bool? increasing = null;

        //////        for (int i = StartIndex + 1; i < EndIndex - 1; i++)

        //////        {

        //////            if (samples[i] > samples[i - 1] && samples[i] > samples[i + 1])

        //////                LocalMaximaCount++;

        //////            if (samples[i] < samples[i - 1] && samples[i] < samples[i + 1])

        //////                LocalMinimaCount++;

        //////            if (samples[i] > samples[i - 1])

        //////            {

        //////                if (increasing != true)

        //////                {

        //////                    MonotonicIncreasingSegments++;

        //////                    increasing = true;

        //////                }

        //////            }

        //////            else if (samples[i] < samples[i - 1])

        //////            {

        //////                if (increasing != false)

        //////                {

        //////                    MonotonicDecreasingSegments++;

        //////                    increasing = false;

        //////                }//if (increasing != false)

        //////            }

        //////        }

        //////    }// private void AnalyzeTopology(float[] samples)

        //////    public bool IsValidTopology()

        //////    {

        //////        // Core idea: only count as cycle if one crest + one trough sometimes many other number of crest and trough can involve in one cycles

        //////        return (LocalMaximaCount >= 1 && LocalMinimaCount >= 1);

        //////    }// public bool IsValidTopology()

        //////}// public class ContainerAABB

        public class ContainerAABB

        {

            public int StartIndex;

            public int EndIndex;

            public int LocalMaximaCount;

            public int LocalMinimaCount;

            public int MonotonicIncreasingSegments;

            public int MonotonicDecreasingSegments;

            public List<int> CrestStartIndices = new List<int>();

            public List<int> TroughStartIndices = new List<int>();

            public ContainerAABB(int start, int end, float[] samples)

            {

                StartIndex = start;

                EndIndex = end;

                AnalyzeTopology(samples); // strict scale-invariant analysis

            }

            private void AnalyzeTopology(float[] samples)

            {

                LocalMaximaCount = 0;

                LocalMinimaCount = 0;

                MonotonicIncreasingSegments = 0;

                MonotonicDecreasingSegments = 0;

                bool? increasing = null;

                //TO IMPLEMENT THIS STYLES    if (curr > prev && curr > next && IsValidLocalExtremum(samples, i, 4))

                for (int i = StartIndex + 1; i < EndIndex - 1; i++)

                {

                    float prev = samples[i - 1];

                    float curr = samples[i];

                    float next = samples[i + 1];

                    if (curr > prev && curr > next)

                    {

                        LocalMaximaCount++;

                        CrestStartIndices.Add(i);

                    }

                    if (curr < prev && curr < next)

                    {

                        LocalMinimaCount++;

                        TroughStartIndices.Add(i);

                    }

                    if (curr > prev)

                    {

                        if (increasing != true)

                        {

                            MonotonicIncreasingSegments++;

                            increasing = true;

                        }

                    }

                    else if (curr < prev)

                    {

                        if (increasing != false)

                        {

                            MonotonicDecreasingSegments++;

                            increasing = false;

                        }

                    }

                }

            }

            public bool IsValidTopology()

            {

                // Allow many crests and troughs in one container; minimal condition for valid container

                return (CrestStartIndices.Count >= 1 && TroughStartIndices.Count >= 1);

            }//public bool IsValidTopology()

            bool IsValidLocalExtremum(float[] samples, int index, int window)

            {

                int start = Math.Max(index - window, 1);

                int end = Math.Min(index + window, samples.Length - 2);

                float left = samples[start];

                float right = samples[end];

                float current = samples[index];

                return Math.Abs(current - left) > 0.005f && Math.Abs(current - right) > 0.005f;

            }//bool IsValidLocalExtremum(float[] samples, int index, int window)

        }// public class ContainerAABB

        // this is also necessary for some other purpose

        public class ContainerAabbObject

        {

            // this is also necessary for some other purpose

            public int StartIndex;

            public int EndIndex;

            public List<AabbObject> ContainedAabbs;

            public float CG_X;

            public float CG_Y;

            public int LocalMaximaCount;

            public int LocalMinimaCount;

            public int TotalPositive;

            public int TotalNegative;

            public double PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 0;// THIS IS IMPORTANT SENSITIVE TOPOLOGY CLASSIFIER DATA TO IDENTIFY SAME CLASSIFIABLE TOPOLOGICALLY SIMILAR AABB 

                                                                                         //THIS NUMBER IS CALCULATED AS   

                                                                                         //   Math.Floor((AreaUnderCurve/TotalArea_ofThisAABB)*100000)  + Math.Floor( (MonotonicIncreaseCount/Samples.Count)*10000) +    Math.Floor( (MonotonicDecreaseCount/Samples.Count)*1000) +  RANK_OF_LEFT_MOST_SAMPLE_IN_CURRENT_AABB_THROUGH_PERCENTILE_CALCULATION_ON_ABSOLUTE_AMPLITUDES_VALUE____NOT_WITH_ABSOLUTE_AMPLITUDES_VALUES*100 +  RANK_OF_RIGHT_MOST_SAMPLE_IN_CURRENT_AABB_THROUGH_PERCENTILE_CALCULATION_ON_ABSOLUTE_AMPLITUDES_VALUE____NOT_WITH_ABSOLUTE_AMPLITUDES_VALUES*10 + NUMBER_OF_SAMPLES_IN_CURRENT_AABB_OBJECT/1000

            public int PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 0;

            // THIS RANK IS ALSO NECESSARY TO GET REPORTED AND THIS RANK IS THE ACTUAL CLASSIFIER FOR THE AABB OBJECT TO IDENTIFY HOW MANY SAME TOPOLOGY AABB OBJECT PRESENT IN THE WHOLE WAVE SIGNAL DATA

            //THIS IS ALSO TAKEN WITH REFERENCE TO WIDEST CASES... TALLEST AABB IS NOT CONSIDERED SINCE WE ARE CLASSIFYING THE WIDTH IN TIME DOMAINS TOPOLOGY CALCULATIONS TRY TO NOT TO KEEP EXCESSIVE DETAILS OF AMPLITUDES ONLY WE NEED TO KEEP TRACKS OF PARTIAL TOPOLOGY RELATED RUBBER BAND SEMI INFORMATIVE DETAILS OF THE AMPLITUDES TIP POLYGONS SHAPES ... IF WE DONT TRY TO FORGET DETAILS OF AMPLITUDES EXACT DETAILS WE CANNOT DO TOPOLOGY LEVEL CLASSIFICATIONS. WE ONLY TRY TO CAPTURE OVERALL APPROXIMATE SHAPES OF THE AABB OBJECTS AND WE TRY TO CAPTURE THE TOPOLOGY RELATED SIMILARITIES CLASSIFIED FOR THE AABB OBJECTS SUCH THAT WE CAN IDENTIFY THE BROADEST CATEGORIES OF AABB OBJECTS SCALED DIFFERENTLY AND FITTED TO CONSTRUCT THE WHOLE SIGNAL WAVE

            //THE DEEP DETAILS OF ALL SHAPES OF AABB OBJECTS WILL DISTURB US TO CLASSIFY AND SO WE DONT WANT TO STORE DEEP DETAILS OF AMPLITUDES TO CLASSIFY THE AABB OBJECTS. WE WILL TRY TO DESIGN THE METRIC (AS DEFINED HERE) WHICH FORGETS SPECIFIC DETAILS OF SAMPLES WHEN GENERATING TOPOLOGY CLASSIFIER NUMBER METRIC FOR AABB OBJECTS JUST TO KNOW APPROXIMATELY THE TWO AABB OBJECTS ARE ALMOST SIMILAR OR NOT (THATS IT)       WE WANT TO KNOW IF THE WHOLE WAVE SIGNAL IS DEVELOPED WITH VERY DIFFERENT KINDS OF DISSIMILAR BUILDING BLOCKS???? OR THE WAVE SIGNAL IS CONSTRUCTED WITH MULTIPLE SCALED SAME TOPOLOGY AABB OBJECTS ?????? THIS KIND OF INFORMATIONS ARE IMPORTANT IN QHENOMENOLOGICAL REASONING ON WAVES

            // THESE X SCALE FACTORS WILL ALSO HELP US TO UNDERSTAND THE NUMBER OF TIMES SAME AABB OBJECT IS USED WITH DIFFERENT LEVELS OF PACKING FACTORS???????????

            public double PUBLIC_DOUBLE___SCALE_FACTOR_X___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 1;

            //THIS IS ALSO TAKEN WITH REFERENCE TO WIDEST CASES... TALLEST AABB IS NOT CONSIDERED SINCE WE ARE CLASSIFYING THE WIDTH IN TIME DOMAINS TOPOLOGY CALCULATIONS TRY TO NOT TO KEEP EXCESSIVE DETAILS OF AMPLITUDES ONLY WE NEED TO KEEP TRACKS OF PARTIAL TOPOLOGY RELATED RUBBER BAND SEMI INFORMATIVE DETAILS OF THE AMPLITUDES TIP POLYGONS SHAPES ... IF WE DONT TRY TO FORGET DETAILS OF AMPLITUDES EXACT DETAILS WE CANNOT DO TOPOLOGY LEVEL CLASSIFICATIONS. WE ONLY TRY TO CAPTURE OVERALL APPROXIMATE SHAPES OF THE AABB OBJECTS AND WE TRY TO CAPTURE THE TOPOLOGY RELATED SIMILARITIES CLASSIFIED FOR THE AABB OBJECTS SUCH THAT WE CAN IDENTIFY THE BROADEST CATEGORIES OF AABB OBJECTS SCALED DIFFERENTLY AND FITTED TO CONSTRUCT THE WHOLE SIGNAL WAVE

            //THE DEEP DETAILS OF ALL SHAPES OF AABB OBJECTS WILL DISTURB US TO CLASSIFY AND SO WE DONT WANT TO STORE DEEP DETAILS OF AMPLITUDES TO CLASSIFY THE AABB OBJECTS. WE WILL TRY TO DESIGN THE METRIC (AS DEFINED HERE) WHICH FORGETS SPECIFIC DETAILS OF SAMPLES WHEN GENERATING TOPOLOGY CLASSIFIER NUMBER METRIC FOR AABB OBJECTS JUST TO KNOW APPROXIMATELY THE TWO AABB OBJECTS ARE ALMOST SIMILAR OR NOT (THATS IT)       WE WANT TO KNOW IF THE WHOLE WAVE SIGNAL IS DEVELOPED WITH VERY DIFFERENT KINDS OF DISSIMILAR BUILDING BLOCKS???? OR THE WAVE SIGNAL IS CONSTRUCTED WITH MULTIPLE SCALED SAME TOPOLOGY AABB OBJECTS ?????? THIS KIND OF INFORMATIONS ARE IMPORTANT IN QHENOMENOLOGICAL REASONING ON WAVES

            public double PUBLIC_DOUBLE___SCALE_FACTOR_Y___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 1;

        }// public class ContainerAabbObject

        public class ZeroCrossingPoint

        {

            public int Index;

            public float AmplitudeBefore;

            public float AmplitudeAfter;

            public string CrossingType; // e.g., CT, TC, CC, TT, ST, TS, SC, CS, SS

            public double PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 0;// THIS IS IMPORTANT SENSITIVE TOPOLOGY CLASSIFIER DATA TO IDENTIFY SAME CLASSIFIABLE TOPOLOGICALLY SIMILAR AABB 

                                                                                         //THIS NUMBER IS CALCULATED AS   

                                                                                         //   Math.Floor((AreaUnderCurve/TotalArea_ofThisAABB)*100000)  + Math.Floor( (MonotonicIncreaseCount/Samples.Count)*10000) +    Math.Floor( (MonotonicDecreaseCount/Samples.Count)*1000) +  RANK_OF_LEFT_MOST_SAMPLE_IN_CURRENT_AABB_THROUGH_PERCENTILE_CALCULATION_ON_ABSOLUTE_AMPLITUDES_VALUE____NOT_WITH_ABSOLUTE_AMPLITUDES_VALUES*100 +  RANK_OF_RIGHT_MOST_SAMPLE_IN_CURRENT_AABB_THROUGH_PERCENTILE_CALCULATION_ON_ABSOLUTE_AMPLITUDES_VALUE____NOT_WITH_ABSOLUTE_AMPLITUDES_VALUES*10 + NUMBER_OF_SAMPLES_IN_CURRENT_AABB_OBJECT/1000

            public int PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 0;

            // THIS RANK IS ALSO NECESSARY TO GET REPORTED AND THIS RANK IS THE ACTUAL CLASSIFIER FOR THE AABB OBJECT TO IDENTIFY HOW MANY SAME TOPOLOGY AABB OBJECT PRESENT IN THE WHOLE WAVE SIGNAL DATA

            //THIS IS ALSO TAKEN WITH REFERENCE TO WIDEST CASES... TALLEST AABB IS NOT CONSIDERED SINCE WE ARE CLASSIFYING THE WIDTH IN TIME DOMAINS TOPOLOGY CALCULATIONS TRY TO NOT TO KEEP EXCESSIVE DETAILS OF AMPLITUDES ONLY WE NEED TO KEEP TRACKS OF PARTIAL TOPOLOGY RELATED RUBBER BAND SEMI INFORMATIVE DETAILS OF THE AMPLITUDES TIP POLYGONS SHAPES ... IF WE DONT TRY TO FORGET DETAILS OF AMPLITUDES EXACT DETAILS WE CANNOT DO TOPOLOGY LEVEL CLASSIFICATIONS. WE ONLY TRY TO CAPTURE OVERALL APPROXIMATE SHAPES OF THE AABB OBJECTS AND WE TRY TO CAPTURE THE TOPOLOGY RELATED SIMILARITIES CLASSIFIED FOR THE AABB OBJECTS SUCH THAT WE CAN IDENTIFY THE BROADEST CATEGORIES OF AABB OBJECTS SCALED DIFFERENTLY AND FITTED TO CONSTRUCT THE WHOLE SIGNAL WAVE

            //THE DEEP DETAILS OF ALL SHAPES OF AABB OBJECTS WILL DISTURB US TO CLASSIFY AND SO WE DONT WANT TO STORE DEEP DETAILS OF AMPLITUDES TO CLASSIFY THE AABB OBJECTS. WE WILL TRY TO DESIGN THE METRIC (AS DEFINED HERE) WHICH FORGETS SPECIFIC DETAILS OF SAMPLES WHEN GENERATING TOPOLOGY CLASSIFIER NUMBER METRIC FOR AABB OBJECTS JUST TO KNOW APPROXIMATELY THE TWO AABB OBJECTS ARE ALMOST SIMILAR OR NOT (THATS IT)       WE WANT TO KNOW IF THE WHOLE WAVE SIGNAL IS DEVELOPED WITH VERY DIFFERENT KINDS OF DISSIMILAR BUILDING BLOCKS???? OR THE WAVE SIGNAL IS CONSTRUCTED WITH MULTIPLE SCALED SAME TOPOLOGY AABB OBJECTS ?????? THIS KIND OF INFORMATIONS ARE IMPORTANT IN QHENOMENOLOGICAL REASONING ON WAVES

            // THESE X SCALE FACTORS WILL ALSO HELP US TO UNDERSTAND THE NUMBER OF TIMES SAME AABB OBJECT IS USED WITH DIFFERENT LEVELS OF PACKING FACTORS???????????

            public double PUBLIC_DOUBLE___SCALE_FACTOR_X___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 1;

            //THIS IS ALSO TAKEN WITH REFERENCE TO WIDEST CASES... TALLEST AABB IS NOT CONSIDERED SINCE WE ARE CLASSIFYING THE WIDTH IN TIME DOMAINS TOPOLOGY CALCULATIONS TRY TO NOT TO KEEP EXCESSIVE DETAILS OF AMPLITUDES ONLY WE NEED TO KEEP TRACKS OF PARTIAL TOPOLOGY RELATED RUBBER BAND SEMI INFORMATIVE DETAILS OF THE AMPLITUDES TIP POLYGONS SHAPES ... IF WE DONT TRY TO FORGET DETAILS OF AMPLITUDES EXACT DETAILS WE CANNOT DO TOPOLOGY LEVEL CLASSIFICATIONS. WE ONLY TRY TO CAPTURE OVERALL APPROXIMATE SHAPES OF THE AABB OBJECTS AND WE TRY TO CAPTURE THE TOPOLOGY RELATED SIMILARITIES CLASSIFIED FOR THE AABB OBJECTS SUCH THAT WE CAN IDENTIFY THE BROADEST CATEGORIES OF AABB OBJECTS SCALED DIFFERENTLY AND FITTED TO CONSTRUCT THE WHOLE SIGNAL WAVE

            //THE DEEP DETAILS OF ALL SHAPES OF AABB OBJECTS WILL DISTURB US TO CLASSIFY AND SO WE DONT WANT TO STORE DEEP DETAILS OF AMPLITUDES TO CLASSIFY THE AABB OBJECTS. WE WILL TRY TO DESIGN THE METRIC (AS DEFINED HERE) WHICH FORGETS SPECIFIC DETAILS OF SAMPLES WHEN GENERATING TOPOLOGY CLASSIFIER NUMBER METRIC FOR AABB OBJECTS JUST TO KNOW APPROXIMATELY THE TWO AABB OBJECTS ARE ALMOST SIMILAR OR NOT (THATS IT)       WE WANT TO KNOW IF THE WHOLE WAVE SIGNAL IS DEVELOPED WITH VERY DIFFERENT KINDS OF DISSIMILAR BUILDING BLOCKS???? OR THE WAVE SIGNAL IS CONSTRUCTED WITH MULTIPLE SCALED SAME TOPOLOGY AABB OBJECTS ?????? THIS KIND OF INFORMATIONS ARE IMPORTANT IN QHENOMENOLOGICAL REASONING ON WAVES

            public double PUBLIC_DOUBLE___SCALE_FACTOR_Y___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 1;

        }// public class ZeroCrossingPoint

        public static List<string> Get100msTopologyBasedFrequencyReport___SAANS_STYLES_TOPOLOGY_ZERO_CROSSINGS_NEIGHBOURHOODS_USED(float[] samples, int sampleRate, double millisecondsPerWindow)

        {

            //THIS IS DONE THROUGH ZERO CROSSINGS NEIGHBOURHOODS TOPOLOGY SYSTEMS

            int windowSize = (int)((millisecondsPerWindow / 1000.0) * sampleRate);

            int totalWindows = samples.Length / windowSize;

            List<string> reportLines = new List<string>();

            reportLines.Add("Start_ms,End_ms,ContainerAABBCount,TopologyBasedFrequencyHz");

            for (int w = 0; w < totalWindows; w++)

            {

                int startIndex = w * windowSize;

                int endIndex = Math.Min(startIndex + windowSize, samples.Length);

                int neighbourhoods_planning_samples_countsfor___Get100msTopologyBasedFrequencyReport___SAANS_STYLES_TOPOLOGY_ZERO_CROSSINGS_NEIGHBOURHOODS_USED

                      =

                       windowSize * 3;//saan has to find deeper calculations for this topology searchings sample counts for the neighbourhoods at zero crossings

                List<ContainerAABB> containerCycles 

                    =

                    ExtractContainerAABBCycles___SAAN_STYLES_AABB_WITH_ZERO_CROSSINGS_TOPOLOGY

                    (samples, startIndex, endIndex, neighbourhoods_planning_samples_countsfor___Get100msTopologyBasedFrequencyReport___SAANS_STYLES_TOPOLOGY_ZERO_CROSSINGS_NEIGHBOURHOODS_USED);

                int containerCount = containerCycles.Count;

                float durationSec = (endIndex - startIndex) / (float)sampleRate;

                float frequency = containerCount / durationSec;

                int startMs = (int)(startIndex * 1000.0 / sampleRate);

                int endMs = (int)(endIndex * 1000.0 / sampleRate);

                reportLines.Add($"{startMs},{endMs},{containerCount},{frequency:F2}");

            }//for (int w = 0; w < totalWindows; w++)

            return reportLines;

        }// public static List<string> Get100msTopologyBasedFrequencyReport___SAANS_STYLES_TOPOLOGY_ZERO_CROSSINGS_NEIGHBOURHOODS_USED(float[] samples, int sampleRate, double millisecondsPerWindow)

        //////public static List<string> Get100msTopologyBasedFrequencyReport(float[] samples, int sampleRate, double millisecondsPerWindow)

        //////{

        //////    int windowSize = (int)((millisecondsPerWindow / 1000.0) * sampleRate);

        //////    int totalWindows = samples.Length / windowSize;

        //////    List<string> reportLines = new List<string>();

        //////    reportLines.Add("Start_ms,End_ms,ContainerAABBCount,TopologyBasedFrequencyHz");

        //////    for (int w = 0; w < totalWindows; w++)

        //////    {

        //////        int startIndex = w * windowSize;

        //////        int endIndex = Math.Min(startIndex + windowSize, samples.Length);

        //////        List<ContainerAABB> containerCycles = ExtractContainerAABBCycles(samples, startIndex, endIndex);

        //////        int containerCount = containerCycles.Count;

        //////        float durationSec = (endIndex - startIndex) / (float)sampleRate;

        //////        float frequency = containerCount / durationSec;

        //////        int startMs = (int)(startIndex * 1000.0 / sampleRate);

        //////        int endMs = (int)(endIndex * 1000.0 / sampleRate);

        //////        reportLines.Add($"{startMs},{endMs},{containerCount},{frequency:F2}");

        //////    }// for (int w = 0; w < totalWindows; w++)

        //////    return reportLines;

        //////}// public static List<string> Get100msTopologyBasedFrequencyReport(float[] samples, int sampleRate, double millisecondsPerWindow)

        private static List<ContainerAABB> ExtractContainerAABBCycles___SAAN_STYLES_AABB_WITH_ZERO_CROSSINGS_TOPOLOGY(float[] samples, int start, int end,int NUMBER_OF_SAMPLES_NECESSARY_TO_CHECK_LOCAL_TOPOLOGY_SIMILARITY_AT_ZERO_CROSSINGS)

        {

            List<ContainerAABB> containerList = new List<ContainerAABB>();

            int lastZCP = -1;

            int lookBack = NUMBER_OF_SAMPLES_NECESSARY_TO_CHECK_LOCAL_TOPOLOGY_SIMILARITY_AT_ZERO_CROSSINGS;// 6; // how many samples before and after ZCP to check for local topology

            for (int i = start + lookBack; i < end - lookBack; i++)

            {

                bool isZCP = (samples[i - 1] >= 0 && samples[i] < 0) || (samples[i - 1] < 0 && samples[i] >= 0);

                if (!isZCP) continue;

                if (lastZCP >= 0)

                {

                    int regionStart = lastZCP;

                    int regionEnd = i;

                    ContainerAABB container = new ContainerAABB(regionStart, regionEnd, samples);

                    if (container.IsValidTopology())

                    {

                        containerList.Add(container);

                    }// if (container.IsValidTopology())

                }//if (lastZCP >= 0)

                lastZCP = i;

            }//for (int i = start + lookBack; i < end - lookBack; i++)

            return containerList;

        }// private static List<ContainerAABB> ExtractContainerAABBCycles___SAAN_STYLES_AABB_WITH_ZERO_CROSSINGS_TOPOLOGY(float[] samples, int start, int end,int NUMBER_OF_SAMPLES_NECESSARY_TO_CHECK_LOCAL_TOPOLOGY_SIMILARITY_AT_ZERO_CROSSINGS)

        //////private static List<ContainerAABB> ExtractContainerAABBCycles(float[] samples, int start, int end)

        //////{

        //////    List<ContainerAABB> cycles = new List<ContainerAABB>();

        //////    int currentStart = -1;

        //////    bool lookingForZero = true;

        //////    for (int i = start + 1; i < end; i++)

        //////    {

        //////        // Detect zero crossing (connector between AABBs)

        //////        if ((samples[i - 1] >= 0 && samples[i] < 0) || (samples[i - 1] < 0 && samples[i] >= 0))

        //////        {

        //////            if (currentStart >= 0)

        //////            {

        //////                int currentEnd = i;

        //////                var container = new ContainerAABB(currentStart, currentEnd, samples);

        //////                if (container.IsValidTopology())  // crest+trough presence, local extrema count, etc.

        //////                    cycles.Add(container);

        //////            }//if (currentStart >= 0)

        //////            currentStart = i;

        //////        }//if ((samples[i - 1] >= 0 && samples[i] < 0) || (samples[i - 1] < 0 && samples[i] >= 0))

        //////    }//for (int i = start + 1; i < end; i++)

        //////    return cycles;

        //////}// private static List<ContainerAABB> ExtractContainerAABBCycles(float[] samples, int start, int end)

        private static string ClassifyZC(float[] samples, int idx1, int idx2)

        {

            if (samples[idx1] > 0 && samples[idx2] <= 0) return "CT"; // Crest→Trough

            if (samples[idx1] < 0 && samples[idx2] >= 0) return "TC"; // Trough→Crest

            if (samples[idx1] > 0 && samples[idx2] > 0) return "CC";

            if (samples[idx1] < 0 && samples[idx2] < 0) return "TT";

            if (samples[idx1] == 0 || samples[idx2] == 0) return "SS"; // silence to any

            return "UNKNOWN";

        }// private static string ClassifyZC(float[] samples, int idx1, int idx2)

        public static List<ZeroCrossingPoint> GetZeroCrossings(float[] samples)

        {

            var result = new List<ZeroCrossingPoint>();

            for (int i = 1; i < samples.Length; i++)

            {

                if ((samples[i - 1] > 0 && samples[i] <= 0) || (samples[i - 1] < 0 && samples[i] >= 0))

                {

                    var zp = new ZeroCrossingPoint

                    {

                        Index = i,

                        AmplitudeBefore = samples[i - 1],

                        AmplitudeAfter = samples[i],

                        CrossingType = ClassifyZC(samples, i - 1, i)

                    };

                    result.Add(zp);

                }

            }

            return result;

        }// public static List<ZeroCrossingPoint> GetZeroCrossings(float[] samples)

        //////public static List<ContainerAabbObject> IdentifyContainers(List<AabbObject> aabbs)

        //////{

        //////    var result = new List<ContainerAabbObject>();

        //////    int i = 0;

        //////    while (i < aabbs.Count)

        //////    {

        //////        var group = new List<AabbObject>();

        //////        int start = aabbs[i].StartIndex;

        //////        while (i < aabbs.Count && aabbs[i].CrestOrTrough != null)

        //////        {

        //////            group.Add(aabbs[i]);

        //////            i++;

        //////            if (group.Count >= 2 && aabbs[i - 1].CrestOrTrough == "TROUGH") break;

        //////        }

        //////        int end = group.Last().EndIndex;

        //////        var container = new ContainerAabbObject

        //////        {

        //////            StartIndex = start,

        //////            EndIndex = end,

        //////            ContainedAabbs = group,

        //////            CG_X = group.Average(a => a.CG_X),

        //////            CG_Y = group.Average(a => a.CG_Y),

        //////            LocalMaximaCount = group.Sum(a => a.MonotonicIncreaseCount),

        //////            LocalMinimaCount = group.Sum(a => a.MonotonicDecreaseCount),

        //////            TotalPositive = group.Sum(a => a.PositiveCount),

        //////            TotalNegative = group.Sum(a => a.NegativeCount)

        //////        };

        //////        result.Add(container);

        //////    }

        //////    return result;

        //////}// public static List<ContainerAabbObject> IdentifyContainers(List<AabbObject> aabbs)

        //////public static List<ZeroCrossingPoint> ExtractZeroCrossings(float[] samples)

        //////{

        //////    var zeroCrossings = new List<ZeroCrossingPoint>();

        //////    for (int i = 1; i < samples.Length; i++)

        //////    {

        //////        float prev = samples[i - 1];

        //////        float curr = samples[i];

        //////        if ((prev < 0 && curr >= 0) || (prev > 0 && curr <= 0))

        //////        {

        //////            var crossing = new ZeroCrossingPoint

        //////            {

        //////                Index = i,

        //////                AmplitudeBefore = prev,

        //////                AmplitudeAfter = curr,

        //////                CrossingType = ClassifyZeroCrossing(prev, curr), // CT, TC, etc.

        //////            };

        //////            // Fill remaining topology-sensitive fields here

        //////            crossing.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = Math.Round(

        //////                Math.Abs(prev - curr) * 1000 + i % 100, 2); // dummy for now

        //////            zeroCrossings.Add(crossing);

        //////        }

        //////    }

        //////    return zeroCrossings;

        //////}//public static List<ZeroCrossingPoint> ExtractZeroCrossings(float[] samples)

        /// <summary>

        /// 

        /// 

        /// 

        /// 

        /// 

        /// 

        /// 

        /// 

        /// 

        /// </summary>

        /// <param name="before"></param>

        /// <param name="after"></param>

        /// <returns></returns>

        //////public static List<ZeroCrossingPoint> ExtractZeroCrossings(float[] samples)

        //////{

        //////    var zeroCrossings = new List<ZeroCrossingPoint>();

        //////    if (samples == null || samples.Length < 2)

        //////        return zeroCrossings;

        //////    int totalSamples = samples.Length;

        //////    var absSorted = samples.Select(Math.Abs).OrderBy(x => x).ToArray();

        //////    for (int i = 1; i < totalSamples; i++)

        //////    {

        //////        float prev = samples[i - 1];

        //////        float curr = samples[i];

        //////        if ((prev < 0 && curr >= 0) || (prev > 0 && curr <= 0))

        //////        {

        //////            string type = ClassifyZeroCrossing(prev, curr);

        //////            // Rank of abs(prev)

        //////            double absPrev = Math.Abs(prev);

        //////            double absCurr = Math.Abs(curr);

        //////            int rankPrev = Array.BinarySearch(absSorted, absPrev);

        //////            int rankCurr = Array.BinarySearch(absSorted, absCurr);

        //////            if (rankPrev < 0) rankPrev = ~rankPrev;

        //////            if (rankCurr < 0) rankCurr = ~rankCurr;

        //////            double percentilePrev = (rankPrev * 100.0) / totalSamples;

        //////            double percentileCurr = (rankCurr * 100.0) / totalSamples;

        //////            // Delta amplitude

        //////            float delta = Math.Abs(curr - prev);

        //////            // Sensitivity number construction

        //////            double topologyClassifier =

        //////                  Math.Floor(delta * 1000) // amplitude change sharpness

        //////                + Math.Floor(percentilePrev) * 100  // left neighbourhood intensity

        //////                + Math.Floor(percentileCurr) * 10   // right neighbourhood intensity

        //////                + (i * 1.0 / totalSamples);         // fractional position in wave

        //////            var crossing = new ZeroCrossingPoint

        //////            {

        //////                Index = i,

        //////                AmplitudeBefore = prev,

        //////                AmplitudeAfter = curr,

        //////                CrossingType = type,

        //////                PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER =

        //////                    Math.Round(topologyClassifier, 4) // 4 decimal precision is enough

        //////            };

        //////            zeroCrossings.Add(crossing);

        //////        }

        //////    }

        //////    return zeroCrossings;

        //////}// public static List<ZeroCrossingPoint> ExtractZeroCrossings(float[] samples)

        //TO WRITE THIS ALSO

        //////public static List<ZeroCrossingPoint> ReclassifyZeroCrossings

        //////    (

        //////    float[] samples,

        //////    List<int> zeroCrossingIndices,

        //////    AabbObject[] aabbAtIndex

        //////)

        //////{

        //////}

        public static List<ZeroCrossingPoint> ExtractZeroCrossingsUsingAabbs(float[] samples, List<AabbObject> aabbs)

        {

            StringBuilder ___temp_stringBuilder_inside_the___ExtractZeroCrossingsUsingAabbs = new StringBuilder();

            ___temp_stringBuilder_inside_the___ExtractZeroCrossingsUsingAabbs.Clear();

            var zeroCrossings = new List<ZeroCrossingPoint>();

            // === STEP 1: Build fast lookup dictionaries ===

            var indexToAabb = new AabbObject[samples.Length]; // fast mapping of sample index → aabb

            foreach (var aabb in aabbs)

            {

                for (int i = aabb.StartIndex; i <= aabb.EndIndex && i < samples.Length; i++)

                {

                    indexToAabb[i] = aabb;

                }//for (int i = aabb.StartIndex; i <= aabb.EndIndex && i < samples.Length; i++)

            }//foreach (var aabb in aabbs)

            // === STEP 2: Find Zero Crossings ===

            for (int i = 1; i < samples.Length; i++)

            {

                float prev = samples[i - 1];

                float curr = samples[i];

                if ((prev < 0 && curr >= 0) || (prev > 0 && curr <= 0))

                {

                    AabbObject leftAabb = indexToAabb[i - 1];

                    AabbObject rightAabb = indexToAabb[i];

                    int leftRank = 0, rightRank = 0;

                    double topologyMetric = 0;

                    if (leftAabb != null && rightAabb != null)

                    {

                        float leftVal = prev;

                        float rightVal = curr;

                        int leftIdxInAabb = i - 1 - leftAabb.StartIndex;

                        int rightIdxInAabb = i - rightAabb.StartIndex;

                        if (leftIdxInAabb >= 0 && leftIdxInAabb < leftAabb.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.Count)

                            leftRank = leftAabb.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER[leftIdxInAabb];

                        if (rightIdxInAabb >= 0 && rightIdxInAabb < rightAabb.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.Count)

                            rightRank = rightAabb.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER[rightIdxInAabb];

                        double percentileLeft = (leftRank * 100.0) / Math.Max(1, leftAabb.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.Count);

                        double percentileRight = (rightRank * 100.0) / Math.Max(1, rightAabb.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.Count);

                        // Bucketing

                        int ampJumpBucket = (int)(Math.Abs(Math.Abs(leftVal) - Math.Abs(rightVal)) * 1000);

                        int percentileLeftBucket = (int)(percentileLeft / 5);   // 0–20 buckets

                        int percentileRightBucket = (int)(percentileRight / 5); // 0–20 buckets

                        //////topologyMetric =

                        //////    ampJumpBucket * 100000 +

                        //////    percentileLeftBucket * 1000 +

                        //////    percentileRightBucket * 10;

                        topologyMetric =

                            ampJumpBucket * 100000 +

                            percentileLeftBucket * 100 +

                            percentileRightBucket * 10;

                    }

                    var crossing = new ZeroCrossingPoint

                    {

                        Index = i,

                        AmplitudeBefore = prev,

                        AmplitudeAfter = curr,

                        CrossingType = ClassifyZeroCrossing(prev, curr),

                        PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = topologyMetric

                    };

                    zeroCrossings.Add(crossing);

                }

            }

            // === STEP 3: Rank topology classes by frequency ===

            var grouped = zeroCrossings

                .GroupBy(z => z.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER)

                .OrderByDescending(g => g.Count())

                .ToList();

            int rank = 1;

            foreach (var group in grouped)

            {

                foreach (var crossing in group)

                {

                    crossing.PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = rank;

                }

                rank++;

            }

            return zeroCrossings;

        }// public static List<ZeroCrossingPoint> ExtractZeroCrossingsUsingAabbs(float[] samples, List<AabbObject> aabbs)

        //////public static List<ZeroCrossingPoint> DISCARDING__________THIS_IS_TOOOOOO_SLOW__________ExtractZeroCrossingsUsingAabbs(float[] samples, List<AabbObject> aabbs)

        //////{

        //////    var zeroCrossings = new List<ZeroCrossingPoint>();

        //////    for (int i = 1; i < samples.Length; i++)

        //////    {

        //////        float prev = samples[i - 1];

        //////        float curr = samples[i];

        //////        if ((prev < 0 && curr >= 0) || (prev > 0 && curr <= 0))

        //////        {

        //////            AabbObject leftAabb = aabbs.LastOrDefault(a => a.StartIndex <= i - 1 && a.EndIndex >= i - 1);

        //////            AabbObject rightAabb = aabbs.FirstOrDefault(a => a.StartIndex <= i && a.EndIndex >= i);

        //////            int leftRank = 0, rightRank = 0;

        //////            double topologyMetric = 0;

        //////            if (leftAabb != null && rightAabb != null)

        //////            {

        //////                float leftVal = samples[i - 1];

        //////                float rightVal = samples[i];

        //////                int leftIdxInAabb = i - 1 - leftAabb.StartIndex;

        //////                int rightIdxInAabb = i - rightAabb.StartIndex;

        //////                if (leftIdxInAabb >= 0 && leftIdxInAabb < leftAabb.Ranks.Count)

        //////                    leftRank = leftAabb.Ranks[leftIdxInAabb];

        //////                if (rightIdxInAabb >= 0 && rightIdxInAabb < rightAabb.Ranks.Count)

        //////                    rightRank = rightAabb.Ranks[rightIdxInAabb];

        //////                double percentileLeft = (leftRank * 100.0) / leftAabb.Ranks.Count;

        //////                double percentileRight = (rightRank * 100.0) / rightAabb.Ranks.Count;

        //////                // DISCRETIZE to reduce uniqueness (bucket by 5%)

        //////                int ampJumpBucket = (int)Math.Floor(Math.Abs(Math.Abs(leftVal) - Math.Abs(rightVal)) * 1000);

        //////                int percentileLeftBucket = (int)(percentileLeft / 5);   // 0–20 buckets

        //////                int percentileRightBucket = (int)(percentileRight / 5); // 0–20 buckets

        //////                // FINAL: Quantized Topology Classification Key

        //////                topologyMetric =

        //////                    ampJumpBucket * 100000 +

        //////                    percentileLeftBucket * 1000 +

        //////                    percentileRightBucket * 10;

        //////            }

        //////            var crossing = new ZeroCrossingPoint

        //////            {

        //////                Index = i,

        //////                AmplitudeBefore = prev,

        //////                AmplitudeAfter = curr,

        //////                CrossingType = ClassifyZeroCrossing(prev, curr),

        //////                PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = topologyMetric

        //////            };

        //////            zeroCrossings.Add(crossing);

        //////        }

        //////    }

        //////    // === GROUP & RANK: Assign Topology Class Ranks ===

        //////    var grouped = zeroCrossings

        //////        .GroupBy(z => z.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER)

        //////        .OrderByDescending(g => g.Count()) // Most common class = rank 1

        //////        .ToList();

        //////    int rank = 1;

        //////    foreach (var group in grouped)

        //////    {

        //////        foreach (var crossing in group)

        //////        {

        //////            crossing.PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = rank;

        //////        }

        //////        rank++;

        //////    }

        //////    return zeroCrossings;

        //////}// public static List<ZeroCrossingPoint> ExtractZeroCrossingsUsingAabbs(float[] samples, List<AabbObject> aabbs)

        //////These two lines are the main culprits:

        //////AabbObject leftAabb = aabbs.LastOrDefault(a => a.StartIndex <= i - 1 && a.EndIndex >= i - 1);

        //////AabbObject rightAabb = aabbs.FirstOrDefault(a => a.StartIndex <= i && a.EndIndex >= i);

        //////• LastOrDefault(...) and FirstOrDefault(...) inside a for loop over millions of samples causes O(n × m) time where:

        //////o n = total samples

        //////o   m = total AABBs

        //////This causes hundreds of millions of comparisons on large WAV files.

        //////public static List<ZeroCrossingPoint> DISCARDING___IT_GENERATES_ONLY_RANKS__1_OR_0____ExtractZeroCrossingsUsingAabbs(float[] samples, List<AabbObject> aabbs)

        //////        {

        //////            var zeroCrossings = new List<ZeroCrossingPoint>();

        //////            int totalSamples = samples.Length;

        //////            //  Precompute: which AABB each sample index belongs to

        //////            AabbObject[] aabbAtIndex = new AabbObject[totalSamples];

        //////            foreach (var aabb in aabbs)

        //////            {

        //////                for (int i = aabb.StartIndex; i <= aabb.EndIndex && i < totalSamples; i++)

        //////                {

        //////                    aabbAtIndex[i] = aabb;

        //////                }// for (int i = aabb.StartIndex; i <= aabb.EndIndex && i < totalSamples; i++)

        //////            }//foreach (var aabb in aabbs)

        //////            //  Now loop efficiently

        //////            for (int i = 1; i < totalSamples; i++)

        //////            {

        //////                float prev = samples[i - 1];

        //////                float curr = samples[i];

        //////                if ((prev < 0 && curr >= 0) || (prev > 0 && curr <= 0))

        //////                {

        //////                    AabbObject leftAabb = aabbAtIndex[i - 1];

        //////                    AabbObject rightAabb = aabbAtIndex[i];

        //////                    int leftRank = 0, rightRank = 0;

        //////                    double topologyMetric = 0;

        //////                    if (leftAabb != null && rightAabb != null)

        //////                    {

        //////                        int leftIdx = i - 1 - leftAabb.StartIndex;

        //////                        int rightIdx = i - rightAabb.StartIndex;

        //////                        if (leftIdx >= 0 && leftIdx < leftAabb.Ranks.Count)

        //////                            leftRank = leftAabb.Ranks[leftIdx];

        //////                        if (rightIdx >= 0 && rightIdx < rightAabb.Ranks.Count)

        //////                            rightRank = rightAabb.Ranks[rightIdx];

        //////                        double percL = (leftRank * 100.0) / leftAabb.Ranks.Count;

        //////                        double percR = (rightRank * 100.0) / rightAabb.Ranks.Count;

        //////                        topologyMetric =

        //////                            Math.Floor(Math.Abs(Math.Abs(prev) - Math.Abs(curr)) * 1000000) +

        //////                            Math.Floor(percL * 1000 + percR * 100) +

        //////                            i % 100;

        //////                    }// if (leftAabb != null && rightAabb != null)

        //////                    zeroCrossings.Add(new ZeroCrossingPoint

        //////                    {

        //////                        Index = i,

        //////                        AmplitudeBefore = prev,

        //////                        AmplitudeAfter = curr,

        //////                        CrossingType = ClassifyZeroCrossing(prev, curr),

        //////                        PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = topologyMetric

        //////                    });

        //////                }//if ((prev < 0 && curr >= 0) || (prev > 0 && curr <= 0))

        //////            }//for (int i = 1; i < totalSamples; i++)

        //////            return zeroCrossings;

        //////        }// public static List<ZeroCrossingPoint> ExtractZeroCrossingsUsingAabbs(float[] samples, List<AabbObject> aabbs)

        //////public static List<ZeroCrossingPoint> DISCARDING_____________THESE_ARE_TOO_SLOW_OVER_COMPARING_____ExtractZeroCrossingsUsingAabbs(float[] samples, List<AabbObject> aabbs)

        //////{

        //////    var zeroCrossings = new List<ZeroCrossingPoint>();

        //////    for (int i = 1; i < samples.Length; i++)

        //////    {

        //////        float prev = samples[i - 1];

        //////        float curr = samples[i];

        //////        if ((prev < 0 && curr >= 0) || (prev > 0 && curr <= 0))

        //////        {

        //////            // Find the left and right AABBs

        //////            AabbObject leftAabb = aabbs.LastOrDefault(a => a.StartIndex <= i - 1 && a.EndIndex >= i - 1);

        //////            AabbObject rightAabb = aabbs.FirstOrDefault(a => a.StartIndex <= i && a.EndIndex >= i);

        //////            int leftRank = 0, rightRank = 0;

        //////            double topologyMetric = 0;

        //////            if (leftAabb != null && rightAabb != null)

        //////            {

        //////                float leftVal = samples[i - 1];

        //////                float rightVal = samples[i];

        //////                int leftIdxInAabb = i - 1 - leftAabb.StartIndex;

        //////                int rightIdxInAabb = i - rightAabb.StartIndex;

        //////                if (leftIdxInAabb >= 0 && leftIdxInAabb < leftAabb.Ranks.Count)

        //////                    leftRank = leftAabb.Ranks[leftIdxInAabb];

        //////                if (rightIdxInAabb >= 0 && rightIdxInAabb < rightAabb.Ranks.Count)

        //////                    rightRank = rightAabb.Ranks[rightIdxInAabb];

        //////                double percentileLeft = (leftRank * 100.0) / leftAabb.Ranks.Count;

        //////                double percentileRight = (rightRank * 100.0) / rightAabb.Ranks.Count;

        //////                // Final Qhenomenological Topology Sensitiveness Metric

        //////                topologyMetric =

        //////                    Math.Floor(Math.Abs(Math.Abs(leftVal) - Math.Abs(rightVal)) * 1000000) +

        //////                    Math.Floor(percentileLeft * 1000 + percentileRight * 100) +

        //////                    i % 100;

        //////            }

        //////            var crossing = new ZeroCrossingPoint

        //////            {

        //////                Index = i,

        //////                AmplitudeBefore = prev,

        //////                AmplitudeAfter = curr,

        //////                CrossingType = ClassifyZeroCrossing(prev, curr),

        //////                PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = topologyMetric

        //////            };

        //////            zeroCrossings.Add(crossing);

        //////        }

        //////    }

        //////    return zeroCrossings;

        //////}// public static List<ZeroCrossingPoint> ExtractZeroCrossingsUsingAabbs(float[] samples, List<AabbObject> aabbs)

        public static void AssignZeroCrossingRanksBySensitivity(List<ZeroCrossingPoint> crossings)

        {

            var ordered = crossings.OrderByDescending(c => c.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER).ToList();

            for (int i = 0; i < ordered.Count; i++)

                ordered[i].PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = i + 1;

        }// public static void AssignZeroCrossingRanksBySensitivity(List<ZeroCrossingPoint> crossings)

        ////////////////////////////////       i think you are doing this zero crossing classifications on overall sorted amplitudes in whole samples... But i asked to do the comparisons of the percentiles calculations on the basis of left aabb to righ aabb comparing.... not on overall samples list...So i think we need to call the zero crossing classifications in two stages... First we need to identify the zero crossing to detect AABB objects and then we need to classify the aabb objects as we have done...then take the sample index of zero crossing region , samples[] to do checking also and real comparing of left side and right side are to do between the left side aabb object and right side aabb object at the zero crossing index and the percentiles of sample ranks are not to do on overall samples.............instead the samples_percentile_ranks_in_left_side_aabb to samples_percentile_ranks_in_right_side_aabb for the sample_index location...So this is not the process as below...

        /////////////////////ExtractZeroCrossings(float[] samples) need to rewwrite the zero crossing topology classifications differently as described 

        public static List<ZeroCrossingPoint> DISCARDING_____________SINCE_THIS_IS_NOT_DOING_ZERO_CROSSING_TOPOLOGY_CLASSIFIERS___NUMBERING___PROPERLY_____ExtractZeroCrossings(float[] samples)

        {

            ////////////////////////////////       i think you are doing this zero crossing classifications on overall sorted amplitudes in whole samples... But i asked to do the comparisons of the percentiles calculations on the basis of left aabb to righ aabb comparing.... not on overall samples list...So i think we need to call the zero crossing classifications in two stages... First we need to identify the zero crossing to detect AABB objects and then we need to classify the aabb objects as we have done...then take the sample index of zero crossing region , samples[] to do checking also and real comparing of left side and right side are to do between the left side aabb object and right side aabb object at the zero crossing index and the percentiles of sample ranks are not to do on overall samples.............instead the samples_percentile_ranks_in_left_side_aabb to samples_percentile_ranks_in_right_side_aabb for the sample_index location...So this is not the process as below...

            ///////////////ExtractZeroCrossings(float[] samples) need to rewwrite the zero crossing topology classifications differently as described 

            var zeroCrossings = new List<ZeroCrossingPoint>();

            // Prepare a double[] sorted absolute amplitudes array

            double[] absSorted = samples.Select(s => Math.Abs((double)s)).OrderBy(x => x).ToArray();

            int totalSamples = samples.Length;

            for (int i = 1; i < samples.Length; i++)

            {

                float prev = samples[i - 1];

                float curr = samples[i];

                if ((prev < 0 && curr >= 0) || (prev > 0 && curr <= 0))

                {

                    string crossingType = ClassifyZeroCrossing(prev, curr); // e.g., CT, TC, etc.

                    // Rank of amplitudes using percentile location in absSorted[]

                    int rankPrev = Array.BinarySearch(absSorted, (double)Math.Abs(prev));

                    int rankCurr = Array.BinarySearch(absSorted, (double)Math.Abs(curr));

                    if (rankPrev < 0) rankPrev = ~rankPrev;

                    if (rankCurr < 0) rankCurr = ~rankCurr;

                    double percentilePrev = (rankPrev * 100.0) / totalSamples;

                    double percentileCurr = (rankCurr * 100.0) / totalSamples;

                    // Topology classification metric (scalable, topology sensitive)

                    //////double topologyMetric =

                    //////    Math.Floor(Math.Abs(prev - curr) * 100000) +                      // amplitude jump

                    //////    Math.Floor((percentilePrev + percentileCurr) * 10) +             // edge sensitivity

                    //////    i % 100;                                                         // local variation jitter

                    ///

                    double topologyMetric =

                        Math.Floor(Math.Abs(Math.Abs(prev) - Math.Abs(curr)) * 1000000) +                      // amplitude jump

                        Math.Floor((percentilePrev*1000 + percentileCurr*100) ) +             // edge sensitivity

                        i % 100;

                    var crossing = new ZeroCrossingPoint

                    {

                        Index = i,

                        AmplitudeBefore = prev,

                        AmplitudeAfter = curr,

                        CrossingType = crossingType,

                        PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = topologyMetric

                    };

                    zeroCrossings.Add(crossing);

                }

            }

            return zeroCrossings;

        }// public static List<ZeroCrossingPoint> ExtractZeroCrossings(float[] samples)

        //////public static string ClassifyZeroCrossing(float prev, float curr)

        //////{

        //////    if (prev < 0 && curr > 0) return "TC"; // Trough → Crest

        //////    if (prev > 0 && curr < 0) return "CT"; // Crest → Trough

        //////    if (prev > 0 && curr == 0) return "CS"; // Crest → Silence

        //////    if (prev < 0 && curr == 0) return "TS"; // Trough → Silence

        //////    if (prev == 0 && curr > 0) return "SC"; // Silence → Crest

        //////    if (prev == 0 && curr < 0) return "ST"; // Silence → Trough

        //////    if (prev == 0 && curr == 0) return "SS"; // Silence → Silence

        //////    return "XX"; // Unknown or edge case

        //////}// public static string ClassifyZeroCrossing(float prev, float curr)

        public static string ClassifyZeroCrossing(float before, float after)

        {

            if (before > 0 && after < 0) return "CT"; // Crest → Trough

            if (before < 0 && after > 0) return "TC"; // Trough → Crest

            if (before > 0 && after > 0) return "CC";

            if (before < 0 && after < 0) return "TT";

            if (before == 0 && after == 0) return "SS";

            if (before == 0 && after > 0) return "SC";

            if (before == 0 && after < 0) return "ST";

            if (before > 0 && after == 0) return "CS";

            if (before < 0 && after == 0) return "TS";

            return "??";

        }// public static string ClassifyZeroCrossing(float before, float after)

        //////public static string ClassifyZeroCrossing(float before, float after)

        //////{

        //////    if (before > 0 && after < 0) return "C→T";

        //////    if (before < 0 && after > 0) return "T→C";

        //////    if (before > 0 && after > 0) return "C→C";

        //////    if (before < 0 && after < 0) return "T→T";

        //////    if (before == 0 && after == 0) return "S→S";

        //////    if (before == 0 && after > 0) return "S→C";

        //////    if (before == 0 && after < 0) return "S→T";

        //////    if (before > 0 && after == 0) return "C→S";

        //////    if (before < 0 && after == 0) return "T→S";

        //////    return "UNK";

        //////}// public static string ClassifyZeroCrossing(float before, float after)

        public static string GenerateZeroCrossingClassificationReport(List<ZeroCrossingPoint> zeroCrossings)

        {

            var sb = new System.Text.StringBuilder();

            sb.AppendLine("#INDEX\tTYPE\tINDEX\tAMP_BEFORE\tAMP_AFTER\tTOPOLOGY_NUM\tTOPOLOGY_RANK\tSCALE_X\tSCALE_Y");

            for (int i = 0; i < zeroCrossings.Count; i++)

            {

                var z = zeroCrossings[i];

                sb.AppendLine(

                    i + "\t" +

                    z.CrossingType + "\t" +

                    z.Index + "\t" +

                    z.AmplitudeBefore.ToString("F4") + "\t" +

                    z.AmplitudeAfter.ToString("F4") + "\t" +

                    z.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F2") + "\t" +

                    z.PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER + "\t" +

                    z.PUBLIC_DOUBLE___SCALE_FACTOR_X___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F3") + "\t" +

                    z.PUBLIC_DOUBLE___SCALE_FACTOR_Y___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F3")

                );

            }//for (int i = 0; i < zeroCrossings.Count; i++)

            return sb.ToString();

        }//public static string GenerateZeroCrossingClassificationReport(List<ZeroCrossingPoint> zeroCrossings)

        public static string GenerateGroupedContainerClassificationReport(List<ContainerAabbObject> containers)

        {

            if (containers == null || containers.Count == 0)

                return "#NO CONTAINERS FOUND";

            var sb = new StringBuilder();

            // Header

            sb.AppendLine(

                "#TOPOLOGY_NUM\tRANK\tCOUNT_IN_GROUP\t" +

                "START\tEND\tCG_X\tCG_Y\tMAX_AABBS\tPOS_TOTAL\tNEG_TOTAL\t" +

                "LOC_MAX_CNT\tLOC_MIN_CNT"

            );

            // Group by topology number and sort by descending count

            var grouped = containers

                .GroupBy(c => c.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER)

                .OrderByDescending(g => g.Count())

                .ToList();

            int currentRank = 1;

            foreach (var group in grouped)

            {

                int countInGroup = group.Count();

                double topoValue = group.Key;

                foreach (var container in group)

                {

                    sb.AppendLine(

                        topoValue.ToString("F0") + "\t" +                             // TOPOLOGY_NUM

                        currentRank + "\t" +                                          // RANK

                        countInGroup + "\t" +                                         // COUNT_IN_GROUP

                        container.StartIndex + "\t" +

                        container.EndIndex + "\t" +

                        container.CG_X.ToString("F2") + "\t" +

                        container.CG_Y.ToString("F2") + "\t" +

                        container.ContainedAabbs.Count + "\t" +                      // AABB count

                        container.TotalPositive + "\t" +

                        container.TotalNegative + "\t" +

                        container.LocalMaximaCount + "\t" +

                        container.LocalMinimaCount

                    );

                }

                currentRank++;

            }

            return sb.ToString();

        }//public static string GenerateGroupedContainerClassificationReport(List<ContainerAabbObject> containers)

        public static List<ContainerAabbObject> IdentifyContainers(List<AabbObject> aabbs)

        {

            var containers = new List<ContainerAabbObject>();

            if (aabbs == null || aabbs.Count < 2) return containers;

            int currentStart = 0;

            for (int i = 1; i < aabbs.Count; i++)

            {

                var prev = aabbs[i - 1];

                var curr = aabbs[i];

                if (prev.CrestOrTrough != curr.CrestOrTrough)

                {

                    var group = aabbs.GetRange(currentStart, i - currentStart + 1);

                    var container = new ContainerAabbObject

                    {

                        StartIndex = group.First().StartIndex,

                        EndIndex = group.Last().EndIndex,

                        ContainedAabbs = group,

                        CG_X = group.Average(x => x.CG_X___IN_MICROS_SECONDS_UNITS),

                        CG_Y = group.Average(x => x.CG_Y___IN_AMPLITUDES_UNITS),

                        LocalMaximaCount = CountLocalMaxima(group),

                        LocalMinimaCount = CountLocalMinima(group),

                        TotalPositive = group.Sum(x => x.PositiveCount),

                        TotalNegative = group.Sum(x => x.NegativeCount)

                    };

                    // --- Composite Topology Metric Between Two Interacting AABBs ---

                    double width = container.EndIndex - container.StartIndex + 1;

                    var left = group.First();

                    var right = group.Last();

                    double deltaCG_X = Math.Abs(left.CG_X___IN_MICROS_SECONDS_UNITS - right.CG_X___IN_MICROS_SECONDS_UNITS);

                    double deltaCG_Y = Math.Abs(left.CG_Y___IN_AMPLITUDES_UNITS - right.CG_Y___IN_AMPLITUDES_UNITS);

                    double height = Math.Max(Math.Abs(left.MaxAmplitude), Math.Abs(right.MaxAmplitude));

                    double areaRatio = right.AreaUnderCurve != 0 ? left.AreaUnderCurve / right.AreaUnderCurve : 1;

                    double monoSymmetry =

                        (right.MonotonicIncreaseCount + right.MonotonicDecreaseCount) != 0

                        ? (double)(left.MonotonicIncreaseCount + left.MonotonicDecreaseCount) /

                          (right.MonotonicIncreaseCount + right.MonotonicDecreaseCount)

                        : 1;

                    double sampleSymmetry =

                        right.SAMPLE_COUNT_IN_THIS_AABB_OBJECT > 0

                        ? (double)left.SAMPLE_COUNT_IN_THIS_AABB_OBJECT / right.SAMPLE_COUNT_IN_THIS_AABB_OBJECT

                        : 1;

                    int leftRank = left.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.FirstOrDefault();

                    int rightRank = right.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.LastOrDefault();

                    container.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER =

                        Math.Floor(deltaCG_X / (width + 1) * 100000) + // time separation

                        Math.Floor(deltaCG_Y / (height + 0.001) * 10000) + // amplitude separation

                        Math.Floor(Math.Abs(areaRatio) * 1000) +

                        Math.Floor(Math.Abs(monoSymmetry) * 100) +

                        Math.Floor(Math.Abs(sampleSymmetry) * 10) +

                        leftRank + rightRank;

                    containers.Add(container);

                    currentStart = i + 1;

                }

            }

            return containers;

        }// public static List<ContainerAabbObject> IdentifyContainers(List<AabbObject> aabbs)

        //////public static List<ContainerAabbObject> IdentifyContainers(List<AabbObject> aabbs)

        //////{

        //////    var containers = new List<ContainerAabbObject>();

        //////    if (aabbs == null || aabbs.Count == 0)

        //////        return containers;

        //////    int currentStart = 0;

        //////    for (int i = 1; i < aabbs.Count; i++)

        //////    {

        //////        // Cycle closure heuristic: Trough followed by Crest or vice versa

        //////        if (aabbs[i - 1].CrestOrTrough != aabbs[i].CrestOrTrough)

        //////        {

        //////            var group = aabbs.GetRange(currentStart, i - currentStart + 1);

        //////            var container = new ContainerAabbObject

        //////            {

        //////                StartIndex = group.First().StartIndex,

        //////                EndIndex = group.Last().EndIndex,

        //////                ContainedAabbs = group,

        //////                //////CG_X = group.Average(x => x.CG_X),

        //////                //////CG_Y = group.Average(x => x.CG_Y),

        //////                ///

        //////                CG_X = group.Average(x => x.CG_X___IN_MICROS_SECONDS_UNITS),

        //////                CG_Y = group.Average(x => x.CG_Y___IN_AMPLITUDES_UNITS),

        //////                LocalMaximaCount = CountLocalMaxima(group),

        //////                LocalMinimaCount = CountLocalMinima(group),

        //////                TotalPositive = group.Sum(a => a.PositiveCount),

        //////                TotalNegative = group.Sum(a => a.NegativeCount)

        //////            };

        //////            // TOPOLOGY CLASSIFIER METRIC (approximate shape-based):

        //////            double area = group.Sum(a => a.AreaUnderCurve);

        //////            double monoInc = group.Sum(a => a.MonotonicIncreaseCount);

        //////            double monoDec = group.Sum(a => a.MonotonicDecreaseCount);

        //////            int totalSamples = group.Sum(a => a.Samples.Count);

        //////            container.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER =

        //////                Math.Floor((area / totalSamples) * 100000) +

        //////                Math.Floor((monoInc / totalSamples) * 10000) +

        //////                Math.Floor((monoDec / totalSamples) * 1000) +

        //////                group.First().Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.First() * 100 +

        //////                group.Last().Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.Last() * 10 +

        //////                (totalSamples / 1000);

        //////            containers.Add(container);

        //////            currentStart = i + 1;

        //////        }//if (aabbs[i - 1].CrestOrTrough != aabbs[i].CrestOrTrough)

        //////    }//for (int i = 1; i < aabbs.Count; i++)

        //////    return containers;

        //////}// public static List<ContainerAabbObject> IdentifyContainers(List<AabbObject> aabbs)

        public static int CountLocalMaxima(List<AabbObject> group)

        {

            int count = 0;

            foreach (var aabb in group)

            {

                var s = aabb.Samples;

                for (int i = 1; i < s.Count - 1; i++)

                    if (s[i] > s[i - 1] && s[i] > s[i + 1]) count++;

            }//foreach (var aabb in group)

            return count;

        }// public static int CountLocalMaxima(List<AabbObject> group)

        public static int CountLocalMinima(List<AabbObject> group)

        {

            int count = 0;

            foreach (var aabb in group)

            {

                var s = aabb.Samples;

                for (int i = 1; i < s.Count - 1; i++)

                    if (s[i] < s[i - 1] && s[i] < s[i + 1]) count++;

            }//foreach (var aabb in group)

            return count;

        }// public static int CountLocalMinima(List<AabbObject> group)

        public static string GenerateContainerAabbClassificationReport(List<ContainerAabbObject> containers)

        {

            var sb = new System.Text.StringBuilder();

            sb.AppendLine("#INDEX\tSTART\tEND\tCG_X\tCG_Y\tLOCAL_MAX\tLOCAL_MIN\tPOS_CNT\tNEG_CNT\tTOPOLOGY_NUM\tTOPOLOGY_RANK\tSCALE_X\tSCALE_Y");

            for (int i = 0; i < containers.Count; i++)

            {

                var c = containers[i];

                sb.AppendLine(

                    i + "\t" +

                    c.StartIndex + "\t" +

                    c.EndIndex + "\t" +

                    c.CG_X.ToString("F2") + "\t" +

                    c.CG_Y.ToString("F2") + "\t" +

                    c.LocalMaximaCount + "\t" +

                    c.LocalMinimaCount + "\t" +

                    c.TotalPositive + "\t" +

                    c.TotalNegative + "\t" +

                    c.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F2") + "\t" +

                    c.PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER + "\t" +

                    c.PUBLIC_DOUBLE___SCALE_FACTOR_X___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F3") + "\t" +

                    c.PUBLIC_DOUBLE___SCALE_FACTOR_Y___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F3")

                );

            }

            return sb.ToString();

        }//public static string GenerateContainerAabbClassificationReport(List<ContainerAabbObject> containers)

        //////public static List<ContainerAabbObject> IdentifyContainers(List<AabbObject> aabbs)

        //////{

        //////    var result = new List<ContainerAabbObject>();

        //////    int i = 0;

        //////    while (i < aabbs.Count)

        //////    {

        //////        var group = new List<AabbObject>();

        //////        int start = aabbs[i].StartIndex;

        //////        // SAFELY ADD AABBs INTO GROUP BASED ON PATTERN

        //////        while (i < aabbs.Count /* && aabbs[i].CrestOrTrough != null */) // remove condition if not assigned

        //////        {

        //////            group.Add(aabbs[i]);

        //////            i++;

        //////            if (group.Count >= 2 /* && aabbs[i - 1].CrestOrTrough == "TROUGH" */) break;

        //////        }

        //////        if (group.Count == 0)

        //////            continue; // prevent Last() crash

        //////        int end = group.Last().EndIndex;

        //////        var container = new ContainerAabbObject

        //////        {

        //////            StartIndex = start,

        //////            EndIndex = end,

        //////            ContainedAabbs = group,

        //////            CG_X = group.Average(a => a.CG_X),

        //////            CG_Y = group.Average(a => a.CG_Y),

        //////            LocalMaximaCount = group.Sum(a => a.MonotonicIncreaseCount),

        //////            LocalMinimaCount = group.Sum(a => a.MonotonicDecreaseCount),

        //////            TotalPositive = group.Sum(a => a.PositiveCount),

        //////            TotalNegative = group.Sum(a => a.NegativeCount)

        //////        };

        //////        result.Add(container);

        //////    }

        //////    return result;

        //////}// public static List<ContainerAabbObject> IdentifyContainers(List<AabbObject> aabbs)

        public static void SaveZeroCrossingReport(List<ZeroCrossingPoint> crossings, string filePath)

        {

            var sb = new System.Text.StringBuilder();

            sb.AppendLine("Index\tAmpBefore\tAmpAfter\tType");

            foreach (var zc in crossings)

                sb.AppendLine($"{zc.Index}\t{zc.AmplitudeBefore:F3}\t{zc.AmplitudeAfter:F3}\t{zc.CrossingType}");

            File.WriteAllText(filePath, sb.ToString());

        }// public static void SaveZeroCrossingReport(List<ZeroCrossingPoint> crossings, string filePath)

        public static void SaveContainerAabbReport(List<ContainerAabbObject> containers, string filePath)

        {

            var sb = new System.Text.StringBuilder();

            sb.AppendLine("Start\tEnd\tCG_X\tCG_Y\tLocMax\tLocMin\tPosCount\tNegCount\tContained");

            foreach (var c in containers)

                sb.AppendLine($"{c.StartIndex}\t{c.EndIndex}\t{c.CG_X:F2}\t{c.CG_Y:F2}\t{c.LocalMaximaCount}\t{c.LocalMinimaCount}\t{c.TotalPositive}\t{c.TotalNegative}\t{c.ContainedAabbs.Count}");

            File.WriteAllText(filePath, sb.ToString());

        }// public static void SaveContainerAabbReport(List<ContainerAabbObject> containers, string filePath)

        public class AabbObject

        {

            public int StartIndex;

            public int EndIndex;

            public ZeroCrossingPoint LEFT_SIDE_UNIQUE___ZeroCrossingPoint__OBJECT;

            public ZeroCrossingPoint RIGHT_SIDE_UNIQUE___ZeroCrossingPoint__OBJECT;

            public int MICROSECONDS_WIDTH_OF_CURRENT_AabbObject;

            public List<float> Samples = new List<float>();

            public int SAMPLE_COUNT_IN_THIS_AABB_OBJECT = 0;

            public float MaxAmplitude;

            public float MinAmplitude;

            public float AreaUnderCurve;

            public int PositiveCount;

            public int NegativeCount;

            public int MonotonicIncreaseCount;

            public int MonotonicDecreaseCount;

            public List<int> Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER;

            public float CG_X___IN_MICROS_SECONDS_UNITS;

            public float CG_Y___IN_AMPLITUDES_UNITS;

            public int PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__CG_X___IN_MICROS_SECONDS_UNITS___OUT_OF_TOTAL_WIDTH_OF_CURRENT_AabbObject;

            public int PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__CG_Y___IN_AMPLITUDES_UNITS___OUT_OF_MAX_AMPLITUDE_HEIGHT_WITHIN_OF_CURRENT_AabbObject;

            public string CrestOrTrough;

            public int PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__MonotonicIncreaseCount___OUT_OF_TOTAL_SAMPLES_IN_CURRENT_AABBOBJECT = 0;

            public int PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__MonotonicDecreaseCount___OUT_OF_TOTAL_SAMPLES_IN_CURRENT_AABBOBJECT = 0;

            public double PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB = 0;

            public int PUBLIC_INT_ROUNDED_NEAREST_WHOLE_NUMBER_AND_ABSOLUTE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB = 0;

            public double PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 0;// THIS IS IMPORTANT SENSITIVE TOPOLOGY CLASSIFIER DATA TO IDENTIFY SAME CLASSIFIABLE TOPOLOGICALLY SIMILAR AABB 

            //THIS NUMBER IS CALCULATED AS   

           //   Math.Floor((AreaUnderCurve/TotalArea_ofThisAABB)*100000)  + Math.Floor( (MonotonicIncreaseCount/Samples.Count)*10000) +    Math.Floor( (MonotonicDecreaseCount/Samples.Count)*1000) +  RANK_OF_LEFT_MOST_SAMPLE_IN_CURRENT_AABB_THROUGH_PERCENTILE_CALCULATION_ON_ABSOLUTE_AMPLITUDES_VALUE____NOT_WITH_ABSOLUTE_AMPLITUDES_VALUES*100 +  RANK_OF_RIGHT_MOST_SAMPLE_IN_CURRENT_AABB_THROUGH_PERCENTILE_CALCULATION_ON_ABSOLUTE_AMPLITUDES_VALUE____NOT_WITH_ABSOLUTE_AMPLITUDES_VALUES*10 + NUMBER_OF_SAMPLES_IN_CURRENT_AABB_OBJECT/1000

            public int PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 0;

            // THIS RANK IS ALSO NECESSARY TO GET REPORTED AND THIS RANK IS THE ACTUAL CLASSIFIER FOR THE AABB OBJECT TO IDENTIFY HOW MANY SAME TOPOLOGY AABB OBJECT PRESENT IN THE WHOLE WAVE SIGNAL DATA

            //THIS IS ALSO TAKEN WITH REFERENCE TO WIDEST CASES... TALLEST AABB IS NOT CONSIDERED SINCE WE ARE CLASSIFYING THE WIDTH IN TIME DOMAINS TOPOLOGY CALCULATIONS TRY TO NOT TO KEEP EXCESSIVE DETAILS OF AMPLITUDES ONLY WE NEED TO KEEP TRACKS OF PARTIAL TOPOLOGY RELATED RUBBER BAND SEMI INFORMATIVE DETAILS OF THE AMPLITUDES TIP POLYGONS SHAPES ... IF WE DONT TRY TO FORGET DETAILS OF AMPLITUDES EXACT DETAILS WE CANNOT DO TOPOLOGY LEVEL CLASSIFICATIONS. WE ONLY TRY TO CAPTURE OVERALL APPROXIMATE SHAPES OF THE AABB OBJECTS AND WE TRY TO CAPTURE THE TOPOLOGY RELATED SIMILARITIES CLASSIFIED FOR THE AABB OBJECTS SUCH THAT WE CAN IDENTIFY THE BROADEST CATEGORIES OF AABB OBJECTS SCALED DIFFERENTLY AND FITTED TO CONSTRUCT THE WHOLE SIGNAL WAVE

            //THE DEEP DETAILS OF ALL SHAPES OF AABB OBJECTS WILL DISTURB US TO CLASSIFY AND SO WE DONT WANT TO STORE DEEP DETAILS OF AMPLITUDES TO CLASSIFY THE AABB OBJECTS. WE WILL TRY TO DESIGN THE METRIC (AS DEFINED HERE) WHICH FORGETS SPECIFIC DETAILS OF SAMPLES WHEN GENERATING TOPOLOGY CLASSIFIER NUMBER METRIC FOR AABB OBJECTS JUST TO KNOW APPROXIMATELY THE TWO AABB OBJECTS ARE ALMOST SIMILAR OR NOT (THATS IT)       WE WANT TO KNOW IF THE WHOLE WAVE SIGNAL IS DEVELOPED WITH VERY DIFFERENT KINDS OF DISSIMILAR BUILDING BLOCKS???? OR THE WAVE SIGNAL IS CONSTRUCTED WITH MULTIPLE SCALED SAME TOPOLOGY AABB OBJECTS ?????? THIS KIND OF INFORMATIONS ARE IMPORTANT IN QHENOMENOLOGICAL REASONING ON WAVES

            // THESE X SCALE FACTORS WILL ALSO HELP US TO UNDERSTAND THE NUMBER OF TIMES SAME AABB OBJECT IS USED WITH DIFFERENT LEVELS OF PACKING FACTORS???????????

            public double PUBLIC_DOUBLE___SCALE_FACTOR_X___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 1;

            //THIS IS ALSO TAKEN WITH REFERENCE TO WIDEST CASES... TALLEST AABB IS NOT CONSIDERED SINCE WE ARE CLASSIFYING THE WIDTH IN TIME DOMAINS TOPOLOGY CALCULATIONS TRY TO NOT TO KEEP EXCESSIVE DETAILS OF AMPLITUDES ONLY WE NEED TO KEEP TRACKS OF PARTIAL TOPOLOGY RELATED RUBBER BAND SEMI INFORMATIVE DETAILS OF THE AMPLITUDES TIP POLYGONS SHAPES ... IF WE DONT TRY TO FORGET DETAILS OF AMPLITUDES EXACT DETAILS WE CANNOT DO TOPOLOGY LEVEL CLASSIFICATIONS. WE ONLY TRY TO CAPTURE OVERALL APPROXIMATE SHAPES OF THE AABB OBJECTS AND WE TRY TO CAPTURE THE TOPOLOGY RELATED SIMILARITIES CLASSIFIED FOR THE AABB OBJECTS SUCH THAT WE CAN IDENTIFY THE BROADEST CATEGORIES OF AABB OBJECTS SCALED DIFFERENTLY AND FITTED TO CONSTRUCT THE WHOLE SIGNAL WAVE

            //THE DEEP DETAILS OF ALL SHAPES OF AABB OBJECTS WILL DISTURB US TO CLASSIFY AND SO WE DONT WANT TO STORE DEEP DETAILS OF AMPLITUDES TO CLASSIFY THE AABB OBJECTS. WE WILL TRY TO DESIGN THE METRIC (AS DEFINED HERE) WHICH FORGETS SPECIFIC DETAILS OF SAMPLES WHEN GENERATING TOPOLOGY CLASSIFIER NUMBER METRIC FOR AABB OBJECTS JUST TO KNOW APPROXIMATELY THE TWO AABB OBJECTS ARE ALMOST SIMILAR OR NOT (THATS IT)       WE WANT TO KNOW IF THE WHOLE WAVE SIGNAL IS DEVELOPED WITH VERY DIFFERENT KINDS OF DISSIMILAR BUILDING BLOCKS???? OR THE WAVE SIGNAL IS CONSTRUCTED WITH MULTIPLE SCALED SAME TOPOLOGY AABB OBJECTS ?????? THIS KIND OF INFORMATIONS ARE IMPORTANT IN QHENOMENOLOGICAL REASONING ON WAVES

            public double PUBLIC_DOUBLE___SCALE_FACTOR_Y___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = 1;

            public int LocalMinimaCount___IN_CURRENT_AABB_OBJECT;

            public int LocalMaximaCount___IN_CURRENT_AABB_OBJECT;

            // public string CrestOrTrough; // ← new property

        }// public class AabbObject

        public static void ComputeTopologyClassifications(List<AabbObject> allAabbs)

        {

            if (allAabbs == null || allAabbs.Count == 0) return;

            double totalAreaAll = allAabbs.Sum(a => Math.Abs(a.AreaUnderCurve));

            foreach (var aabb in allAabbs)

            {

                double areaRatio = totalAreaAll > 0 ? Math.Abs(aabb.AreaUnderCurve) / totalAreaAll : 0;

                double incRatio = aabb.SAMPLE_COUNT_IN_THIS_AABB_OBJECT > 0

                    ? (double)aabb.MonotonicIncreaseCount / aabb.SAMPLE_COUNT_IN_THIS_AABB_OBJECT

                    : 0;

                double decRatio = aabb.SAMPLE_COUNT_IN_THIS_AABB_OBJECT > 0

                    ? (double)aabb.MonotonicDecreaseCount / aabb.SAMPLE_COUNT_IN_THIS_AABB_OBJECT

                    : 0;

                double areaPercent = aabb.PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB;

                int leftRank = aabb.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.Count > 0

                    ? aabb.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.First()

                    : 0;

                int rightRank = aabb.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.Count > 0

                    ? aabb.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.Last()

                    : 0;

                // Stable, discretized composite metric for classification

                aabb.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER =

                    Math.Floor(areaRatio * 1_000_000) +

                    Math.Floor(incRatio * 100_000) +

                    Math.Floor(decRatio * 10_000) +

                    Math.Floor(areaPercent * 1_000) +

                    leftRank * 100 +

                    rightRank * 10 +

                    aabb.SAMPLE_COUNT_IN_THIS_AABB_OBJECT / 1000;

            }

            // === GROUPING: Assign ranks based on topology ID

            var grouped = allAabbs

                .GroupBy(a => a.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER)

                .OrderByDescending(g => g.Max(a => a.MICROSECONDS_WIDTH_OF_CURRENT_AabbObject))

                .ToList();

            int currentRank = 1;

            foreach (var group in grouped)

            {

                int maxWidthMicroseconds = group.Max(a => a.MICROSECONDS_WIDTH_OF_CURRENT_AabbObject);

                float maxHeight = group.Max(a => Math.Abs(a.MaxAmplitude - a.MinAmplitude));

                foreach (var aabb in group)

                {

                    aabb.PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = currentRank;

                    int thisWidth = aabb.MICROSECONDS_WIDTH_OF_CURRENT_AabbObject;

                    float thisHeight = Math.Abs(aabb.MaxAmplitude - aabb.MinAmplitude);

                    aabb.PUBLIC_DOUBLE___SCALE_FACTOR_X___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER =

                        maxWidthMicroseconds > 0 ? (double)thisWidth / maxWidthMicroseconds : 1;

                    aabb.PUBLIC_DOUBLE___SCALE_FACTOR_Y___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER =

                        maxHeight > 0 ? (double)thisHeight / maxHeight : 1;

                }

                currentRank++;

            }

        }// public static void ComputeTopologyClassifications(List<AabbObject> allAabbs)

        // You must call this logic *after* populating the AabbObject list

        // to assign topology-sensitive classifier numbers and ranks

        //////public static void ComputeTopologyClassifications(List<AabbObject> allAabbs)

        //////{

        //////    if (allAabbs == null || allAabbs.Count == 0) return;

        //////    // Compute global metrics to normalize

        //////    double totalAreaAll = allAabbs.Sum(a => Math.Abs(a.AreaUnderCurve));

        //////    foreach (var aabb in allAabbs)

        //////    {

        //////        double areaRatio = totalAreaAll != 0 ? Math.Abs(aabb.AreaUnderCurve) / totalAreaAll : 0;

        //////        double incRatio = aabb.Samples.Count > 0 ? (double)aabb.MonotonicIncreaseCount / aabb.Samples.Count : 0;

        //////        double decRatio = aabb.Samples.Count > 0 ? (double)aabb.MonotonicDecreaseCount / aabb.Samples.Count : 0;

        //////        double area_under_curve_to_total_area_of_aabb___percentage

        //////            =

        //////            aabb.PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB;

        //////        int leftRank = aabb.Ranks.Count > 0 ? aabb.Ranks.First() : 0;

        //////        int rightRank = aabb.Ranks.Count > 0 ? aabb.Ranks.Last() : 0;

        //////        aabb.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER =

        //////            Math.Floor(areaRatio * 1000000) +

        //////            Math.Floor(incRatio * 100000) +

        //////            Math.Floor(decRatio * 10000) +

        //////            Math.Floor(area_under_curve_to_total_area_of_aabb___percentage*1000)+

        //////            (leftRank * 100) +

        //////            (rightRank * 10) +

        //////            (aabb.Samples.Count / 1000)

        //////            ;

        //////    }//foreach (var aabb in allAabbs)

        //////    var grouped = allAabbs

        //////        .GroupBy(a => a.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER)

        //////        .OrderByDescending(g => g.Max(x => x.EndIndex - x.StartIndex + 1))

        //////        .ToList();

        //////    int currentRank = 1;

        //////    foreach (var group in grouped)

        //////    {

        //////        int maxWidth = group.Max(a => a.EndIndex - a.StartIndex + 1);

        //////        float maxHeight = group.Max(a => Math.Abs(a.MaxAmplitude - a.MinAmplitude));

        //////        foreach (var aabb in group)

        //////        {

        //////            aabb.PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER = currentRank;

        //////            int width = aabb.EndIndex - aabb.StartIndex + 1;

        //////            float height = Math.Abs(aabb.MaxAmplitude - aabb.MinAmplitude);

        //////            aabb.PUBLIC_DOUBLE___SCALE_FACTOR_X___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER =

        //////                maxWidth > 0 ? (double)width / maxWidth : 1;

        //////            aabb.PUBLIC_DOUBLE___SCALE_FACTOR_Y___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER =

        //////                maxHeight > 0 ? (double)height / maxHeight : 1;

        //////        }//foreach (var aabb in group)

        //////        currentRank++;

        //////    }//foreach (var group in grouped)

        //////}// public static void ComputeTopologyClassifications(List<AabbObject> allAabbs)

        public static List<AabbObject> ExtractPreAxiomAabbs(float[] samples, int sampleRate)

        {

            var result = new List<AabbObject>();

            if (samples == null || samples.Length < 2)

                return result;

            int start = 0;

            int length = samples.Length;

            // Initial segment polarity

            bool isCrest = samples[0] > 0;

            bool isSilent = samples[0] == 0;

            for (int i = 1; i < length; i++)

            {

                float current = samples[i];

                // Detect transitions: Crest→Trough, Trough→Crest, or Silent break

                bool crossing =

                    (!isSilent && ((isCrest && current <= 0) || (!isCrest && current >= 0))) ||

                    (isSilent && current != 0) ||

                    (!isSilent && current == 0);

                if (crossing)

                {

                    int end = i - 1;

                    if (end > start)

                    {

                        var aabb = BuildAabb(samples, start, end, sampleRate);

                        if (IsAllZero(aabb.Samples))

                            aabb.CrestOrTrough = "SILENT";

                        else

                            aabb.CrestOrTrough = isCrest ? "CREST" : "TROUGH";

                        result.Add(aabb);

                    }

                    start = i;

                    isCrest = current > 0;

                    isSilent = current == 0;

                }

            }

            // Final segment

            if (start < length - 1)

            {

                var aabb = BuildAabb(samples, start, length - 1, sampleRate);

                if (IsAllZero(aabb.Samples))

                    aabb.CrestOrTrough = "SILENT";

                else

                    aabb.CrestOrTrough = isCrest ? "CREST" : "TROUGH";

                result.Add(aabb);

            }

            return result;

        }//public static List<AabbObject> ExtractPreAxiomAabbs(float[] samples, int sampleRate)

        private static bool IsAllZero(List<float> samples)

        {

            foreach (var s in samples)

            {

                if (s != 0f)

                    return false;

            }//foreach (var s in samples)

            return true;

        }//private static bool IsAllZero(List<float> samples)

        //////public static List<AabbObject> DISCARDED_SINCE_ISSILENT_IS_ALSO_ADDED__________ExtractPreAxiomAabbs(float[] samples,int sampleRate)

        //////{

        //////    var result = new List<AabbObject>();

        //////    if (samples == null || samples.Length < 2)

        //////    {

        //////        return result;

        //////    }// if (samples == null || samples.Length < 2)

        //////    bool isCrest = samples[0] > 0;

        //////    bool isSilent= samples[0] == 0;

        //////    int start = 0;

        //////    for (int i = 1; i < samples.Length; i++)

        //////    {

        //////        bool crossing = (isCrest && samples[i] <= 0) || (!isCrest && samples[i] >= 0);

        //////        if (crossing)

        //////        {

        //////            int end = i - 1;

        //////            if (end > start)

        //////            {

        //////                //   var aabb = BuildAabb(samples, start, end);

        //////                //sampleRate

        //////                // BuildAabb

        //////                var aabb = BuildAabb(samples, start, end , sampleRate);

        //////                  aabb.CrestOrTrough = isCrest ? "CREST" : "TROUGH";

        //////                //////if (aabb.CrestOrTrough == isCrest)

        //////                //////{

        //////                //////}

        //////                result.Add(aabb);

        //////            }//if (end > start)

        //////            start = i;

        //////            isCrest = !isCrest;

        //////        }//if (crossing)

        //////    }//for (int i = 1; i < samples.Length; i++)

        //////    // Add final segment if applicable

        //////    if (start < samples.Length - 1)

        //////    {

        //////      //  var aabb = BuildAabb(samples, start, samples.Length - 1);

        //////        //sampleRate

        //////        // BuildAabb

        //////        var aabb = BuildAabb(samples, start, samples.Length - 1 , sampleRate);

        //////        aabb.CrestOrTrough = isCrest ? "CREST" : "TROUGH";

        //////        result.Add(aabb);

        //////    }//if (start < samples.Length - 1)

        //////    return result;

        //////}//  public static List<AabbObject> ExtractPreAxiomAabbs(float[] samples,int sampleRate)

        public static int CountLocalMinima(List<float> samples)

        {

            int count = 0;

            for (int i = 1; i < samples.Count - 1; i++)

            {

                if (samples[i] < samples[i - 1] && samples[i] < samples[i + 1])

                {

                    count++;

                }

            }

            return count;

        }// public static int CountLocalMinima(List<float> samples)

        public static int CountLocalMaxima(List<float> samples)

        {

            int count = 0;

            for (int i = 1; i < samples.Count - 1; i++)

            {

                if (samples[i] > samples[i - 1] && samples[i] > samples[i + 1])

                {

                    count++;

                }

            }

            return count;

        }// public static int CountLocalMaxima(List<float> samples)

        public static AabbObject BuildAabb(float[] samples, int start, int end, int samplesPerSecond)

        {

            var obj = new AabbObject

            {

                StartIndex = start,

                EndIndex = end

            };

            for (int i = start; i <= end; i++)

            {

                obj.Samples.Add(samples[i]);

            }

            obj.SAMPLE_COUNT_IN_THIS_AABB_OBJECT = obj.Samples.Count;

            //  if (obj.SAMPLES.Count == 0)

            if (obj.Samples.Count == 0)

            {

                obj.MaxAmplitude = 0;

                obj.MinAmplitude = 0;

                obj.AreaUnderCurve = 0;

                obj.PositiveCount = 0;

                obj.NegativeCount = 0;

                obj.MonotonicIncreaseCount = 0;

                obj.MonotonicDecreaseCount = 0;

                obj.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER = new List<int>();

                obj.CG_X___IN_MICROS_SECONDS_UNITS = 0;

                obj.CG_Y___IN_AMPLITUDES_UNITS = 0;

                obj.MICROSECONDS_WIDTH_OF_CURRENT_AabbObject = 0;

                return obj;

            }//if (obj.Samples.Count == 0)

            double interSampleMicroseconds = 1_000_000.0 / samplesPerSecond;

            obj.MICROSECONDS_WIDTH_OF_CURRENT_AabbObject = (int)((obj.Samples.Count - 1) * interSampleMicroseconds);

            // Compute trapezoidal area

            double trapezoidArea = 0;

            for (int i = 1; i < obj.Samples.Count; i++)

            {

                trapezoidArea += 0.5 * (obj.Samples[i - 1] + obj.Samples[i]) * interSampleMicroseconds;

            }

            obj.AreaUnderCurve = (float)trapezoidArea;

            obj.MaxAmplitude = obj.Samples.Max();

            obj.MinAmplitude = obj.Samples.Min();

            obj.PositiveCount = obj.Samples.Count(s => s > 0);

            obj.NegativeCount = obj.Samples.Count(s => s < 0);

            obj.MonotonicIncreaseCount = CountMonotonic(obj.Samples, true);

            obj.MonotonicDecreaseCount = CountMonotonic(obj.Samples, false);

            obj.LocalMinimaCount___IN_CURRENT_AABB_OBJECT = CountLocalMinima(obj.Samples);

            obj.LocalMaximaCount___IN_CURRENT_AABB_OBJECT = CountLocalMaxima(obj.Samples);

            obj.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER 

                = RankAmplitudes(obj.Samples);

            // CG_X in microseconds (weighted)

            double weightedSumTime = 0;

            double totalWeight = 0;

            for (int i = 0; i < obj.Samples.Count; i++)

            {

                double amp = Math.Abs(obj.Samples[i]);

                double timeMicrosec = (start + i) * interSampleMicroseconds;

                weightedSumTime += timeMicrosec * amp;

                totalWeight += amp;

            }//for (int i = 0; i < obj.Samples.Count; i++)

            obj.CG_X___IN_MICROS_SECONDS_UNITS = (float)(totalWeight == 0

                ? ((start + end) / 2.0) * interSampleMicroseconds

                : weightedSumTime / totalWeight);

            obj.CG_Y___IN_AMPLITUDES_UNITS = obj.Samples.Average();

            // Area percentage

            double height = Math.Max(Math.Abs(obj.MaxAmplitude), Math.Abs(obj.MinAmplitude));

            double widthMicrosec = obj.MICROSECONDS_WIDTH_OF_CURRENT_AabbObject;

            double maxAabbArea = height * widthMicrosec;

            double percentageArea = maxAabbArea == 0 ? 0 : (obj.AreaUnderCurve / maxAabbArea) * 100;

            obj.PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB = percentageArea;

            obj.PUBLIC_INT_ROUNDED_NEAREST_WHOLE_NUMBER_AND_ABSOLUTE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB = (int)Math.Round(Math.Abs(percentageArea));

            // CG_X and CG_Y as % of width/height (rounded to nearest 5)

            obj.PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__CG_X___IN_MICROS_SECONDS_UNITS___OUT_OF_TOTAL_WIDTH_OF_CURRENT_AabbObject =

                widthMicrosec == 0 ? 0 : (int)(Math.Round((obj.CG_X___IN_MICROS_SECONDS_UNITS / widthMicrosec) * 100 / 5.0) * 5);

            obj.PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__CG_Y___IN_AMPLITUDES_UNITS___OUT_OF_MAX_AMPLITUDE_HEIGHT_WITHIN_OF_CURRENT_AabbObject =

                height == 0 ? 0 : (int)(Math.Round((Math.Abs(obj.CG_Y___IN_AMPLITUDES_UNITS) / height) * 100 / 5.0) * 5);

            // Monotonic percent as nearest 5

            obj.PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__MonotonicIncreaseCount___OUT_OF_TOTAL_SAMPLES_IN_CURRENT_AABBOBJECT =

                obj.Samples.Count == 0 ? 0 : (int)(Math.Round((obj.MonotonicIncreaseCount * 100.0 / obj.Samples.Count) / 5.0) * 5);

            obj.PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__MonotonicDecreaseCount___OUT_OF_TOTAL_SAMPLES_IN_CURRENT_AABBOBJECT =

                obj.Samples.Count == 0 ? 0 : (int)(Math.Round((obj.MonotonicDecreaseCount * 100.0 / obj.Samples.Count) / 5.0) * 5);

            return obj;

        }// public static AabbObject BuildAabb(float[] samples, int start, int end, int samplesPerSecond)

        //////public static AabbObject BuildAabb(float[] samples, int start, int end, int samplesPerSecond)

        //////{

        //////    var obj = new AabbObject

        //////    {

        //////        StartIndex = start,

        //////        EndIndex = end

        //////    };

        //////    for (int i = start; i <= end; i++)

        //////    {

        //////        obj.Samples.Add(samples[i]);

        //////    }

        //////    if (obj.Samples.Count == 0)

        //////    {

        //////        obj.MaxAmplitude = 0;

        //////        obj.MinAmplitude = 0;

        //////        obj.AreaUnderCurve = 0;

        //////        obj.PositiveCount = 0;

        //////        obj.NegativeCount = 0;

        //////        obj.MonotonicIncreaseCount = 0;

        //////        obj.MonotonicDecreaseCount = 0;

        //////        obj.Ranks = new List<int>();

        //////        obj.CG_X = (start + end) / 2f;

        //////        obj.CG_Y = 0;

        //////        obj.PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB = 0;

        //////        return obj;

        //////    }

        //////    double interSampleMicroseconds = 1_000_000.0 / samplesPerSecond;

        //////    // Trapezoidal Area

        //////    double trapezoidArea = 0;

        //////    for (int i = 1; i < obj.Samples.Count; i++)

        //////    {

        //////        trapezoidArea += 0.5 * (obj.Samples[i - 1] + obj.Samples[i]) * interSampleMicroseconds;

        //////    }

        //////    obj.AreaUnderCurve = (float)trapezoidArea;

        //////    obj.MaxAmplitude = obj.Samples.Max();

        //////    obj.MinAmplitude = obj.Samples.Min();

        //////    obj.PositiveCount = obj.Samples.Count(s => s > 0);

        //////    obj.NegativeCount = obj.Samples.Count(s => s < 0);

        //////    obj.MonotonicIncreaseCount = CountMonotonic(obj.Samples, true);

        //////    obj.MonotonicDecreaseCount = CountMonotonic(obj.Samples, false);

        //////    obj.Ranks = RankAmplitudes(obj.Samples);

        //////    //  Time-based CG_X in microseconds

        //////    double weightedSumTime = 0;

        //////    double totalWeight = 0;

        //////    for (int i = 0; i < obj.Samples.Count; i++)

        //////    {

        //////        double amp = Math.Abs(obj.Samples[i]);

        //////        double timeMicrosec = (start + i) * interSampleMicroseconds;

        //////        weightedSumTime += timeMicrosec * amp;

        //////        totalWeight += amp;

        //////    }

        //////    obj.CG_X = (float)(totalWeight == 0

        //////        ? ((start + end) / 2.0) * interSampleMicroseconds

        //////        : weightedSumTime / totalWeight);

        //////    obj.CG_Y = obj.Samples.Average();

        //////    // Area percentage relative to bounding AABB area (amplitude * microsec)

        //////    double height = Math.Max(Math.Abs(obj.MaxAmplitude), Math.Abs(obj.MinAmplitude));

        //////    double widthTimeMicrosec = (obj.Samples.Count - 1) * interSampleMicroseconds;

        //////    double maxAabbArea = height * widthTimeMicrosec;

        //////    obj.PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB =

        //////        maxAabbArea == 0 ? 0 : (obj.AreaUnderCurve / maxAabbArea) * 100;

        //////    return obj;

        //////}// public static AabbObject BuildAabb(float[] samples, int start, int end, int samplesPerSecond)

        //////public static AabbObject discarding___cg_was_not_using_microseconds_between_samples_____BuildAabb(float[] samples, int start, int end, int samplesPerSecond)

        //////{

        //////    var obj = new AabbObject

        //////    {

        //////        StartIndex = start,

        //////        EndIndex = end

        //////    };

        //////    for (int i = start; i <= end; i++)

        //////    {

        //////        obj.Samples.Add(samples[i]);

        //////    }

        //////    if (obj.Samples.Count == 0)

        //////    {

        //////        obj.MaxAmplitude = 0;

        //////        obj.MinAmplitude = 0;

        //////        obj.AreaUnderCurve = 0;

        //////        obj.PositiveCount = 0;

        //////        obj.NegativeCount = 0;

        //////        obj.MonotonicIncreaseCount = 0;

        //////        obj.MonotonicDecreaseCount = 0;

        //////        obj.Ranks = new List<int>();

        //////        obj.CG_X = (start + end) / 2f;

        //////        obj.CG_Y = 0;

        //////        obj.PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB = 0;

        //////        return obj;

        //////    }

        //////    obj.MaxAmplitude = obj.Samples.Max();

        //////    obj.MinAmplitude = obj.Samples.Min();

        //////    //  Trapezoidal Area Calculation (amplitude * time in µs)

        //////    double interSampleMicroseconds = 1_000_000.0 / samplesPerSecond;

        //////    double trapezoidArea = 0;

        //////    for (int i = 1; i < obj.Samples.Count; i++)

        //////    {

        //////        trapezoidArea += 0.5 * (obj.Samples[i - 1] + obj.Samples[i]) * interSampleMicroseconds;

        //////    }

        //////    obj.AreaUnderCurve = (float)trapezoidArea;

        //////    obj.PositiveCount = obj.Samples.Count(s => s > 0);

        //////    obj.NegativeCount = obj.Samples.Count(s => s < 0);

        //////    obj.MonotonicIncreaseCount = CountMonotonic(obj.Samples, true);

        //////    obj.MonotonicDecreaseCount = CountMonotonic(obj.Samples, false);

        //////    obj.Ranks = RankAmplitudes(obj.Samples);

        //////    //  Weighted CG_X

        //////    double weightedSumX = 0;

        //////    double totalWeight = 0;

        //////    for (int i = 0; i < obj.Samples.Count; i++)

        //////    {

        //////        double amp = Math.Abs(obj.Samples[i]);

        //////        weightedSumX += (start + i) * amp;

        //////        totalWeight += amp;

        //////    }

        //////    obj.CG_X = (float)(totalWeight == 0 ? (start + end) / 2f : weightedSumX / totalWeight);

        //////    obj.CG_Y = obj.Samples.Average();

        //////    //  Max AABB Area in amplitude×microsecond unit

        //////    double height = Math.Max(Math.Abs(obj.MaxAmplitude), Math.Abs(obj.MinAmplitude));

        //////    double widthTimeMicrosec = (obj.Samples.Count - 1) * interSampleMicroseconds;

        //////    double maxAabbArea = height * widthTimeMicrosec;

        //////    obj.PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB =

        //////        maxAabbArea == 0 ? 0 : (obj.AreaUnderCurve / maxAabbArea) * 100;

        //////    return obj;

        //////}// public static AabbObject BuildAabb(float[] samples, int start, int end, int samplesPerSecond)

        //////public static AabbObject DISCARDING___IT_WAS_NOT_CALCULATING___INTERSAMPLES_DISTANCES_FOR_AREAS___BuildAabb(float[] samples, int start, int end)

        //////{

        //////    var obj = new AabbObject

        //////    {

        //////        StartIndex = start,

        //////        EndIndex = end

        //////    };

        //////    for (int i = start; i <= end; i++)

        //////    {

        //////        obj.Samples.Add(samples[i]);

        //////    }

        //////    if (obj.Samples.Count == 0)

        //////    {

        //////        obj.MaxAmplitude = 0;

        //////        obj.MinAmplitude = 0;

        //////        obj.AreaUnderCurve = 0;

        //////        obj.PositiveCount = 0;

        //////        obj.NegativeCount = 0;

        //////        obj.MonotonicIncreaseCount = 0;

        //////        obj.MonotonicDecreaseCount = 0;

        //////        obj.Ranks = new List<int>();

        //////        obj.CG_X = (start + end) / 2f;

        //////        obj.CG_Y = 0;

        //////        obj.PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB = 0;

        //////        return obj;

        //////    }//if (obj.Samples.Count == 0)

        //////    obj.MaxAmplitude = obj.Samples.Max();

        //////    obj.MinAmplitude = obj.Samples.Min();

        //////    obj.AreaUnderCurve = obj.Samples.Sum();

        //////    obj.PositiveCount = obj.Samples.Count(s => s > 0);

        //////    obj.NegativeCount = obj.Samples.Count(s => s < 0);

        //////    obj.MonotonicIncreaseCount = CountMonotonic(obj.Samples, true);

        //////    obj.MonotonicDecreaseCount = CountMonotonic(obj.Samples, false);

        //////    obj.Ranks = RankAmplitudes(obj.Samples);

        //////    //  Weighted CG_X calculation

        //////    double weightedSumX = 0;

        //////    double totalWeight = 0;

        //////    for (int i = 0; i < obj.Samples.Count; i++)

        //////    {

        //////        double amp = Math.Abs(obj.Samples[i]);

        //////        weightedSumX += (start + i) * amp;

        //////        totalWeight += amp;

        //////    }

        //////    obj.CG_X = (float)(totalWeight == 0 ? (start + end) / 2f : weightedSumX / totalWeight);

        //////    obj.CG_Y = obj.Samples.Average();

        //////    //  Area percentage calculation

        //////    double height = Math.Max(Math.Abs(obj.MaxAmplitude), Math.Abs(obj.MinAmplitude));

        //////    double width = obj.EndIndex - obj.StartIndex + 1;

        //////    double maxAabbArea = height * width;

        //////    obj.PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB =

        //////        maxAabbArea == 0 ? 0 : (obj.AreaUnderCurve / maxAabbArea) * 100;

        //////    return obj;

        //////}// public static AabbObject BuildAabb(float[] samples, int start, int end)

        //////public static AabbObject DISCARDING___SINCE_WE_HAVE_ADDED_THE_AREA_UNDER_CURVES_____FACTORS_ALSO_____BuildAabb(float[] samples, int start, int end)

        //////{

        //////    var obj = new AabbObject

        //////    {

        //////        StartIndex = start,

        //////        EndIndex = end,

        //////        Samples = new List<float>()

        //////    };

        //////    for (int i = start; i <= end; i++)

        //////    {

        //////        obj.Samples.Add(samples[i]);

        //////    }

        //////    if (obj.Samples.Count == 0)

        //////    {

        //////        obj.MaxAmplitude = 0;

        //////        obj.MinAmplitude = 0;

        //////        obj.AreaUnderCurve = 0;

        //////        obj.PositiveCount = 0;

        //////        obj.NegativeCount = 0;

        //////        obj.MonotonicIncreaseCount = 0;

        //////        obj.MonotonicDecreaseCount = 0;

        //////        obj.Ranks = new List<int>();

        //////        obj.CG_X = (start + end) / 2f;

        //////        obj.CG_Y = 0;

        //////        return obj;

        //////    }//if (obj.Samples.Count == 0)

        //////    obj.MaxAmplitude = obj.Samples.Max();

        //////    obj.MinAmplitude = obj.Samples.Min();

        //////    obj.AreaUnderCurve = obj.Samples.Sum();

        //////    obj.PositiveCount = obj.Samples.Count(s => s > 0);

        //////    obj.NegativeCount = obj.Samples.Count(s => s < 0);

        //////    obj.MonotonicIncreaseCount = CountMonotonic(obj.Samples, true);

        //////    obj.MonotonicDecreaseCount = CountMonotonic(obj.Samples, false);

        //////    obj.Ranks = RankAmplitudes(obj.Samples);

        //////    obj.CG_Y = obj.Samples.Average();

        //////    // Weighted CG_X using amplitude as weight

        //////    float weightedSum = 0f;

        //////    float totalWeight = 0f;

        //////    for (int i = 0; i < obj.Samples.Count; i++)

        //////    {

        //////        int x = start + i;

        //////        float a = obj.Samples[i];

        //////        weightedSum += x * a;

        //////        totalWeight += a;

        //////    }//for (int i = 0; i < obj.Samples.Count; i++)

        //////    obj.CG_X = totalWeight != 0 ? weightedSum / totalWeight : (start + end) / 2f;

        //////    return obj;

        //////}// public static AabbObject BuildAabb(float[] samples, int start, int end)

        //////public static AabbObject BuildAabb(float[] samples, int start, int end)

        //////{

        //////    var obj = new AabbObject

        //////    {

        //////        StartIndex = start,

        //////        EndIndex = end,

        //////        Samples = new List<float>()

        //////    };

        //////    for (int i = start; i <= end; i++)

        //////    {

        //////        obj.Samples.Add(samples[i]);

        //////    }

        //////    if (obj.Samples.Count == 0)

        //////    {

        //////        obj.MaxAmplitude = 0;

        //////        obj.MinAmplitude = 0;

        //////        obj.AreaUnderCurve = 0;

        //////        obj.PositiveCount = 0;

        //////        obj.NegativeCount = 0;

        //////        obj.MonotonicIncreaseCount = 0;

        //////        obj.MonotonicDecreaseCount = 0;

        //////        obj.Ranks = new List<int>();

        //////        obj.CG_X = (start + end) / 2f;

        //////        obj.CG_Y = 0;

        //////        return obj;

        //////    }// if (obj.Samples.Count == 0)

        //////    obj.MaxAmplitude = obj.Samples.Max();

        //////    obj.MinAmplitude = obj.Samples.Min();

        //////    obj.AreaUnderCurve = obj.Samples.Sum();

        //////    obj.PositiveCount = obj.Samples.Count(s => s > 0);

        //////    obj.NegativeCount = obj.Samples.Count(s => s < 0);

        //////    obj.MonotonicIncreaseCount = CountMonotonic(obj.Samples, true);

        //////    obj.MonotonicDecreaseCount = CountMonotonic(obj.Samples, false);

        //////    obj.Ranks = RankAmplitudes(obj.Samples);

        //////    obj.CG_X = (start + end) / 2f;

        //////    obj.CG_Y = obj.Samples.Average();

        //////    return obj;

        //////}// public static AabbObject BuildAabb(float[] samples, int start, int end)

        public static int CountMonotonic(List<float> samples, bool increasing)

        {

            int count = 0;

            for (int i = 1; i < samples.Count; i++)

            {

                if ((increasing && samples[i] > samples[i - 1]) ||

                    (!increasing && samples[i] < samples[i - 1]))

                    count++;

            }

            return count;

        }// public static int CountMonotonic(List<float> samples, bool increasing)

        public static List<int> RankAmplitudes(List<float> samples)

        {

            var ranked = samples.Select((val, idx) => new { val, idx })

                                .OrderBy(x => Math.Abs(x.val))

                                .Select((x, rank) => new { x.idx, rank })

                                .OrderBy(x => x.idx)

                                .Select(x => x.rank)

                                .ToList();

            return ranked;

        }//  public static List<int> RankAmplitudes(List<float> samples)

        //////var obj = BuildAabb(samples, start, end);

        //////obj.CrestOrTrough = isCrest? "CREST" : "TROUGH";

        //////result.Add(obj);

        //////public static List<AabbObject> ExtractPreAxiomAabbs(float[] samples)

        //////{

        //////    var result = new List<AabbObject>();

        //////    bool isCrest = samples[0] > 0;

        //////    int start = 0;

        //////    for (int i = 1; i < samples.Length; i++)

        //////    {

        //////        if ((isCrest && samples[i] <= 0) || (!isCrest && samples[i] >= 0))

        //////        {

        //////            int end = i - 1;

        //////            if (end > start)

        //////                result.Add(BuildAabb(samples, start, end));

        //////            start = i;

        //////            isCrest = !isCrest;

        //////        }//if ((isCrest && samples[i] <= 0) || (!isCrest && samples[i] >= 0))

        //////    }// for (int i = 1; i < samples.Length; i++)

        //////    if (start < samples.Length - 1)

        //////        result.Add(BuildAabb(samples, start, samples.Length - 1));

        //////    return result;

        //////}//public static List<AabbObject> ExtractPreAxiomAabbs(float[] samples)

        //////public static AabbObject BuildAabb(float[] samples, int start, int end)

        //////{

        //////    var obj = new AabbObject { StartIndex = start, EndIndex = end };

        //////    for (int i = start; i <= end; i++)

        //////    {

        //////        obj.Samples.Add(samples[i]);

        //////    }//for (int i = start; i <= end; i++)

        //////    obj.MaxAmplitude = obj.Samples.Max();

        //////    obj.MinAmplitude = obj.Samples.Min();

        //////    obj.AreaUnderCurve = obj.Samples.Sum();

        //////    obj.PositiveCount = obj.Samples.Count(s => s > 0);

        //////    obj.NegativeCount = obj.Samples.Count(s => s < 0);

        //////    obj.MonotonicIncreaseCount = CountMonotonic(obj.Samples, increasing: true);

        //////    obj.MonotonicDecreaseCount = CountMonotonic(obj.Samples, increasing: false);

        //////    obj.Ranks = RankAmplitudes(obj.Samples);

        //////    obj.CG_X = (start + end) / 2f;

        //////    obj.CG_Y = obj.Samples.Average();

        //////    return obj;

        //////}//public static AabbObject BuildAabb(float[] samples, int start, int end)

        //////private static int CountMonotonic(List<float> samples, bool increasing)

        //////{

        //////    int count = 0;

        //////    for (int i = 1; i < samples.Count; i++)

        //////    {

        //////        if ((increasing && samples[i] > samples[i - 1]) ||

        //////            (!increasing && samples[i] < samples[i - 1]))

        //////            count++;

        //////    }//for (int i = 1; i < samples.Count; i++)

        //////    return count;

        //////}//private static int CountMonotonic(List<float> samples, bool increasing)

        //////private static List<int> RankAmplitudes(List<float> samples)

        //////{

        //////    var ranked = samples.Select((val, idx) => new { val, idx })

        //////                        .OrderBy(x => Math.Abs(x.val))

        //////                        .Select((x, rank) => new { x.idx, rank })

        //////                        .OrderBy(x => x.idx)

        //////                        .Select(x => x.rank)

        //////                        .ToList();

        //////    return ranked;

        //////}//private static List<int> RankAmplitudes(List<float> samples)

        public static string GenerateStringologyPatternAnalysis(List<AabbObject> aabbs)

        {

            System.Text.StringBuilder sb = new System.Text.StringBuilder();

            System.Text.StringBuilder patternBuilder = new System.Text.StringBuilder();

            long totalCrestDuration = 0;

            long totalTroughDuration = 0;

            long totalSilenceDuration = 0;

            Dictionary<string, int> transitionPivotCounts = new Dictionary<string, int>();

            Dictionary<string, long> silenceDelimitedPatternDurations = new Dictionary<string, long>();

            List<string> silenceDelimitedPatterns = new List<string>();

            string previousType = null;

            System.Text.StringBuilder currentPattern = new System.Text.StringBuilder();

            long currentPatternDuration = 0;

            for (int i = 0; i < aabbs.Count; i++)

            {

                AabbObject a = aabbs[i];

                string symbol = "X";

                if (a.CrestOrTrough == "CREST")

                {

                    symbol = "C";

                }

                else if (a.CrestOrTrough == "TROUGH")

                {

                    symbol = "T";

                }

                else if (a.CrestOrTrough == "SILENT")

                {

                    symbol = "S";

                }

                patternBuilder.Append(symbol);

                long durationUs = a.MICROSECONDS_WIDTH_OF_CURRENT_AabbObject;

                if (symbol == "C")

                {

                    totalCrestDuration += durationUs;

                }

                else if (symbol == "T")

                {

                    totalTroughDuration += durationUs;

                }

                else if (symbol == "S")

                {

                    totalSilenceDuration += durationUs;

                }

                if (previousType != null)

                {

                    string trans = previousType + ">" + symbol;

                    if (transitionPivotCounts.ContainsKey(trans) == false)

                    {

                        transitionPivotCounts[trans] = 0;

                    }

                    transitionPivotCounts[trans]++;

                }

                if (symbol == "S")

                {

                    if (currentPattern.Length > 0)

                    {

                        string pattern = currentPattern.ToString();

                        silenceDelimitedPatterns.Add(pattern);

                        if (silenceDelimitedPatternDurations.ContainsKey(pattern) == false)

                        {

                            silenceDelimitedPatternDurations[pattern] = 0;

                        }

                        silenceDelimitedPatternDurations[pattern] += currentPatternDuration;

                        currentPattern.Clear();

                        currentPatternDuration = 0;

                    }

                }

                else

                {

                    currentPattern.Append(symbol);

                    currentPatternDuration += durationUs;

                }

                previousType = symbol;

            }

            // last pattern

            if (currentPattern.Length > 0)

            {

                string pattern = currentPattern.ToString();

                silenceDelimitedPatterns.Add(pattern);

                if (silenceDelimitedPatternDurations.ContainsKey(pattern) == false)

                {

                    silenceDelimitedPatternDurations[pattern] = 0;

                }

                silenceDelimitedPatternDurations[pattern] += currentPatternDuration;

            }

            sb.AppendLine("#STRINGOLOGY_SEQUENCE:");

            sb.AppendLine(patternBuilder.ToString());

            sb.AppendLine("");

            sb.AppendLine("#TOTAL DURATIONS (ms):");

            sb.AppendLine("Crest:\t" + (totalCrestDuration / 1000.0).ToString("F2") + " ms");

            sb.AppendLine("Trough:\t" + (totalTroughDuration / 1000.0).ToString("F2") + " ms");

            sb.AppendLine("Silence:\t" + (totalSilenceDuration / 1000.0).ToString("F2") + " ms");

            sb.AppendLine("");

            sb.AppendLine("#TRANSITIONS:");

            List<string> sortedTransKeys = transitionPivotCounts.Keys.ToList();

            sortedTransKeys.Sort();

            for (int i = 0; i < sortedTransKeys.Count; i++)

            {

                string key = sortedTransKeys[i];

                sb.AppendLine(key + ":\t" + transitionPivotCounts[key]);

            }

            sb.AppendLine("");

            sb.AppendLine("#PATTERNS BETWEEN SILENCES (sorted by duration):");

            var sortedPatterns = silenceDelimitedPatternDurations.OrderByDescending(kv => kv.Value).ToList();

            for (int i = 0; i < sortedPatterns.Count; i++)

            {

                string pat = sortedPatterns[i].Key;

                double dur = sortedPatterns[i].Value / 1000.0;

                sb.AppendLine(pat + "\t" + dur.ToString("F2") + " ms");

            }//for (int i = 0; i < sortedPatterns.Count; i++)

            sb.AppendLine("");

            sb.AppendLine("#CROSS-TAB INTERFACING AABB TRANSITIONS:");

            Dictionary<string, int> crossTab = new Dictionary<string, int>();

            for (int i = 1; i < aabbs.Count; i++)

            {

                AabbObject left = aabbs[i - 1];

                AabbObject right = aabbs[i];

                string key = left.CrestOrTrough + "(" + left.LocalMinimaCount___IN_CURRENT_AABB_OBJECT + "," + left.LocalMaximaCount___IN_CURRENT_AABB_OBJECT + ")_TO_" +

                             right.CrestOrTrough + "(" + right.LocalMinimaCount___IN_CURRENT_AABB_OBJECT + "," + right.LocalMaximaCount___IN_CURRENT_AABB_OBJECT + ")";

                if (crossTab.ContainsKey(key) == false)

                {

                    crossTab[key] = 0;

                }

                crossTab[key]++;

            }

            var sortedCrossTab = crossTab.OrderByDescending(kv => kv.Value).ToList();

            for (int i = 0; i < sortedCrossTab.Count; i++)

            {

                sb.AppendLine(sortedCrossTab[i].Key + ":\t" + sortedCrossTab[i].Value);

            }

            return sb.ToString();

        }// public static string GenerateStringologyPatternAnalysis(List<AabbObject> aabbs)

        // Updated GenerateClassificationReport

        public static string GenerateClassificationReport(List<AabbObject> aabbs)

        {

            var sb = new System.Text.StringBuilder();

            sb.AppendLine(

                "#INDEX\tTYPE\tSTART\tEND\tWIDTH(us)\tCG_X(us)\tCG_Y\tMAX\tMIN\tPOS_CNT\tNEG_CNT\t" +

                "MONO_INC\tMONO_DEC\tRANK_LEFT\tRANK_RIGHT\tSAMPLE_CNT\tMONO_INC_%\tMONO_DEC_%\tCG_X_%\tCG_Y_%\t" +

                "AREA\tAREA_%\tAREA_%_INT\tTOPOLOGY_NUM\tTOPOLOGY_RANK\tSCALE_X\tSCALE_Y\tLEFT_ZC_INDEX\tRIGHT_ZC_INDEX"

            );

            for (int i = 0; i < aabbs.Count; i++)

            {

                var a = aabbs[i];

                int leftRank = a.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.FirstOrDefault();

                int rightRank = a.Ranks_OF_SAMPLES_HEIGHTS_WITHIN____IN_CURRENT_AABBOBJECT_DESCENDING_ORDER.LastOrDefault();

                sb.AppendLine(

                    i + "\t" +

                    a.CrestOrTrough + "\t" +

                    a.StartIndex + "\t" +

                    a.EndIndex + "\t" +

                    a.MICROSECONDS_WIDTH_OF_CURRENT_AabbObject + "\t" +

                    a.CG_X___IN_MICROS_SECONDS_UNITS.ToString("F2") + "\t" +

                    a.CG_Y___IN_AMPLITUDES_UNITS.ToString("F3") + "\t" +

                    a.MaxAmplitude.ToString("F3") + "\t" +

                    a.MinAmplitude.ToString("F3") + "\t" +

                    a.PositiveCount + "\t" +

                    a.NegativeCount + "\t" +

                    a.MonotonicIncreaseCount + "\t" +

                    a.MonotonicDecreaseCount + "\t" +

                    leftRank + "\t" +

                    rightRank + "\t" +

                    a.SAMPLE_COUNT_IN_THIS_AABB_OBJECT + "\t" +

                    a.PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__MonotonicIncreaseCount___OUT_OF_TOTAL_SAMPLES_IN_CURRENT_AABBOBJECT + "\t" +

                    a.PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__MonotonicDecreaseCount___OUT_OF_TOTAL_SAMPLES_IN_CURRENT_AABBOBJECT + "\t" +

                    a.PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__CG_X___IN_MICROS_SECONDS_UNITS___OUT_OF_TOTAL_WIDTH_OF_CURRENT_AabbObject + "\t" +

                    a.PUBLIC_INT_WHOLE_NUMBER_NEAREST_TO_DIVISIBLE_WITH_5___FOR_PERCENTAGE___OF__CG_Y___IN_AMPLITUDES_UNITS___OUT_OF_MAX_AMPLITUDE_HEIGHT_WITHIN_OF_CURRENT_AabbObject + "\t" +

                    a.AreaUnderCurve.ToString("F2") + "\t" +

                    a.PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB.ToString("F2") + "\t" +

                    a.PUBLIC_INT_ROUNDED_NEAREST_WHOLE_NUMBER_AND_ABSOLUTE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB + "\t" +

                    a.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F2") + "\t" +

                    a.PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER + "\t" +

                    a.PUBLIC_DOUBLE___SCALE_FACTOR_X___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F3") + "\t" +

                    a.PUBLIC_DOUBLE___SCALE_FACTOR_Y___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F3") + "\t" +

                    (a.LEFT_SIDE_UNIQUE___ZeroCrossingPoint__OBJECT?.Index ?? -1) + "\t" +

                    (a.RIGHT_SIDE_UNIQUE___ZeroCrossingPoint__OBJECT?.Index ?? -1)

                );

            }

            return sb.ToString();

        }// public static string GenerateClassificationReport(List<AabbObject> aabbs)

        //////public static string GenerateClassificationReport(List<AabbObject> aabbs)

        //////        {

        //////            var sb = new System.Text.StringBuilder();

        //////            // Header with all necessary fields

        //////            sb.AppendLine(

        //////                "#INDEX\tTYPE\tSTART\tEND\tCG_X\tCG_Y\tMAX\tMIN\tPOS_CNT\tNEG_CNT\t" +

        //////                "MONO_INC\tMONO_DEC\tLEFT_RANK\tRIGHT_RANK\tAREA_UNDER_CURVE\tAREA_PERCENTAGE\t" +

        //////                "TOPOLOGY_NUM\tTOPOLOGY_RANK\tSCALE_X\tSCALE_Y"

        //////            );

        //////            for (int i = 0; i < aabbs.Count; i++)

        //////            {

        //////                var aabb = aabbs[i];

        //////                int leftRank = aabb.Ranks.FirstOrDefault();

        //////                int rightRank = aabb.Ranks.LastOrDefault();

        //////                sb.AppendLine(

        //////                    i + "\t" +

        //////                    aabb.CrestOrTrough + "\t" +

        //////                    aabb.StartIndex + "\t" +

        //////                    aabb.EndIndex + "\t" +

        //////                    aabb.CG_X.ToString("F2") + "\t" +

        //////                    aabb.CG_Y.ToString("F2") + "\t" +

        //////                    aabb.MaxAmplitude.ToString("F3") + "\t" +

        //////                    aabb.MinAmplitude.ToString("F3") + "\t" +

        //////                    aabb.PositiveCount + "\t" +

        //////                    aabb.NegativeCount + "\t" +

        //////                    aabb.MonotonicIncreaseCount + "\t" +

        //////                    aabb.MonotonicDecreaseCount + "\t" +

        //////                    leftRank + "\t" +

        //////                    rightRank + "\t" +

        //////                    aabb.AreaUnderCurve.ToString("F3") + "\t" +

        //////                    aabb.PUBLIC_DOUBLE_AREA_PERCENTAGE___MEANS___AREA_UNDER_CURVE_IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT__TO___AABB_AREA___WHERE_AABB_AREA__IN_UNIT_OF___AMPLITUDE_UNIT_MICROSECOND_UNIT___0_TO_100_USED_TO_CLASSIFY_AABB.ToString("F2") + "\t" +

        //////                    aabb.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F2") + "\t" +

        //////                    aabb.PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER + "\t" +

        //////                    aabb.PUBLIC_DOUBLE___SCALE_FACTOR_X___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F3") + "\t" +

        //////                    aabb.PUBLIC_DOUBLE___SCALE_FACTOR_Y___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F3")

        //////                );

        //////            }

        //////            return sb.ToString();

        //////        }//public static string GenerateClassificationReport(List<AabbObject> aabbs)

        //////public static string DISCARDING___SINCE_WE_ARE_ADDING_MORE_COLUMNS____GenerateClassificationReport(List<AabbObject> aabbs)

        //////{

        //////    var sb = new System.Text.StringBuilder();

        //////    sb.AppendLine("#INDEX\tTYPE\tSTART\tEND\tCG_X\tCG_Y\tMAX\tMIN\tPOS_CNT\tNEG_CNT\tMONO_INC\tMONO_DEC\tLEFT_RANK\tRIGHT_RANK\tTOPOLOGY_NUM\tTOPOLOGY_RANK\tSCALE_X\tSCALE_Y");

        //////    for (int i = 0; i < aabbs.Count; i++)

        //////    {

        //////        var aabb = aabbs[i];

        //////        int leftRank = aabb.Ranks.FirstOrDefault();

        //////        int rightRank = aabb.Ranks.LastOrDefault();

        //////        sb.AppendLine(

        //////            i + "\t" +

        //////            aabb.CrestOrTrough + "\t" +

        //////            aabb.StartIndex + "\t" +

        //////            aabb.EndIndex + "\t" +

        //////            aabb.CG_X.ToString("F2") + "\t" +

        //////            aabb.CG_Y.ToString("F2") + "\t" +

        //////            aabb.MaxAmplitude.ToString("F3") + "\t" +

        //////            aabb.MinAmplitude.ToString("F3") + "\t" +

        //////            aabb.PositiveCount + "\t" +

        //////            aabb.NegativeCount + "\t" +

        //////            aabb.MonotonicIncreaseCount + "\t" +

        //////            aabb.MonotonicDecreaseCount + "\t" +

        //////            leftRank + "\t" +

        //////            rightRank + "\t" +

        //////            aabb.PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F2") + "\t" +

        //////            aabb.PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER + "\t" +

        //////            aabb.PUBLIC_DOUBLE___SCALE_FACTOR_X___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F3") + "\t" +

        //////            aabb.PUBLIC_DOUBLE___SCALE_FACTOR_Y___OF_CURRENT_AABB___WITH_REFERENCE_TO___LARGEST_WIDEST___AABB___WITH__________SAME_______PUBLIC_INT_RANK_FOUND_AFTER_SORTING___ALL_AABB____THROUGH___PUBLIC_DOUBLE_TOPOLOGY_CLASSIFICATION_SENSITIVENESS_NUMBER.ToString("F3")

        //////            );

        //////    }

        //////    return sb.ToString();

        //////}// public static string GenerateClassificationReport(List<AabbObject> aabbs)

        //////public static string GenerateClassificationReport(List<AabbObject> aabbs)

        //////{

        //////    var sb = new System.Text.StringBuilder();

        //////    sb.AppendLine("#INDEX\tTYPE\tSTART\tEND\tCG_X\tCG_Y\tMAX\tMIN\tPOS_CNT\tNEG_CNT\tMONO_INC\tMONO_DEC\tLEFT_RANK\tRIGHT_RANK");

        //////    for (int i = 0; i < aabbs.Count; i++)

        //////    {

        //////        var aabb = aabbs[i];

        //////        int leftRank = aabb.Ranks.First();

        //////        int rightRank = aabb.Ranks.Last();

        //////        sb.AppendLine(

        //////            i.ToString() + "\t" +

        //////            aabb.CrestOrTrough + "\t" +

        //////            aabb.StartIndex + "\t" +

        //////            aabb.EndIndex + "\t" +

        //////            aabb.CG_X.ToString("F2") + "\t" +

        //////            aabb.CG_Y.ToString("F2") + "\t" +

        //////            aabb.MaxAmplitude.ToString("F3") + "\t" +

        //////            aabb.MinAmplitude.ToString("F3") + "\t" +

        //////            aabb.PositiveCount + "\t" +

        //////            aabb.NegativeCount + "\t" +

        //////            aabb.MonotonicIncreaseCount + "\t" +

        //////            aabb.MonotonicDecreaseCount + "\t" +

        //////            leftRank + "\t" +

        //////            rightRank

        //////        );

        //////    }

        //////    return sb.ToString();

        //////}//  public static string GenerateClassificationReport(List<AabbObject> aabbs)

    }// public static class SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

    public class WavMetadata

    {

        public int SampleRate;

        public int BitsPerSample;

        public int Channels;

    }//public class WavMetadata

    public class CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

    {

        //CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS.

        public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_CRESTS = +600000000;

        public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_CRESTS = -600000000;

        public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_TROUGHS = +600000000;

        public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_TROUGHS = -600000000;

        public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS = +600000000;

        public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS = -600000000;

        public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUND_IN_CRESTS = -600000000;

        public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUND_IN_TROUGHS = -600000000;

        public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS = -600000000;

        //CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

        public static int PUBLIC_STATIC_INT___THE_SAMPLES_PER_sECOND_FOUND_WHILE_READING = 8000;

        //CALLING CONVENTIONS

        //CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

        public static double PUBLIC_STATIC_DOUBLE_SUM_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES = 0;

        public static double PUBLIC_STATIC_DOUBLE_AVERAGE_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES = 0;

        //CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

        public static int PUBLIC_STATIC_INT_TOTAL_NUMBER_OF_SAMPLES_IN_THIS_FILE = 0;

        //we populate these at CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText

        public static float[] PUBLIC_STATIC_FLOAT_ARRAY____RAW_SAMPLES_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES = null;

        public static float[] PUBLIC_STATIC_FLOAT_ARRAY____RECONSTRUCTED_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES = null;

        //SANJOY NATH HAS SEEN THAT IN 380000 WAV FILES ANALYSIS THAT NON DUPLICATE X OF CG ARE <=600  IN COUNTS OF NON DUPLICATE X OF CG FOUND THAT IS NOT MORE THAN 

        //CALLING CONVENTION IS LIKE THIS

        //////CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

        //////.PUBLIC_STATIC_ARRAY_OF_LISTS_OF_CrestTroughObject___WITH_SORTED_SMALLEST_TO_LARGEST_NON_DUPLICATE_SAAN_STYLES_SCALED_NORMALIZED_SCALED_X___0_TO_600_UNIQUE_RANKS_OF_SORTED_NORMALIZED_X_OF_CG

        public static List<CrestTroughObject>[]

            PUBLIC_STATIC_ARRAY_OF_LISTS_OF_CrestTroughObject___WITH_SORTED_SMALLEST_TO_LARGEST_NON_DUPLICATE_SAAN_STYLES_SCALED_NORMALIZED_SCALED_X___0_TO_600_UNIQUE_RANKS_OF_SORTED_NORMALIZED_X_OF_CG

            =

            new List<CrestTroughObject>[600];

        //WE WILL GENERATE SEPERATE WAV FILES (WE PRESERVE THE ORIGINAL AMPLITUDES SAMPLES JUST TO CROSS CHECK THE RE GENERATED WAV FILES) WITH CG_X_RANKED DIFFERENT RANKED  WAV FILES TO SEE HOW THE FREQUENCY OF CREST AABB TROUGH AABB BEHAVES WHILE LISTENING THE FINAL FILTERED WAV FILES

        // THESE RANKING OR PRESERVED SAMPLES ARE NOT PART OF THE SANJOY NATH'S NEW WAVE THEORY BUT IT IS JUST TO CROSS VERIFY THE THEORY TO CHECK THE CLAIMS ARE PROPER OR NOT

        public static WavMetadata ReadMetadata(string path)

        {

            WavMetadata meta = new WavMetadata();

            using (BinaryReader br = new BinaryReader(File.OpenRead(path)))

            {

                br.ReadBytes(12); // RIFF header

                while (br.BaseStream.Position < br.BaseStream.Length)

                {

                    string chunkID = new string(br.ReadChars(4));

                    int chunkSize = br.ReadInt32();

                    if (chunkID == "fmt ")

                    {

                        br.ReadInt16(); // audio format

                        meta.Channels = br.ReadInt16();

                        meta.SampleRate = br.ReadInt32();

                        br.ReadInt32(); // byte rate

                        br.ReadInt16(); // block align

                        meta.BitsPerSample = br.ReadInt16();

                        if (chunkSize > 16)

                            br.ReadBytes(chunkSize - 16); // skip extra

                        break;

                    }

                    else

                    {

                        br.BaseStream.Seek(chunkSize, SeekOrigin.Current);

                    }//end of else of if (chunkID == "fmt ")

                }//while (br.BaseStream.Position < br.BaseStream.Length)

            }// using (BinaryReader br = new BinaryReader(File.OpenRead(path)))

            //CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

            ///////public static int PUBLIC_STATIC_INT___THE_SAMPLES_PER_sECOND_FOUND_WHILE_READING = 8000;

            CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                .PUBLIC_STATIC_INT___THE_SAMPLES_PER_sECOND_FOUND_WHILE_READING

                = meta.SampleRate;

            return meta;

        }//public static WavMetadata ReadMetadata(string path)

        //////public static void GenerateRankedSpectralWavFiles(

        //////    List<CrestTroughObject> allCrestTroughObjects,

        //////    int totalSamples,

        //////    int sampleRate,

        //////    string outputFolder)

        //////        {

        //////            // Sort by scaled CG_X to identify vertical spectral alignment

        //////            var rankedGroups = allCrestTroughObjects

        //////                .GroupBy(obj => Math.Round(obj.PUBLIC_DOUBLE_NON_DUPLICATE_CG_X_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTSScaled_CG_X, 6)) // group by X of CG

        //////                .OrderBy(g => g.Key)

        //////                .Select((group, rankIndex) => new { Rank = rankIndex + 1, Objects = group.ToList() })

        //////                .ToList();

        //////            foreach (var group in rankedGroups)

        //////            {

        //////                short[] outputSamples = new short[totalSamples];

        //////                foreach (var obj in group.Objects)

        //////                {

        //////                    for (int i = obj.StartSampleIndex; i <= obj.EndSampleIndex; i++)

        //////                    {

        //////                        // Clip to avoid overflow

        //////                        if (i >= 0 && i < totalSamples)

        //////                        {

        //////                            outputSamples[i] = obj.SavedAmplitudes[i - obj.StartSampleIndex];

        //////                        }

        //////                    }

        //////                }

        //////                string outPath = Path.Combine(outputFolder, $"Rank_{group.Rank:D3}.wav");

        //////                WriteMono16BitPCM_WAV(outPath, outputSamples, sampleRate);

        //////            }

        //////        }

        //////        //////public static void GenerateRankedSpectralWavFiles(

        //////        //////    List<CrestTroughObject> allCrestTroughObjects,

        //////        //////    int totalSamples,

        //////        //////    int sampleRate,

        //////        //////    string outputFolder)

        public static double public_static_double_get_note_number_ACTUAL_LOWER_NEAREST_NOTES_frequency_Hertz(double freq_found)

        {

            // TO DO FOR PITCHBENT_AT_START_

            int note_number_to_take_integer = -6;

            string note_name_to_take_string = "";

            double NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 0;

            if ((freq_found >= 7.6892) && (freq_found <= 8.7466)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 7.6892; }

            if ((freq_found >= 8.1404) && (freq_found <= 9.2718)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 8.1404; }

            if ((freq_found >= 8.6292) && (freq_found <= 9.8172)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 8.6292; }

            if ((freq_found >= 9.1368) && (freq_found <= 10.403)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 9.1368; }

            if ((freq_found >= 9.682) && (freq_found <= 11.0191)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 9.682; }

            if ((freq_found >= 10.2554) && (freq_found <= 11.6756)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 10.2554; }

            if ((freq_found >= 10.8664) && (freq_found <= 12.3725)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 10.8664; }

            if ((freq_found >= 11.515) && (freq_found <= 13.1098)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 11.515; }

            if ((freq_found >= 12.2012) && (freq_found <= 13.8875)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 12.2012; }

            if ((freq_found >= 12.925) && (freq_found <= 14.7157)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 12.925; }

            if ((freq_found >= 13.6958) && (freq_found <= 15.5843)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 13.6958; }

            if ((freq_found >= 14.5042) && (freq_found <= 16.5135)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 14.5042; }

            if ((freq_found >= 15.369) && (freq_found <= 17.4932)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 15.369; }

            if ((freq_found >= 16.2808) && (freq_found <= 18.5335)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 16.2808; }

            if ((freq_found >= 17.249) && (freq_found <= 19.6445)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 17.249; }

            if ((freq_found >= 18.283) && (freq_found <= 20.806)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 18.283; }

            if ((freq_found >= 19.364) && (freq_found <= 22.0483)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 19.364; }

            if ((freq_found >= 20.5202) && (freq_found <= 23.3512)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 20.5202; }

            if ((freq_found >= 21.7328) && (freq_found <= 24.745)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 21.7328; }

            if ((freq_found >= 23.03) && (freq_found <= 26.2196)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 23.03; }

            if ((freq_found >= 24.4024) && (freq_found <= 27.775)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 24.4024; }

            if ((freq_found >= 25.85) && (freq_found <= 29.4314)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 25.85; }

            if ((freq_found >= 27.3916) && (freq_found <= 31.1787)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 27.3916; }

            if ((freq_found >= 29.0178) && (freq_found <= 33.027)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 29.0178; }

            if ((freq_found >= 30.738) && (freq_found <= 34.9965)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 30.738; }

            if ((freq_found >= 32.571) && (freq_found <= 37.0771)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 32.571; }

            if ((freq_found >= 34.5074) && (freq_found <= 39.2789)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 34.5074; }

            if ((freq_found >= 36.5566) && (freq_found <= 41.612)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 36.5566; }

            if ((freq_found >= 38.728) && (freq_found <= 44.0865)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 38.728; }

            if ((freq_found >= 41.031) && (freq_found <= 46.7125)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 41.031; }

            if ((freq_found >= 43.475) && (freq_found <= 49.49)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 43.475; }

            if ((freq_found >= 46.06) && (freq_found <= 52.4291)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 46.06; }

            if ((freq_found >= 48.7954) && (freq_found <= 55.55)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 48.7954; }

            if ((freq_found >= 51.7) && (freq_found <= 58.8527)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 51.7; }

            if ((freq_found >= 54.7738) && (freq_found <= 62.3574)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 54.7738; }

            if ((freq_found >= 58.0356) && (freq_found <= 66.0641)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 58.0356; }

            if ((freq_found >= 61.4854) && (freq_found <= 69.993)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 61.4854; }

            if ((freq_found >= 65.142) && (freq_found <= 74.1542)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 65.142; }

            if ((freq_found >= 69.0148) && (freq_found <= 78.5578)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 69.0148; }

            if ((freq_found >= 73.1132) && (freq_found <= 83.2341)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 73.1132; }

            if ((freq_found >= 77.4654) && (freq_found <= 88.1831)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 77.4654; }

            if ((freq_found >= 82.0714) && (freq_found <= 93.425)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 82.0714; }

            if ((freq_found >= 86.95) && (freq_found <= 98.98)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 86.95; }

            if ((freq_found >= 92.12) && (freq_found <= 104.8683)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 92.12; }

            if ((freq_found >= 97.6002) && (freq_found <= 111.1)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 97.6002; }

            if ((freq_found >= 103.4) && (freq_found <= 117.7054)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 103.4; }

            if ((freq_found >= 109.5476) && (freq_found <= 124.7047)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 109.5476; }

            if ((freq_found >= 116.0618) && (freq_found <= 132.1181)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 116.0618; }

            if ((freq_found >= 122.9614) && (freq_found <= 139.9759)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 122.9614; }

            if ((freq_found >= 130.2746) && (freq_found <= 148.2983)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 130.2746; }

            if ((freq_found >= 138.0202) && (freq_found <= 157.1156)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 138.0202; }

            if ((freq_found >= 146.2264) && (freq_found <= 166.4581)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 146.2264; }

            if ((freq_found >= 154.9214) && (freq_found <= 176.3561)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 154.9214; }

            if ((freq_found >= 164.1334) && (freq_found <= 186.85)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 164.1334; }

            if ((freq_found >= 173.9) && (freq_found <= 197.96)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 173.9; }

            if ((freq_found >= 184.24) && (freq_found <= 209.7265)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 184.24; }

            if ((freq_found >= 195.191) && (freq_found <= 222.2)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 195.191; }

            if ((freq_found >= 206.8) && (freq_found <= 235.4108)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 206.8; }

            if ((freq_found >= 219.0952) && (freq_found <= 249.4094)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 219.0952; }

            if ((freq_found >= 232.1236) && (freq_found <= 264.2463)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 232.1236; }

            if ((freq_found >= 245.9322) && (freq_found <= 279.9518)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 245.9322; }

            if ((freq_found >= 260.5492) && (freq_found <= 296.5966)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 260.5492; }

            if ((freq_found >= 276.0404) && (freq_found <= 314.2413)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 276.0404; }

            if ((freq_found >= 292.4622) && (freq_found <= 332.9263)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 292.4622; }

            if ((freq_found >= 309.8522) && (freq_found <= 352.7223)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 309.8522; }

            if ((freq_found >= 328.2762) && (freq_found <= 373.6899)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 328.2762; }

            if ((freq_found >= 347.7906) && (freq_found <= 395.92)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 347.7906; }

            if ((freq_found >= 368.48) && (freq_found <= 419.453)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 368.48; }

            if ((freq_found >= 390.382) && (freq_found <= 444.4)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 390.382; }

            if ((freq_found >= 413.6) && (freq_found <= 470.8216)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 413.6; }

            if ((freq_found >= 438.1904) && (freq_found <= 498.8188)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 438.1904; }

            if ((freq_found >= 464.2472) && (freq_found <= 528.4825)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 464.2472; }

            if ((freq_found >= 491.855) && (freq_found <= 559.9137)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 491.855; }

            if ((freq_found >= 521.1078) && (freq_found <= 593.2033)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 521.1078; }

            if ((freq_found >= 552.0902) && (freq_found <= 628.4725)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 552.0902; }

            if ((freq_found >= 584.915) && (freq_found <= 665.8526)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 584.915; }

            if ((freq_found >= 619.7044) && (freq_found <= 705.4446)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 619.7044; }

            if ((freq_found >= 656.5524) && (freq_found <= 747.3899)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 656.5524; }

            if ((freq_found >= 695.5906) && (freq_found <= 791.8299)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 695.5906; }

            if ((freq_found >= 736.9506) && (freq_found <= 838.9161)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 736.9506; }

            if ((freq_found >= 780.7734) && (freq_found <= 888.8)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 780.7734; }

            if ((freq_found >= 827.2) && (freq_found <= 941.6533)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 827.2; }

            if ((freq_found >= 876.3902) && (freq_found <= 997.6477)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 876.3902; }

            if ((freq_found >= 928.5038) && (freq_found <= 1056.965)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 928.5038; }

            if ((freq_found >= 983.71) && (freq_found <= 1119.8173)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 983.71; }

            if ((freq_found >= 1042.2062) && (freq_found <= 1186.4066)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1042.2062; }

            if ((freq_found >= 1104.1804) && (freq_found <= 1256.9551)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1104.1804; }

            if ((freq_found >= 1169.8394) && (freq_found <= 1331.6951)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1169.8394; }

            if ((freq_found >= 1239.3994) && (freq_found <= 1410.8791)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1239.3994; }

            if ((freq_found >= 1313.0954) && (freq_found <= 1494.7798)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1313.0954; }

            if ((freq_found >= 1391.1812) && (freq_found <= 1583.6598)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1391.1812; }

            if ((freq_found >= 1473.9012) && (freq_found <= 1677.8322)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1473.9012; }

            if ((freq_found >= 1561.5468) && (freq_found <= 1777.6)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1561.5468; }

            if ((freq_found >= 1654.4) && (freq_found <= 1883.3066)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1654.4; }

            if ((freq_found >= 1752.7804) && (freq_found <= 1995.2853)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1752.7804; }

            if ((freq_found >= 1856.9982) && (freq_found <= 2113.93)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1856.9982; }

            if ((freq_found >= 1967.42) && (freq_found <= 2239.6346)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1967.42; }

            if ((freq_found >= 2084.4124) && (freq_found <= 2372.8132)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2084.4124; }

            if ((freq_found >= 2208.3608) && (freq_found <= 2513.9102)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2208.3608; }

            if ((freq_found >= 2339.6788) && (freq_found <= 2663.3902)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2339.6788; }

            if ((freq_found >= 2478.7988) && (freq_found <= 2821.7683)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2478.7988; }

            if ((freq_found >= 2626.2002) && (freq_found <= 2989.5596)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2626.2002; }

            if ((freq_found >= 2782.3624) && (freq_found <= 3167.3196)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2782.3624; }

            if ((freq_found >= 2947.8024) && (freq_found <= 3355.6644)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2947.8024; }

            if ((freq_found >= 3123.0936) && (freq_found <= 3555.2)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 3123.0936; }

            if ((freq_found >= 3308.8) && (freq_found <= 3766.6031)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 3308.8; }

            if ((freq_found >= 3505.5514) && (freq_found <= 3990.5807)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 3505.5514; }

            if ((freq_found >= 3714.0058) && (freq_found <= 4227.8701)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 3714.0058; }

            if ((freq_found >= 3934.8494) && (freq_found <= 4479.2692)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 3934.8494; }

            if ((freq_found >= 4168.8248) && (freq_found <= 4745.6264)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 4168.8248; }

            if ((freq_found >= 4416.7216) && (freq_found <= 5027.8103)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 4416.7216; }

            if ((freq_found >= 4679.3482) && (freq_found <= 5326.7804)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 4679.3482; }

            if ((freq_found >= 4957.5976) && (freq_found <= 5643.5265)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 4957.5976; }

            if ((freq_found >= 5252.391) && (freq_found <= 5979.1091)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 5252.391; }

            if ((freq_found >= 5564.7154) && (freq_found <= 6334.6493)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 5564.7154; }

            if ((freq_found >= 5895.6142) && (freq_found <= 6711.3288)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 5895.6142; }

            if ((freq_found >= 6246.1872) && (freq_found <= 7110.4)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 6246.1872; }

            if ((freq_found >= 6617.6) && (freq_found <= 7533.2062)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 6617.6; }

            if ((freq_found >= 7011.1028) && (freq_found <= 7981.1513)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 7011.1028; }

            if ((freq_found >= 7428.0022) && (freq_found <= 8455.7402)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 7428.0022; }

            if ((freq_found >= 7869.6988) && (freq_found <= 8958.5384)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 7869.6988; }

            if ((freq_found >= 8337.6496) && (freq_found <= 9491.2427)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 8337.6496; }

            if ((freq_found >= 8833.4338) && (freq_found <= 10055.6206)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 8833.4338; }

            if ((freq_found >= 9358.6964) && (freq_found <= 10653.5608)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 9358.6964; }

            if ((freq_found >= 9915.1952) && (freq_found <= 11287.053)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 9915.1952; }

            if ((freq_found >= 10504.782) && (freq_found <= 11958.2182)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 10504.782; }

            if ((freq_found >= 11129.4308) && (freq_found <= 12669.2885)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 11129.4308; }

            if ((freq_found >= 11791.219) && (freq_found <= 13422.6475)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 11791.219; }

            if ((freq_found >= 12492.365) && (freq_found <= 0)) { NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 12492.365; }

            return NEAREST_LOWER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND;// note_number_to_take_integer;

        }// public static double public_static_double_get_note_number_ACTUAL_LOWER_NEAREST_NOTES_frequency_Hertz(double freq_found)

        public static double public_static_double_get_note_number_ACTUAL_HIGHER_NEAREST_NOTES_frequency_Hertz(double freq_found)

        {

            // TO DO FOR PITCHBENT_AT_START_

            int note_number_to_take_integer = -6;

            string note_name_to_take_string = "";

            double NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 0;

            if ((freq_found >= 7.6892) && (freq_found <= 8.7466)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 8.7466; }

            if ((freq_found >= 8.1404) && (freq_found <= 9.2718)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 9.2718; }

            if ((freq_found >= 8.6292) && (freq_found <= 9.8172)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 9.8172; }

            if ((freq_found >= 9.1368) && (freq_found <= 10.403)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 10.403; }

            if ((freq_found >= 9.682) && (freq_found <= 11.0191)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 11.0191; }

            if ((freq_found >= 10.2554) && (freq_found <= 11.6756)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 11.6756; }

            if ((freq_found >= 10.8664) && (freq_found <= 12.3725)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 12.3725; }

            if ((freq_found >= 11.515) && (freq_found <= 13.1098)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 13.1098; }

            if ((freq_found >= 12.2012) && (freq_found <= 13.8875)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 13.8875; }

            if ((freq_found >= 12.925) && (freq_found <= 14.7157)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 14.7157; }

            if ((freq_found >= 13.6958) && (freq_found <= 15.5843)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 15.5843; }

            if ((freq_found >= 14.5042) && (freq_found <= 16.5135)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 16.5135; }

            if ((freq_found >= 15.369) && (freq_found <= 17.4932)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 17.4932; }

            if ((freq_found >= 16.2808) && (freq_found <= 18.5335)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 18.5335; }

            if ((freq_found >= 17.249) && (freq_found <= 19.6445)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 19.6445; }

            if ((freq_found >= 18.283) && (freq_found <= 20.806)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 20.806; }

            if ((freq_found >= 19.364) && (freq_found <= 22.0483)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 22.0483; }

            if ((freq_found >= 20.5202) && (freq_found <= 23.3512)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 23.3512; }

            if ((freq_found >= 21.7328) && (freq_found <= 24.745)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 24.745; }

            if ((freq_found >= 23.03) && (freq_found <= 26.2196)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 26.2196; }

            if ((freq_found >= 24.4024) && (freq_found <= 27.775)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 27.775; }

            if ((freq_found >= 25.85) && (freq_found <= 29.4314)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 29.4314; }

            if ((freq_found >= 27.3916) && (freq_found <= 31.1787)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 31.1787; }

            if ((freq_found >= 29.0178) && (freq_found <= 33.027)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 33.027; }

            if ((freq_found >= 30.738) && (freq_found <= 34.9965)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 34.9965; }

            if ((freq_found >= 32.571) && (freq_found <= 37.0771)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 37.0771; }

            if ((freq_found >= 34.5074) && (freq_found <= 39.2789)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 39.2789; }

            if ((freq_found >= 36.5566) && (freq_found <= 41.612)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 41.612; }

            if ((freq_found >= 38.728) && (freq_found <= 44.0865)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 44.0865; }

            if ((freq_found >= 41.031) && (freq_found <= 46.7125)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 46.7125; }

            if ((freq_found >= 43.475) && (freq_found <= 49.49)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 49.49; }

            if ((freq_found >= 46.06) && (freq_found <= 52.4291)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 52.4291; }

            if ((freq_found >= 48.7954) && (freq_found <= 55.55)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 55.55; }

            if ((freq_found >= 51.7) && (freq_found <= 58.8527)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 58.8527; }

            if ((freq_found >= 54.7738) && (freq_found <= 62.3574)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 62.3574; }

            if ((freq_found >= 58.0356) && (freq_found <= 66.0641)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 66.0641; }

            if ((freq_found >= 61.4854) && (freq_found <= 69.993)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 69.993; }

            if ((freq_found >= 65.142) && (freq_found <= 74.1542)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 74.1542; }

            if ((freq_found >= 69.0148) && (freq_found <= 78.5578)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 78.5578; }

            if ((freq_found >= 73.1132) && (freq_found <= 83.2341)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 83.2341; }

            if ((freq_found >= 77.4654) && (freq_found <= 88.1831)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 88.1831; }

            if ((freq_found >= 82.0714) && (freq_found <= 93.425)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 93.425; }

            if ((freq_found >= 86.95) && (freq_found <= 98.98)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 98.98; }

            if ((freq_found >= 92.12) && (freq_found <= 104.8683)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 104.8683; }

            if ((freq_found >= 97.6002) && (freq_found <= 111.1)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 111.1; }

            if ((freq_found >= 103.4) && (freq_found <= 117.7054)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 117.7054; }

            if ((freq_found >= 109.5476) && (freq_found <= 124.7047)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 124.7047; }

            if ((freq_found >= 116.0618) && (freq_found <= 132.1181)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 132.1181; }

            if ((freq_found >= 122.9614) && (freq_found <= 139.9759)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 139.9759; }

            if ((freq_found >= 130.2746) && (freq_found <= 148.2983)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 148.2983; }

            if ((freq_found >= 138.0202) && (freq_found <= 157.1156)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 157.1156; }

            if ((freq_found >= 146.2264) && (freq_found <= 166.4581)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 166.4581; }

            if ((freq_found >= 154.9214) && (freq_found <= 176.3561)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 176.3561; }

            if ((freq_found >= 164.1334) && (freq_found <= 186.85)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 186.85; }

            if ((freq_found >= 173.9) && (freq_found <= 197.96)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 197.96; }

            if ((freq_found >= 184.24) && (freq_found <= 209.7265)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 209.7265; }

            if ((freq_found >= 195.191) && (freq_found <= 222.2)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 222.2; }

            if ((freq_found >= 206.8) && (freq_found <= 235.4108)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 235.4108; }

            if ((freq_found >= 219.0952) && (freq_found <= 249.4094)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 249.4094; }

            if ((freq_found >= 232.1236) && (freq_found <= 264.2463)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 264.2463; }

            if ((freq_found >= 245.9322) && (freq_found <= 279.9518)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 279.9518; }

            if ((freq_found >= 260.5492) && (freq_found <= 296.5966)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 296.5966; }

            if ((freq_found >= 276.0404) && (freq_found <= 314.2413)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 314.2413; }

            if ((freq_found >= 292.4622) && (freq_found <= 332.9263)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 332.9263; }

            if ((freq_found >= 309.8522) && (freq_found <= 352.7223)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 352.7223; }

            if ((freq_found >= 328.2762) && (freq_found <= 373.6899)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 373.6899; }

            if ((freq_found >= 347.7906) && (freq_found <= 395.92)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 395.92; }

            if ((freq_found >= 368.48) && (freq_found <= 419.453)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 419.453; }

            if ((freq_found >= 390.382) && (freq_found <= 444.4)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 444.4; }

            if ((freq_found >= 413.6) && (freq_found <= 470.8216)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 470.8216; }

            if ((freq_found >= 438.1904) && (freq_found <= 498.8188)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 498.8188; }

            if ((freq_found >= 464.2472) && (freq_found <= 528.4825)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 528.4825; }

            if ((freq_found >= 491.855) && (freq_found <= 559.9137)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 559.9137; }

            if ((freq_found >= 521.1078) && (freq_found <= 593.2033)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 593.2033; }

            if ((freq_found >= 552.0902) && (freq_found <= 628.4725)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 628.4725; }

            if ((freq_found >= 584.915) && (freq_found <= 665.8526)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 665.8526; }

            if ((freq_found >= 619.7044) && (freq_found <= 705.4446)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 705.4446; }

            if ((freq_found >= 656.5524) && (freq_found <= 747.3899)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 747.3899; }

            if ((freq_found >= 695.5906) && (freq_found <= 791.8299)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 791.8299; }

            if ((freq_found >= 736.9506) && (freq_found <= 838.9161)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 838.9161; }

            if ((freq_found >= 780.7734) && (freq_found <= 888.8)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 888.8; }

            if ((freq_found >= 827.2) && (freq_found <= 941.6533)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 941.6533; }

            if ((freq_found >= 876.3902) && (freq_found <= 997.6477)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 997.6477; }

            if ((freq_found >= 928.5038) && (freq_found <= 1056.965)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1056.965; }

            if ((freq_found >= 983.71) && (freq_found <= 1119.8173)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1119.8173; }

            if ((freq_found >= 1042.2062) && (freq_found <= 1186.4066)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1186.4066; }

            if ((freq_found >= 1104.1804) && (freq_found <= 1256.9551)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1256.9551; }

            if ((freq_found >= 1169.8394) && (freq_found <= 1331.6951)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1331.6951; }

            if ((freq_found >= 1239.3994) && (freq_found <= 1410.8791)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1410.8791; }

            if ((freq_found >= 1313.0954) && (freq_found <= 1494.7798)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1494.7798; }

            if ((freq_found >= 1391.1812) && (freq_found <= 1583.6598)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1583.6598; }

            if ((freq_found >= 1473.9012) && (freq_found <= 1677.8322)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1677.8322; }

            if ((freq_found >= 1561.5468) && (freq_found <= 1777.6)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1777.6; }

            if ((freq_found >= 1654.4) && (freq_found <= 1883.3066)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1883.3066; }

            if ((freq_found >= 1752.7804) && (freq_found <= 1995.2853)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 1995.2853; }

            if ((freq_found >= 1856.9982) && (freq_found <= 2113.93)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2113.93; }

            if ((freq_found >= 1967.42) && (freq_found <= 2239.6346)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2239.6346; }

            if ((freq_found >= 2084.4124) && (freq_found <= 2372.8132)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2372.8132; }

            if ((freq_found >= 2208.3608) && (freq_found <= 2513.9102)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2513.9102; }

            if ((freq_found >= 2339.6788) && (freq_found <= 2663.3902)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2663.3902; }

            if ((freq_found >= 2478.7988) && (freq_found <= 2821.7683)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2821.7683; }

            if ((freq_found >= 2626.2002) && (freq_found <= 2989.5596)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 2989.5596; }

            if ((freq_found >= 2782.3624) && (freq_found <= 3167.3196)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 3167.3196; }

            if ((freq_found >= 2947.8024) && (freq_found <= 3355.6644)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 3355.6644; }

            if ((freq_found >= 3123.0936) && (freq_found <= 3555.2)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 3555.2; }

            if ((freq_found >= 3308.8) && (freq_found <= 3766.6031)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 3766.6031; }

            if ((freq_found >= 3505.5514) && (freq_found <= 3990.5807)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 3990.5807; }

            if ((freq_found >= 3714.0058) && (freq_found <= 4227.8701)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 4227.8701; }

            if ((freq_found >= 3934.8494) && (freq_found <= 4479.2692)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 4479.2692; }

            if ((freq_found >= 4168.8248) && (freq_found <= 4745.6264)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 4745.6264; }

            if ((freq_found >= 4416.7216) && (freq_found <= 5027.8103)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 5027.8103; }

            if ((freq_found >= 4679.3482) && (freq_found <= 5326.7804)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 5326.7804; }

            if ((freq_found >= 4957.5976) && (freq_found <= 5643.5265)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 5643.5265; }

            if ((freq_found >= 5252.391) && (freq_found <= 5979.1091)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 5979.1091; }

            if ((freq_found >= 5564.7154) && (freq_found <= 6334.6493)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 6334.6493; }

            if ((freq_found >= 5895.6142) && (freq_found <= 6711.3288)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 6711.3288; }

            if ((freq_found >= 6246.1872) && (freq_found <= 7110.4)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 7110.4; }

            if ((freq_found >= 6617.6) && (freq_found <= 7533.2062)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 7533.2062; }

            if ((freq_found >= 7011.1028) && (freq_found <= 7981.1513)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 7981.1513; }

            if ((freq_found >= 7428.0022) && (freq_found <= 8455.7402)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 8455.7402; }

            if ((freq_found >= 7869.6988) && (freq_found <= 8958.5384)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 8958.5384; }

            if ((freq_found >= 8337.6496) && (freq_found <= 9491.2427)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 9491.2427; }

            if ((freq_found >= 8833.4338) && (freq_found <= 10055.6206)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 10055.6206; }

            if ((freq_found >= 9358.6964) && (freq_found <= 10653.5608)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 10653.5608; }

            if ((freq_found >= 9915.1952) && (freq_found <= 11287.053)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 11287.053; }

            if ((freq_found >= 10504.782) && (freq_found <= 11958.2182)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 11958.2182; }

            if ((freq_found >= 11129.4308) && (freq_found <= 12669.2885)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 12669.2885; }

            if ((freq_found >= 11791.219) && (freq_found <= 13422.6475)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 13422.6475; }

            if ((freq_found >= 12492.365) && (freq_found <= 0)) { NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND = 0; }

            return NEAREST_HIGHER_FREQUENCY_FOR_CURRENT_FREQUENCY_FOUND;// note_number_to_take_integer;

        }//public static double public_static_double_get_note_number_ACTUAL_HIGHER_NEAREST_NOTES_frequency_Hertz(double freq_found)

        public static string public_static_string_get_note_NAMES_from_frequency_Hertz(double freq_found)

        {

            int note_number_to_take_integer = -6;

            string note_name_to_take_string = "";

            if ((freq_found >= 7.6892) && (freq_found <= 8.7466)) { note_number_to_take_integer = 1; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 8.1404) && (freq_found <= 9.2718)) { note_number_to_take_integer = 2; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 8.6292) && (freq_found <= 9.8172)) { note_number_to_take_integer = 3; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 9.1368) && (freq_found <= 10.403)) { note_number_to_take_integer = 4; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 9.682) && (freq_found <= 11.0191)) { note_number_to_take_integer = 5; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 10.2554) && (freq_found <= 11.6756)) { note_number_to_take_integer = 6; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 10.8664) && (freq_found <= 12.3725)) { note_number_to_take_integer = 7; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 11.515) && (freq_found <= 13.1098)) { note_number_to_take_integer = 8; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 12.2012) && (freq_found <= 13.8875)) { note_number_to_take_integer = 9; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 12.925) && (freq_found <= 14.7157)) { note_number_to_take_integer = 10; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 13.6958) && (freq_found <= 15.5843)) { note_number_to_take_integer = 11; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 14.5042) && (freq_found <= 16.5135)) { note_number_to_take_integer = 12; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 15.369) && (freq_found <= 17.4932)) { note_number_to_take_integer = 13; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 16.2808) && (freq_found <= 18.5335)) { note_number_to_take_integer = 14; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 17.249) && (freq_found <= 19.6445)) { note_number_to_take_integer = 15; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 18.283) && (freq_found <= 20.806)) { note_number_to_take_integer = 16; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 19.364) && (freq_found <= 22.0483)) { note_number_to_take_integer = 17; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 20.5202) && (freq_found <= 23.3512)) { note_number_to_take_integer = 18; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 21.7328) && (freq_found <= 24.745)) { note_number_to_take_integer = 19; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 23.03) && (freq_found <= 26.2196)) { note_number_to_take_integer = 20; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 24.4024) && (freq_found <= 27.775)) { note_number_to_take_integer = 21; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 25.85) && (freq_found <= 29.4314)) { note_number_to_take_integer = 22; note_name_to_take_string = "A0"; }

            if ((freq_found >= 27.3916) && (freq_found <= 31.1787)) { note_number_to_take_integer = 23; note_name_to_take_string = "A#0/Bb0"; }

            if ((freq_found >= 29.0178) && (freq_found <= 33.027)) { note_number_to_take_integer = 24; note_name_to_take_string = "B0"; }

            if ((freq_found >= 30.738) && (freq_found <= 34.9965)) { note_number_to_take_integer = 25; note_name_to_take_string = "C1"; }

            if ((freq_found >= 32.571) && (freq_found <= 37.0771)) { note_number_to_take_integer = 26; note_name_to_take_string = "C#1/Db1"; }

            if ((freq_found >= 34.5074) && (freq_found <= 39.2789)) { note_number_to_take_integer = 27; note_name_to_take_string = "D1"; }

            if ((freq_found >= 36.5566) && (freq_found <= 41.612)) { note_number_to_take_integer = 28; note_name_to_take_string = "D#1/Eb1"; }

            if ((freq_found >= 38.728) && (freq_found <= 44.0865)) { note_number_to_take_integer = 29; note_name_to_take_string = "E1"; }

            if ((freq_found >= 41.031) && (freq_found <= 46.7125)) { note_number_to_take_integer = 30; note_name_to_take_string = "F1"; }

            if ((freq_found >= 43.475) && (freq_found <= 49.49)) { note_number_to_take_integer = 31; note_name_to_take_string = "F#1/Gb1"; }

            if ((freq_found >= 46.06) && (freq_found <= 52.4291)) { note_number_to_take_integer = 32; note_name_to_take_string = "G1"; }

            if ((freq_found >= 48.7954) && (freq_found <= 55.55)) { note_number_to_take_integer = 33; note_name_to_take_string = "G#1/Ab1"; }

            if ((freq_found >= 51.7) && (freq_found <= 58.8527)) { note_number_to_take_integer = 34; note_name_to_take_string = "A1"; }

            if ((freq_found >= 54.7738) && (freq_found <= 62.3574)) { note_number_to_take_integer = 35; note_name_to_take_string = "A#1/Bb1"; }

            if ((freq_found >= 58.0356) && (freq_found <= 66.0641)) { note_number_to_take_integer = 36; note_name_to_take_string = "B1"; }

            if ((freq_found >= 61.4854) && (freq_found <= 69.993)) { note_number_to_take_integer = 37; note_name_to_take_string = "C2"; }

            if ((freq_found >= 65.142) && (freq_found <= 74.1542)) { note_number_to_take_integer = 38; note_name_to_take_string = "C#2/Db2"; }

            if ((freq_found >= 69.0148) && (freq_found <= 78.5578)) { note_number_to_take_integer = 39; note_name_to_take_string = "D2"; }

            if ((freq_found >= 73.1132) && (freq_found <= 83.2341)) { note_number_to_take_integer = 40; note_name_to_take_string = "D#2/Eb2"; }

            if ((freq_found >= 77.4654) && (freq_found <= 88.1831)) { note_number_to_take_integer = 41; note_name_to_take_string = "E2"; }

            if ((freq_found >= 82.0714) && (freq_found <= 93.425)) { note_number_to_take_integer = 42; note_name_to_take_string = "F2"; }

            if ((freq_found >= 86.95) && (freq_found <= 98.98)) { note_number_to_take_integer = 43; note_name_to_take_string = "F#2/Gb2"; }

            if ((freq_found >= 92.12) && (freq_found <= 104.8683)) { note_number_to_take_integer = 44; note_name_to_take_string = "G2"; }

            if ((freq_found >= 97.6002) && (freq_found <= 111.1)) { note_number_to_take_integer = 45; note_name_to_take_string = "G#2/Ab2"; }

            if ((freq_found >= 103.4) && (freq_found <= 117.7054)) { note_number_to_take_integer = 46; note_name_to_take_string = "A2"; }

            if ((freq_found >= 109.5476) && (freq_found <= 124.7047)) { note_number_to_take_integer = 47; note_name_to_take_string = "A#2/Bb2"; }

            if ((freq_found >= 116.0618) && (freq_found <= 132.1181)) { note_number_to_take_integer = 48; note_name_to_take_string = "B2"; }

            if ((freq_found >= 122.9614) && (freq_found <= 139.9759)) { note_number_to_take_integer = 49; note_name_to_take_string = "C3"; }

            if ((freq_found >= 130.2746) && (freq_found <= 148.2983)) { note_number_to_take_integer = 50; note_name_to_take_string = "C#3/Db3"; }

            if ((freq_found >= 138.0202) && (freq_found <= 157.1156)) { note_number_to_take_integer = 51; note_name_to_take_string = "D3"; }

            if ((freq_found >= 146.2264) && (freq_found <= 166.4581)) { note_number_to_take_integer = 52; note_name_to_take_string = "D#3/Eb3"; }

            if ((freq_found >= 154.9214) && (freq_found <= 176.3561)) { note_number_to_take_integer = 53; note_name_to_take_string = "E3"; }

            if ((freq_found >= 164.1334) && (freq_found <= 186.85)) { note_number_to_take_integer = 54; note_name_to_take_string = "F3"; }

            if ((freq_found >= 173.9) && (freq_found <= 197.96)) { note_number_to_take_integer = 55; note_name_to_take_string = "F#3/Gb3"; }

            if ((freq_found >= 184.24) && (freq_found <= 209.7265)) { note_number_to_take_integer = 56; note_name_to_take_string = "G3"; }

            if ((freq_found >= 195.191) && (freq_found <= 222.2)) { note_number_to_take_integer = 57; note_name_to_take_string = "G#3/Ab3"; }

            if ((freq_found >= 206.8) && (freq_found <= 235.4108)) { note_number_to_take_integer = 58; note_name_to_take_string = "A3"; }

            if ((freq_found >= 219.0952) && (freq_found <= 249.4094)) { note_number_to_take_integer = 59; note_name_to_take_string = "A#3/Bb3"; }

            if ((freq_found >= 232.1236) && (freq_found <= 264.2463)) { note_number_to_take_integer = 60; note_name_to_take_string = "B3"; }

            if ((freq_found >= 245.9322) && (freq_found <= 279.9518)) { note_number_to_take_integer = 61; note_name_to_take_string = "C4 (middle C)"; }

            if ((freq_found >= 260.5492) && (freq_found <= 296.5966)) { note_number_to_take_integer = 62; note_name_to_take_string = "C#4/Db4"; }

            if ((freq_found >= 276.0404) && (freq_found <= 314.2413)) { note_number_to_take_integer = 63; note_name_to_take_string = "D4"; }

            if ((freq_found >= 292.4622) && (freq_found <= 332.9263)) { note_number_to_take_integer = 64; note_name_to_take_string = "D#4/Eb4"; }

            if ((freq_found >= 309.8522) && (freq_found <= 352.7223)) { note_number_to_take_integer = 65; note_name_to_take_string = "E4"; }

            if ((freq_found >= 328.2762) && (freq_found <= 373.6899)) { note_number_to_take_integer = 66; note_name_to_take_string = "F4"; }

            if ((freq_found >= 347.7906) && (freq_found <= 395.92)) { note_number_to_take_integer = 67; note_name_to_take_string = "F#4/Gb4"; }

            if ((freq_found >= 368.48) && (freq_found <= 419.453)) { note_number_to_take_integer = 68; note_name_to_take_string = "G4"; }

            if ((freq_found >= 390.382) && (freq_found <= 444.4)) { note_number_to_take_integer = 69; note_name_to_take_string = "G#4/Ab4"; }

            if ((freq_found >= 413.6) && (freq_found <= 470.8216)) { note_number_to_take_integer = 70; note_name_to_take_string = "A4 concert pitch"; }

            if ((freq_found >= 438.1904) && (freq_found <= 498.8188)) { note_number_to_take_integer = 71; note_name_to_take_string = "A#4/Bb4"; }

            if ((freq_found >= 464.2472) && (freq_found <= 528.4825)) { note_number_to_take_integer = 72; note_name_to_take_string = "B4"; }

            if ((freq_found >= 491.855) && (freq_found <= 559.9137)) { note_number_to_take_integer = 73; note_name_to_take_string = "C5"; }

            if ((freq_found >= 521.1078) && (freq_found <= 593.2033)) { note_number_to_take_integer = 74; note_name_to_take_string = "C#5/Db5"; }

            if ((freq_found >= 552.0902) && (freq_found <= 628.4725)) { note_number_to_take_integer = 75; note_name_to_take_string = "D5"; }

            if ((freq_found >= 584.915) && (freq_found <= 665.8526)) { note_number_to_take_integer = 76; note_name_to_take_string = "D#5/Eb5"; }

            if ((freq_found >= 619.7044) && (freq_found <= 705.4446)) { note_number_to_take_integer = 77; note_name_to_take_string = "E5"; }

            if ((freq_found >= 656.5524) && (freq_found <= 747.3899)) { note_number_to_take_integer = 78; note_name_to_take_string = "F5"; }

            if ((freq_found >= 695.5906) && (freq_found <= 791.8299)) { note_number_to_take_integer = 79; note_name_to_take_string = "F#5/Gb5"; }

            if ((freq_found >= 736.9506) && (freq_found <= 838.9161)) { note_number_to_take_integer = 80; note_name_to_take_string = "G5"; }

            if ((freq_found >= 780.7734) && (freq_found <= 888.8)) { note_number_to_take_integer = 81; note_name_to_take_string = "G#5/Ab5"; }

            if ((freq_found >= 827.2) && (freq_found <= 941.6533)) { note_number_to_take_integer = 82; note_name_to_take_string = "A5"; }

            if ((freq_found >= 876.3902) && (freq_found <= 997.6477)) { note_number_to_take_integer = 83; note_name_to_take_string = "A#5/Bb5"; }

            if ((freq_found >= 928.5038) && (freq_found <= 1056.965)) { note_number_to_take_integer = 84; note_name_to_take_string = "B5"; }

            if ((freq_found >= 983.71) && (freq_found <= 1119.8173)) { note_number_to_take_integer = 85; note_name_to_take_string = "C6"; }

            if ((freq_found >= 1042.2062) && (freq_found <= 1186.4066)) { note_number_to_take_integer = 86; note_name_to_take_string = "C#6/Db6"; }

            if ((freq_found >= 1104.1804) && (freq_found <= 1256.9551)) { note_number_to_take_integer = 87; note_name_to_take_string = "D6"; }

            if ((freq_found >= 1169.8394) && (freq_found <= 1331.6951)) { note_number_to_take_integer = 88; note_name_to_take_string = "D#6/Eb6"; }

            if ((freq_found >= 1239.3994) && (freq_found <= 1410.8791)) { note_number_to_take_integer = 89; note_name_to_take_string = "E6"; }

            if ((freq_found >= 1313.0954) && (freq_found <= 1494.7798)) { note_number_to_take_integer = 90; note_name_to_take_string = "F6"; }

            if ((freq_found >= 1391.1812) && (freq_found <= 1583.6598)) { note_number_to_take_integer = 91; note_name_to_take_string = "F#6/Gb6"; }

            if ((freq_found >= 1473.9012) && (freq_found <= 1677.8322)) { note_number_to_take_integer = 92; note_name_to_take_string = "G6"; }

            if ((freq_found >= 1561.5468) && (freq_found <= 1777.6)) { note_number_to_take_integer = 93; note_name_to_take_string = "G#6/Ab6"; }

            if ((freq_found >= 1654.4) && (freq_found <= 1883.3066)) { note_number_to_take_integer = 94; note_name_to_take_string = "A6"; }

            if ((freq_found >= 1752.7804) && (freq_found <= 1995.2853)) { note_number_to_take_integer = 95; note_name_to_take_string = "A#6/Bb6"; }

            if ((freq_found >= 1856.9982) && (freq_found <= 2113.93)) { note_number_to_take_integer = 96; note_name_to_take_string = "B6"; }

            if ((freq_found >= 1967.42) && (freq_found <= 2239.6346)) { note_number_to_take_integer = 97; note_name_to_take_string = "C7"; }

            if ((freq_found >= 2084.4124) && (freq_found <= 2372.8132)) { note_number_to_take_integer = 98; note_name_to_take_string = "C#7/Db7"; }

            if ((freq_found >= 2208.3608) && (freq_found <= 2513.9102)) { note_number_to_take_integer = 99; note_name_to_take_string = "D7"; }

            if ((freq_found >= 2339.6788) && (freq_found <= 2663.3902)) { note_number_to_take_integer = 100; note_name_to_take_string = "D#7/Eb7"; }

            if ((freq_found >= 2478.7988) && (freq_found <= 2821.7683)) { note_number_to_take_integer = 101; note_name_to_take_string = "E7"; }

            if ((freq_found >= 2626.2002) && (freq_found <= 2989.5596)) { note_number_to_take_integer = 102; note_name_to_take_string = "F7"; }

            if ((freq_found >= 2782.3624) && (freq_found <= 3167.3196)) { note_number_to_take_integer = 103; note_name_to_take_string = "F#7/Gb7"; }

            if ((freq_found >= 2947.8024) && (freq_found <= 3355.6644)) { note_number_to_take_integer = 104; note_name_to_take_string = "G7"; }

            if ((freq_found >= 3123.0936) && (freq_found <= 3555.2)) { note_number_to_take_integer = 105; note_name_to_take_string = "G#7/Ab7"; }

            if ((freq_found >= 3308.8) && (freq_found <= 3766.6031)) { note_number_to_take_integer = 106; note_name_to_take_string = "A7"; }

            if ((freq_found >= 3505.5514) && (freq_found <= 3990.5807)) { note_number_to_take_integer = 107; note_name_to_take_string = "A#7/Bb7"; }

            if ((freq_found >= 3714.0058) && (freq_found <= 4227.8701)) { note_number_to_take_integer = 108; note_name_to_take_string = "B7"; }

            if ((freq_found >= 3934.8494) && (freq_found <= 4479.2692)) { note_number_to_take_integer = 109; note_name_to_take_string = "C8"; }

            if ((freq_found >= 4168.8248) && (freq_found <= 4745.6264)) { note_number_to_take_integer = 110; note_name_to_take_string = "C#8/Db8"; }

            if ((freq_found >= 4416.7216) && (freq_found <= 5027.8103)) { note_number_to_take_integer = 111; note_name_to_take_string = "D8"; }

            if ((freq_found >= 4679.3482) && (freq_found <= 5326.7804)) { note_number_to_take_integer = 112; note_name_to_take_string = "D#8/Eb8"; }

            if ((freq_found >= 4957.5976) && (freq_found <= 5643.5265)) { note_number_to_take_integer = 113; note_name_to_take_string = "E8"; }

            if ((freq_found >= 5252.391) && (freq_found <= 5979.1091)) { note_number_to_take_integer = 114; note_name_to_take_string = "F8"; }

            if ((freq_found >= 5564.7154) && (freq_found <= 6334.6493)) { note_number_to_take_integer = 115; note_name_to_take_string = "F#8/Gb8"; }

            if ((freq_found >= 5895.6142) && (freq_found <= 6711.3288)) { note_number_to_take_integer = 116; note_name_to_take_string = "G8"; }

            if ((freq_found >= 6246.1872) && (freq_found <= 7110.4)) { note_number_to_take_integer = 117; note_name_to_take_string = "G#8/Ab8"; }

            if ((freq_found >= 6617.6) && (freq_found <= 7533.2062)) { note_number_to_take_integer = 118; note_name_to_take_string = "A8"; }

            if ((freq_found >= 7011.1028) && (freq_found <= 7981.1513)) { note_number_to_take_integer = 119; note_name_to_take_string = "A#8/Bb8"; }

            if ((freq_found >= 7428.0022) && (freq_found <= 8455.7402)) { note_number_to_take_integer = 120; note_name_to_take_string = "B8"; }

            if ((freq_found >= 7869.6988) && (freq_found <= 8958.5384)) { note_number_to_take_integer = 121; note_name_to_take_string = "C9"; }

            if ((freq_found >= 8337.6496) && (freq_found <= 9491.2427)) { note_number_to_take_integer = 122; note_name_to_take_string = "C#9/Db9"; }

            if ((freq_found >= 8833.4338) && (freq_found <= 10055.6206)) { note_number_to_take_integer = 123; note_name_to_take_string = "D9"; }

            if ((freq_found >= 9358.6964) && (freq_found <= 10653.5608)) { note_number_to_take_integer = 124; note_name_to_take_string = "D#9/Eb9"; }

            if ((freq_found >= 9915.1952) && (freq_found <= 11287.053)) { note_number_to_take_integer = 125; note_name_to_take_string = "E9"; }

            if ((freq_found >= 10504.782) && (freq_found <= 11958.2182)) { note_number_to_take_integer = 126; note_name_to_take_string = "F9"; }

            if ((freq_found >= 11129.4308) && (freq_found <= 12669.2885)) { note_number_to_take_integer = 127; note_name_to_take_string = "F#9/Gb9"; }

            if ((freq_found >= 11791.219) && (freq_found <= 13422.6475)) { note_number_to_take_integer = 128; note_name_to_take_string = "G9"; }

            if ((freq_found >= 12492.365) && (freq_found <= 0)) { note_number_to_take_integer = 129; note_name_to_take_string = "G#9/Ab9"; }

            return note_name_to_take_string;

        }// public static string public_static_string_get_note_NAMES_from_frequency_Hertz(double freq_found)

        public static int public_static_int_get_note_number_from_frequency_Hertz(double freq_found)

        {

            int note_number_to_take_integer = -6;

            string note_name_to_take_string = "";

            if ((freq_found >= 7.6892) && (freq_found <= 8.7466)) { note_number_to_take_integer = 1; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 8.1404) && (freq_found <= 9.2718)) { note_number_to_take_integer = 2; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 8.6292) && (freq_found <= 9.8172)) { note_number_to_take_integer = 3; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 9.1368) && (freq_found <= 10.403)) { note_number_to_take_integer = 4; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 9.682) && (freq_found <= 11.0191)) { note_number_to_take_integer = 5; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 10.2554) && (freq_found <= 11.6756)) { note_number_to_take_integer = 6; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 10.8664) && (freq_found <= 12.3725)) { note_number_to_take_integer = 7; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 11.515) && (freq_found <= 13.1098)) { note_number_to_take_integer = 8; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 12.2012) && (freq_found <= 13.8875)) { note_number_to_take_integer = 9; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 12.925) && (freq_found <= 14.7157)) { note_number_to_take_integer = 10; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 13.6958) && (freq_found <= 15.5843)) { note_number_to_take_integer = 11; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 14.5042) && (freq_found <= 16.5135)) { note_number_to_take_integer = 12; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 15.369) && (freq_found <= 17.4932)) { note_number_to_take_integer = 13; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 16.2808) && (freq_found <= 18.5335)) { note_number_to_take_integer = 14; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 17.249) && (freq_found <= 19.6445)) { note_number_to_take_integer = 15; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 18.283) && (freq_found <= 20.806)) { note_number_to_take_integer = 16; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 19.364) && (freq_found <= 22.0483)) { note_number_to_take_integer = 17; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 20.5202) && (freq_found <= 23.3512)) { note_number_to_take_integer = 18; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 21.7328) && (freq_found <= 24.745)) { note_number_to_take_integer = 19; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 23.03) && (freq_found <= 26.2196)) { note_number_to_take_integer = 20; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 24.4024) && (freq_found <= 27.775)) { note_number_to_take_integer = 21; note_name_to_take_string = "NONE"; }

            if ((freq_found >= 25.85) && (freq_found <= 29.4314)) { note_number_to_take_integer = 22; note_name_to_take_string = "A0"; }

            if ((freq_found >= 27.3916) && (freq_found <= 31.1787)) { note_number_to_take_integer = 23; note_name_to_take_string = "A#0/Bb0"; }

            if ((freq_found >= 29.0178) && (freq_found <= 33.027)) { note_number_to_take_integer = 24; note_name_to_take_string = "B0"; }

            if ((freq_found >= 30.738) && (freq_found <= 34.9965)) { note_number_to_take_integer = 25; note_name_to_take_string = "C1"; }

            if ((freq_found >= 32.571) && (freq_found <= 37.0771)) { note_number_to_take_integer = 26; note_name_to_take_string = "C#1/Db1"; }

            if ((freq_found >= 34.5074) && (freq_found <= 39.2789)) { note_number_to_take_integer = 27; note_name_to_take_string = "D1"; }

            if ((freq_found >= 36.5566) && (freq_found <= 41.612)) { note_number_to_take_integer = 28; note_name_to_take_string = "D#1/Eb1"; }

            if ((freq_found >= 38.728) && (freq_found <= 44.0865)) { note_number_to_take_integer = 29; note_name_to_take_string = "E1"; }

            if ((freq_found >= 41.031) && (freq_found <= 46.7125)) { note_number_to_take_integer = 30; note_name_to_take_string = "F1"; }

            if ((freq_found >= 43.475) && (freq_found <= 49.49)) { note_number_to_take_integer = 31; note_name_to_take_string = "F#1/Gb1"; }

            if ((freq_found >= 46.06) && (freq_found <= 52.4291)) { note_number_to_take_integer = 32; note_name_to_take_string = "G1"; }

            if ((freq_found >= 48.7954) && (freq_found <= 55.55)) { note_number_to_take_integer = 33; note_name_to_take_string = "G#1/Ab1"; }

            if ((freq_found >= 51.7) && (freq_found <= 58.8527)) { note_number_to_take_integer = 34; note_name_to_take_string = "A1"; }

            if ((freq_found >= 54.7738) && (freq_found <= 62.3574)) { note_number_to_take_integer = 35; note_name_to_take_string = "A#1/Bb1"; }

            if ((freq_found >= 58.0356) && (freq_found <= 66.0641)) { note_number_to_take_integer = 36; note_name_to_take_string = "B1"; }

            if ((freq_found >= 61.4854) && (freq_found <= 69.993)) { note_number_to_take_integer = 37; note_name_to_take_string = "C2"; }

            if ((freq_found >= 65.142) && (freq_found <= 74.1542)) { note_number_to_take_integer = 38; note_name_to_take_string = "C#2/Db2"; }

            if ((freq_found >= 69.0148) && (freq_found <= 78.5578)) { note_number_to_take_integer = 39; note_name_to_take_string = "D2"; }

            if ((freq_found >= 73.1132) && (freq_found <= 83.2341)) { note_number_to_take_integer = 40; note_name_to_take_string = "D#2/Eb2"; }

            if ((freq_found >= 77.4654) && (freq_found <= 88.1831)) { note_number_to_take_integer = 41; note_name_to_take_string = "E2"; }

            if ((freq_found >= 82.0714) && (freq_found <= 93.425)) { note_number_to_take_integer = 42; note_name_to_take_string = "F2"; }

            if ((freq_found >= 86.95) && (freq_found <= 98.98)) { note_number_to_take_integer = 43; note_name_to_take_string = "F#2/Gb2"; }

            if ((freq_found >= 92.12) && (freq_found <= 104.8683)) { note_number_to_take_integer = 44; note_name_to_take_string = "G2"; }

            if ((freq_found >= 97.6002) && (freq_found <= 111.1)) { note_number_to_take_integer = 45; note_name_to_take_string = "G#2/Ab2"; }

            if ((freq_found >= 103.4) && (freq_found <= 117.7054)) { note_number_to_take_integer = 46; note_name_to_take_string = "A2"; }

            if ((freq_found >= 109.5476) && (freq_found <= 124.7047)) { note_number_to_take_integer = 47; note_name_to_take_string = "A#2/Bb2"; }

            if ((freq_found >= 116.0618) && (freq_found <= 132.1181)) { note_number_to_take_integer = 48; note_name_to_take_string = "B2"; }

            if ((freq_found >= 122.9614) && (freq_found <= 139.9759)) { note_number_to_take_integer = 49; note_name_to_take_string = "C3"; }

            if ((freq_found >= 130.2746) && (freq_found <= 148.2983)) { note_number_to_take_integer = 50; note_name_to_take_string = "C#3/Db3"; }

            if ((freq_found >= 138.0202) && (freq_found <= 157.1156)) { note_number_to_take_integer = 51; note_name_to_take_string = "D3"; }

            if ((freq_found >= 146.2264) && (freq_found <= 166.4581)) { note_number_to_take_integer = 52; note_name_to_take_string = "D#3/Eb3"; }

            if ((freq_found >= 154.9214) && (freq_found <= 176.3561)) { note_number_to_take_integer = 53; note_name_to_take_string = "E3"; }

            if ((freq_found >= 164.1334) && (freq_found <= 186.85)) { note_number_to_take_integer = 54; note_name_to_take_string = "F3"; }

            if ((freq_found >= 173.9) && (freq_found <= 197.96)) { note_number_to_take_integer = 55; note_name_to_take_string = "F#3/Gb3"; }

            if ((freq_found >= 184.24) && (freq_found <= 209.7265)) { note_number_to_take_integer = 56; note_name_to_take_string = "G3"; }

            if ((freq_found >= 195.191) && (freq_found <= 222.2)) { note_number_to_take_integer = 57; note_name_to_take_string = "G#3/Ab3"; }

            if ((freq_found >= 206.8) && (freq_found <= 235.4108)) { note_number_to_take_integer = 58; note_name_to_take_string = "A3"; }

            if ((freq_found >= 219.0952) && (freq_found <= 249.4094)) { note_number_to_take_integer = 59; note_name_to_take_string = "A#3/Bb3"; }

            if ((freq_found >= 232.1236) && (freq_found <= 264.2463)) { note_number_to_take_integer = 60; note_name_to_take_string = "B3"; }

            if ((freq_found >= 245.9322) && (freq_found <= 279.9518)) { note_number_to_take_integer = 61; note_name_to_take_string = "C4 (middle C)"; }

            if ((freq_found >= 260.5492) && (freq_found <= 296.5966)) { note_number_to_take_integer = 62; note_name_to_take_string = "C#4/Db4"; }

            if ((freq_found >= 276.0404) && (freq_found <= 314.2413)) { note_number_to_take_integer = 63; note_name_to_take_string = "D4"; }

            if ((freq_found >= 292.4622) && (freq_found <= 332.9263)) { note_number_to_take_integer = 64; note_name_to_take_string = "D#4/Eb4"; }

            if ((freq_found >= 309.8522) && (freq_found <= 352.7223)) { note_number_to_take_integer = 65; note_name_to_take_string = "E4"; }

            if ((freq_found >= 328.2762) && (freq_found <= 373.6899)) { note_number_to_take_integer = 66; note_name_to_take_string = "F4"; }

            if ((freq_found >= 347.7906) && (freq_found <= 395.92)) { note_number_to_take_integer = 67; note_name_to_take_string = "F#4/Gb4"; }

            if ((freq_found >= 368.48) && (freq_found <= 419.453)) { note_number_to_take_integer = 68; note_name_to_take_string = "G4"; }

            if ((freq_found >= 390.382) && (freq_found <= 444.4)) { note_number_to_take_integer = 69; note_name_to_take_string = "G#4/Ab4"; }

            if ((freq_found >= 413.6) && (freq_found <= 470.8216)) { note_number_to_take_integer = 70; note_name_to_take_string = "A4 concert pitch"; }

            if ((freq_found >= 438.1904) && (freq_found <= 498.8188)) { note_number_to_take_integer = 71; note_name_to_take_string = "A#4/Bb4"; }

            if ((freq_found >= 464.2472) && (freq_found <= 528.4825)) { note_number_to_take_integer = 72; note_name_to_take_string = "B4"; }

            if ((freq_found >= 491.855) && (freq_found <= 559.9137)) { note_number_to_take_integer = 73; note_name_to_take_string = "C5"; }

            if ((freq_found >= 521.1078) && (freq_found <= 593.2033)) { note_number_to_take_integer = 74; note_name_to_take_string = "C#5/Db5"; }

            if ((freq_found >= 552.0902) && (freq_found <= 628.4725)) { note_number_to_take_integer = 75; note_name_to_take_string = "D5"; }

            if ((freq_found >= 584.915) && (freq_found <= 665.8526)) { note_number_to_take_integer = 76; note_name_to_take_string = "D#5/Eb5"; }

            if ((freq_found >= 619.7044) && (freq_found <= 705.4446)) { note_number_to_take_integer = 77; note_name_to_take_string = "E5"; }

            if ((freq_found >= 656.5524) && (freq_found <= 747.3899)) { note_number_to_take_integer = 78; note_name_to_take_string = "F5"; }

            if ((freq_found >= 695.5906) && (freq_found <= 791.8299)) { note_number_to_take_integer = 79; note_name_to_take_string = "F#5/Gb5"; }

            if ((freq_found >= 736.9506) && (freq_found <= 838.9161)) { note_number_to_take_integer = 80; note_name_to_take_string = "G5"; }

            if ((freq_found >= 780.7734) && (freq_found <= 888.8)) { note_number_to_take_integer = 81; note_name_to_take_string = "G#5/Ab5"; }

            if ((freq_found >= 827.2) && (freq_found <= 941.6533)) { note_number_to_take_integer = 82; note_name_to_take_string = "A5"; }

            if ((freq_found >= 876.3902) && (freq_found <= 997.6477)) { note_number_to_take_integer = 83; note_name_to_take_string = "A#5/Bb5"; }

            if ((freq_found >= 928.5038) && (freq_found <= 1056.965)) { note_number_to_take_integer = 84; note_name_to_take_string = "B5"; }

            if ((freq_found >= 983.71) && (freq_found <= 1119.8173)) { note_number_to_take_integer = 85; note_name_to_take_string = "C6"; }

            if ((freq_found >= 1042.2062) && (freq_found <= 1186.4066)) { note_number_to_take_integer = 86; note_name_to_take_string = "C#6/Db6"; }

            if ((freq_found >= 1104.1804) && (freq_found <= 1256.9551)) { note_number_to_take_integer = 87; note_name_to_take_string = "D6"; }

            if ((freq_found >= 1169.8394) && (freq_found <= 1331.6951)) { note_number_to_take_integer = 88; note_name_to_take_string = "D#6/Eb6"; }

            if ((freq_found >= 1239.3994) && (freq_found <= 1410.8791)) { note_number_to_take_integer = 89; note_name_to_take_string = "E6"; }

            if ((freq_found >= 1313.0954) && (freq_found <= 1494.7798)) { note_number_to_take_integer = 90; note_name_to_take_string = "F6"; }

            if ((freq_found >= 1391.1812) && (freq_found <= 1583.6598)) { note_number_to_take_integer = 91; note_name_to_take_string = "F#6/Gb6"; }

            if ((freq_found >= 1473.9012) && (freq_found <= 1677.8322)) { note_number_to_take_integer = 92; note_name_to_take_string = "G6"; }

            if ((freq_found >= 1561.5468) && (freq_found <= 1777.6)) { note_number_to_take_integer = 93; note_name_to_take_string = "G#6/Ab6"; }

            if ((freq_found >= 1654.4) && (freq_found <= 1883.3066)) { note_number_to_take_integer = 94; note_name_to_take_string = "A6"; }

            if ((freq_found >= 1752.7804) && (freq_found <= 1995.2853)) { note_number_to_take_integer = 95; note_name_to_take_string = "A#6/Bb6"; }

            if ((freq_found >= 1856.9982) && (freq_found <= 2113.93)) { note_number_to_take_integer = 96; note_name_to_take_string = "B6"; }

            if ((freq_found >= 1967.42) && (freq_found <= 2239.6346)) { note_number_to_take_integer = 97; note_name_to_take_string = "C7"; }

            if ((freq_found >= 2084.4124) && (freq_found <= 2372.8132)) { note_number_to_take_integer = 98; note_name_to_take_string = "C#7/Db7"; }

            if ((freq_found >= 2208.3608) && (freq_found <= 2513.9102)) { note_number_to_take_integer = 99; note_name_to_take_string = "D7"; }

            if ((freq_found >= 2339.6788) && (freq_found <= 2663.3902)) { note_number_to_take_integer = 100; note_name_to_take_string = "D#7/Eb7"; }

            if ((freq_found >= 2478.7988) && (freq_found <= 2821.7683)) { note_number_to_take_integer = 101; note_name_to_take_string = "E7"; }

            if ((freq_found >= 2626.2002) && (freq_found <= 2989.5596)) { note_number_to_take_integer = 102; note_name_to_take_string = "F7"; }

            if ((freq_found >= 2782.3624) && (freq_found <= 3167.3196)) { note_number_to_take_integer = 103; note_name_to_take_string = "F#7/Gb7"; }

            if ((freq_found >= 2947.8024) && (freq_found <= 3355.6644)) { note_number_to_take_integer = 104; note_name_to_take_string = "G7"; }

            if ((freq_found >= 3123.0936) && (freq_found <= 3555.2)) { note_number_to_take_integer = 105; note_name_to_take_string = "G#7/Ab7"; }

            if ((freq_found >= 3308.8) && (freq_found <= 3766.6031)) { note_number_to_take_integer = 106; note_name_to_take_string = "A7"; }

            if ((freq_found >= 3505.5514) && (freq_found <= 3990.5807)) { note_number_to_take_integer = 107; note_name_to_take_string = "A#7/Bb7"; }

            if ((freq_found >= 3714.0058) && (freq_found <= 4227.8701)) { note_number_to_take_integer = 108; note_name_to_take_string = "B7"; }

            if ((freq_found >= 3934.8494) && (freq_found <= 4479.2692)) { note_number_to_take_integer = 109; note_name_to_take_string = "C8"; }

            if ((freq_found >= 4168.8248) && (freq_found <= 4745.6264)) { note_number_to_take_integer = 110; note_name_to_take_string = "C#8/Db8"; }

            if ((freq_found >= 4416.7216) && (freq_found <= 5027.8103)) { note_number_to_take_integer = 111; note_name_to_take_string = "D8"; }

            if ((freq_found >= 4679.3482) && (freq_found <= 5326.7804)) { note_number_to_take_integer = 112; note_name_to_take_string = "D#8/Eb8"; }

            if ((freq_found >= 4957.5976) && (freq_found <= 5643.5265)) { note_number_to_take_integer = 113; note_name_to_take_string = "E8"; }

            if ((freq_found >= 5252.391) && (freq_found <= 5979.1091)) { note_number_to_take_integer = 114; note_name_to_take_string = "F8"; }

            if ((freq_found >= 5564.7154) && (freq_found <= 6334.6493)) { note_number_to_take_integer = 115; note_name_to_take_string = "F#8/Gb8"; }

            if ((freq_found >= 5895.6142) && (freq_found <= 6711.3288)) { note_number_to_take_integer = 116; note_name_to_take_string = "G8"; }

            if ((freq_found >= 6246.1872) && (freq_found <= 7110.4)) { note_number_to_take_integer = 117; note_name_to_take_string = "G#8/Ab8"; }

            if ((freq_found >= 6617.6) && (freq_found <= 7533.2062)) { note_number_to_take_integer = 118; note_name_to_take_string = "A8"; }

            if ((freq_found >= 7011.1028) && (freq_found <= 7981.1513)) { note_number_to_take_integer = 119; note_name_to_take_string = "A#8/Bb8"; }

            if ((freq_found >= 7428.0022) && (freq_found <= 8455.7402)) { note_number_to_take_integer = 120; note_name_to_take_string = "B8"; }

            if ((freq_found >= 7869.6988) && (freq_found <= 8958.5384)) { note_number_to_take_integer = 121; note_name_to_take_string = "C9"; }

            if ((freq_found >= 8337.6496) && (freq_found <= 9491.2427)) { note_number_to_take_integer = 122; note_name_to_take_string = "C#9/Db9"; }

            if ((freq_found >= 8833.4338) && (freq_found <= 10055.6206)) { note_number_to_take_integer = 123; note_name_to_take_string = "D9"; }

            if ((freq_found >= 9358.6964) && (freq_found <= 10653.5608)) { note_number_to_take_integer = 124; note_name_to_take_string = "D#9/Eb9"; }

            if ((freq_found >= 9915.1952) && (freq_found <= 11287.053)) { note_number_to_take_integer = 125; note_name_to_take_string = "E9"; }

            if ((freq_found >= 10504.782) && (freq_found <= 11958.2182)) { note_number_to_take_integer = 126; note_name_to_take_string = "F9"; }

            if ((freq_found >= 11129.4308) && (freq_found <= 12669.2885)) { note_number_to_take_integer = 127; note_name_to_take_string = "F#9/Gb9"; }

            if ((freq_found >= 11791.219) && (freq_found <= 13422.6475)) { note_number_to_take_integer = 128; note_name_to_take_string = "G9"; }

            if ((freq_found >= 12492.365) && (freq_found <= 0)) { note_number_to_take_integer = 129; note_name_to_take_string = "G#9/Ab9"; }

            return note_number_to_take_integer;

        }// public static int public_static_int_get_note_number_from_frequency_Hertz(double freq_found)

        public static int GetNearestNoteMidiNumber_FromBand(double freq)

        {

            // Define reference A440 = MIDI 69

            double[] referenceFrequencies = new double[]

            {

        8.7466, 9.2718, 9.8172, 10.403, 11.0191, 11.6756, 12.3725, 13.1098, 13.8875,

        14.7157, 15.5843, 16.5135, 17.4932, 18.5335, 19.6445, 20.806, 22.0483,

        23.3512, 24.745, 26.2196, 27.775, 29.4314, 31.1787, 33.027, 34.9965,

        37.0771, 39.2789, 41.612, 44.0865, 46.7125, 49.49, 52.4291, 55.55, 58.8527,

        62.3574, 66.0641, 69.993, 74.1542, 78.5578, 83.2341, 88.1831, 93.425, 98.98,

        104.8683, 111.1, 117.7054, 124.7047, 132.1181, 139.9759, 148.2983,

        157.1156, 166.4581, 176.3561, 186.85, 197.96, 209.7265, 222.2, 235.4108,

        249.4094, 264.2463, 279.9518, 296.5966, 314.2413, 332.9263, 352.7223,

        373.6899, 395.92, 419.453, 444.4, 470.8216, 498.8188, 528.4825, 559.9137,

        593.2033, 628.4725, 665.8526, 705.4446, 747.3899, 791.8299, 838.9161,

        888.8, 941.6533, 997.6477, 1056.965, 1119.8173, 1186.4066, 1256.9551,

        1331.6951, 1410.8791, 1494.7798, 1583.6598, 1677.8322, 1777.6, 1883.3066,

        1995.2853, 2113.93, 2239.6346, 2372.8132, 2513.9102, 2663.3902, 2821.7683

            };

            for (int i = 0; i < referenceFrequencies.Length; i++)

            {

                if (freq <= referenceFrequencies[i])

                {

                    return i; // MIDI number will correspond to index starting from a low C (approx)

                }//if (freq <= referenceFrequencies[i])

            }//for (int i = 0; i < referenceFrequencies.Length; i++)

            return referenceFrequencies.Length - 1; // fallback to highest

        }// public static int GetNearestNoteMidiNumber_FromBand(double freq)

        public static int GetPitchBendFromFrequency(double freq_found, int note_number_fixed, int pitchBendRangeInSemitones = 2)

        {

            double baseFreq = 440.0 * Math.Pow(2, (note_number_fixed - 69) / 12.0);

            double semitoneOffset = 12 * Math.Log(freq_found / baseFreq, 2);

            double normalized = semitoneOffset / pitchBendRangeInSemitones; // normalized to -1.0 to +1.0

            int pitchBendValue = (int)(8192 + normalized * 8192); // 8192 is center

            return Math.Max(0, Math.Min(16383, pitchBendValue)); // clamp to valid range

        }//public static int GetPitchBendFromFrequency(double freq_found, int note_number_fixed, int pitchBendRangeInSemitones = 2)

        public static string GetPitchBendSequenceFromFrequencies(double[] freqs, int fixedMidiNote, int pitchBendRange)

        {

            List<string> pitchBends = new List<string>();

            foreach (double freq in freqs)

            {

                int bend = GetPitchBendFromFrequency(freq, fixedMidiNote, pitchBendRange);

                pitchBends.Add(bend.ToString());

            }//foreach (double freq in freqs)

            return string.Join(",", pitchBends);

        }//public static string GetPitchBendSequenceFromFrequencies(double[] freqs, int fixedMidiNote, int pitchBendRange)

        public static void SAVE_6_DIFFERENT_ZERO_LINE_SHIFTED_WAV_FILES_WITH_SIGNED_AVERAGES_AND_STANDARD_DEVIATIONS___AFTER_SAAN_NORMALIZED_DXF_GENERATIONS_COMPLETES(string input_wavfilespath)

        {

            //WHEN SAMPLES PER SECONDS ARE KNOWN FOR ANY WAVES (WAV FILES MONO CHANNEL 16 BIT FLOATING)BIT DEPTH FOR AMPLITUDES ARE THERE AND IN A FIRST SCANNING (WITH 380000 WAV FILES STUDY SANJOY NATH HAS FOUND THAT IF MEAN+STANDARD DEVIATION IS TAKEN TO FILTER OUT ABSOLUTE AMPLITUDES AND THEN TAKE 10000 AMPLITUDES FOR THE ABSOLUTE VALUES OF THE AMPLITUDES AND  ENFORCING ZERO AMPLITUDES FOR WHICH THE  ABSOLUTE ACTUAL WAVE FILES SAMPLE VALUE <(MEAN+1* STANDARD DEVIATION ) ARE ALL SILENCED (ENFORCING ZERO AMPLITUDES) AND REGENERATED WAV FILES WITH SAME SAMPLE COUNT ... THE WHOLE SONG REMAINS LISTENABLE AND UNDERSTANDABLE QUITE CLEARLY ... SOME NOISES OCCUR DUE TO ENFORCED  ZERO AMPLITUDES THROUGH FILTERING BUT LISTENABILITY OF ALL WORDS , INSTRUMENTS , TUNES ARE NOT HAMPERED TOO MUCH) THEN WHEN WE TRY TO FILTER OUT THE NOTES WE CAN FILTER OUT NOTES... TO MIDI FILES... SO WE CAN DO THE STRICT NUMBERING OF ZERO CROSSING POINTS (AFTER FIRST TIME SCANNING COUNTING THE INDEXES OF ZERO CROSSING POINTS ARE DONE) THEN THROUGH THE ANALYSIS OF NEIGHBOUTHOODS(FEW SAMPLES ON LEFT OF ZERO CROSSING POINT AND FEW SAMPLES FROM RIGHT SIDE OF THAT ZERO CROSSING POINT ) CAN HAVE SIMILAR TOPOLOGICAL PROPERTIES WHICH DONT CHANGE DUE TO SCALING OF THE CONTAINER AABB OBJECTS... USING THIS PHILOSOPHY SANJOY NATH'S QHENOMENOLOGY REASONING ON QUEUEDNESS OF WAVE COMPONENTS(ALREADY TOPOLOGICALLY NUMBERED RENUMBERED RE RE NUMBERED REFINED NUMBERED IN N TIMES SCANNING IF NECESSARY ... CURRENTLY THE THEORY IS IN BUILDING... WE ARE TRYING TO CROSS VERIFY THE OUTPUTS WITH CONVENTIONAL THEORY OF WAVES AND CONVENTIONAL FOURIER SPECTRUMS FREQUENCY DOMAIN DATA TO CHECK IF WE ARE GETTING SAME KIND  OF OUTPUTS OR BETTER OUTPUTS THAN FOURIER OR NOT...)  SO WE WANT TO ACHIEVE THE PITCH BENDS  MANAGEMENTS(CONSTRUCTING PITCH BENDS THROUGH MAERGE OF MONOTONICALLY INCREASING NOTES AS SINGLE START NOTE AND CLUBBING ALL THESE NOTES WITH PITCH BENDS GLIDING  UPTO 2 SEMITONES AND THEN AGAIN NEW NOTE START IF FREQUENCY RANGE CHANGES BEYOND 2 SEMITONES AS PER DEFAULT MIDI STANDARDS... SIMILARLY MERGING THE NOTES (MONOTONICALLY DECREASING... DUE TO 30 SAMPLES WINDOWING TO 300 SAMPLES WINDOWING ... WHICH EVER FITS BEST AS PER GIVEN SAMPLES PER SECOND (FOR 8000 SPS 8 SAMPLES PER MILLISECOND...AS EXAMPLES) AND SANJOY NATH THINKS AT LEAST K*SAMPLES PER MILLISECONDS NECESSARY (THE VALUE OF K NEED TO CALCULATE FROM THE FIRST TIME SCANNING AND GETTING THE CHARACTERISTICS OF THE WAVES THROUGH TOPOLOGY NUMBERING DONE AT ALL ZERO CROSSING CONDITIONS AND NEIGHBOURHOOD TO IDENTIFY WHERE SIMILAR TOPOLOGY (NEIGHBOURHOOD (SCALE INVARIANT TOPOLOGY PROPERTIES OF NEIGHBOURHOOD SAMPLES REGIONS ARE IMPORTANT TO CLASSIFY THE ZERO CROSSING POINTS AND THROUGH THAT SYSTEMS WE CAN IDENTIFY THE BEST WINDOW SIZES TO IDENTIFY FREQUENCIES) SANJOY NATH'S PHILOSOPHY FOR WAVE ANALYSIS HANDLES THE ZERO CROSSING POINTS AS CONNECTORS BETWEEN TWO DIFFERENT COMPLETE CYCLES (LEFT SIDE CONTAINER AABB MEANS ONE CYCLE COMPLETE AND RIGHT SIDE CONTAINER AABB MEANS ANOTHER CYCLE STARTS) AND NUMBER OF COMPLETE CYCLES PER SECOND IMPLIES FREQUENCY WHICH IS INTERPRETED AS NUMBER OF COMPLETE CONTAINER AABB OBJECTS PRESENT IN 1 NUMBER OF SAMPLES PER SECONDS VALUES IN A MONO WAVE FILES

            // AS IN THE BUILDING INFORMATIONS MODELING LIKE TEKLA , ADVANCE STEEL , REVIT SYSTEMS NUMBERING ARE IMPORTANT AND EVERYTHING HAS SOME KIND OF CONCRETELY WELL DEFINED CLASSIFICATIONS (TOPOLOGICALLY CLASSIFIED OR GEOMETRICALLY CLASSIFIED) AND EVERYTHING HAS SOME CLASSIFIED NUMBERING /TOPOLOGICAL SIMILARITY /GEOMETRICAL SIMILARITY EVERY OBJECTS HAVE SOME NUMBERS AND SO EVERY CRESTS HAVE SOME NUMBERS (GEOMETRICALLY SIMILAR OR TOPOLOGICALLY SIMILAR THINGS HAVE SAME NUMBERING SYSTEMS) BILL OF QUANTITIES ARE CONCTRUCTED AS PER SAME KIND OF NUMBERS ASSIGNED TO SAME KIND OF TOPOLOGY... ALL CREST AABB ARE CLASSIFIED THROUGH BIM LIKE NUMBERING SCHEMES ... ALL TROUGH AABB ARE NUMBERED STRICTKY FOLLOWING TOPOLOGICAL SIMILARITY GEOMETRICAL SIMILARITY KIND OF THINSS AND STRICTNOTE... THE ZERO CROSSINGS IN THE WAVES ARE ALSO NUMBERED(AS BIM PROJECTS ) WHERE ZERO CROSSING POINTS ARE CONSIDERED AS THE CONNECTIONS BETWEEN THE LEFT SIDE CONTAINER AABB OBJECT(OR PART AABB OBJECT)(WHICH IS A STUCTURAL MEMBER) AND RIGHT SIDE AABB OBJECT... AABB OBJECTS ARE PARTS OR SUBPARTS ALL HAVE SOME TOPOLOGY PROPERTY(WHOLE WAVE CAN HAVE SAME NUMBERED AABB OBJECTS PRESENT MULTIPLE TIMES WITH SEVERAL KINDS OF DIFFERENTLY SCALED ... SCALING DONT CHANGE THE TOPOLOGY... EVERY AABB OBJECTS HAVE SOME KIND OF TOPOLOGY PROPERTIES WHICH REMAINS UNALTERED DUE TO SCALING , ROTATING , TRANSLATING... BUT MIRRORING IS NOT LLOWED... IF MIRRORED THEN THE TOPOLOGY PROPERTIES OF AABB CHANGES SO NUMBERING CHANGES(AS PER SANJOY NATH'S QHENOMENOLOGY WAVE THEORY REASONING SYSTEMS) SO FIRST ALL ZERO CROSSING POINTS ARE IDENTIFIED AND NO NUMBERING ARE DONE TO THESE... THEN ALL CREST AABB OBJECTS ARE CONCRETELY IDENTIFIED AND THEIR TOPOLOGY NUMBERING ARE DONE ON THE BASIS OF INTERNAL INVARIANT GEOMETRIES PRESENT IN THE CREST AABB OBJECTS AND IN THE TROUGH AABB OBJECTS... CLUE IS THAT NUMBER OF SAMPLES PRESENT IS NOT IMPORTANT TOPOLOGY PROPERTY... BUT NUMBER OF LOCAL MAXIMA AND NUMBER OF LOCAL MINIMA PRESENT IS THE CONCRETE INVARIANT TOPOLOGICAL PROPERTY... PROPORTION OF ( AREA UNDER ALL AMPLITUDES TAKING THE INTER SAMPLE DISTANCES MEASURED IN THE MICROSECONDS AND AMPLITUDES MEASURED WITH AMPLITUDES UNIT  / TOTAL AREA FORMED WITH AABB WIDTH IN MICROSECONDS AND THE AABB HEIGHT MEASURED AS THE MAXIMUM AMPLITUDE FOUND IN THE AABB OBJECT WHERE AMPLITUDES ARE MEASURED IN THE AMPLITUDE UNIT)   THIS PROPORTION IS A TOPOLOGICAL INVARIANT... AND THE NUMBER OF MONOTONICALLY INCREASING AMPLITUDES INVOLVED IN TOTAL SAMPLES IN AABB IS A TOPOLOGICAL INVARIANT ... NUMBER OF MONOTONICALLY DECREASING AMPLITUDES INVOLVED PER UNIT TOTAL SAMPLES IN THE AABB OBJECT IS ANOTHER TOPOLOGICAL INVARIANT... FIRST WE DO NUMBERING(TOPOLOGICAL NUMBERING AS WE DO IN THE BUILDING INFORMATIONS MODELING PROCESS TO CLASSIFY THE BUILDING PARTS SUBPARTS ASSEMBLIES... WE DO THE BIM LIKE REASONING ON THE PARTS(CREST AABB , TROUGH AABB SILENCES AABB , ZERO CROSSING POINTS AS BUILDING PARTS (CONNECTOR PARTS) AND AFTER ALL THE CREST AABB GETS TOPOLOGICAL NUMBERING , ALL THE TROUGHS AABB GETS TOPOLOGICAL NUMBERING ... WE SEARCH THE REPEATS OF TOPOLOGICALLY SAME KIND OF AABB OBJECTS PRESENT IN THE WHOLE WAVE (WHOLE WAVE IS CONSIDERED AS THE BUILDING AND CRESTS AABB ARE PARTS , TROUGH AABB ARE PARTS ... ZERO CROSSING POINTS ARE SPECIAL KINDS OF CONNECTORS BETWEEN PARTS ... CONTAINER AABB OBJECTS HOLDS SUB PARTS (THESE ARE CREST AABB AS SUB PART , TROUGH AABB AS SUB PART... INTERMEDIATE ZERO CROSSING POINTS AS SUB CONNECTORS... ) SCALING DONT CHANGE THE TOPOLOGICAL NUMBERING... SCALING CHANGES THE GEOMETRIC NUMBERING BUT THE TOPOLOGICAL NUMBERING DONT CHANGE... TOPOLOGICAL NUMBERING SYSTEMS CLASSIFY THE TIMBRE , TONALITY ETC... GEOMETRIC SCALING CHANGES FREQUENCY... BUT THE TIMBRE REMAINS SAME... INSTRUMENTS OF HUMANS VOICES HAVE SAME TOPOLOGY NUMBER FOR A SINGLE VOICE BUT GEOMETRY NUMBERING CHANGES WHEN GEOMETRY SCALES CHANGES... SO SAME INSTRUMENTS CAN HAVE DIFFERENT FREQUENCIES BECAUSE ALL SAME TOPOLOGY NUMBERED THINGS(IMPLIES SAME INSTRUMENT OR SAME HUMANS VOICE TIMBRE QUALITY) AND GEOMETRIC NUMBERING ARE THE FREQUENCY CHANGING... THIS WAY SANJOY NATH'S QHENOMENOLOGY REASONING SYSTEMS ON WAVR THEORY IS DIFFERENTLY AXIOMATIZED AND COMPLETELY IGNORES THE HARMONIC ANALYSIS COMPLETELY IGNORES FOURIER STYLES TO UNDERSTAND THE THEORY OF WAVES... SANJOY NATH'S QHENOMENOLOGY REASONING SYSTEMS COMPLETELY AVOIDS CONVENTIONAL THEORY OF WAVES AND LOOK AT IT AS BUILDING INFORMATIONS MODELING AND GEOMETRY RELATED PROBLEM OR TOPOLOGY RELATED PROBLEMS

            //SANJOY NATH'S PROOF OF HIS CLAIMS IN SANJOY NATH'S QHENOMENOLOGY(Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS 

            //////public static int PUBLIC_STATIC_INT___THE_SAMPLES_PER_sECOND_FOUND_WHILE_READING = 8000;

            ////////CALLING CONVENTIONS

            ////////CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

            //////public static double PUBLIC_STATIC_DOUBLE_SUM_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES = 0;

            //////public static double PUBLIC_STATIC_DOUBLE_AVERAGE_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES = 0;

            ////////CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

            //////public static int PUBLIC_STATIC_INT_TOTAL_NUMBER_OF_SAMPLES_IN_THIS_FILE = 0;

            ////////we populate these at CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText

            //////public static float[] PUBLIC_STATIC_FLOAT_ARRAY____RAW_SAMPLES_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES = null;

            //////public static float[] PUBLIC_STATIC_FLOAT_ARRAY____RECONSTRUCTED_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES = null;

            // After float[] allSamples is filled using fast chunked reading logic

            float[] allSamples =

                //...; // Assume already populated

                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                .PUBLIC_STATIC_FLOAT_ARRAY____RAW_SAMPLES_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES;

            int totalSamples = allSamples.Length;

            // Step 1: Compute mean and stddev

            double sum = 0;

            foreach (float f in allSamples) sum += f;

            double mean = sum / totalSamples;

            double variance = 0;

            foreach (float f in allSamples) variance += (f - mean) * (f - mean);

            double stddev = Math.Sqrt(variance / totalSamples);

            // Prepare all output variants

            float[] file1 = new float[totalSamples]; // shifted mean to zero

            float[] file2 = new float[totalSamples]; // shifted mean+std to zero

            float[] file3 = new float[totalSamples]; // shifted mean-std to zero

            float[] file4 = new float[totalSamples]; // ±10000 if > mean

            float[] file5 = new float[totalSamples]; // ±10000 if > mean+std

            float[] file6 = new float[totalSamples]; // ±10000 if > mean-std

            float[] fileForMediansZeros = new float[totalSamples]; // ±10000 if > mean-std

            //////for (int i = 0; i < totalSamples; i++)

            //////{

            //////    float val = allSamples[i];

            //////    float absVal = Math.Abs(val);

            //////    file1[i] = (float)(val - mean);

            //////    file2[i] = (float)(val - (mean + stddev));

            //////    file3[i] = (float)(val - (mean - stddev));

            //////    file4[i] = absVal > mean ? (val > 0 ? +10000f : -10000f) : 0f;

            //////    file5[i] = absVal > (mean + stddev) ? (val > 0 ? +10000f : -10000f) : 0f;

            //////    file6[i] = absVal > (mean - stddev) ? (val > 0 ? +10000f : -10000f) : 0f;

            //////}// for (int i = 0; i < totalSamples; i++)

            ///

            // Step: Compute median

            float[] sorted = (float[])allSamples.Clone();

            Array.Sort(sorted);

            float median = (totalSamples % 2 == 0)

                ? (sorted[totalSamples / 2 - 1] + sorted[totalSamples / 2]) / 2f

                : sorted[totalSamples / 2];

            for (int i = 0; i < totalSamples; i++)

            {

                float val = allSamples[i];

                // 1–3: zero-line shifted

                file1[i] = val - (float)mean;

                file2[i] = val - (float)(mean + stddev);

                file3[i] = val - (float)(mean - stddev);

                // 4–6: audible binary encoding by direct val (NOT absVal)

                file4[i] = (val > mean || val < -mean) ? (val > 0 ? +10000f : -10000f) : 0f;

                file5[i] = (val > (mean + stddev) || val < -(mean + stddev)) ? (val > 0 ? +10000f : -10000f) : 0f;

                file6[i] = (val > (mean - stddev) || val < -(mean - stddev)) ? (val > 0 ? +10000f : -10000f) : 0f;

                fileForMediansZeros[i] = val - median; // ← Median-centered zero-line

            }//for (int i = 0; i < totalSamples; i++)

            // Save using same sample rate and bit depth

            string folder = Path.GetDirectoryName(input_wavfilespath);

            string baseName = Path.GetFileNameWithoutExtension(input_wavfilespath);

            int sampleRate = 8000;

                        sampleRate

                        =

                        CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                        .

                        PUBLIC_STATIC_INT___THE_SAMPLES_PER_sECOND_FOUND_WHILE_READING;

            // public static List<double> DetectBeats(float[] samples, int sampleRate, double thresholdPercent = 0.65)

            double thresholdPercent = 0.65;

          List<double> ___temp_beats_list=  DetectBeats(allSamples, sampleRate, thresholdPercent); ;

            StringBuilder ___strbldrforbts = new StringBuilder();

            ___strbldrforbts.Clear();

            foreach (double ___btpoints in ___temp_beats_list)

            {

                ___strbldrforbts

                    .AppendLine(___btpoints.ToString("F3"));

            }//foreach(double ___btpoints in ___temp_beats_list)

            System.IO.File.WriteAllText

                (

                Path.Combine(folder, baseName + "_the_btsdetected.txt")

                ,

                ___strbldrforbts.ToString()

                );

            //   public static List<string> Get30msFrequencyReport(float[] samples, int sampleRate)

            List<string> ___temp_30_milliseconds_frequency_reports

                = 

                Get30msFrequencyReport(allSamples, sampleRate);

            StringBuilder ___strbldrfor___30_millis_freqs_reports = new StringBuilder();

            ___strbldrfor___30_millis_freqs_reports.Clear();

            string STRING_THE_MILLISECONDS_DATA_FOR_THRESHOLDS_WINDOW_SIZES = "";

            STRING_THE_MILLISECONDS_DATA_FOR_THRESHOLDS_WINDOW_SIZES

                =

                Microsoft.VisualBasic.Interaction.InputBox

                (

                   "STRING_THE_MILLISECONDS_DATA_FOR_THRESHOLDS_WINDOW_SIZES   "

                     ,

                   "Please enter the STRING_THE_MILLISECONDS_DATA_FOR_THRESHOLDS_WINDOW_SIZES       "

                ,

                    "100"

                    );

            double ___the_milliseconds_value = 100;//

            try

            {

                ___the_milliseconds_value = Convert.ToDouble(STRING_THE_MILLISECONDS_DATA_FOR_THRESHOLDS_WINDOW_SIZES.TrimEnd().TrimStart().Trim());

            }

            catch (Exception ___Excp)

            {

                ___the_milliseconds_value = 100;

            }//catch(Exception ___Excp)

            List<string> ___temp_100_milliseconds_frequency_reports

                = 

                Get100msFrequencyReport(allSamples, sampleRate, ___the_milliseconds_value);

            System.Windows.Forms.MessageBox.Show("Starting(Get100msTopologyBasedFrequencyReport___SAANS_STYLES_TOPOLOGY_ZERO_CROSSINGS_NEIGHBOURHOODS_USED) SAAN STYLES CONTAINER AABB FINDINGS   Get100msTopologyBasedFrequencyReport");

            /////////////////////////////////////////////////SAAN STYLES OF THEORY OF WAVES ///////////////////////

            //Saan styles frequency finders

            List<string> ___temp_100_milliseconds_frequency_reports___saan_styles_frreqs_finders

                =

                SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

            .Get100msTopologyBasedFrequencyReport___SAANS_STYLES_TOPOLOGY_ZERO_CROSSINGS_NEIGHBOURHOODS_USED(allSamples, sampleRate, ___the_milliseconds_value);

            /////////////////////////////////////////////////SAAN STYLES OF THEORY OF WAVES ///////////////////////

            StringBuilder ___saans_stringbuilder_with_topology_dependent_freqs_searching = new StringBuilder();

            ___saans_stringbuilder_with_topology_dependent_freqs_searching.Clear();

            foreach (string saans_topology_based_string in ___temp_100_milliseconds_frequency_reports___saan_styles_frreqs_finders)

            {

                ___saans_stringbuilder_with_topology_dependent_freqs_searching

                    .AppendLine

                    (

                    saans_topology_based_string

                    );

            }//foreach(string saans_topology_based_string in ___temp_100_milliseconds_frequency_reports___saan_styles_frreqs_finders)

            //////var freqReport = Get30msFrequencyReport(allSamples, sampleRate);

            //////File.WriteAllLines("FrequencyReport_30ms.csv", freqReport);

            File.WriteAllLines(Path.Combine(folder, baseName + "___strbldrfor___"+ ___the_milliseconds_value+"_millis_freqs_reports.txt"), ___temp_100_milliseconds_frequency_reports);

            File.WriteAllText(Path.Combine(folder, baseName + "___strbldrfor___" + ___the_milliseconds_value + "_(SAANSAABB_STYLE_FREQS_FINDING_CONTAINER_AABBS)_millis_freqs_reports.txt"), ___saans_stringbuilder_with_topology_dependent_freqs_searching.ToString());

            System.Windows.Forms.MessageBox.Show("Completes (Get100msTopologyBasedFrequencyReport___SAANS_STYLES_TOPOLOGY_ZERO_CROSSINGS_NEIGHBOURHOODS_USED) SAAN STYLES CONTAINER AABB FINDINGS   Get100msTopologyBasedFrequencyReport");

            System.Diagnostics.Process.Start("notepad.exe", Path.Combine(folder, baseName + "___strbldrfor___" + ___the_milliseconds_value + "_(SAANSAABB_STYLE_FREQS_FINDING_CONTAINER_AABBS)_millis_freqs_reports.txt"));

            //public_static_int_get_note_number_from_frequency_Hertz

            /////////////////////////////////////////////////////////////////////////////////////////////////////////

            //*.dataGridView___COMPOSER

            var reportLines___FOR_100_MILLIS_STRINGS_LISTS

                        = Get100msFrequencyReport(allSamples, sampleRate, ___the_milliseconds_value);

                        ConvertFrequencyReportToNoteFile

                        (

                        reportLines___FOR_100_MILLIS_STRINGS_LISTS

                        ,

                        Path.Combine(folder, baseName + "___strbldrfor___"+ ___the_milliseconds_value + "_millis_freqs_reports.dataGridView___COMPOSER")

                        );

                        /////////////////////////////////////////////////////////////////////////////////////////////////////////

            /////////////////////////////////////////////////////////////////////////////////////////////////////////

            foreach (string entryof30millisfreqsreports in ___temp_30_milliseconds_frequency_reports)

            {

                ___strbldrfor___30_millis_freqs_reports

                    .AppendLine(entryof30millisfreqsreports);

            }//foreach (string entryof30millisfreqsreports in ___temp_30_milliseconds_frequency_reports)

            /////////////////////////////////////////////////////////////////////////////////////////////////////////

            System.IO.File.WriteAllText

                (

                Path.Combine(folder, baseName + "___strbldrfor___30_millis_freqs_reports.txt")

                ,

                ___strbldrfor___30_millis_freqs_reports.ToString()

                );

            /////////////////////////////////////////////////////////////////////////////////////////////////////////

            /////////////////////////////////////////////////////////////////////////////////////////////////////////

            //*.dataGridView___COMPOSER

            List<string> ___temp_20_milliseconds_frequency_reports

            =

            Get20msFrequencyReport(allSamples, sampleRate);

            /////////////////////////////////////////////////////////////////////////////////////////////////////////

            Convert_CLUBBED_DURATIONS_FrequencyReportToNoteFile

            (

            ___temp_20_milliseconds_frequency_reports

            ,

            Path.Combine(folder, baseName + "___strbldrfor___20_millis_freqs_reports.dataGridView___COMPOSER")

            );

            /////////////////////////////////////////////////////////////////////////////////////////////////////

            /////////////////////////////////////////////////////////////////////////////////////////////////////

            ////////ConvertFrequencyReportToNoteFile

            ////////(

            ////////    reportLines_20_MILLIS_LIST_OF_STRINGS

            ////////,

            ////////Path.Combine(folder, baseName + "___strbldrfor___20_millis_CLUBBED_freqs_reports.dataGridView___COMPOSER")

            ////////);

            /////////////////////////////////////////////////////////////////////////////////////////////////////////

            //////ConvertFrequencyReportToNoteFile

            //////(

            //////    reportLines_20_MILLIS_LIST_OF_STRINGS

            //////,

            //////Path.Combine(folder, baseName + "___strbldrfor___reportLines_20_MILLIS_LIST_OF_STRINGS.dataGridView___COMPOSER")

            //////);

            /////////////////////////////////////////////////////////////////////////////////////////////////////////

            WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, baseName + "_file1_mean_centered.wav"), file1, sampleRate);

            WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, baseName + "_file2_mean_plus_std_centered.wav"), file2, sampleRate);

            WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, baseName + "_file3_mean_minus_std_centered.wav"), file3, sampleRate);

            WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, baseName + "_file4_gt_mean_flagged.wav"), file4, sampleRate);

            WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, baseName + "_file5_gt_mean_plus_std_flagged.wav"), file5, sampleRate);

            WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, baseName + "_file6_gt_mean_minus_std_flagged.wav"), file6, sampleRate);

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////

            var aabbs = SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

                .ExtractPreAxiomAabbs(allSamples, sampleRate);

            System.Windows.Forms.MessageBox.Show("Completes ExtractPreAxiomAabbs(allSamples)\r\n\r\n\r\nstarts ExtractZeroCrossingsUsingAabbs(allSamples, aabbs);");

            // public static List<ZeroCrossingPoint> ExtractZeroCrossingsUsingAabbs(float[] samples, List<AabbObject> aabbs)

            // List<ZeroCrossingPoint> 

              var  SMART_ZERO_CROSSING_AABBS_LIST =

                SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

                .ExtractZeroCrossingsUsingAabbs(allSamples, aabbs);

            //TO GENERATE THE CLASSIFICATIONS AND RANKING FOR THE AABB OBJECTS AND DO THE BIM LIKES NUMBERING

            SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

            .ComputeTopologyClassifications(aabbs);

            string report 

                =

                SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

                .GenerateClassificationReport(aabbs);

            File.WriteAllText(Path.Combine(folder, baseName + "_(STRINGOLOGY___LOOKS_PERFECT)AABB_ClassificationReport.txt"), report);

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////

            string stringology_report

                =

                SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

                     .GenerateStringologyPatternAnalysis(aabbs);

            File.WriteAllText(Path.Combine(folder, baseName + "____(stringology_report___pivottings)AABB_ClassificationReport.txt"), stringology_report);

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////

            var zcs =

                SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

                .GetZeroCrossings(allSamples);

         //////   // List<ZeroCrossingPoint> zeroCrossingList

         //////   var zeroCrossingList

         //////    = SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

         //////.ExtractZeroCrossings(allSamples);

         //////   // List<ZeroCrossingPoint> zeroCrossingList

         //////   var SMART_ZERO_CROSSING_AABBS_LIST

         //////    = SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

         //////.ExtractZeroCrossings(allSamples);

            //////string zeroCrossingReport

            //////    =

            //////    SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

            //////    .GenerateZeroCrossingClassificationReport(zeroCrossingList);

            //////File.WriteAllText(Path.Combine(folder, baseName + "_ZeroCrossingClassification.txt"), zeroCrossingReport);

            string zeroCrossingReport

                =

                SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

                .GenerateZeroCrossingClassificationReport(SMART_ZERO_CROSSING_AABBS_LIST);

            File.WriteAllText(Path.Combine(folder, baseName + "_ZeroCrossingClassification.txt"), zeroCrossingReport);

            //  containerList

            var containers =

                  SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

                  .IdentifyContainers(aabbs);

            SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

            .SaveContainerAabbReport(containers, Path.Combine(folder, baseName + "_ContainerAABB_Classification.txt"));

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////

            ///

            //////string containerReport

            //////    =

            //////    SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

            //////    .GenerateContainerAabbClassificationReport(containerList);

            string containerReport

                =

                SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

                .GenerateContainerAabbClassificationReport(containers);

            File.WriteAllText(Path.Combine(folder, baseName + "_________DETAILED_NUMBERED_____ContainerAabbClassification.txt"), containerReport);

            SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

            .SaveZeroCrossingReport(zcs, Path.Combine(folder, baseName + "_ZeroCrossingsReport.txt"));

            //////var aabbs = 

            //////    SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

            //////    .ExtractPreAxiomAabbs(allSamples);

            string ___grouped_container_report_file_string

                =

            SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES___AxiomPreprocessor

            .GenerateGroupedContainerClassificationReport(containers);

////////////string report = GenerateGroupedContainerClassificationReport(allContainers);

            File.WriteAllText(Path.Combine(folder, baseName + "___grouped_container_report_file_string___AABB_Containers_TopologyGroupedReport.txt"), ___grouped_container_report_file_string);

            WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, baseName + "_file6_gt_medians_centered.wav"), fileForMediansZeros, sampleRate);

        }//public static void SAVE_6_DIFFERENT_ZERO_LINE_SHIFTED_WAV_FILES_WITH_SIGNED_AVERAGES_AND_STANDARD_DEVIATIONS___AFTER_SAAN_NORMALIZED_DXF_GENERATIONS_COMPLETES(string input_wavfilespath)

/// <summary>

/// ////////////////////////////////////////////////////////////////////////////////////////////////////////////

/// </summary>

/// <param name="allCrestTroughObjects"></param>

/// <param name="inputFilePath"></param>

public static void GenerateRankedSpectralCSVReport

(

List<CrestTroughObject> allCrestTroughObjects,

string inputFilePath

)

        {

            string outputFolder = Path.GetDirectoryName(inputFilePath);

            string csvReportPath = Path.Combine(outputFolder, "RANk_WISE_ORDERED_CREST_TROUGH_COUNTER_TO_RANKED_REPORT.csv");

            var rankedGroups = allCrestTroughObjects

                .GroupBy(obj => Math.Round(obj.PUBLIC_DOUBLE_NON_DUPLICATE_CG_X_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS, 6))

                .OrderBy(g => g.Key)

                .Select((group, rankIndex) => new

                {

                    Rank = rankIndex + 1,

                    Objects = group.ToList()

                })

                .ToList();

            foreach (var group in rankedGroups)

            {

                foreach (var obj in group.Objects)

                {

                    obj.PUBLIC_INT_NON_DUPLICATE_CG_X_RANKING_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS = group.Rank;

                }

            }

            StringBuilder csvBuilder = new StringBuilder();

            csvBuilder.AppendLine("Overall_Serial_Number,Rank_X_CG_X_Order,Width_Microseconds,Sample_Count");

            foreach (var group in rankedGroups)

            {

                foreach (var obj in group.Objects)

                {

                    int sampleCount = obj.EndSampleIndex - obj.StartSampleIndex + 1;

                    csvBuilder.AppendLine(

                        obj.OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA + "," +

                        obj.PUBLIC_INT_NON_DUPLICATE_CG_X_RANKING_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS + "," +

                        obj.WidthMicroseconds + "," +

                        sampleCount

                    );

                }

            }

            File.WriteAllText(csvReportPath, csvBuilder.ToString());

            StringBuilder csvBuilderOrderByCRESTTROUGHOVERALLNUMBERS = new StringBuilder();

            csvBuilderOrderByCRESTTROUGHOVERALLNUMBERS.AppendLine("Overall_Serial_Number,Rank_X_CG_X_Order,Width_Microseconds,Sample_Count");

            var allRankedObjectsOrderedByOverallCounter = allCrestTroughObjects

                .OrderBy(obj => obj.OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA)

                .ToList();

            foreach (var obj in allRankedObjectsOrderedByOverallCounter)

            {

                int sampleCount = obj.EndSampleIndex - obj.StartSampleIndex + 1;

                csvBuilderOrderByCRESTTROUGHOVERALLNUMBERS.AppendLine(

                    obj.OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA + "," +

                    obj.PUBLIC_INT_NON_DUPLICATE_CG_X_RANKING_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS + "," +

                    obj.WidthMicroseconds + "," +

                    sampleCount

                );

            }

            string csvReportPath_orderby_cresttroughnumbers = Path.Combine(outputFolder, "CRESTTROUGH_NUMBER_WISE_ORDERED_CREST_TROUGH_COUNTER_TO_RANKED_REPORT.csv");

            File.WriteAllText(csvReportPath_orderby_cresttroughnumbers + "_orderby_cresttroughnumbers.csv", csvBuilderOrderByCRESTTROUGHOVERALLNUMBERS.ToString());

        }//

        //////public static void GenerateRankedSpectralCSVReport

        //////(

        //////List<CrestTroughObject> allCrestTroughObjects,

        //////string inputFilePath

        //////)

        public static void GenerateRankedSpectralWavFiles______DONT_CALL_THIS_BEFORE_ALL_DXF_PREPARED_SINCE_DXF_GENERATORS_POPULATE_SCALED_CG_X_DATA

        (

            List<CrestTroughObject> allCrestTroughObjects,

            int totalSamples,

            int sampleRate,

            string inputFilePath

        )

        {

            string outputFolder = Path.GetDirectoryName(inputFilePath);

            StringBuilder ___strbldr = new StringBuilder();

            ___strbldr.Clear();

            var rankedGroups = allCrestTroughObjects

                .GroupBy(obj => Math.Round(obj.PUBLIC_DOUBLE_NON_DUPLICATE_CG_X_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS, 6))

                .OrderBy(g => g.Key)

                .Select((group, rankIndex) => new

                {

                    Rank = rankIndex + 1,

                    Objects = group.ToList()

                })

                .ToList();

            double ___total_populated_samples_for_current_output_files = 0;

            foreach (var group in rankedGroups)

            {

                foreach (var obj in group.Objects)

                {

                    obj.PUBLIC_INT_NON_DUPLICATE_CG_X_RANKING_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS = group.Rank;

                }

            }

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            foreach (var group in rankedGroups)

            {

                short[] outputSamples = new short[totalSamples];

                ___total_populated_samples_for_current_output_files = 0;

                ___strbldr.Clear();

                foreach (var obj in group.Objects)

                {

                    ___strbldr.AppendLine

                        (

                        "CURRENT CREST_TROUGH_OBJECT OVERALL COUNTER  = " + obj.OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA

                        +"\r\n"+

                         "CURRENT CREST_TROUGH_OBJECT CREST COUNTER  = " + obj.CREST_COUNTER

                        + "\r\n" +

                        "CURRENT CREST_TROUGH_OBJECT TROUGH COUNTER  = " + obj.TROUGH_COUNTER

                        + "\r\n" +

                        "CURRENT CREST_TROUGH_OBJECT WIDTH MICROS = " + obj.WidthMicroseconds

                        + "\r\n" +

                        "CURRENT CREST_TROUGH_OBJECT MaxAmplitude = " + obj.MaxAmplitude

                        + "\r\n" +

                        "CURRENT CREST_TROUGH_OBJECT LocalMaximaCount = " + obj.LocalMaximaCount

                        + "\r\n" +

                        "CURRENT CREST_TROUGH_OBJECT LocalMinimaCount = " + obj.LocalMinimaCount

                        + "\r\n" +

                        "overall max width found in whole files  = " +

                        CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                        .PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                        + "\r\n" +

                        "CURRENT CREST_TROUGH_OBJECT TotalSamples = " + (obj.EndSampleIndex-obj.StartSampleIndex + 1)

                        + "\r\nRANK   CG_X_NORMALIZED   AMPS   samplecounter"

                        );

                    int length = obj.EndSampleIndex - obj.StartSampleIndex + 1;

                    for (int i = 0; i < length; i++)

                    {

                        int sampleIndex = obj.StartSampleIndex + i;

                        if (sampleIndex >= 0 && sampleIndex < totalSamples)

                        {

                            float amplitude = obj.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[i];

                            ___total_populated_samples_for_current_output_files++;

                            ___strbldr.AppendLine

                                (

                                group.Rank + "   " +

                              //  obj.PUBLIC_INT_NON_DUPLICATE_CG_X_RANKING_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS + "   " +

                              obj.PUBLIC_DOUBLE_NON_DUPLICATE_CG_X_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS + "   " +

                                amplitude / 10000f + "   " +

                                ___total_populated_samples_for_current_output_files

                            );

                            outputSamples[sampleIndex] = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, amplitude));

                        }

                    }

                }

                string outFileName = $"RANKED_SPECTRAL_LINE_pushed_samples_{___total_populated_samples_for_current_output_files}_rank_{group.Rank:D3}.wav";

                string outPath = Path.Combine(outputFolder, outFileName);

                System.IO.File.WriteAllText(outPath + "_report.txt", ___strbldr.ToString());

                if (___total_populated_samples_for_current_output_files > sampleRate)

                {

                   // WriteMono16BitPCM_WAV(outPath, outputSamples, sampleRate);

                    WriteMono16BitPCM_WAV___takes_short_type_arrays(outPath, outputSamples, sampleRate);

                }

            }

            // STEP 4: CLUBBED RANK WAV FILES

            int[][] rankGroupsToClub = new int[][]

            {

        new int[] { 1, 2 },

        new int[] { 1, 2, 3 },

        new int[] { 1, 2, 3 ,4 },

        new int[] { 1, 2, 3 ,4 ,5},

        new int[] { 1, 2, 3, 4, 5, 6 },

         new int[] { 1, 2, 3, 4, 5, 6 ,7},

        new int[] { 1, 2, 3, 4, 5, 6, 7, 8 }

            };

            foreach (var rankSet in rankGroupsToClub)

            {

                short[] clubbedSamples = new short[totalSamples];

                double totalClubbedSamples = 0;

                StringBuilder reportBuilder = new StringBuilder();

                foreach (var rank in rankSet)

                {

                    var group = rankedGroups.FirstOrDefault(g => g.Rank == rank);

                    if (group == null) continue;

                    foreach (var obj in group.Objects)

                    {

                        int len = obj.EndSampleIndex - obj.StartSampleIndex + 1;

                        for (int i = 0; i < len; i++)

                        {

                            int sampleIndex = obj.StartSampleIndex + i;

                            if (sampleIndex >= 0 && sampleIndex < totalSamples)

                            {

                                float amplitude = obj.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[i];

                                clubbedSamples[sampleIndex] = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, amplitude));

                                totalClubbedSamples++;

                                reportBuilder.AppendLine(

                                    "Rank_" + rank + "   " +

                                    obj.PUBLIC_INT_NON_DUPLICATE_CG_X_RANKING_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS + "   " +

                                    (amplitude / 10000f).ToString("F6") + "   " +

                                    totalClubbedSamples.ToString("F0")

                                );

                            }

                        }

                    }

                }

                string label = "rank_" + string.Join("_", rankSet.Select(r => r.ToString("D2")));

                string wavFilePath = Path.Combine(outputFolder, $"CLUBBED_RANKED_SPECTRAL_LINE_{label}.wav");

                string reportFilePath = wavFilePath + "_report.txt";

                System.IO.File.WriteAllText(reportFilePath, reportBuilder.ToString());

                if (totalClubbedSamples > sampleRate)

                {

                    /// WriteMono16BitPCM_WAV(wavFilePath, clubbedSamples, sampleRate);

                    WriteMono16BitPCM_WAV___takes_short_type_arrays(wavFilePath, clubbedSamples, sampleRate);

                }//if (totalClubbedSamples > sampleRate)

            }// foreach (var rankSet in rankGroupsToClub)

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

          //////  ADDITIONAL CLUBBED OUTPUTS FOR LAST N RANKS (up to last 8)

            int totalRanks = rankedGroups.Count;

            for (int n = 2; n <= 8; n++)

            {

                if (n > totalRanks) break;

                var lastRankSet = Enumerable.Range(totalRanks - n + 1, n).ToArray();

                short[] clubbedLastSamples = new short[totalSamples];

                double totalClubbedLastSamples = 0;

                StringBuilder reportBuilder = new StringBuilder();

                foreach (var rank in lastRankSet)

                {

                    var group = rankedGroups.FirstOrDefault(g => g.Rank == rank);

                    if (group == null) continue;

                    foreach (var obj in group.Objects)

                    {

                        int len = obj.EndSampleIndex - obj.StartSampleIndex + 1;

                        for (int i = 0; i < len; i++)

                        {

                            int sampleIndex = obj.StartSampleIndex + i;

                            if (sampleIndex >= 0 && sampleIndex < totalSamples)

                            {

                                float amplitude = obj.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[i];

                                clubbedLastSamples[sampleIndex] = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, amplitude));

                                totalClubbedLastSamples++;

                                reportBuilder.AppendLine(

                                    "Rank_" + rank + "   " +

                                    obj.PUBLIC_INT_NON_DUPLICATE_CG_X_RANKING_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS + "   " +

                                    (amplitude / 10000f).ToString("F6") + "   " +

                                    totalClubbedLastSamples.ToString("F0")

                                );

                            }// if (sampleIndex >= 0 && sampleIndex < totalSamples)

                        }

                    }

                }

                string label = "last_" + n + "_ranks_" + string.Join("_", lastRankSet.Select(r => r.ToString("D2")));

                string wavFilePath = Path.Combine(outputFolder, $"LAST_RANKED_CLUBBED_SPECTRAL_LINE_{label}.wav");

                string reportFilePath = wavFilePath + "_report.txt";

                System.IO.File.WriteAllText(reportFilePath, reportBuilder.ToString());

                if (totalClubbedLastSamples > sampleRate)

                {

                    WriteMono16BitPCM_WAV___takes_short_type_arrays(wavFilePath, clubbedLastSamples, sampleRate);

                }// if (totalClubbedSamples > sampleRate)

            }// for (int n = 2; n <= 8; n++)

            //////////////////////////////////////////////////////////////////////////////////////////////////

            ////////////        ///

            ////////////        // ADDITIONAL ANALYTIC BINARIZED OUTPUTS FOR TOP CLUBBED RANKS: 1, 1+2, 1+2+3

            ////////////        int[][] topRankSets = new int[][]

            ////////////        {

            ////////////new int[] { 1 },

            ////////////new int[] { 1, 2 },

            ////////////new int[] { 1, 2, 3 }

            ////////////        };

            ////////////        foreach (var rankSet in topRankSets)

            ////////////        {

            ////////////            string label = "top_rank_" + string.Join("_", rankSet.Select(r => r.ToString("D2")));

            ////////////            // Collect absolute amplitudes for this rank set

            ////////////            List<float> absoluteAmplitudes = new List<float>();

            ////////////            short[] originalSamples = new short[totalSamples];

            ////////////            foreach (var rank in rankSet)

            ////////////            {

            ////////////                var group = rankedGroups.FirstOrDefault(g => g.Rank == rank);

            ////////////                if (group == null) continue;

            ////////////                foreach (var obj in group.Objects)

            ////////////                {

            ////////////                    int len = obj.EndSampleIndex - obj.StartSampleIndex + 1;

            ////////////                    for (int i = 0; i < len; i++)

            ////////////                    {

            ////////////                        int index = obj.StartSampleIndex + i;

            ////////////                        if (index >= 0 && index < totalSamples)

            ////////////                        {

            ////////////                            float amp = obj.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[i];

            ////////////                            originalSamples[index] = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, amp));

            ////////////                            absoluteAmplitudes.Add(Math.Abs(amp));

            ////////////                        }

            ////////////                    }

            ////////////                }

            ////////////            }

            ////////////            if (absoluteAmplitudes.Count == 0) continue;

            ////////////            // Compute mean and stddev of absolute amplitudes

            ////////////            double mean = absoluteAmplitudes.Average();

            ////////////            double stddev = Math.Sqrt(absoluteAmplitudes.Sum(x => Math.Pow(x - mean, 2)) / absoluteAmplitudes.Count);

            ////////////            // Threshold variants

            ////////////            var thresholds = new[]

            ////////////            {

            ////////////    new { Label = "gt_mean_minus_1stddev", Threshold = mean - stddev },

            ////////////    new { Label = "gt_mean", Threshold = mean },

            ////////////    new { Label = "gt_mean_plus_1stddev", Threshold = mean + stddev }

            ////////////};

            ////////////            foreach (var th in thresholds)

            ////////////            {

            ////////////                short[] binarySamples = new short[totalSamples];

            ////////////                int countMarked = 0;

            ////////////                StringBuilder report = new StringBuilder();

            ////////////                for (int i = 0; i < totalSamples; i++)

            ////////////                {

            ////////////                    if (Math.Abs(originalSamples[i]) > th.Threshold)

            ////////////                    {

            ////////////                        binarySamples[i] = 1;

            ////////////                        countMarked++;

            ////////////                    }

            ////////////                    else

            ////////////                    {

            ////////////                        binarySamples[i] = 0;

            ////////////                    }

            ////////////                }

            ////////////                report.AppendLine("Report for " + label + " | Threshold = " + th.Threshold.ToString("F3"));

            ////////////                report.AppendLine("Total activated samples = " + countMarked);

            ////////////                report.AppendLine("Total samples = " + totalSamples);

            ////////////                report.AppendLine("Percentage activated = " + ((100.0 * countMarked) / totalSamples).ToString("F2") + "%");

            ////////////                string outPath = Path.Combine(outputFolder, $"TOPCLUBBED_BINARIZED_{label}_{th.Label}.wav");

            ////////////                string txtReportPath = outPath + "_report.txt";

            ////////////                File.WriteAllText(txtReportPath, report.ToString());

            ////////////                if (countMarked > sampleRate)

            ////////////                {

            ////////////                    WriteMono16BitPCM_WAV___takes_short_type_arrays(outPath, binarySamples, sampleRate);

            ////////////                }//if (countMarked > sampleRate)

            ////////////            }

            ////////////        }//foreach (var rankSet in topRankSets)

            // ADDITIONAL ANALYTIC BINARIZED OUTPUTS FOR TOP CLUBBED RANKS: 1, 1+2, 1+2+3

            int[][] topRankSets = new int[][]

            {

    new int[] { 1 },

    new int[] { 1, 2 },

    new int[] { 1, 2, 3 },

    new int[] { 1, 2, 3 ,4 },

    new int[] { 1, 2, 3 ,4 ,   5},

    new int[] { 1, 2, 3 ,4  ,  5 ,  6},

    new int[] { 1, 2, 3 ,4  ,  5 ,  6 , 7},

    new int[] { 1, 2, 3 ,4  ,  5 ,  6 , 7 , 8}

            };

            foreach (var rankSet in topRankSets)

            {

                string label = "top_rank_" + string.Join("_", rankSet.Select(r => r.ToString("D2")));

                // Collect absolute amplitudes for this rank set

                List<float> absoluteAmplitudes = new List<float>();

                short[] originalSamples = new short[totalSamples];

                foreach (var rank in rankSet)

                {

                    var group = rankedGroups.FirstOrDefault(g => g.Rank == rank);

                    if (group == null) continue;

                    foreach (var obj in group.Objects)

                    {

                        int len = obj.EndSampleIndex - obj.StartSampleIndex + 1;

                        for (int i = 0; i < len; i++)

                        {

                            int index = obj.StartSampleIndex + i;

                            if (index >= 0 && index < totalSamples)

                            {

                                float amp = obj.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[i];

                                short clamped = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, amp));

                                originalSamples[index] = clamped;

                                absoluteAmplitudes.Add(Math.Abs(clamped));

                            }// if (index >= 0 && index < totalSamples)

                        }//for (int i = 0; i < len; i++)

                    }//foreach (var obj in group.Objects)

                }//foreach (var obj in group.Objects)

                if (absoluteAmplitudes.Count == 0) continue;

                // Compute mean and stddev of absolute amplitudes

                double mean = absoluteAmplitudes.Average();

                double stddev = Math.Sqrt(absoluteAmplitudes.Sum(x => Math.Pow(x - mean, 2)) / absoluteAmplitudes.Count);

                // Threshold variants

                var thresholds = new[]

                {

        new { Label = "gt_mean_minus_1stddev", Threshold = mean - stddev },

        new { Label = "gt_mean", Threshold = mean },

        new { Label = "gt_mean_plus_1stddev", Threshold = mean + stddev }

    };

                foreach (var th in thresholds)

                {

                    short[] binarySamples = new short[totalSamples];

                    int countMarked = 0;

                    StringBuilder report = new StringBuilder();

                    for (int i = 0; i < totalSamples; i++)

                    {

                        short original = originalSamples[i];

                        short absValue = (short)Math.Abs(original);

                        if (absValue > th.Threshold)

                        {

                            binarySamples[i] = (short)(original > 0 ? 10000 : -10000); // preserve sign and scale to ±10000

                            countMarked++;

                        }

                        else

                        {

                            binarySamples[i] = 0;

                        }

                    }

                    report.AppendLine("Report for " + label + " | Threshold = " + th.Threshold.ToString("F3"));

                    report.AppendLine("Total activated samples = " + countMarked);

                    report.AppendLine("Total samples = " + totalSamples);

                    report.AppendLine("Percentage activated = " + ((100.0 * countMarked) / totalSamples).ToString("F2") + "%");

                    string outPath = Path.Combine(outputFolder, $"TOPCLUBBED_BINARIZED_{label}_{th.Label}.wav");

                    string txtReportPath = outPath + "_report.txt";

                    File.WriteAllText(txtReportPath, report.ToString());

                    if (countMarked > sampleRate)

                    {

                        WriteMono16BitPCM_WAV___takes_short_type_arrays(outPath, binarySamples, sampleRate);

                    }

                }

            }// foreach (var rankSet in topRankSets)

        }//public static void GenerateRankedSpectralWavFiles______DONT_CALL_THIS_BEFORE_ALL_DXF_PREPARED_SINCE_DXF_GENERATORS_POPULATE_SCALED_CG_X_DATA

        public static void DISCARDED___SINCE_WE_ARE_ENHANCING_THE_FUNCTION______________________GenerateRankedSpectralWavFiles______DONT_CALL_THIS_BEFORE_ALL_DXF_PREPARED_SINCE_DXF_GENERATORS_POPULATE_SCALED_CG_X_DATA

            (

            List<CrestTroughObject> allCrestTroughObjects,

            int totalSamples,

            int sampleRate,

           // string outputFolder

           string inputFilePath

            )

        {

            //string inputFilePath = @"F:\mywaves\inputfile.wav";

            string outputFolder = Path.GetDirectoryName(inputFilePath);

            StringBuilder ___strbldr = new StringBuilder();

            ___strbldr.Clear();

            //to do thenby PUBLIC_DOUBLE_NON_DUPLICATE_CG_Y_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_HEIGHTS_OF_ALL_AABB_OBJECTS 

            // STEP 1: Rank the objects by unique CG_X (normalized, non-duplicate version)

            var rankedGroups = allCrestTroughObjects

                .GroupBy(obj => Math.Round(obj.PUBLIC_DOUBLE_NON_DUPLICATE_CG_X_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS, 6))

                .OrderBy(g => g.Key)

                .Select((group, rankIndex) => new

                {

                    Rank = rankIndex + 1,

                    Objects = group.ToList()

                })

                .ToList();

            double ___total_populated_samples_for_current_output_files = 0;

            // STEP 2: Assign rank index to each object's CG_X rank field

            foreach (var group in rankedGroups)

            {

                foreach (var obj in group.Objects)

                {

                    obj.PUBLIC_INT_NON_DUPLICATE_CG_X_RANKING_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS = group.Rank;

                }//foreach (var obj in group.Objects)

            }//foreach (var group in rankedGroups)

            // STEP 3: Generate WAV for each rank

            foreach (var group in rankedGroups)

            {

                short[] outputSamples = new short[totalSamples];

                ___total_populated_samples_for_current_output_files = 0;

                foreach (var obj in group.Objects)

                {

                    int length = obj.EndSampleIndex - obj.StartSampleIndex + 1;

                    for (int i = 0; i < length; i++)

                    {

                        int sampleIndex = obj.StartSampleIndex + i;

                        if (sampleIndex >= 0 && sampleIndex < totalSamples)

                        {

                            float amplitude = obj.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[i];

                                ___total_populated_samples_for_current_output_files++;

                            ___strbldr

                                .AppendLine

                                (

                                group.Rank

                                + "   " +

                                obj.PUBLIC_INT_NON_DUPLICATE_CG_X_RANKING_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS

                                + "   " +

                                amplitude/10000f

                                +"   " +

                                ___total_populated_samples_for_current_output_files

                                );

                            outputSamples[sampleIndex] = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, amplitude));

                        }//if (sampleIndex >= 0 && sampleIndex < totalSamples)

                    }//for (int i = 0; i < length; i++)

                }//foreach (var obj in group.Objects)

                string outFileName = $"RANKED_SPECTRAL_LINE_pushed_samples_{___total_populated_samples_for_current_output_files}_rank_{group.Rank:D3}.wav";

                string outPath = Path.Combine(outputFolder, outFileName);

                ///////////////////////////////////////////////////////////////////

                System.IO.File.WriteAllText

                (

                    outPath + "_report.txt"

                    ,

                ___strbldr.ToString()

                );

                ///////////////////////////////////////////////////////////////////

                ///

                if (___total_populated_samples_for_current_output_files> sampleRate)

                {

                    // WriteMono16BitPCM_WAV(outPath, outputSamples, sampleRate);

                    WriteMono16BitPCM_WAV___takes_short_type_arrays(outPath, outputSamples, sampleRate);

                }// if(___total_populated_samples_for_current_output_files> sampleRate)

                else

                {

                }// if(___total_populated_samples_for_current_output_files> sampleRate)

            }//foreach (var group in rankedGroups)

        }

        //////public static void GenerateRankedSpectralWavFiles______DONT_CALL_THIS_BEFORE_ALL_DXF_PREPARED_SINCE_DXF_GENERATORS_POPULATE_SCALED_CG_X_DATA(

        //////    List<CrestTroughObject> allCrestTroughObjects,

        //////    int totalSamples,

        //////    int sampleRate,

        //////    string outputFolder)

        public static void WriteMono32BitFloatPCM_WAV_WithNormalization(string outPath, float[] samples, int sampleRate)

        {

            float maxAbs = samples.Select(x => Math.Abs(x)).Max();

            if (maxAbs < 1e-6f) maxAbs = 1f; // Prevent division by zero

            using (var bw = new BinaryWriter(File.Create(outPath)))

            {

                int byteRate = sampleRate * 4; // 4 bytes for 32-bit float

                int subchunk2Size = samples.Length * 4;

                int chunkSize = 36 + subchunk2Size;

                // RIFF header

                bw.Write(System.Text.Encoding.ASCII.GetBytes("RIFF"));

                bw.Write(chunkSize);

                bw.Write(System.Text.Encoding.ASCII.GetBytes("WAVE"));

                // fmt subchunk

                bw.Write(System.Text.Encoding.ASCII.GetBytes("fmt "));

                bw.Write(16); // PCM format chunk size

                bw.Write((short)3); // format code 3 = IEEE float

                bw.Write((short)1); // mono

                bw.Write(sampleRate);

                bw.Write(byteRate);

                bw.Write((short)4); // block align

                bw.Write((short)32); // bits per sample

                // data subchunk

                bw.Write(System.Text.Encoding.ASCII.GetBytes("data"));

                bw.Write(subchunk2Size);

                foreach (var sample in samples)

                {

                    float normalized = sample / maxAbs;

                    bw.Write(normalized);

                }// foreach (var sample in samples)

            }// using (var bw = new BinaryWriter(File.Create(outPath)))

        }// public static void WriteMono32BitFloatPCM_WAV_WithNormalization(string outPath, float[] samples, int sampleRate)

        public static void DISCARDING___THIS_WAS_ALSO_WORKING_____________WriteMono32BitFloatPCM_WAV_WithNormalization(string outPath, float[] outputSamples, int sampleRate)

        {

            // Step 1: Normalize if needed (avoid distortion/clipping)

            float maxAbs = outputSamples.Max(x => Math.Abs(x));

            float normalizationFactor = (maxAbs > 1.0f) ? (1.0f / maxAbs) : 1.0f;

            // Step 2: Prepare WAV parameters

            int byteRate = sampleRate * 4; // mono, 32-bit float = 4 bytes per sample

            int subchunk2Size = outputSamples.Length * 4;

            int chunkSize = 36 + subchunk2Size;

            // Step 3: Write WAV file

            using (BinaryWriter bw = new BinaryWriter(File.Create(outPath)))

            {

                // RIFF Header

                bw.Write(System.Text.Encoding.ASCII.GetBytes("RIFF"));

                bw.Write(chunkSize);

                bw.Write(System.Text.Encoding.ASCII.GetBytes("WAVE"));

                // fmt subchunk (for 32-bit float PCM)

                bw.Write(System.Text.Encoding.ASCII.GetBytes("fmt "));

                bw.Write(16);                 // Subchunk1Size

                bw.Write((short)3);           // AudioFormat = 3 (IEEE float)

                bw.Write((short)1);           // NumChannels = 1 (Mono)

                bw.Write(sampleRate);

                bw.Write(byteRate);

                bw.Write((short)4);           // BlockAlign

                bw.Write((short)32);          // BitsPerSample

                // data subchunk

                bw.Write(System.Text.Encoding.ASCII.GetBytes("data"));

                bw.Write(subchunk2Size);

                foreach (float sample in outputSamples)

                {

                    bw.Write(sample * normalizationFactor);

                }

            }

        }//public static void WriteMono32BitFloatPCM_WAV_WithNormalization(string outPath, float[] outputSamples, int sampleRate)

        public static void WriteMono16BitPCM_WAV___takes_short_type_arrays(string outPath, short[] outputSamples, int sampleRate)

        {

            int byteRate = sampleRate * 2; // mono, 16-bit = 2 bytes per sample

            int subchunk2Size = outputSamples.Length * 2;

            int chunkSize = 36 + subchunk2Size;

            using (BinaryWriter bw = new BinaryWriter(File.Create(outPath)))

            {

                // RIFF header

                bw.Write(System.Text.Encoding.ASCII.GetBytes("RIFF"));

                bw.Write(chunkSize);

                bw.Write(System.Text.Encoding.ASCII.GetBytes("WAVE"));

                // fmt subchunk

                bw.Write(System.Text.Encoding.ASCII.GetBytes("fmt "));

                bw.Write(16); // PCM

                bw.Write((short)1); // audio format = 1 (PCM)

                bw.Write((short)1); // mono

                bw.Write(sampleRate);

                bw.Write(byteRate);

                bw.Write((short)2); // block align = numChannels * bitsPerSample/8

                bw.Write((short)16); // bits per sample

                // data subchunk

                bw.Write(System.Text.Encoding.ASCII.GetBytes("data"));

                bw.Write(subchunk2Size);

                foreach (short sample in outputSamples)

                {

                    bw.Write(sample);

                }//foreach (short sample in outputSamples)

            }//using (BinaryWriter bw = new BinaryWriter(File.Create(outPath)))

        }//public static void WriteMono16BitPCM_WAV___takes_short_type_arrays(string outPath, short[] outputSamples, int sampleRate)

        public static void ExportDxfWithBoxesAndCenterlines(List<CrestTroughObject> crestTroughs, string wavPath)

        {

            string path = Path.ChangeExtension(wavPath, "_GRAPH_CG_BOXES_AXES.dxf");

            using (StreamWriter sw = new StreamWriter(path))

            {

                sw.WriteLine("0\nSECTION\n2\nENTITIES");

                foreach (var ct in crestTroughs)

                {

                    float cx = ct.CG.X;

                    float cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

                    float radius = Math.Max(1f, (ct.EndSampleIndex - ct.StartSampleIndex) / 10f);

                    int color = ct.IsCrest ? 5 : 1;

                    sw.WriteLine($"0\nCIRCLE\n8\n0\n62\n{color}\n10\n{cx.ToString("F3", CultureInfo.InvariantCulture)}\n20\n{cy.ToString("F3", CultureInfo.InvariantCulture)}\n30\n0\n40\n{radius.ToString("F3", CultureInfo.InvariantCulture)}");

                    float x1 = cx - ct.BoundingBox.Width / 2;

                    float x2 = cx + ct.BoundingBox.Width / 2;

                    float y1 = ct.IsCrest ? 0 : -ct.BoundingBox.Height;

                    float y2 = ct.IsCrest ? ct.BoundingBox.Height : 0;

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{x1.ToString("F3", CultureInfo.InvariantCulture)}\n20\n{y1.ToString("F3", CultureInfo.InvariantCulture)}\n30\n0\n11\n{x2.ToString("F3", CultureInfo.InvariantCulture)}\n21\n{y2.ToString("F3", CultureInfo.InvariantCulture)}\n31\n0");

                }

                sw.WriteLine("0\nENDSEC\n0\nEOF");

            }

        }//public static void ExportDxfWithBoxesAndCenterlines(List<CrestTroughObject> crestTroughs, string wavPath)

        public static void ExportCrestTroughGroupingPivot(List<CrestTroughObject> crestTroughs, string wavPath)

        {

            string path = Path.ChangeExtension(wavPath, "_GROUP_PIVOT.csv");

            using (StreamWriter sw = new StreamWriter(path))

            {

                sw.WriteLine("Type,GroupKey,Count");

                var crestGroups = crestTroughs.Where(c => c.IsCrest).GroupBy(c => $"{(int)(c.WidthMicroseconds / 1000)}ms_{(int)(c.HeightAmplitude * 1000)}amp_{(int)(c.AreaProportion * 1000)}aprop");

                var troughGroups = crestTroughs.Where(c => !c.IsCrest).GroupBy(c => $"{(int)(c.WidthMicroseconds / 1000)}ms_{(int)(c.HeightAmplitude * 1000)}amp_{(int)(c.AreaProportion * 1000)}aprop");

                foreach (var g in crestGroups)

                    sw.WriteLine($"CREST,{g.Key},{g.Count()}");

                foreach (var g in troughGroups)

                    sw.WriteLine($"TROUGH,{g.Key},{g.Count()}");

            }

        }// public static void ExportCrestTroughGroupingPivot(List<CrestTroughObject> crestTroughs, string wavPath)

        public static void ExportBitmapWithBoxesAndAxes(List<CrestTroughObject> crestTroughs, string wavPath, float widthScale, float heightScale, float maxWidth, float maxHeight, int bmpWidth, int bmpHeight)

        {

            //////float maxWidth = Math.Max(1f, filtered.Max(ct => ct.WidthMicroseconds));

            //////float maxHeight = Math.Max(1f, filtered.Max(ct => Math.Abs(ct.CG.Y)));

            //////float widthScale = maxWidth > 1000f ? 1000f / maxWidth : 1f;

            //////float heightScale = maxHeight > 1f ? 100f / maxHeight : 1f;

            //////int bmpWidth = Math.Max(64, (int)(maxWidth * widthScale) + 10);

            //////int bmpHeight = Math.Max(64, (int)(filtered.Count * maxHeight * heightScale) + 10);

            using (Bitmap bmp = new Bitmap(bmpWidth, bmpHeight))

            {

                Graphics g = Graphics.FromImage(bmp);

                g.Clear(Color.White);

                g.DrawLine(Pens.Black, 0, bmpHeight / 2, bmpWidth, bmpHeight / 2);

                Font font = new Font("Arial", 7);

                g.DrawString(Path.GetFileName(wavPath), font, Brushes.Black, 2, bmpHeight / 2);

                int offsetY = 0;

                foreach (var ct in crestTroughs)

                {

                    PointF cg = ct.CG;

                    int x = (int)((cg.X / ct.WidthMicroseconds) * maxWidth * widthScale);

                    int y = ct.IsCrest

                        ? (int)(bmpHeight / 2 - ((cg.Y / ct.HeightAmplitude) * maxHeight * heightScale))

                        : (int)(bmpHeight / 2 + ((Math.Abs(cg.Y) / ct.HeightAmplitude) * maxHeight * heightScale));

                    int radius = Math.Max(2, (ct.EndSampleIndex - ct.StartSampleIndex) / 128);

                    for (int dx = -radius; dx <= radius; dx++)

                        for (int dy = -radius; dy <= radius; dy++)

                            if (x + dx >= 0 && x + dx < bmp.Width && y + dy >= 0 && y + dy < bmp.Height)

                                bmp.SetPixel(x + dx, y + dy, ct.IsCrest ? Color.Blue : Color.Red);

                    Rectangle box = new Rectangle(

                        (int)(x - (ct.BoundingBox.Width * widthScale / 2)),

                        ct.IsCrest

                            ? (int)(bmpHeight / 2 - ct.BoundingBox.Height * heightScale)

                            : (int)(bmpHeight / 2),

                        (int)(ct.BoundingBox.Width * widthScale),

                        (int)(ct.BoundingBox.Height * heightScale));

                    g.DrawRectangle(ct.IsCrest ? Pens.Blue : Pens.Red, box);

                }

                if (bmpWidth <= 0 || bmpHeight <= 0)

                {

                    MessageBox.Show("Invalid bitmap dimensions. Aborting image save.");

                    return;

                }//if (bmpWidth <= 0 || bmpHeight <= 0)

                bmp.Save(Path.ChangeExtension(wavPath, "_GRAPH_CG_BOXES_AXES.bmp"));

            }

        }//public static void ExportBitmapWithBoxesAndAxes(List<CrestTroughObject> crestTroughs, string wavPath, float widthScale, float heightScale, float maxWidth, float maxHeight, int bmpWidth, int bmpHeight)

        public class CrestTroughObject

        {

            //SANJOY NATH'S PROOF OF HIS CLAIMS IN SANJOY NATH'S QHENOMENOLOGY(Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS 

            //fourier tried to explain the different wave forms as vertical summation of amplitudes (superposition of multiple sinusoidal shapes) and due to that superpositions the cycles natures of waves changes.  And when superpositions are done the waves (each cycles ) shapes changes and also the timeperiod (in microseconds) per shape cycle changes similarly the wave forms crest counts changes wave forms trough counts changes and ultimately we see one wave cycle has several crest and troughs involve to form single wave cycles... In conventional theory of waves frequency is described as the number of complete cycles per second(1000000 microsecond as width of a second along timelines)  Fourier used to look at the complete cycle (zero crossing points as effect of superposition) But Sanjoy Nath looks at frequency as combinatorial packing factor of different AABB widths along the timeline. So in Sanjoy Nath's interprretation (not taking vertical superposition as cause of zero crossing instead considering zero crossing are the combinatorial counting property and CATALAN NUMBERS , Integer partitioning like reasoning over timeline is used which means whole wave cycles are partitioned as CREST AABB WIDTH in microseconds and TROUGH AABB Widths in microseconds ultimately whole wavecycle is summation of well partitioned different sized AABB objects and total energy in a wave form depends upon CG of all amplitudes in the all AABB objects of crest and Trough objects which governs the waves features energy is scalar and scalarly addable so pure arithmetic is applicable and total cycle width in microsecond is time period of wave which is same in Sanjoy Nath's Qhenomenology linear queue model of crests and troughs but combinatorial juxtapositions of crest AABB Trough AABB can also achieve same time period but wave cycle will not look like complete wave cycle but when stacked with left margins aligned for all these AABB objects will not hamper the CG positioningcycle  )  Different Crest AABB Widths +6 Different Trough AABB Widths summed togather to form single wave cycle and that is TimePeriod of wave (as in conventional Theory of waves where superimposition of different sinusoidal components governs zero crossing points... Sanjoy Nath looks at these scanario from other point of view where Sanjoy Nath Takes zero crossing points as governing factors and Combinatorial clustering of Crest AABB Trough AABB and arranging these in specific strict ORDERED QUEUE OF particular CRESTS after PARTICULAR Troughs make a wave cycle and one time period is found  but TOPOLOGICALLY  that dont help us to think different kinds of QUEUING nor gives us bigger pictures of combinatorial packing problems of different sized AABB to achieve same cycle (Complete cycle of same Time Period) . On the other hand conventional theory of waves consider 1 second(1000000 micro second as reference) and number of complete time periods per second as frequency .  In the conventional theory of waves it is considered that certain cycle shape is rolling on a horizontal surface and when one complete cycle complets then certain distance is covered per cycle but while plotting the waves and whole showing the wave lengths the conventional theory of waves show wave lengths along the time axis. Sanjoy Nath considers total wave lengths as total time covered per cycle so time period and wave lengths look geometrically same in Sanjoy Nath's Qhenomenology Theory of Waves. So number of complete widths of complete cycle (after queuing of Crests AABB Trough AABB the full cycle completes and total time period covered as T microseconds which is a PACKET OF sOME AABB objects) When T squizes then packing count increases which is actually frequency increases... Frequency is nothing but the packing factor of complete AABB of a complete cycle in 1000000 micro seconds length. When frequency is packing factor then it is a scale facor of widths. When scale factor s is involved that scales the x coordinates of all CG points ) So when single cycles AABB gets squized the frequency increases so X coordinate of CG of Whole cycle AABB also squizes and so proportionately x coordinates of all component Crest AABB  and Trough AABB also squizes...) This way packing and partitioning of AABB Queue along time lines take different packing to form multi frequency waves. This justifies the horizontal AABB packing with conventional superimposition of waves(which are done vertically) Now consider the vertical sides that is Y values of CG for every AABB components... These vary due to frequency change and when the energy per CREST AABB and Energy per Trough AABB remains same horizontal squizing of AABB increases the Y values of CG (virtual bult modulus of these AABB to consider) So while stacking one AABB above another keeping left margins aligned will generate different y for differently squized x so vertical spectral lines are seen when we see the stacks of AABB from top views. This prooves the Justifications of conventional theory with Sanjoy Nath's Qhenomenological Theory of Waves

            // AXIOM 1 SANJOY NATH'S QHENOMENOLOGY(Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS ARE NOT AT ALL CONSIDERING THE WAVES AS COMBINATIONS OF COS COMPONENTS AND SIN COMPONENTS. SO SANJOY NATH'S QHENOMENOLOGY REASONING ON DIGITAL SIGNAL PROCESSING WILL NEVER USE FOURIER PROCESS NOR USE FFT LIKE THINGS TO DO WAVES ANALYSIS OR DIGITAL SIGNAL PROCESSINGS

            // AXIOM 2  SANJOY NATH'S QHENOMENOLOGY (Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing)  PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS CONSIDERS A HORIZONTAL 0 0 LINE (ZERO AMPLITUDE LINE IS THERE WHICH IS AVERAGE OF ALL THE AMPLITUDES IN THE GLOBAL DATA OF FLUCTUATING AMPLITUDE LIKE VALUES AND ZERO CROSSING ARE CALCULATED WITH REFERENCE TO THIS 0 0 LINE WHICH IS AVERAGE VALUE LINE) AND AMPLITUDES BELOW THIS AVERAGE ARE NEGATIVE AMPLITUDES AND AMPLITUDES ABOVE THIS AVERAGE VALUE IS POSITIVE AMPLITUDES

            // AXIOM 3 SANJOY NATH'S QHENOMENOLOGY (Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS CONSIDERS WAVES AS SERIES(STRICT QUEUES OF CREST AABB OBJECTS AND TROUGH AABB OBJECTS ) ALL THESE CREST AND TROUGH  AABB OBJECTS ARE TRANSPARENT TRACING PAPERS LIKE AABBR RECTANGLES BOUNDING BOXES WHICH ALL HAVE SOME CENTER OF GRAVITY CALCULATED FROM THE POINTS OF AMPLITUDE TIPS BOUNDED INSIDE THESE CREST AND TROUGH  AABB LIKE TRANSPARENT TRACING PAPER LIKE OBJECTS) FOR CREST OBJECTS THE ORIGIN OF AABB RECTANGULAR BOUNDING BOXES ARE AT LEFT BOTTOM CORNER OF THE RECTANGULAR BOUNDING BOXES AND FOR TROUGH LIKE OBJECTS THE ORIGIN IS AT LEFT TOP CORNER OF AABB RECTANGLE BOUNDING BOXES AND THESE ORIGINS ARE PLACED ON THE 0 0 (AVERAGE AMPLITUDE LINE ) SUCH THAT QUEUE LIKE SEQUENCE OF CREST TROUGH CREST TROUGH ARE PLACED ONE AFTER ANOTHER AND EVERY CREST OBJECT HAS A STRICT SEQUENCE NUMBER AND EVERY TROUGH HAS STRICT SEQUENCE NUMBER SO EVERY CREST AND TROUGH ARE UNIQUELY PLACED IN THE STRICT QUEUE TO GENERATE THE WHOLE WAVE OBJECT(WHOLE SIGNAL OBJECT)

            // AXIOM 3+ SANJOY NATH'S QHENOMENOLOGY (Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS  THE ANALYSIS STARTS WITH THE CONDITION THAT FORGET THE ACTUAL AMPLITUDES VALUES AND REMEMBERS ONLY THE MAX WIDTH OF EACH AABB (IN MICROSECONDS OR LIKE THAT MEASURE OR  METRIK)  , MAX HEIGHT OF EACH AABB(OR AMPLITUDE LIKE MEASURES METRIKS) CG , STANDARD DEVIATIONS OF AMPLITUDES , SKEWNESS OF AMPLITUDES , KURTOSIS OF AMPLITUDES IN THESTATISTICAL  MOMENTS CALCULATED ON THE AMPLITUDES IN THE CREST AABB OBJECT OR IN THE TROUGH AABB OBJECTS ... THE ACTUAL AMPLITUDE VALUES ARE FORGOTTEN ENTIRELY WHILE DOING SIGNALS PROPERTY ANALYSIS)

            // AXIOM 3++ SANJOY NATH'S QHENOMENOLOGY(Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing)  PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS THE ANALYSIS IS DONE ON THE STACKS (DISMANTLED QUEUE OF CREST AABB AND TROUGH AABB AND THE QUEUE OBJECT IS TRANSFORMED TO (0,0) ALIGNED (LEFT MARGIN ALIGNED) AABB RECTANGLES BOUNDING BOXES SUCH THAT THE (AFTER DISMANTLED QUEUE AND STACKING DONE)STACK OF TRANSPARENT CREST BOUNDING BOXES AND TROUGH BOUNDING BOXES ARE PLACED IN STACK ALL THE LEFT MARGINS ARE ALIGNED AS OVERALL LEFT MARGINS (SANJOY NATH HAS TESTED ON 380000 SOUND WAV FILES DIGITAL WAV FILES) AND FOUND THAT CG (BLUE DOTS FOR CREST AABB AMPLITUDES) AND RED DOTS FOR CG ON THE TROUGH AABB AMPLITUDES) LIE ON THE VERTICAL LINES OF SPECTRUMS LIKE VERTICAL STRIPS WHEN ALL THESE TRANSPARENT RECTANGLES AABB  BOUNDING BOXES (LEFT MARGIN ALIGNED ORIGINS OF ALL AABB RECTANGULAR TRACING PAPERS  PLACED ON ORIGINS OF OTHERS SO THAT ALL ORIGINS ARE PLACED ON SAME LOCATION IN STACK) ARE SHOWING THAT IF THERE ARE N DIFFERENT FREQUENCIES PRESENT IN THE WAVE THEN THERE ARE N SHARP VERTICAL LINES ARE THERE IF WE LOOK AT THE STACK OF TRANSPARENT ALIGNED AABB OBJECTS WHICH SIGNIFIES THE FREQUENCY ANALYSIS IS EASIER TO HANDLE AND NO NEED OF FFT LIKE DATA HANDLING NECESSARY AT ALL NO NEED TO COS COMPONENTS NO NEED OF SIN COMPONENTS NECESSARY TO DO SPECTRAL ANALYSIS ON TEH WAVES LIKE OBJECTS.

            // AXIOM 7   SANJOY NATH'S QHENOMENOLOGY(Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing)  PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS HAS FOUND THAT(ON TESTING ON 380000 WAV FILES)     THE TERMS LIKE WAVE LENGTH IS NOT NECESSARY TO ANALYSE WAVE LIKE DIGITAL SIGNALS THE TERMS LIKE FREQUENCY ARE NOT NECESSARY TO HANDLE DIGITAL SIGNAL PROCESSINGS NOR WE NEED THE COS COMPONENTS TO DESCRIBE WAVE LIKE DATA NOR WE NEED SIN COMPONENTS LIKE OBJECTS TO DESCRIBE WAVE OR DIGITAL SIGNAL LIKE DATA (THE QUEUE OF AABB RECTANGLES BEHAVE AS WAVE NATURE OF THE LIGHT AND STACKS OF SAME AABB RECTANGLES  BEHAVE AS THE PARTICLE NATURE OF LIGHT AND SPECTRAL NATURE OF LIGHTS ARE NOTHING BUT THE ALIGNMENTS OF CG OF THESE AABB OBJECTS STACKED AND OBSERVED FROM TOP VIEWS) SANJOY NATH'S QHENOMENOLOGICAL REASONING ON THEORY OF WAVE IS COMPLETELY IGNORING THE TERMS LIKE FREQUENCY TERMS LIKE WAVE LENGTHS AND TREATS WAVES AS QUEUE OF AABB OBJECTS OR STACKS OF AABB OBJECTS

            // AXIOM 6 SANJOY NATH'S QHENOMENOLOGY(Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing)  PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS       HAVE SEEN THAT IF THE CREST AABB BOXES HAS WIDTHS (IN MICRO SECONDS TAKEN) HAS W_C_1 , W_C_2 ... W_C_N   AND THE WITHS IN MICROSECONDS FOR TROUGHS OBJECTS AS W_T_1 , W_T_2 ... W_T_N  (TOTAL NUMBER OF CRESTS AND TOTAL NUMBER OF TROUGHS ARE NOT NECESSARILY SAME BECAUSE SOMETIMES THERE ARE JUST ZERO TOUCHING CRESTS AND JUST ZERO TOUCHING TROUGHS ARE THERE STILL THE PROPERTIES HOLDS) AFTER OBSERVING THE STACKS OF TRANSPARENT AABB OBJECTS ...... THE OBSERVATIONS ON 380000 WAVE FILES STUDY REVEALS THAT  WHEN FREQUENCY OF SAME SOUND (TONE) INCREASES THE WIDTHS SQUIZES AND WHEN THE FREQUENCY OF SAME SOUND (TONE) DECREASES  THEN THE WIDTHS OF CREST TROUGH INCREASES SO THE NUMBER OF CRESTS PER SECOND(1000000 MICROSECOND) CHANGES AS THE FREQUENCY (TONE) OF THE SOUND CHANGES AND NUMBER OF SHARP VERTICAL LINES (FORMED DUE TO ALIGNMENT OF SUCH MARKED  CG POINTS)VISIBLE ON STACK OF TRANSPARENT AABB  OF CREST OBJECTS AND TROUGH OBJECTS ULTIMATELY GIVES CLARITY OF NUMBER OF FREQUENCIES INVOLVED IN THE WAVE (SPECTRAL ANALYSIS IS EASY) SINCE ALL TEH CREST AND TROUGHS HAVE QUEUE_SERIAL_NUMBERS SO WE CAN RE ARRANGE THE STACK TO QUEUE AGAIN AFTER THE ANALYSIS IS DONE

            // AXIOM 8  SANJOY NATH'S QHENOMENOLOGY (Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS  WE PRESERVE THESE OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA  BEFORE STACKING DONE FROM THE QUEUE STRUCTURE AND WE CAN ALSO ALTER THE WHOLE SIGNAL TO RECONSTRUCT RANDOM VALUES OF AMPLITUDES FOR CREST AABB FOR TROUGH AABB PRESERVING THE GEOMETRY OF CG POINTS AS THESE ARE AND THESE KIND OF RECONSTRUCTIONS OF WAVES WITH COMPLETELY OTHER SETS OF AMPLITUDES WILL GENERATE SAME SPECTRAL BEHAVIORS AS THE ACTUAL WAVE OBJECTS THIS IS INTERESTING PROPERTY OF  SANJOY NATH'S QHENOMENOLOGY PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS 

            // AXIOM 9   SANJOY NATH'S QHENOMENOLOGY (Dont confuse with Phenomenology , it is Qhenomenology which is entirely different thing) PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS  CONSIDERS ALL PHOTON LIKE THINGS ARE NOT EXISTING WHILE INSTEAD THE WAVES CRESTS AND TROUGHS QUE DISMATLES TO STACKS OF AABB (AS IN THE AXIOMS HERE)WHILE LIGHT PASS THROUGH SLITS OR WHILE LIGHT PASS THROUGH CRYSTALS THE CREST AABB QUEUES AND TROUGH AABB QUEUES CLOOAPSES (DISMANTLES) AND THE STACKS ARE FORMED AS PER SANJOY NATHS DESCRIPTIONS IN  SANJOY NATH'S QHENOMENOLOGY PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS  SO WE GET THE SPECTRUMS OF CG ALIGNED WHICH WE MISTAKE AS FREQUENCY SPECTRUMS...  SANJOY NATH'S QHENOMENOLOGY PHYSICS REASONING SYSTEMS ON WAVES AND DIGITAL SIGNALS  CLAIMS THAT THESE ARE NOT AT ALL FREQUENCY SPECTRUMS BUT THESE ARE CG ALIGGNED ON STACKS OF AABB LOOKS LIKE VERTICAL LINE SPECTRUMS DUE TO STACKING OF CREST AABB STACKING OF TROUGH AABB OBJECTS

            public int StartSampleIndex;

            public int EndSampleIndex;

            int sampleCount;

            public float MaxAmplitude;

            public float MinAmplitude;

            public bool IsCrest;

            public List<PointF> TipPointsMicrosecondsVsAmplitude = new List<PointF>();

            public List<float> LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES = new List<float>();//SANJOY NATH NEEDS THESE TO RE GENERATE THE FILTERED WAV FILES

            public List<float> LIST_OF_ALL_RECONSTRUCTED_SIN_WAVES_SAMPLES_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES = new List<float>();//SANJOY NATH NEEDS THESE TO RE GENERATE THE FILTERED WAV FILES

            public List<float> LIST_OF_ALL_RECONSTRUCTED_SAMPLES_WHERE_AMPLITUDES_ARE_MIRROR_IMAGE_ABOUT_VERTICAL_LINE_WITHIN_CG_X_OF_CURRENT_CREST_TROUGH_AABB_SAMPLES_RANGE___FLOATING_VALUES_OF_ACTUAL_SAMPLES_AMPLITUDES_SWAPPED_AS_MIRROR_IMAGE_SAMPLE_INDEX___WE_WILL_RECONSTRUCT_WHOLE_WAVE_WITH_SUCH_MIRRORED_SAMPLES = new List<float>();//SANJOY NATH NEEDS THESE TO RE GENERATE THE FILTERED WAV FILES

            public double CREST_COUNTER = 0;

            public double TROUGH_COUNTER = 0;

            public double OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA = 0;

            public RectangleF BoundingBox;

            public RectangleF BoundingBox___NORMALIZED_ON_SCALED_AABB_WITH_REFERENCE_TO_GLOBAL_AABB_MAX_WIDTH_GLOBAL_AABB_MAX_AMPLITUDES;

            public PointF CG;

            public PointF CG___NORMALIZED_ON_SCALED_AABB_WITH_REFERENCE_TO_GLOBAL_AABB_MAX_WIDTH_GLOBAL_AABB_MAX_AMPLITUDES;

            public double PUBLIC_DOUBLE_NON_DUPLICATE_CG_X_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS = 0;

            public double PUBLIC_DOUBLE_NON_DUPLICATE_CG_Y_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_HEIGHTS_OF_ALL_AABB_OBJECTS = 0;

            //WE HAVE SEEN THAT WE ALWAYS GET THE VERTICAL SPECTRA LINES WHILE RUNNING THE CODE ON 380000 NUMBER OF DIFFERENT WAV FILES  RANKING ARE 0 TO 300 IS SUFFICIENT

            public int PUBLIC_INT_NON_DUPLICATE_CG_X_RANKING_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS = 0;

            public int PUBLIC_INT_NON_DUPLICATE_CG_Y_RANKING_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_HEIGHT_OF_ALL_AABB_OBJECTS = 0;

            public float WidthMicroseconds;

            public float HeightAmplitude;

            public float AreaUnderCurve;

            public float AreaBoundingBox;

            public float AreaProportion;

            public List<float> LocalAnglesMilliDegrees = new List<float>();

            public int LocalMaximaCount = 0;

            public int LocalMinimaCount = 0;

            public void ComputeGeometry(int sampleRate)

            {

                //  int sampleCount = EndSampleIndex - StartSampleIndex + 1;

                 sampleCount = EndSampleIndex - StartSampleIndex + 1;

                LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES

                    = new List<float>();

                LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Clear();

                WidthMicroseconds = (sampleCount * 1000000f) / sampleRate;

                ///  HeightAmplitude = Math.Max(0.001f, Math.Abs(IsCrest ? MaxAmplitude : MinAmplitude));

                ///  

                 HeightAmplitude = Math.Max(0.000001f, Math.Abs(IsCrest ? MaxAmplitude : MinAmplitude));

              //  HeightAmplitude = Math.Max(0.000001f, Math.Abs(IsCrest ? (MaxAmplitude*10000f) : (MinAmplitude*1000f)));

                BoundingBox = new RectangleF(0, 0, WidthMicroseconds, HeightAmplitude);

                float sumX = 0f, sumY = 0f;

                AreaUnderCurve = 0f;

                for (int i = 0; i < TipPointsMicrosecondsVsAmplitude.Count; i++)

                {

                    PointF p = TipPointsMicrosecondsVsAmplitude[i];

                    sumX += p.X;

                    sumY += p.Y;

                    //////this.

                    //////LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Add(p.Y / 10000f);//while populating the data in this p.Y we did the multiplications of 10000f times to get the proper calculations of angles

                    //dont multiply 10000f times heres

                    this.

                    LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Add(p.Y);//while populating the data in this p.Y we did the multiplications of 10000f times to get the proper calculations of angles

                    if (i > 0)

                    {

                        float dx = TipPointsMicrosecondsVsAmplitude[i].X - TipPointsMicrosecondsVsAmplitude[i - 1].X;

                        float avgY = (TipPointsMicrosecondsVsAmplitude[i].Y + TipPointsMicrosecondsVsAmplitude[i - 1].Y) / 2f;

                        AreaUnderCurve += Math.Abs(avgY * dx);

                    }//if (i > 0)

                    if (i > 0 && i < TipPointsMicrosecondsVsAmplitude.Count - 1)

                    {

                        PointF p1 = TipPointsMicrosecondsVsAmplitude[i - 1];

                        PointF p2 = TipPointsMicrosecondsVsAmplitude[i];

                        PointF p3 = TipPointsMicrosecondsVsAmplitude[i + 1];

                        float dx1 = p2.X - p1.X;

                        float dy1 = (p2.Y - p1.Y);

                        float dx2 = p3.X - p2.X;

                        float dy2 = (p3.Y - p2.Y);

                        //STRICT NOTE THAT THIS ATAN (USING ARC TAN IS NOT THE PART OF SANJOY NATH'S QHENOMENOLOGY WAVE THEORY) 

                        // THIS USE OF ARC TAN IS FOR REPRESENTATIONS AND REPORTING DATA METRIKS WHICH ARE TO CROSS CHECK THE RESULTS WITH OTHER THEORIES AND TO FIND SOME ADDITIONAL METRIKS FOR THE FUTURE USAGES TO MAKE MORE DETAILED UNDERSTANDING ON THE COMPLEXITIES OF STATISTICAL PROPERTIES FOR OTHER KINDS OF DEEPER INFORMATIONS RETRIEVALS

                        // IT CAN HAPPEN THAT SOME ADDITIONAL INFORMATIONS ON CREST AABB RECTANGLES AND REOUGH AABB RECTANGLES CAN EXPOSE SEVERAL FEATURES TO MAKE THE WHOLE PHOTON FREE THEORY OF LIGHTS OR TO MAKE QUANTUM MECHANICS ENTIRELY FREE FROM THE WAVE FUUNCTIONS AND TO MAKE SOME FEATURES MORE CALCULATIONS ON THE AABB PROPERTIES TO CONVERT QUEUE OF CRESTTROUGHAABBOBJECTS TO STACK OF CRESTTROUGHAABBOBJECTS WILL EXPOSE DIFFERENT KINDS OF UNDERSTANDING ON THE THEORY OF WAVES

                        //STRICT NOTE THAT WE ARE NOT USING ANY COS NOR SIN TO ANALYSE WAVE NOR WE ARE USING ANY TRIGONOMETRY FUNCTIONS IN THE SANJOY NATH'S WAVE THEORY NOR WE ARE USING THE TRIGONOMETRY FUNCTIONS TO DESCRIBE THE WAVES OBJECTS

                        // THE MATHEMATICS OF SANJOY NATH'S QHENOMENOLOGY REASONING SYSTEMS DEAL WITH QUEUE OF OBJECTS AND STACK OF OBJECTS HERE WE ARE USING THE QUEUE OF CRESTTROUGHAABBRECTANGLESOBJECTS AND STACKOFCRESTTROUGHAABBRECTANGLESOBJECTS TO ANALYSE THE WAVR THEORY

                        float angle1 = (float)Math.Atan2(dy1, dx1);

                        float angle2 = (float)Math.Atan2(dy2, dx2);

                        float diff = angle2 - angle1;

                        float degrees = diff * (180000f / (float)Math.PI);

                        if (degrees < 0) degrees += 360000f;

                        LocalAnglesMilliDegrees.Add(degrees);//THESE METRICS WE WILL USE IN FUTURE (NOT YET USED IN CURRENT THEORY OF SANJOY NATH'S QHENOMENOLOGY REASONING OF WAVES)

                    }//if (i > 0 && i < TipPointsMicrosecondsVsAmplitude.Count - 1)

                }//for (int i = 0; i < TipPointsMicrosecondsVsAmplitude.Count; i++)

                for (int i = 1; i < TipPointsMicrosecondsVsAmplitude.Count - 1; i++)

                {

                    float prev = TipPointsMicrosecondsVsAmplitude[i - 1].Y;

                    float curr = TipPointsMicrosecondsVsAmplitude[i].Y;

                    float next = TipPointsMicrosecondsVsAmplitude[i + 1].Y;

                    if (curr > prev && curr > next) LocalMaximaCount++;

                    if (curr < prev && curr < next) LocalMinimaCount++;

                }//for (int i = 1; i < TipPointsMicrosecondsVsAmplitude.Count - 1; i++)

                AreaBoundingBox = WidthMicroseconds * HeightAmplitude;

                AreaProportion = AreaBoundingBox == 0f ? 0f : AreaUnderCurve / AreaBoundingBox;

                if (TipPointsMicrosecondsVsAmplitude.Count > 0)

                {

                    CG = new PointF(sumX / TipPointsMicrosecondsVsAmplitude.Count, sumY / TipPointsMicrosecondsVsAmplitude.Count);

                }//if (TipPointsMicrosecondsVsAmplitude.Count > 0)

            }//public void ComputeGeometry(int sampleRate)

        }//public class CrestTroughObject

        // TRIED TO MULTIPLY Y WITH 1000 AND THAT CAUSED THE PROBLEMS IN THE BITMAPS

        //////public class CrestTroughObject

        //////{

        //////    public int StartSampleIndex;

        //////    public int EndSampleIndex;

        //////    public float MaxAmplitude;

        //////    public float MinAmplitude;

        //////    public bool IsCrest;

        //////    public List<PointF> TipPointsMicrosecondsVsAmplitude = new List<PointF>();

        //////    public RectangleF BoundingBox;

        //////    public PointF CG;

        //////    public float WidthMicroseconds;

        //////    public float HeightAmplitude;

        //////    public float AreaUnderCurve;

        //////    public float AreaBoundingBox;

        //////    public float AreaProportion;

        //////    public List<float> LocalAnglesMilliDegrees = new List<float>();

        //////    public int LocalMaximaCount = 0;

        //////    public int LocalMinimaCount = 0;

        //////    public void ComputeGeometry(int sampleRate)

        //////    {

        //////        int sampleCount = EndSampleIndex - StartSampleIndex + 1;

        //////        WidthMicroseconds = (sampleCount * 1000000f) / sampleRate;

        //////        MaxAmplitude *= 1000f;

        //////        MinAmplitude *= 1000f;

        //////        HeightAmplitude = Math.Max(0.001f, Math.Abs(IsCrest ? MaxAmplitude : MinAmplitude));

        //////        BoundingBox = new RectangleF(0, 0, WidthMicroseconds, HeightAmplitude);

        //////        float sumX = 0f, sumY = 0f;

        //////        AreaUnderCurve = 0f;

        //////        for (int i = 0; i < TipPointsMicrosecondsVsAmplitude.Count; i++)

        //////        {

        //////            PointF p = TipPointsMicrosecondsVsAmplitude[i];

        //////            float ampY = p.Y * 1000f;

        //////            sumX += p.X;

        //////            sumY += ampY;

        //////            if (i > 0)

        //////            {

        //////                float dx = p.X - TipPointsMicrosecondsVsAmplitude[i - 1].X;

        //////                float y1 = TipPointsMicrosecondsVsAmplitude[i - 1].Y * 1000f;

        //////                float avgY = (ampY + y1) / 2f;

        //////                AreaUnderCurve += Math.Abs(avgY * dx);

        //////            }// if (i > 0)

        //////            if (i > 0 && i < TipPointsMicrosecondsVsAmplitude.Count - 1)

        //////            {

        //////                float x1 = TipPointsMicrosecondsVsAmplitude[i - 1].X;

        //////                float y1 = TipPointsMicrosecondsVsAmplitude[i - 1].Y * 1000f;

        //////                float x2 = p.X;

        //////                float y2 = ampY;

        //////                float x3 = TipPointsMicrosecondsVsAmplitude[i + 1].X;

        //////                float y3 = TipPointsMicrosecondsVsAmplitude[i + 1].Y * 1000f;

        //////                float dx1 = x2 - x1;

        //////                float dy1 = y2 - y1;

        //////                float dx2 = x3 - x2;

        //////                float dy2 = y3 - y2;

        //////                float angle1 = (float)Math.Atan2(dy1, dx1);

        //////                float angle2 = (float)Math.Atan2(dy2, dx2);

        //////                float diff = angle2 - angle1;

        //////                float degrees = diff * (180000f / (float)Math.PI);

        //////                if (degrees < 0) degrees += 360000f;

        //////                LocalAnglesMilliDegrees.Add(degrees);

        //////            }//if (i > 0 && i < TipPointsMicrosecondsVsAmplitude.Count - 1)

        //////        }//for (int i = 0; i < TipPointsMicrosecondsVsAmplitude.Count; i++)

        //////        for (int i = 1; i < TipPointsMicrosecondsVsAmplitude.Count - 1; i++)

        //////        {

        //////            float prev = TipPointsMicrosecondsVsAmplitude[i - 1].Y * 1000f;

        //////            float curr = TipPointsMicrosecondsVsAmplitude[i].Y * 1000f;

        //////            float next = TipPointsMicrosecondsVsAmplitude[i + 1].Y * 1000f;

        //////            if (curr > prev && curr > next) LocalMaximaCount++;

        //////            if (curr < prev && curr < next) LocalMinimaCount++;

        //////        }//for (int i = 1; i < TipPointsMicrosecondsVsAmplitude.Count - 1; i++)

        //////        AreaBoundingBox = WidthMicroseconds * HeightAmplitude;

        //////        AreaProportion = AreaBoundingBox == 0f ? 0f : AreaUnderCurve / AreaBoundingBox;

        //////        if (TipPointsMicrosecondsVsAmplitude.Count > 0)

        //////            CG = new PointF(sumX / TipPointsMicrosecondsVsAmplitude.Count, sumY / TipPointsMicrosecondsVsAmplitude.Count);

        //////    }

        //////}//public class CrestTroughObject

        //////public static void OpenAndScanWavFile___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS(ref ProgressBar progressBarFOR_ANALYSIS)

        //////{

        //////    OpenFileDialog ofd = new OpenFileDialog();

        //////    ofd.Filter = "WAV files (*.wav)|*.wav";

        //////    if (ofd.ShowDialog() != DialogResult.OK) return;

        //////    string wavPath = ofd.FileName;

        //////    WavMetadata meta = ReadMetadata(wavPath);

        //////    if (meta.Channels != 1)

        //////    {

        //////        MessageBox.Show("Only mono WAV files are supported.");

        //////        return;

        //////    }

        //////    List<CrestTroughObject> crestTroughs = new List<CrestTroughObject>();

        //////    int chunkSize = 8192;

        //////    float maxWidth = 1f, maxHeight = 1f;

        //////    using (FileStream fs = new FileStream(wavPath, FileMode.Open, FileAccess.Read))

        //////    using (BinaryReader br = new BinaryReader(fs))

        //////    {

        //////        br.ReadBytes(12);

        //////        while (br.BaseStream.Position < br.BaseStream.Length)

        //////        {

        //////            string chunkID = new string(br.ReadChars(4));

        //////            int chunkSizeBytes = br.ReadInt32();

        //////            if (chunkID != "data")

        //////            {

        //////                br.BaseStream.Position += chunkSizeBytes;

        //////                continue;

        //////            }

        //////            int bytesPerSample = meta.BitsPerSample / 8;

        //////            int totalSamples = chunkSizeBytes / bytesPerSample;

        //////            float[] buffer = new float[chunkSize];

        //////            int samplesRead = 0;

        //////            CrestTroughObject current = null;

        //////            bool positive = true;

        //////            progressBarFOR_ANALYSIS.Minimum = 0;

        //////            progressBarFOR_ANALYSIS.Maximum = totalSamples;

        //////            while (samplesRead < totalSamples)

        //////            {

        //////                int blockSamples = Math.Min(chunkSize, totalSamples - samplesRead);

        //////                for (int i = 0; i < blockSamples; i++)

        //////                {

        //////                    switch (meta.BitsPerSample)

        //////                    {

        //////                        case 8: buffer[i] = (br.ReadByte() - 128) / 128f; break;

        //////                        case 16: buffer[i] = br.ReadInt16() / 32768f; break;

        //////                        case 24:

        //////                            byte[] b = br.ReadBytes(3);

        //////                            int val = (b[2] << 16) | (b[1] << 8) | b[0];

        //////                            if ((val & 0x800000) != 0) val |= unchecked((int)0xFF000000);

        //////                            buffer[i] = val / 8388608f; break;

        //////                        case 32: buffer[i] = br.ReadInt32() / (float)Int32.MaxValue; break;

        //////                        default: MessageBox.Show("Unsupported bit depth."); return;

        //////                    }

        //////                }

        //////                for (int i = 0; i < blockSamples; i++)

        //////                {

        //////                    bool currentSign = buffer[i] >= 0;

        //////                    int globalIndex = samplesRead + i;

        //////                    if (current == null)

        //////                    {

        //////                        current = new CrestTroughObject { StartSampleIndex = globalIndex, IsCrest = currentSign };

        //////                        positive = currentSign;

        //////                    }

        //////                    else if (currentSign != positive)

        //////                    {

        //////                        current.EndSampleIndex = globalIndex - 1;

        //////                        int segLen = current.EndSampleIndex - current.StartSampleIndex + 1;

        //////                        if (segLen < 2)

        //////                        {

        //////                            current = new CrestTroughObject { StartSampleIndex = globalIndex, IsCrest = currentSign };

        //////                            positive = currentSign;

        //////                            continue;

        //////                        }

        //////                        float[] seg = new float[segLen];

        //////                        for (int j = 0; j < segLen; j++)

        //////                        {

        //////                            int idx = i - segLen + j;

        //////                            seg[j] = (idx < 0 || idx >= blockSamples) ? 0f : buffer[idx];

        //////                        }

        //////                        current.MaxAmplitude = seg.Max();

        //////                        current.MinAmplitude = seg.Min();

        //////                        float peak = current.IsCrest ? current.MaxAmplitude : current.MinAmplitude;

        //////                        int peakIndex = Array.IndexOf(seg, peak);

        //////                        float xMicro = (peakIndex * 1000000f) / meta.SampleRate;

        //////                        current.TipPointsMicrosecondsVsAmplitude.Add(new PointF(xMicro, peak));

        //////                        current.ComputeGeometry(meta.SampleRate);

        //////                        maxWidth = Math.Max(maxWidth, current.WidthMicroseconds);

        //////                        maxHeight = Math.Max(maxHeight, current.HeightAmplitude);

        //////                        crestTroughs.Add(current);

        //////                        current = new CrestTroughObject { StartSampleIndex = globalIndex, IsCrest = currentSign };

        //////                        positive = currentSign;

        //////                    }

        //////                }

        //////                samplesRead += blockSamples;

        //////                progressBarFOR_ANALYSIS.Value = Math.Min(progressBarFOR_ANALYSIS.Maximum, samplesRead);

        //////                progressBarFOR_ANALYSIS.Refresh();

        //////            }

        //////        }

        //////    }

        //////    int MAX_BMP_WIDTH = 10000;

        //////    int MAX_BMP_HEIGHT = 30000;

        //////    float widthScale = maxWidth > MAX_BMP_WIDTH ? MAX_BMP_WIDTH / maxWidth : 1f;

        //////    float heightScale = (crestTroughs.Count * maxHeight) > MAX_BMP_HEIGHT ? MAX_BMP_HEIGHT / (crestTroughs.Count * maxHeight) : 1f;

        //////    int bmpWidth = Math.Max(32, (int)(maxWidth * widthScale) + 10);

        //////    int bmpHeight = Math.Max(32, (int)(crestTroughs.Count * maxHeight * heightScale) + 10);

        //////    try

        //////    {

        //////        ExportBitmapWithBoxesAndAxes(crestTroughs, wavPath, widthScale, heightScale, maxWidth, maxHeight, bmpWidth, bmpHeight);

        //////        ExportDetailedCSV(crestTroughs, wavPath, meta);

        //////        ExportDxfWithBoxesAndText(crestTroughs, wavPath);

        //////        ExportCrestTroughGroupingPivot(crestTroughs, wavPath);

        //////        MessageBox.Show("Complete. Bitmap, CSV, DXF, and pivot reports saved.");

        //////    }

        //////    catch (Exception ex)

        //////    {

        //////        MessageBox.Show("Report generation failed: " + ex.Message);

        //////    }

        //////}//public static void OpenAndScanWavFile___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS(ref ProgressBar progressBarFOR_ANALYSIS)

        // RRR

        /// <summary>

        /// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        /// </summary>

        //////public class DISCARDING_SINCE_WE_NEED_1000_TIMES_AMPLITUDES___CrestTroughObject

        //////{

        //////    public int StartSampleIndex;

        //////    public int EndSampleIndex;

        //////    public float MaxAmplitude;

        //////    public float MinAmplitude;

        //////    public bool IsCrest;

        //////    public List<PointF> TipPointsMicrosecondsVsAmplitude = new List<PointF>();

        //////    public RectangleF BoundingBox;

        //////    public PointF CG;

        //////    public float WidthMicroseconds;

        //////    public float HeightAmplitude;

        //////    public float AreaUnderCurve;

        //////    public float AreaBoundingBox;

        //////    public float AreaProportion;

        //////    public List<float> LocalAnglesMilliDegrees = new List<float>();

        //////    public int LocalMaximaCount = 0;

        //////    public int LocalMinimaCount = 0;

        //////    public void ComputeGeometry(int sampleRate)

        //////    {

        //////        int sampleCount = EndSampleIndex - StartSampleIndex + 1;

        //////        WidthMicroseconds = (sampleCount * 1000000f) / sampleRate;

        //////        HeightAmplitude = Math.Max(0.001f, Math.Abs(IsCrest ? MaxAmplitude : MinAmplitude));

        //////        BoundingBox = new RectangleF(0, 0, WidthMicroseconds, HeightAmplitude);

        //////        float sumX = 0f, sumY = 0f;

        //////        AreaUnderCurve = 0f;

        //////        for (int i = 0; i < TipPointsMicrosecondsVsAmplitude.Count; i++)

        //////        {

        //////            PointF p = TipPointsMicrosecondsVsAmplitude[i];

        //////            sumX += p.X;

        //////            sumY += p.Y;

        //////            if (i > 0)

        //////            {

        //////                float dx = TipPointsMicrosecondsVsAmplitude[i].X - TipPointsMicrosecondsVsAmplitude[i - 1].X;

        //////                float avgY = (TipPointsMicrosecondsVsAmplitude[i].Y + TipPointsMicrosecondsVsAmplitude[i - 1].Y) / 2f;

        //////                AreaUnderCurve += Math.Abs(avgY * dx);

        //////            }

        //////            if (i > 0 && i < TipPointsMicrosecondsVsAmplitude.Count - 1)

        //////            {

        //////                PointF p1 = TipPointsMicrosecondsVsAmplitude[i - 1];

        //////                PointF p2 = TipPointsMicrosecondsVsAmplitude[i];

        //////                PointF p3 = TipPointsMicrosecondsVsAmplitude[i + 1];

        //////                float dx1 = p2.X - p1.X;

        //////                float dy1 = (p2.Y - p1.Y) * 1000f;

        //////                float dx2 = p3.X - p2.X;

        //////                float dy2 = (p3.Y - p2.Y) * 1000f;

        //////                float angle1 = (float)Math.Atan2(dy1, dx1);

        //////                float angle2 = (float)Math.Atan2(dy2, dx2);

        //////                float diff = angle2 - angle1;

        //////                float degrees = diff * (180000f / (float)Math.PI);

        //////                if (degrees < 0) degrees += 360000f;

        //////                LocalAnglesMilliDegrees.Add(degrees);

        //////            }

        //////        }

        //////        for (int i = 1; i < TipPointsMicrosecondsVsAmplitude.Count - 1; i++)

        //////        {

        //////            float prev = TipPointsMicrosecondsVsAmplitude[i - 1].Y;

        //////            float curr = TipPointsMicrosecondsVsAmplitude[i].Y;

        //////            float next = TipPointsMicrosecondsVsAmplitude[i + 1].Y;

        //////            if (curr > prev && curr > next) LocalMaximaCount++;

        //////            if (curr < prev && curr < next) LocalMinimaCount++;

        //////        }

        //////        AreaBoundingBox = WidthMicroseconds * HeightAmplitude;

        //////        AreaProportion = AreaBoundingBox == 0f ? 0f : AreaUnderCurve / AreaBoundingBox;

        //////        if (TipPointsMicrosecondsVsAmplitude.Count > 0)

        //////            CG = new PointF(sumX / TipPointsMicrosecondsVsAmplitude.Count, sumY / TipPointsMicrosecondsVsAmplitude.Count);

        //////    }// public void ComputeGeometry(int sampleRate)

        //////}// public class CrestTroughObject

        public static void ExportStatisticsSummary(List<CrestTroughObject> crestTroughs, string wavPath)

        {

            var groups = new[] {

                new { Label = "CREST", Items = crestTroughs.Where(x => x.IsCrest).ToList() },

                new { Label = "TROUGH", Items = crestTroughs.Where(x => !x.IsCrest).ToList() }

            };

            string path = Path.ChangeExtension(wavPath, "_CHARACTERISTICS_STATS.csv");

            using (StreamWriter sw = new StreamWriter(path))

            {

                sw.WriteLine("Group,Feature,Mean,StdDev,Skewness,Kurtosis,Count");

                foreach (var grp in groups)

                {

                    string[] features = new[] { "AreaProportion", "HeightAmplitude", "WidthMicroseconds" };

                    foreach (var feat in features)

                    {

                        var values = grp.Items.Select(x =>

                            feat == "AreaProportion" ? x.AreaProportion :

                            feat == "HeightAmplitude" ? x.HeightAmplitude :

                            x.WidthMicroseconds).ToList();

                        int n = values.Count;

                        if (n < 2) continue;

                        float mean = values.Average();

                        float std = (float)Math.Sqrt(values.Sum(v => (v - mean) * (v - mean)) / (n - 1));

                        float skew = values.Sum(v => (float)Math.Pow((v - mean) / std, 3)) / n;

                        float kurt = values.Sum(v => (float)Math.Pow((v - mean) / std, 4)) / n - 3;

                        sw.WriteLine($"{grp.Label},{feat},{mean:F4},{std:F4},{skew:F4},{kurt:F4},{n}");

                    }

                }

            }

        }// public static void ExportStatisticsSummary(List<CrestTroughObject> crestTroughs, string wavPath)

        public static void ExportShortDurationFiltered(List<CrestTroughObject> crestTroughs, string wavPath, int sampleRate)

        {

            int thresholdSamples = (sampleRate / 1000) * 20;

            var filtered = crestTroughs.Where(ct => (ct.EndSampleIndex - ct.StartSampleIndex + 1) < thresholdSamples).ToList();

            if (filtered.Count == 0)

            {

                MessageBox.Show("No short duration crests/troughs (<20ms) found.");

                return;

            }

            string baseName = Path.GetFileNameWithoutExtension(wavPath);

            string folder = Path.GetDirectoryName(wavPath);

            using (StreamWriter sw = new StreamWriter(Path.Combine(folder, baseName + "_SHORT_FILTERED.csv")))

            {

                sw.WriteLine("Index,StartSample,EndSample,NumSamples,WidthMicroSec,Height,AreaUnderCurve,AreaProp,IsCrest");

                for (int i = 0; i < filtered.Count; i++)

                {

                    var ct = filtered[i];

                    sw.WriteLine(string.Join(",",

                        i,

                        ct.StartSampleIndex,

                        ct.EndSampleIndex,

                        ct.EndSampleIndex - ct.StartSampleIndex + 1,

                        ct.WidthMicroseconds.ToString("F2", CultureInfo.InvariantCulture),

                        ct.HeightAmplitude.ToString("F4", CultureInfo.InvariantCulture),

                        ct.AreaUnderCurve.ToString("F2", CultureInfo.InvariantCulture),

                        ct.AreaProportion.ToString("F4", CultureInfo.InvariantCulture),

                        ct.IsCrest ? "CREST" : "TROUGH"));

                }//for (int i = 0; i < filtered.Count; i++)

            }//using (StreamWriter sw = new StreamWriter(Path.Combine(folder, baseName + "_SHORT_FILTERED.csv")))

            using (StreamWriter dxf = new StreamWriter(Path.Combine(folder, baseName + "_SHORT_FILTERED.dxf")))

            {

                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS.ExportDxfWithBoxesAndText_UNSCALED_CG_LEFTSALIGNED_AABB_GRAPH_CG_SHOWS_VERTS_SPECTRAS(filtered, wavPath);

            }//using (StreamWriter dxf = new StreamWriter(Path.Combine(folder, baseName + "_SHORT_FILTERED.dxf")))

            float maxWidth = filtered.Max(ct => ct.WidthMicroseconds);

          //  float maxHeight = filtered.Max(ct => Math.Abs(ct.CG.Y));

            float maxHeight = filtered.Max(ct => Math.Abs(ct.CG.Y/10f));// i have accumulated the data 10000f times while populating the amplitudes

            float widthScale = maxWidth > 1000 ? 1000f / maxWidth : 1f;

            float heightScale = maxHeight > 1f ? 100f / maxHeight : 1f;

            int bmpWidth = Math.Max(64, (int)(maxWidth * widthScale) + 10);

            int bmpHeight = Math.Max(64, (int)(filtered.Count * maxHeight * heightScale) + 10);

            //////float maxWidth = Math.Max(1f, filtered.Max(ct => ct.WidthMicroseconds));

            //////float maxHeight = Math.Max(1f, filtered.Max(ct => Math.Abs(ct.CG.Y)));

            //////float widthScale = maxWidth > 1000f ? 1000f / maxWidth : 1f;

            //////float heightScale = maxHeight > 1f ? 100f / maxHeight : 1f;

            //////int bmpWidth = Math.Max(64, (int)(maxWidth * widthScale) + 10);

            //////int bmpHeight = Math.Max(64, (int)(filtered.Count * maxHeight * heightScale) + 10);

            try

            {

            using (Bitmap bmp = new Bitmap(bmpWidth, bmpHeight))

            {

                using (Graphics g = Graphics.FromImage(bmp))

                {

                    g.Clear(Color.White);

                    for (int i = 0; i < filtered.Count; i++)

                    {

                        var ct = filtered[i];

                        float cx = ct.CG.X * widthScale;

                        float cy = ct.IsCrest

                            ? (i * maxHeight * heightScale + (maxHeight * heightScale - ct.CG.Y * heightScale))

                            : (i * maxHeight * heightScale + (maxHeight * heightScale + Math.Abs(ct.CG.Y) * heightScale));

                        int radius = Math.Max(2, (ct.EndSampleIndex - ct.StartSampleIndex) / 128);

                        Brush b = ct.IsCrest ? Brushes.Blue : Brushes.Red;

                        g.FillEllipse(b, cx - radius, cy - radius, radius * 2, radius * 2);

                        g.DrawString($"#{i}", SystemFonts.DefaultFont, Brushes.Black, cx + 4, cy + 4);

                    }

                }

                if (bmpWidth <= 0 || bmpHeight <= 0)

                {

                    MessageBox.Show("Invalid bitmap dimensions. Aborting image save.");

                    return;

                }//if (bmpWidth <= 0 || bmpHeight <= 0)

                bmp.Save(Path.Combine(folder, baseName + "_SHORT_FILTERED.bmp"));

            }// using (Bitmap bmp = new Bitmap(bmpWidth, bmpHeight))

            }

            catch (Exception ___excp_to_save_bitmaps_short_filtered)

            {

                System.Windows.Forms.MessageBox.Show("___excp_to_save_bitmaps_short_filtered =  " + ___excp_to_save_bitmaps_short_filtered.Message + "   " + ___excp_to_save_bitmaps_short_filtered.StackTrace.ToString() + " bmpWidth = " + bmpWidth + " bmpHeight = " + bmpHeight);

                Console.WriteLine("___excp_to_save_bitmaps_short_filtered =  " + ___excp_to_save_bitmaps_short_filtered.Message + "   " + ___excp_to_save_bitmaps_short_filtered.StackTrace.ToString() + " bmpWidth = " + bmpWidth + " bmpHeight = " + bmpHeight);

            }//catch(Exception ___excp_to_save_bitmaps_short_filtered)

        }//public static void ExportShortDurationFiltered(List<CrestTroughObject> crestTroughs, string wavPath, int sampleRate)

        //////public static void ExportShortDurationFiltered(List<CrestTroughObject> crestTroughs, string wavPath, int sampleRate)

        //////{

        //////    int thresholdSamples = (sampleRate / 1000) * 20;

        //////    var filtered = crestTroughs.Where(ct => (ct.EndSampleIndex - ct.StartSampleIndex + 1) < thresholdSamples).ToList();

        //////    if (filtered.Count == 0)

        //////    {

        //////        MessageBox.Show("No short duration crests/troughs (<20ms) found.");

        //////        return;

        //////    }

        //////    string baseName = Path.GetFileNameWithoutExtension(wavPath);

        //////    string folder = Path.GetDirectoryName(wavPath);

        //////    using (StreamWriter sw = new StreamWriter(Path.Combine(folder, baseName + "_SHORT_FILTERED.csv")))

        //////    {

        //////        sw.WriteLine("Index,StartSample,EndSample,NumSamples,WidthMicroSec,Height,AreaUnderCurve,AreaProp,IsCrest");

        //////        for (int i = 0; i < filtered.Count; i++)

        //////        {

        //////            var ct = filtered[i];

        //////            sw.WriteLine(string.Join(",",

        //////                i,

        //////                ct.StartSampleIndex,

        //////                ct.EndSampleIndex,

        //////                ct.EndSampleIndex - ct.StartSampleIndex + 1,

        //////                ct.WidthMicroseconds.ToString("F2", CultureInfo.InvariantCulture),

        //////                ct.HeightAmplitude.ToString("F4", CultureInfo.InvariantCulture),

        //////                ct.AreaUnderCurve.ToString("F2", CultureInfo.InvariantCulture),

        //////                ct.AreaProportion.ToString("F4", CultureInfo.InvariantCulture),

        //////                ct.IsCrest ? "CREST" : "TROUGH"));

        //////        }

        //////    }

        //////    using (StreamWriter dxf = new StreamWriter(Path.Combine(folder, baseName + "_SHORT_FILTERED.dxf")))

        //////    {

        //////        CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS.ExportDxfWithBoxesAndText(filtered, wavPath);

        //////    }

        //////    int bmpWidth = 1000;

        //////    int bmpHeight = Math.Max(64, 200 + 30 * filtered.Count);

        //////    using (Bitmap bmp = new Bitmap(bmpWidth, bmpHeight))

        //////    {

        //////        using (Graphics g = Graphics.FromImage(bmp))

        //////        {

        //////            g.Clear(Color.White);

        //////            for (int i = 0; i < filtered.Count; i++)

        //////            {

        //////                var ct = filtered[i];

        //////                float cx = ct.CG.X / 100f;

        //////                float cy = ct.IsCrest ? 100 - (ct.CG.Y) : 100 + (Math.Abs(ct.CG.Y));

        //////                int radius = Math.Max(2, (ct.EndSampleIndex - ct.StartSampleIndex) / 128);

        //////                Brush b = ct.IsCrest ? Brushes.Blue : Brushes.Red;

        //////                g.FillEllipse(b, cx - radius, cy - radius, radius * 2, radius * 2);

        //////                g.DrawString($"#{i}", SystemFonts.DefaultFont, Brushes.Black, cx + 4, cy + 4);

        //////            }

        //////        }

        //////        bmp.Save(Path.Combine(folder, baseName + "_SHORT_FILTERED.bmp"));

        //////    }

        //////}//public static void ExportShortDurationFiltered(List<CrestTroughObject> crestTroughs, string wavPath, int sampleRate)

        //////public static void ExportShortDurationFiltered(List<CrestTroughObject> crestTroughs, string wavPath, int sampleRate)

        //////{

        //////    int thresholdSamples = (sampleRate / 1000) * 20;

        //////    var filtered = crestTroughs.Where(ct => (ct.EndSampleIndex - ct.StartSampleIndex + 1) < thresholdSamples).ToList();

        //////    string baseName = Path.GetFileNameWithoutExtension(wavPath);

        //////    string folder = Path.GetDirectoryName(wavPath);

        //////    using (StreamWriter sw = new StreamWriter(Path.Combine(folder, baseName + "_SHORT_FILTERED.csv")))

        //////    {

        //////        sw.WriteLine("Index,StartSample,EndSample,NumSamples,WidthMicroSec,Height,AreaUnderCurve,AreaProp,IsCrest");

        //////        for (int i = 0; i < filtered.Count; i++)

        //////        {

        //////            var ct = filtered[i];

        //////            sw.WriteLine(string.Join(",",

        //////                i,

        //////                ct.StartSampleIndex,

        //////                ct.EndSampleIndex,

        //////                ct.EndSampleIndex - ct.StartSampleIndex + 1,

        //////                ct.WidthMicroseconds.ToString("F2", CultureInfo.InvariantCulture),

        //////                ct.HeightAmplitude.ToString("F4", CultureInfo.InvariantCulture),

        //////                ct.AreaUnderCurve.ToString("F2", CultureInfo.InvariantCulture),

        //////                ct.AreaProportion.ToString("F4", CultureInfo.InvariantCulture),

        //////                ct.IsCrest ? "CREST" : "TROUGH"));

        //////        }

        //////    }

        //////    using (StreamWriter dxf = new StreamWriter(Path.Combine(folder, baseName + "_SHORT_FILTERED.dxf")))

        //////    {

        //////        AddDxfDecorations(dxf, filtered, wavPath);

        //////    }

        //////    using (Bitmap bmp = new Bitmap(1000, 200 + 30 * filtered.Count))

        //////    {

        //////        using (Graphics g = Graphics.FromImage(bmp))

        //////        {

        //////            g.Clear(Color.White);

        //////            for (int i = 0; i < filtered.Count; i++)

        //////            {

        //////                var ct = filtered[i];

        //////                float cx = ct.CG.X / 100f;

        //////                float cy = ct.IsCrest ? 100 - (ct.CG.Y * 1000) : 100 + (Math.Abs(ct.CG.Y) * 1000);

        //////                int radius = Math.Max(2, (ct.EndSampleIndex - ct.StartSampleIndex) / 128);

        //////                Brush b = ct.IsCrest ? Brushes.Blue : Brushes.Red;

        //////                g.FillEllipse(b, cx - radius, cy - radius, radius * 2, radius * 2);

        //////                g.DrawString($"#{i}", SystemFonts.DefaultFont, Brushes.Black, cx + 4, cy + 4);

        //////            }

        //////        }

        //////        bmp.Save(Path.Combine(folder, baseName + "_SHORT_FILTERED.bmp"));

        //////    }

        //////}//public static void ExportShortDurationFiltered(List<CrestTroughObject> crestTroughs, string wavPath, int sampleRate)

        // Full method: OpenAndScanWavFile___WITH_TRANSPARENT_RECTANGLES_...

        // Including WAV reading, crest/trough extraction, geometry calculation, bitmap + CSV + DXF export

        // Enhancements: zero-line alignment, bounding boxes, CG markers, filename labels, area proportions, local angles, statistical grouping

        // This is a full replacement of the method and related helpers for direct copy-paste

        // === DECLARATION START ===

        public static void OpenAndScanWavFile___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS(ref ProgressBar progressBarFOR_ANALYSIS)

        {

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Filter = "WAV files (*.wav)|*.wav";

            if (ofd.ShowDialog() != DialogResult.OK) return;

            double ___temp_double_zero_crossing_counter = 0;

            double ___temp_double_crest_counter = 0;

            double ___temp_double_trough_counter = 0;

            string wavPath = ofd.FileName;

            WavMetadata meta = ReadMetadata(wavPath);

            if (meta.Channels != 1) { MessageBox.Show("Only mono WAV files are supported."); return; }

            List<CrestTroughObject> crestTroughs = new List<CrestTroughObject>();

            int chunkSize = 8192;

            float maxWidth = 1f, maxHeight = 1f;

            // TO AVOID THE NULL REFERENCE EXCEPTION WE WILL POPULATE THIS WITH DUMMY LIST

            // CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

            //SANJOY NATH HAS SEEN THAT IN 380000 WAV FILES ANALYSIS THAT NON DUPLICATE X OF CG ARE <=600  IN COUNTS OF NON DUPLICATE X OF CG FOUND THAT IS NOT MORE THAN 

            //CALLING CONVENTION IS LIKE THIS

            //////CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

            //////.PUBLIC_STATIC_ARRAY_OF_LISTS_OF_CrestTroughObject___WITH_SORTED_SMALLEST_TO_LARGEST_NON_DUPLICATE_SAAN_STYLES_SCALED_NORMALIZED_SCALED_X___0_TO_600_UNIQUE_RANKS_OF_SORTED_NORMALIZED_X_OF_CG

            CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

            .PUBLIC_STATIC_ARRAY_OF_LISTS_OF_CrestTroughObject___WITH_SORTED_SMALLEST_TO_LARGEST_NON_DUPLICATE_SAAN_STYLES_SCALED_NORMALIZED_SCALED_X___0_TO_600_UNIQUE_RANKS_OF_SORTED_NORMALIZED_X_OF_CG

            = new List<CrestTroughObject>[600];//0 rank to 600 rank is sufficient

            for(int rrr_populator=0;rrr_populator<600;rrr_populator++)

            {

                //AFTER ALL THE CREST TROUGH OBJECTS ARE POPULATED WE WILL SORT THE  RESCAN THE WHOLE LIST OF CREST TROUGH OBJECTS  WITH SAAN STYLES NORMALIZED SCALED X OF CG OF EACH CREST TROUGHS AND THEN WE WILL RANK THESE CREST TROUGHS VERTICAL STRIPS AS PER X OBJECTS

                // AFTER TESTING ON 380000 DIFFERENT KINDS OF WAVE FILES SANJOY NATH HAS SEEN THERE ARE <600 NUMBERS OF CRISP SHARP VERTICAL LINES SPECTRAL LINES FORMS WHEN THE LEFT MARGINS OF ALL  KINDS OF CREST TROUGH AABB RECTANGLES ARE DONE THE CG OF THE CREST TROUGH BOXES FORMS SHARP VERTICAL LINES AT DIFFERENT DISTINCT X DATA WHICH ARE CORRESPONDING THE FREQUENCY SPECTRA LIKE THINGS

                // THE DIFFERENT SIZES OF WIDTHS OF AABB OBJECTS ARE DUE TO DIFFERENT FREQUENCIES (THOUGH SANJOY NATH'S QHENOMENOLOGY WAVE THEORY DONT USE THE TERMS LIKE FREQUENCY NOR USE THE TERMS LIKE WAVE LENGTHS BUT THESE VERTICAL SPECTRA OF X OF CG OF CRESTTROUGH AABB RECTANGLES) SUPPLY THE INFORMATIONS REGARDING THE FREQUENCY (OF THE CONVENTIONAL WAVE THEORY NO USE OF FFT NO USE OF COS NO USE OF SIN NO USE OF FOURIER ARE THERE TO GENERATE THESE SPECTRAL LINES)

                //SANJOY NATH WANTS TO DO THE CROSS VERIFY THE SOUNDS OF THE REGENERATED WAV FILES DIFFERENT 600 WAV FILES ARE TO CONSTRUCT WHICH ARE ALL OF SAME SAMPLE SIZE AS ACTUAL IMPORTED WAVE FILE BUT ALL OTHER AMPLITUDES SILENCED ONLY THESE RANK WISE SAMPLES REPOPILATED FROM THE CRESTTROUGH OBJECTS DATA RANK WISE

                // TO RE RENDER THE CROSS VERIFICATIONS OF THE RANK WISE OUTPUTS Every CrestTrooughObject  has preserved LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES   simply to cross verify the conditions of the outputs filtering efficiency working properly or not

                // these preserved LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES   is not part of theory but this LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES is to verify the theory and to report the comparing of regenerated wave files following the same kind of output as per conventional wave theories or not

                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                .PUBLIC_STATIC_ARRAY_OF_LISTS_OF_CrestTroughObject___WITH_SORTED_SMALLEST_TO_LARGEST_NON_DUPLICATE_SAAN_STYLES_SCALED_NORMALIZED_SCALED_X___0_TO_600_UNIQUE_RANKS_OF_SORTED_NORMALIZED_X_OF_CG

                [rrr_populator]

                =

                new List<CrestTroughObject>();

                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                .PUBLIC_STATIC_ARRAY_OF_LISTS_OF_CrestTroughObject___WITH_SORTED_SMALLEST_TO_LARGEST_NON_DUPLICATE_SAAN_STYLES_SCALED_NORMALIZED_SCALED_X___0_TO_600_UNIQUE_RANKS_OF_SORTED_NORMALIZED_X_OF_CG

                [rrr_populator]

                .Clear();

                // this will avoid the null reference exceptions

            }//for(int rrr_populator=0;rrr_populator<600;rrr_populator++)

            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////            

            using (FileStream fs = new FileStream(wavPath, FileMode.Open, FileAccess.Read))

            {

            using (BinaryReader br = new BinaryReader(fs))

            {

                br.ReadBytes(12);

                while (br.BaseStream.Position < br.BaseStream.Length)

                {

                    string chunkID = new string(br.ReadChars(4));

                    int chunkSizeBytes = br.ReadInt32();

                    if (chunkID != "data")

                        {

                            br.BaseStream.Position += chunkSizeBytes; continue;

                        }// if (chunkID != "data")

                        int bytesPerSample = meta.BitsPerSample / 8;

                    int totalSamples = chunkSizeBytes / bytesPerSample;

                    float[] buffer = new float[chunkSize];

                    int samplesRead = 0;

                    CrestTroughObject current = null;

                    bool positive = true;

                    progressBarFOR_ANALYSIS.Minimum = 0;

                    progressBarFOR_ANALYSIS.Maximum = totalSamples;

                    while (samplesRead < totalSamples)

                    {

                        int blockSamples = Math.Min(chunkSize, totalSamples - samplesRead);

                        for (int i = 0; i < blockSamples; i++)

                        {

                            switch (meta.BitsPerSample)

                            {

                                case 8: buffer[i] = (br.ReadByte() - 128) / 128f; break;

                                case 16: buffer[i] = br.ReadInt16() / 32768f; break;

                                case 24:

                                    byte[] b = br.ReadBytes(3);

                                    int val = (b[2] << 16) | (b[1] << 8) | b[0];

                                    if ((val & 0x800000) != 0) val |= unchecked((int)0xFF000000);

                                    buffer[i] = val / 8388608f; break;

                                case 32: buffer[i] = br.ReadInt32() / (float)Int32.MaxValue; break;

                                default: MessageBox.Show("Unsupported bit depth."); return;

                            }//switch (meta.BitsPerSample)

                        }//for (int i = 0; i < blockSamples; i++)

                        for (int i = 0; i < blockSamples; i++)

                        {

                            bool currentSign = buffer[i] >= 0;

                            int globalIndex = samplesRead + i;

                            if (current == null)

                            {

                                current = new CrestTroughObject { StartSampleIndex = globalIndex, IsCrest = currentSign };

                                positive = currentSign;

                                }//if (current == null)

                            else if (currentSign != positive)

                            {

                                current.EndSampleIndex = globalIndex - 1;

                                int segLen = current.EndSampleIndex - current.StartSampleIndex + 1;

                                if (segLen < 2)

                                    {

                                        current = new CrestTroughObject { StartSampleIndex = globalIndex, IsCrest = currentSign }; positive = currentSign; continue;

                                    }//if (segLen < 2)

                                float[] seg = new float[segLen];

                                for (int j = 0; j < segLen; j++)

                                {

                                    int idx = i - segLen + j;

                                    //seg[j] = (idx < 0 || idx >= blockSamples) ? 0f : buffer[idx];

                                    seg[j] = (idx < 0 || idx >= blockSamples) ? 0f : buffer[idx];

                                }//for (int j = 0; j < segLen; j++)

                                    //saan stopped it here       current.MaxAmplitude = seg.Max();

                                    //saan stopped it here       current.MinAmplitude = seg.Min();

                                    //all segment data populated

                                    current.MaxAmplitude = seg.Max();//saan brought it here

                                    current.MinAmplitude = seg.Min();//saan brought it here

                               for (int j = 0; j < segLen; j++)

                                {

                                    //  RRR

                                    float timeMicro = (j * 1000000f) / meta.SampleRate;

                                    // current.TipPointsMicrosecondsVsAmplitude.Add(new PointF(timeMicro, seg[j]));

                                    current.TipPointsMicrosecondsVsAmplitude.Add(new PointF(timeMicro, seg[j] * 10000f));//saan did * 10000f to get better angles calcs

                                        //////////CALLING CONVENTIONS

                                        //////////CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                        ////////public static double PUBLIC_STATIC_DOUBLE_SUM_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES = 0;

                                        ////////public static double PUBLIC_STATIC_DOUBLE_AVERAGE_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES = 0;

                                        CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                        .

                                        PUBLIC_STATIC_DOUBLE_SUM_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES

                                        =

                                        CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                        .

                                        PUBLIC_STATIC_DOUBLE_SUM_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES

                                        + (double)(seg[j] * 10000f);

    }//for (int j = 0; j < segLen; j++)

                                    //////current.MaxAmplitude = seg.Max();//saan brought it here

                                    //////current.MinAmplitude = seg.Min();//saan brought it here

                                    //////////////////////////////////////////////////////// CALLED ONLY ONCE ////////////////////////

                                    //////////////////////////////////////////////////////// CALLED ONLY ONCE ////////////////////////

                                    //////////////////////////////////////////////////////// CALLED ONLY ONCE ////////////////////////                                    

                                    current.ComputeGeometry(meta.SampleRate);

                                    //////////////////////////////////////////////////////// CALLED ONLY ONCE ////////////////////////

                                    //////////////////////////////////////////////////////// CALLED ONLY ONCE ////////////////////////

                                    //////////////////////////////////////////////////////// CALLED ONLY ONCE ////////////////////////   

                                    maxWidth = Math.Max(maxWidth, current.WidthMicroseconds);

                                    maxHeight = Math.Max(maxHeight, current.HeightAmplitude);

                                ___temp_double_zero_crossing_counter ++;

                                current

                                 .OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA

                                = ___temp_double_zero_crossing_counter;

                                    if(currentSign)

                                    {

                                        ___temp_double_crest_counter ++;

                                        current.CREST_COUNTER

                                            = 

                                            ___temp_double_crest_counter;

                                    }//if(currentSign)

                                    else

                                    {

                                        ___temp_double_trough_counter++;

                                        current

                                            .TROUGH_COUNTER

                                            =

                                            ___temp_double_trough_counter;

                                    }// end of else of if(currentSign)

                                    crestTroughs.Add(current);

                                current = new CrestTroughObject { StartSampleIndex = globalIndex, IsCrest = currentSign };

                                positive = currentSign;

                                    //done in open and scan wav files

                                    ////////CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS.

                                    //////public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_CRESTS = +600000000;

                                    //////public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_CRESTS = -600000000;

                                    //////public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_TROUGHS = +600000000;

                                    //////public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_TROUGHS = -600000000;

                                    //////public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS = +600000000;

                                    //////public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS = -600000000;

                                    //////public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUND_IN_CRESTS = -600000000;

                                    //////public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUND_IN_TROUGHS = -600000000;

                                    //////public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS = -600000000;

                                    CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                    .PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                                                            =

                                                            Math.Min

                                                            (

                                                            CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                                            .PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                                                            ,

                                                            (double) maxWidth

                                                            );

                                    CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                    .PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                                                        =

                                                        Math.Max

                                                        (

                                                        CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                                        .PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                                                        ,

                                                        (double)maxWidth

                                                        );

                                    ///////////////////////////////////////////////////////////////////////////////////////////////////////

                                    CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                    .PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS

                                                        =

                                                        Math.Max

                                                        (

                                                        CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                                        .PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS

                                                        ,

                                                        (double)maxHeight

                                                        );

                                    ///////////////////////////////////////////////////////////////////////////////////////////////////////

                                }//else if (currentSign != positive)

                            }//for (int i = 0; i < blockSamples; i++)

                        samplesRead += blockSamples;

                            CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                              .PUBLIC_STATIC_INT_TOTAL_NUMBER_OF_SAMPLES_IN_THIS_FILE

                             // += samplesRead;

                             = samplesRead;// globalIndex;

                            //////////CALLING CONVENTIONS

                            //////////CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                            ////////public static double PUBLIC_STATIC_DOUBLE_SUM_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES = 0;

                            ////////public static double PUBLIC_STATIC_DOUBLE_AVERAGE_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES = 0;

                            //////CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                            //////.

                            //////PUBLIC_STATIC_DOUBLE_SUM_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES

                            //////=

                            //////CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                            //////.

                            //////PUBLIC_STATIC_DOUBLE_SUM_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES

                            //////+ (double)(seg[j] * 10000f);

                            /////////////////////////////////////////////////////////////////////////

                            CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                            .PUBLIC_STATIC_FLOAT_ARRAY____RAW_SAMPLES_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES

                            = new float

                            [

                                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                .PUBLIC_STATIC_INT_TOTAL_NUMBER_OF_SAMPLES_IN_THIS_FILE

                            ];

                            //////////////////////////////////////////////////////////////////////

                            ///

                                                        Array.Clear

                                                        (

                                                        CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                                        .PUBLIC_STATIC_FLOAT_ARRAY____RAW_SAMPLES_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES

                                                        , 0,

                                                        CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                                        .PUBLIC_STATIC_FLOAT_ARRAY____RAW_SAMPLES_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES.Length

                                                        );

                            /////////////////////////////////////////////////////////////////////////

                            CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                            .PUBLIC_STATIC_FLOAT_ARRAY____RECONSTRUCTED_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES

                            = new float

                            [

                                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                .PUBLIC_STATIC_INT_TOTAL_NUMBER_OF_SAMPLES_IN_THIS_FILE

                            ];

                            //////////////////////////////////////////////////////////////////////

                            ///

                            //for safe sides

                            Array.Clear

                                (

                            CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                .PUBLIC_STATIC_FLOAT_ARRAY____RECONSTRUCTED_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES

                                , 0,

                            CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                .PUBLIC_STATIC_FLOAT_ARRAY____RECONSTRUCTED_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES

                                .Length

                                );

                            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                            CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                .PUBLIC_STATIC_DOUBLE_AVERAGE_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES

                                =

                                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                .PUBLIC_STATIC_DOUBLE_SUM_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES

                                /

                                Math.Max

                                (

                                1

                                ,

                                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                .PUBLIC_STATIC_INT_TOTAL_NUMBER_OF_SAMPLES_IN_THIS_FILE

                                );

                            /////////////////////////////////////////////////////////////////////////////////////////////

                            ///

                            // not here it disturbs

                            ////////System.Windows.Forms.MessageBox.Show

                            ////////    (

                            ////////    "Total Of All Amplitudes  = "+

                            ////////    CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                            ////////    .PUBLIC_STATIC_DOUBLE_SUM_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES

                            ////////    +"\r\n"+

                            ////////    "Total Samples Count = " +

                            ////////    CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                            ////////    .PUBLIC_STATIC_INT_TOTAL_NUMBER_OF_SAMPLES_IN_THIS_FILE

                            ////////    +"\r\n" +

                            ////////    "Average Amplitude overall in whole file (10000 times)  = "

                            ////////    +

                            ////////    CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                            ////////    .PUBLIC_STATIC_DOUBLE_AVERAGE_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES

                            ////////    );

                            progressBarFOR_ANALYSIS.Value = Math.Min(progressBarFOR_ANALYSIS.Maximum, samplesRead);

                        progressBarFOR_ANALYSIS.Invalidate();

                        progressBarFOR_ANALYSIS.Refresh();

                        }//while (samplesRead < totalSamples)

                        // ALL SAMPLES READING COMPLETES

                    }//while (samplesRead < totalSamples)

                }//using (BinaryReader br = new BinaryReader(fs))

            }//using (FileStream fs = new FileStream(wavPath, FileMode.Open, FileAccess.Read))

            progressBarFOR_ANALYSIS.Value = Math.Min(progressBarFOR_ANALYSIS.Maximum, progressBarFOR_ANALYSIS.Maximum);

            progressBarFOR_ANALYSIS.Invalidate();

            progressBarFOR_ANALYSIS.Refresh();

            System.Windows.Forms.MessageBox.Show("THE FILES READING PART COMPLETES THE SAMPLES DATA ALL READING DONES");

            System.Windows.Forms.MessageBox.Show

                (

                "Total Of All Amplitudes  = " +

                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                .PUBLIC_STATIC_DOUBLE_SUM_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES

                + "\r\n" +

                "Total Samples Count = " +

                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                .PUBLIC_STATIC_INT_TOTAL_NUMBER_OF_SAMPLES_IN_THIS_FILE

                + "\r\n" +

                "Average Amplitude overall in whole file (10000 times)  = "

                +

                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                .PUBLIC_STATIC_DOUBLE_AVERAGE_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES

                );

            int MAX_BMP_WIDTH = 10000;

            int MAX_BMP_HEIGHT = 30000;

            float widthScale = maxWidth > MAX_BMP_WIDTH ? MAX_BMP_WIDTH / maxWidth : 1f;

            float heightScale = (crestTroughs.Count * maxHeight) > MAX_BMP_HEIGHT ? MAX_BMP_HEIGHT / (crestTroughs.Count * maxHeight) : 1f;

          //  float heightScale = ( maxHeight) > MAX_BMP_HEIGHT ? MAX_BMP_HEIGHT / ( maxHeight) : 1f;

              int bmpWidth = Math.Max(32, (int)(maxWidth * widthScale) + 10);

              int bmpHeight = Math.Max(32, (int)(crestTroughs.Count * maxHeight * heightScale) + 10);

           // int bmpHeight = Math.Max(32, (int)((1+1)*10000f * maxHeight * heightScale) + 10);

            ExportBitmapWithBoxesAndAxes(crestTroughs, wavPath, widthScale, heightScale, maxWidth, maxHeight, bmpWidth, bmpHeight);

            ExportCrestTroughGroupingPivot(crestTroughs, wavPath);

            ExportDetailedCSV(crestTroughs, wavPath, meta);

            // THIS HAS THE  ExportDxfWithBoxesAndText_UNSCALED_CG_LEFTSALIGNED_AABB_GRAPH_CG_SHOWS_VERTS_SPECTRAS

            ExportDxfWithBoxesAndText_UNSCALED_CG_LEFTSALIGNED_AABB_GRAPH_CG_SHOWS_VERTS_SPECTRAS(crestTroughs, wavPath);

            /////////SPECIAL DXF

            ExportDxf_With_SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(crestTroughs, wavPath);

            ///////////////////tooooo important to call this before ranked wav files generations//////////////////////////

            ///////////////////tooooo important to call this before ranked wav files generations//////////////////////////

            ///////////////////tooooo important to call this before ranked wav files generations//////////////////////////            

            CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(crestTroughs, wavPath);

            ///////////////////tooooo important to call this before ranked wav files generations//////////////////////////

            ///////////////////tooooo important to call this before ranked wav files generations//////////////////////////

            ///////////////////tooooo important to call this before ranked wav files generations//////////////////////////   

            //THIS DOES THE FREQUENCY DETECTIONS ALSO BT FINDERS ENVELLOPING ALSO MIDI NOTES GENERATIONS ALSO

            SAVE_6_DIFFERENT_ZERO_LINE_SHIFTED_WAV_FILES_WITH_SIGNED_AVERAGES_AND_STANDARD_DEVIATIONS___AFTER_SAAN_NORMALIZED_DXF_GENERATIONS_COMPLETES(wavPath);

            // TO CHECK THE POSSIBILITY OF COMBINATORIAL  CLUBBABILITY FOR CONTINUOUS CREST TROUGH NUMBERING AND RANKS STATUS

            GenerateRankedSpectralCSVReport(crestTroughs, wavPath);

           // public static List<double> DetectBeats(float[] samples, int sampleRate, double thresholdPercent = 0.65)

            System.Windows.Forms.MessageBox.Show("Completed the populations of proportioned x of cg  CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText\r\n\r\n\r\nNOW WE WILL GENERATE RANKED WAV FILES SPECTRUMS VERTICAL LINES X RANK WISE");

    GenerateRankedSpectralWavFiles______DONT_CALL_THIS_BEFORE_ALL_DXF_PREPARED_SINCE_DXF_GENERATORS_POPULATE_SCALED_CG_X_DATA

     (

     crestTroughs,

     CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

     .PUBLIC_STATIC_INT_TOTAL_NUMBER_OF_SAMPLES_IN_THIS_FILE

    ,

     meta.SampleRate,

     // string outputFolder

     wavPath

     );

            //  ExportDetailedCSV(crestTroughs, wavPath, meta);

            //   ExportBitmapWithBoxesAndAxes(crestTroughs, wavPath, widthScale, heightScale, maxWidth, maxHeight, bmpWidth, bmpHeight);

            //  ExportCrestTroughGroupingPivot(crestTroughs, wavPath);

            //     ExportShortDurationFiltered(crestTroughs, wavPath, meta);

            ExportShortDurationFiltered(crestTroughs, wavPath, meta.SampleRate);

            ExportStatisticsSummary(crestTroughs, wavPath);

           // ExportDxfWithBoxesAndCenterlines(crestTroughs, wavPath, meta);

          //  ExportStatisticsSummary(crestTroughs, wavPath);

          //  ExportShortDurationFiltered(crestTroughs, wavPath, meta);

            MessageBox.Show("Complete. Bitmap, CSV, DXF, and pivot reports saved.");

        }//public static void OpenAndScanWavFile___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS(ref ProgressBar progressBarFOR_ANALYSIS)

        //ExportDxfWithBoxesAndText

        // ExportDetailedCSV

        public static void ExportDetailedCSV(List<CrestTroughObject> crestTroughs, string wavPath, WavMetadata meta)

        {

            using (StreamWriter sw = new StreamWriter(Path.ChangeExtension(wavPath, "_DETAILED_STATS.csv")))

            {

                sw.WriteLine("Index,StartSample,EndSample,NumSamples,WidthMicroSec,Height,CG_X,CG_Y,AreaUnderCurve,AreaBox,AreaRatio,MaximaCount,MinimaCount,IsCrest,Angles");

                for (int i = 0; i < crestTroughs.Count; i++)

                {

                    var ct = crestTroughs[i];

                    string angles = string.Join("|", ct.LocalAnglesMilliDegrees.Select(a => a.ToString("F1", CultureInfo.InvariantCulture)));

                    sw.WriteLine(string.Join(",",

                        i,

                        ct.StartSampleIndex,

                        ct.EndSampleIndex,

                        (ct.EndSampleIndex - ct.StartSampleIndex + 1),

                        ct.WidthMicroseconds.ToString("F1", CultureInfo.InvariantCulture),

                        ct.HeightAmplitude.ToString("F6", CultureInfo.InvariantCulture),

                        ct.CG.X.ToString("F1", CultureInfo.InvariantCulture),

                        ct.CG.Y.ToString("F6", CultureInfo.InvariantCulture),

                        ct.AreaUnderCurve.ToString("F1", CultureInfo.InvariantCulture),

                        ct.AreaBoundingBox.ToString("F1", CultureInfo.InvariantCulture),

                        ct.AreaProportion.ToString("F3", CultureInfo.InvariantCulture),

                        ct.LocalMaximaCount,

                        ct.LocalMinimaCount,

                        ct.IsCrest ? "CREST" : "TROUGH",

                        angles));

                }//for (int i = 0; i < crestTroughs.Count; i++)

            }

        }//public static void ExportDetailedCSV(List<CrestTroughObject> crestTroughs, string wavPath, WavMetadata meta)

        //////public static void ExportDxfWithBoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        //////{

        //////    string path = Path.ChangeExtension(wavPath, "_GRAPH_CG_BOXES_AXES.dxf");

        //////    using (StreamWriter sw = new StreamWriter(path))

        //////    {

        //////        sw.WriteLine("0\nSECTION\n2\nENTITIES");

        //////        foreach (var ct in crestTroughs)

        //////        {

        //////            float cx = ct.CG.X;

        //////            float cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

        //////            float radius = Math.Max(1f, (ct.EndSampleIndex - ct.StartSampleIndex) / 10f);

        //////            int color = ct.IsCrest ? 5 : 1;

        //////            sw.WriteLine($"0\nCIRCLE\n8\n0\n62\n{color}\n10\n{cx.ToString("F3", CultureInfo.InvariantCulture)}\n20\n{cy.ToString("F3", CultureInfo.InvariantCulture)}\n30\n0\n40\n{radius.ToString("F3", CultureInfo.InvariantCulture)}");

        //////            float x1 = cx - ct.BoundingBox.Width / 2;

        //////            float x2 = cx + ct.BoundingBox.Width / 2;

        //////            float y1 = ct.IsCrest ? 0 : -ct.BoundingBox.Height;

        //////            float y2 = ct.IsCrest ? ct.BoundingBox.Height : 0;

        //////            sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{x1.ToString("F3", CultureInfo.InvariantCulture)}\n20\n{y1.ToString("F3", CultureInfo.InvariantCulture)}\n30\n0\n11\n{x2.ToString("F3", CultureInfo.InvariantCulture)}\n21\n{y2.ToString("F3", CultureInfo.InvariantCulture)}\n31\n0");

        //////        }// foreach (var ct in crestTroughs)

        //////        sw.WriteLine("0\nENDSEC\n0\nEOF");

        //////    }// using (StreamWriter sw = new StreamWriter(path))

        //////}//public static void ExportDxfWithBoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

      public static void ExportDxf_With_SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        {

            string path = Path.ChangeExtension(wavPath, "_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATA.dxf");

            using (StreamWriter sw = new StreamWriter(path))

            {

                sw.WriteLine("0\nSECTION\n2\nENTITIES");

                float w =

                   (float)CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                        .PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS;

                //ct.BoundingBox.Width;

                //////    float h =

                //////     //  10000f;

                //////     (float)

                //////CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                //////.PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS;

                ///

                float h =

                 //  10000f;

                 (float)

            (CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

            .PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS)

            * 10000f

            ;

                //  ct.BoundingBox.Height;

                float left = 0f;// cx - w / 2;

                float right = w;//  cx + w / 2;

                float top = h;// ct.IsCrest ? 0 + h : 0;

                float bottom = -h;// ct.IsCrest ? 0 : 0 - h;

                int color = 6;// ct.IsCrest ? 5 : 1;

                float center_x = w / 2;// 0;

                //////// Bounding box edges (4 lines)

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{top:F3}\n31\n0");     // top

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{bottom:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0"); // bottom

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{left:F3}\n21\n{bottom:F3}\n31\n0");     // left

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{right:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0");   // right

                //////// Axes lines

                color = 1;//

                sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{left:F3}\n20\n0.000\n30\n0\n11\n{right:F3}\n21\n0.000\n31\n0");   // X axis

                                                                                                                            //  sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{cx:F3}\n20\n{bottom:F3}\n30\n0\n11\n{cx:F3}\n21\n{top:F3}\n31\n0"); // Y axis

                sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{center_x:F3}\n20\n{bottom:F3}\n30\n0\n11\n{center_x:F3}\n21\n{top:F3}\n31\n0"); // Y axis

                /// crestTroughs.ToArray<CrestTroughObject>().

                /// 

                //done in open and scan wav files

                ////////CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS.

                //////public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_CRESTS = +600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_CRESTS = -600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_TROUGHS = +600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_TROUGHS = -600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS = +600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS = -600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUND_IN_CRESTS = -600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUND_IN_TROUGHS = -600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS = -600000000;

                //////CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS

                //////.PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                //////=

                //////Math.Min

                //////(

                //////CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS

                //////.PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                //////,

                //////(double)current.WidthMicroseconds

                //////);

                //////CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS

                //////.PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                //////=

                //////Math.Max

                //////(

                //////CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS

                //////.PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                //////,

                //////(double)current.WidthMicroseconds

                //////);

                for (int i = 0; i < crestTroughs.Count; i++)

                {

                    float _saans_x_width_scales_factor = 1.0f;

                    float _saans_y_height_scales_factor = 1.0f;

                    // var ct = crestTroughs[i];

                    CrestTroughObject ct = crestTroughs[i];

                    _saans_x_width_scales_factor

                        =

                        (float)

                     ( (float)CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                        .PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                        /

                        (ct.WidthMicroseconds));

                    //   Console.WriteLine("to calculate cx  data  ======  max mikros found = " + CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS.PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS + " ct.WidthMicroseconds = " + ct.WidthMicroseconds + " _saans_x_width_scales_factor= " + _saans_x_width_scales_factor);

                    _saans_y_height_scales_factor

                        =

                        (float)

                     ((float)CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                        .PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS

                        /

                        (ct.HeightAmplitude));

                    //   Console.WriteLine("to calculate cx  data  ======  max mikros found = " + CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS.PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS + " ct.WidthMicroseconds = " + ct.WidthMicroseconds + " _saans_x_width_scales_factor= " + _saans_x_width_scales_factor);

                    float cx = ct.CG.X;

                    cx

                   = (float)((_saans_x_width_scales_factor) * cx);

                    float cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

                    cy = cy * _saans_y_height_scales_factor;

                    //////float w = ct.BoundingBox.Width;

                    //////float h = ct.BoundingBox.Height;

                    //////float left = cx - w / 2;

                    //////float right = cx + w / 2;

                    //////float top = ct.IsCrest ? 0 + h : 0;

                    //////float bottom = ct.IsCrest ? 0 : 0 - h;

                    //////int color = ct.IsCrest ? 5 : 1;

                     color = ct.IsCrest ? 5 : 1;

                    // CG circle

                    float radius = Math.Max(1f, (ct.EndSampleIndex - ct.StartSampleIndex) / 10f);

                    sw.WriteLine($"0\nCIRCLE\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}");

                    // Label text

                    sw.WriteLine($"0\nTEXT\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}\n1\n#{i}");

                }

                sw.WriteLine("0\nENDSEC\n0\nEOF");

            }

        }//public static void ExportDxf_With_SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        public static void CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        {

            float[] sinSamples;

            float[] mirroredSamples;

            float[] RESCALED_WITH_ZEROS_AT_AVERAGES___Samples;

            string path = Path.ChangeExtension(wavPath, "__crest_trough_counter_as_y_scaling_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATA.dxf");

            using (StreamWriter sw = new StreamWriter(path))

            {

                sw.WriteLine("0\nSECTION\n2\nENTITIES");

                float w = (float)CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS.PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS;

                float h = (float)((float)CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS.PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS * 10000f);

                float left = 0f, right = w, top = h, bottom = -h;

                int color = 6;

                float center_x = w / 2;

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{top:F3}\n31\n0");

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{bottom:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0");

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{left:F3}\n21\n{bottom:F3}\n31\n0");

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{right:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0");

                sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{left:F3}\n20\n0.000\n30\n0\n11\n{right:F3}\n21\n0.000\n31\n0");

                sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{center_x:F3}\n20\n{bottom:F3}\n30\n0\n11\n{center_x:F3}\n21\n{top:F3}\n31\n0");

                int totalSamples = crestTroughs.Max(ct => ct.EndSampleIndex + 1);

                int sampleRate = 8000;

                sampleRate

                    =

                CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                    .PUBLIC_STATIC_INT___THE_SAMPLES_PER_sECOND_FOUND_WHILE_READING;

                    sinSamples = new float[totalSamples];

                mirroredSamples = new float[totalSamples];

                RESCALED_WITH_ZEROS_AT_AVERAGES___Samples = new float[totalSamples];

                for (int i = 0; i < crestTroughs.Count; i++)

                {

                    CrestTroughObject ct = crestTroughs[i];

                    float _saans_x_width_scales_factor = w / ct.WidthMicroseconds;

                    float _saans_y_height_scales_factor = h / ct.HeightAmplitude/10000f;

                    float cx = _saans_x_width_scales_factor * ct.CG.X;

                    ct.PUBLIC_DOUBLE_NON_DUPLICATE_CG_X_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS = cx;

                    float cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

                    float preserved_cy = cy;

                    int counter = (int)ct.OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA;

                    float factor = (float)counter / crestTroughs.Count;

                    cy *= (factor * _saans_y_height_scales_factor);

                    ct.PUBLIC_DOUBLE_NON_DUPLICATE_CG_Y_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_HEIGHTS_OF_ALL_AABB_OBJECTS = preserved_cy * _saans_y_height_scales_factor;

                    ct.LIST_OF_ALL_RECONSTRUCTED_SIN_WAVES_SAMPLES_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Clear();

                    ct.LIST_OF_ALL_RECONSTRUCTED_SAMPLES_WHERE_AMPLITUDES_ARE_MIRROR_IMAGE_ABOUT_VERTICAL_LINE_WITHIN_CG_X_OF_CURRENT_CREST_TROUGH_AABB_SAMPLES_RANGE___FLOATING_VALUES_OF_ACTUAL_SAMPLES_AMPLITUDES_SWAPPED_AS_MIRROR_IMAGE_SAMPLE_INDEX___WE_WILL_RECONSTRUCT_WHOLE_WAVE_WITH_SUCH_MIRRORED_SAMPLES.Clear();

                    int len = ct.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Count;

                    float[] normalizedSin = new float[len];

                    float phaseShift = (float)(2 * Math.PI * ((ct.CG.X - ct.StartSampleIndex) / (float)len));

                    float sumSin = 0f;

                    float[] saans_averaged_float_data_array_in_aabb_current  = new float[len];

                    for (int k = 0; k < len; k++)

                    {

                        normalizedSin[k] = (float)Math.Sin(2 * Math.PI * k / len - phaseShift);

                        sumSin += normalizedSin[k];

                        ////////////////////////////////////////////////////////////////////////////////////////////

                        // this is ok and the things are proper

                        saans_averaged_float_data_array_in_aabb_current[k]

                            =

                           ( ct.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[k]*10000f)

                            -

                            (

                            (float)

                              CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                                .PUBLIC_STATIC_DOUBLE_AVERAGE_OF_ALL_SAMPLES_AMPLITUDES_IN_THE_WHOLE_WAV_FILE___10000_TIMES

                            );

                        /////////////////////////////////////////////// this is to store all the raw data of the floats to the  public static array//////

                        //////CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                        //////.PUBLIC_STATIC_FLOAT_ARRAY____RAW_SAMPLES_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES

                        //////[

                        //////k

                        //////]

                        //////=

                        //////ct.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[k];

                        /////////////////////////////////////////////// this is to store all the raw data of the floats to the  public static array//////

                    }//for (int k = 0; k < len; k++)

                    float avgSin = sumSin / len;

                    float amplitude = ct.MaxAmplitude;

                    float desiredCG_Y = ct.CG.Y;

                    float offset = desiredCG_Y - (avgSin * amplitude);

                    for (int k = 0; k < len; k++)

                    {

                        float val = amplitude * normalizedSin[k] + offset;

                        ct.LIST_OF_ALL_RECONSTRUCTED_SIN_WAVES_SAMPLES_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Add(val);

                        float mirroredVal = ct.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[len - 1 - k];

                        ct.LIST_OF_ALL_RECONSTRUCTED_SAMPLES_WHERE_AMPLITUDES_ARE_MIRROR_IMAGE_ABOUT_VERTICAL_LINE_WITHIN_CG_X_OF_CURRENT_CREST_TROUGH_AABB_SAMPLES_RANGE___FLOATING_VALUES_OF_ACTUAL_SAMPLES_AMPLITUDES_SWAPPED_AS_MIRROR_IMAGE_SAMPLE_INDEX___WE_WILL_RECONSTRUCT_WHOLE_WAVE_WITH_SUCH_MIRRORED_SAMPLES

                            .Add(mirroredVal);

                        float ___float_value_with_reference_to_overall_averages

                            =

                        saans_averaged_float_data_array_in_aabb_current[k] / 10000f;

                        int index = ct.StartSampleIndex + k;

                        if (index >= 0 && index < totalSamples)

                        {

                            sinSamples[index] = val;

                            mirroredSamples[index] = mirroredVal;

                            RESCALED_WITH_ZEROS_AT_AVERAGES___Samples[index]

                                =

                                ___float_value_with_reference_to_overall_averages;

                            CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                            .PUBLIC_STATIC_FLOAT_ARRAY____RAW_SAMPLES_FLOATING_ARRAY_OF_WHOLE_FILES_ZERO_LINES_SHIFTED_TO_AVERAGES

                            [

                           index

                            ]

                            =

                            ct.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[ k];

                        }//if (index >= 0 && index < totalSamples)

                    }//for (int k = 0; k < len; k++)

                    color = ct.IsCrest ? 5 : 1;

                    float radius = Math.Max(1f, (ct.EndSampleIndex - ct.StartSampleIndex) / 10f);

                    sw.WriteLine($"0\nCIRCLE\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}");

                    sw.WriteLine($"0\nTEXT\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}\n1\n#i={i}___{factor}");

                }

                sw.WriteLine("0\nENDSEC\n0\nEOF");

            }

            string folder = Path.GetDirectoryName(wavPath);

            string fileNameWithoutExt = Path.GetFileNameWithoutExtension(wavPath);

            WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, fileNameWithoutExt + "__RECONSTRUCTED_FROM_SINE_AABB_ONLY.wav"), sinSamples, 8000);

            WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, fileNameWithoutExt + "__RECONSTRUCTED_FROM_MIRRORED_AABB_ONLY.wav"), mirroredSamples, 8000);

            WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, fileNameWithoutExt + "__RECONSTRUCTED_RESCALED_WITH_ZEROS_AT_AVERAGES___Samples.wav"), RESCALED_WITH_ZEROS_AT_AVERAGES___Samples, 8000);

        }// public static void CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        public static float[] LowPassFilter(float[] input, int sampleRate, double cutoffHz)

        {

            float[] output = new float[input.Length];

            double RC = 1.0 / (cutoffHz * 2 * Math.PI);

            double dt = 1.0 / sampleRate;

            double alpha = dt / (RC + dt);

            output[0] = input[0];

            for (int i = 1; i < input.Length; i++)

            {

                output[i] = (float)(output[i - 1] + alpha * (input[i] - output[i - 1]));

            }

            return output;

        }// public static float[] LowPassFilter(float[] input, int sampleRate, double cutoffHz)

        public static float[] EnvelopeFollower(float[] input, int sampleRate)

        {

            float[] output = new float[input.Length];

            float attack = 0.01f, release = 0.1f;

            float env = 0;

            for (int i = 0; i < input.Length; i++)

            {

                float val = Math.Abs(input[i]);

                float coeff = val > env ? attack : release;

                env += coeff * (val - env);

                output[i] = env;

            }

            return output;

        }// public static float[] EnvelopeFollower(float[] input, int sampleRate)

        public static float[] Downsample(float[] input, int originalRate, int newRate)

        {

            int factor = originalRate / newRate;

            if (factor <= 1) return input;

            return input.Where((x, i) => i % factor == 0).ToArray();

        }// public static float[] Downsample(float[] input, int originalRate, int newRate)

        public static void Convert_CLUBBED_DURATIONS_FrequencyReportToNoteFile(List<string> reportLines, string outputPath)

        {

            var notes = new List<SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES.PUBLIC_CLASS_TO_LOAD_FOR_PRELISTENS_SINGLE_ROWS_NOTE_DATA_DETAILS>();

            int? currentMidiNote = null;

            double accumulatedDuration = 0;

            double currentStartMs = 0;

            double currentFreq = 0;

            foreach (var line in reportLines.Skip(1)) // Skip header

            {

                var parts = line.Split(',');

                if (parts.Length < 3) continue;

                int startMs = int.Parse(parts[0]);

                int endMs = int.Parse(parts[1]);

                double freq = double.Parse(parts[2], CultureInfo.InvariantCulture);

               if (freq < 20 || freq > 2000) continue; // Skip unrealistic frequencies

                // int midiNote = (int)(69 + 12 * Math.Log(freq / 440.0, 2));

                int midiNote = GetNearestNoteMidiNumber_FromBand(freq);// (int)(69 + 12 * Math.Log(freq / 440.0, 2));

                midiNote = Math.Max(0, Math.Min(127, midiNote));

                double duration = endMs - startMs;

                if (currentMidiNote.HasValue && midiNote == currentMidiNote.Value)

                {

                    // Extend duration if same note

                    accumulatedDuration += duration;

                }

                else

                {

                    // Save previous note if exists

                    if (currentMidiNote.HasValue)

                    {

                        var note = new SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES.PUBLIC_CLASS_TO_LOAD_FOR_PRELISTENS_SINGLE_ROWS_NOTE_DATA_DETAILS

                        {

                            PUBLIC_STRING_THE_LYR_FOUND = "NA",

                            PUBLIC_STRING_THE_INDINOTE_FOUND = "",

                            INT_NOTE_NUMBER_TO_PLAY_0_TO_127 = currentMidiNote.Value,

                            DOUBLE_MILLISECOND_DURATION_FOR_THE_NOTE_TO_PLAY = accumulatedDuration,

                            INT_CURRENT_NOTES_VELOCITY_0_TO_127 = 100,

                            INT_CURRENT_NOTES_PATCH_0_TO_127 = 73,

                            STRING_COMMA_SEPERATED_WITHIN_NOTES_PITCH_BENDS_PERCENTAGES_DURATIONS = "0,100",

                            STRING_COMMA_SEPERATED_WITHIN_NOTES_PITCH_BENDS_VALUES = "8192,8192",

                            PUBLIC_INT_CHANNEL_NUMBER_0_TO_15 = 3,

                            PUBLIC_INT_TRACK_NUMBER_0_TO_ANY_NUMBER = 3,

                            PUBLIC_DOUBLE____Column_PITCHBEND_JERKS_MILLIS_GAP = 0,

                            PUBLIC_INT___Column_JUERK_UP_PITCHBEND = 0,

                            PUBLIC_INT___Column_JERK_DOWNS_PITCH_BEND = 0,

                            PUBLIC_DOUBLE_NOTES_HERTZ_FOUND = currentFreq,

                            PUBIC_DOUBLE_ENFORCER_START_TIMES_MILLIS_FOR_DECORATIONS = currentStartMs,

                            PUBLIC_DOUBLE___Column___ENFORCED_START_MILLIS_FOR_PERCUSSIONS_NOTES = 0,

                            Column___ENFORCED_START_MILLIS_FOR_PUREMELODY_NOTES = currentStartMs,

                            Column___REFERENCE_CUMULATIVE_START_MILLIS_FOR_CURRENT_NOTES = currentStartMs,

                            PUBLIC_INT___Column___NOTE_WISE_PITHBENDS_RANGE_2X2_SEMITONES_DEFAULT_TO_10X2_20 = 6,

                            PUBLIC_INT___Column_NOTES_WISE_PAN_0_LEFT_TO_127_RIGHT = 64

                        };

                        notes.Add(note);

                    }

                    // Start new note

                    currentMidiNote = midiNote;

                    currentFreq = freq;

                    accumulatedDuration = duration;

                    currentStartMs = startMs;

                }

            }

            string indinotes_names_found = "";

            indinotes_names_found

            = SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES

            .PUBLIC_STATIC_CLASS_TO_PRELISTEN_HANDLING

            .PUBLIC_STATIC_STRING_GET_INDINOTESNAME_ONLY_LEFT_SIDES___FIRST_OCCURANCES___from_____PUBLIC_STATIC_STRING_ARRAY_FOR_36_NOTES___50_X_3____FOR_GIVENS_MIDSNOTESNUMBER

            (currentMidiNote.Value);

            // Final note flush

            if (currentMidiNote.HasValue && accumulatedDuration > 0)

            {

                var note = new SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES.PUBLIC_CLASS_TO_LOAD_FOR_PRELISTENS_SINGLE_ROWS_NOTE_DATA_DETAILS

                {

                    PUBLIC_STRING_THE_LYR_FOUND = "NA",

                    PUBLIC_STRING_THE_INDINOTE_FOUND = indinotes_names_found,

                    INT_NOTE_NUMBER_TO_PLAY_0_TO_127 = currentMidiNote.Value,

                    DOUBLE_MILLISECOND_DURATION_FOR_THE_NOTE_TO_PLAY = accumulatedDuration,

                    INT_CURRENT_NOTES_VELOCITY_0_TO_127 = 100,

                    INT_CURRENT_NOTES_PATCH_0_TO_127 = 73,

                    STRING_COMMA_SEPERATED_WITHIN_NOTES_PITCH_BENDS_PERCENTAGES_DURATIONS = "0,100",

                    STRING_COMMA_SEPERATED_WITHIN_NOTES_PITCH_BENDS_VALUES = "8192,8192",

                    PUBLIC_INT_CHANNEL_NUMBER_0_TO_15 = 3,

                    PUBLIC_INT_TRACK_NUMBER_0_TO_ANY_NUMBER = 3,

                    PUBLIC_DOUBLE____Column_PITCHBEND_JERKS_MILLIS_GAP = 0,

                    PUBLIC_INT___Column_JUERK_UP_PITCHBEND = 0,

                    PUBLIC_INT___Column_JERK_DOWNS_PITCH_BEND = 0,

                    PUBLIC_DOUBLE_NOTES_HERTZ_FOUND = currentFreq,

                    PUBIC_DOUBLE_ENFORCER_START_TIMES_MILLIS_FOR_DECORATIONS = currentStartMs,

                    PUBLIC_DOUBLE___Column___ENFORCED_START_MILLIS_FOR_PERCUSSIONS_NOTES = 0,

                    Column___ENFORCED_START_MILLIS_FOR_PUREMELODY_NOTES = currentStartMs,

                    Column___REFERENCE_CUMULATIVE_START_MILLIS_FOR_CURRENT_NOTES = currentStartMs,

                    PUBLIC_INT___Column___NOTE_WISE_PITHBENDS_RANGE_2X2_SEMITONES_DEFAULT_TO_10X2_20 = 6,

                    PUBLIC_INT___Column_NOTES_WISE_PAN_0_LEFT_TO_127_RIGHT = 64

                };

                notes.Add(note);

            }

            SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES

                .

                RagaPaltas_OddEvenConcatenator

                .SaveNotesToFile(outputPath, notes);

        }////public static void Convert_CLUBBED_DURATIONS_FrequencyReportToNoteFile(List<string> reportLines, string outputPath)

        //////public static void Convert_CLUBBED_DURATIONS_FrequencyReportToNoteFile(List<string> reportLines, string outputPath)

        //////{

        //////    var notes = new List<SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES.PUBLIC_CLASS_TO_LOAD_FOR_PRELISTENS_SINGLE_ROWS_NOTE_DATA_DETAILS>();

        //////    foreach (var line in reportLines.Skip(1)) // skip header

        //////    {

        //////        var parts = line.Split(',');

        //////        if (parts.Length < 3) continue;

        //////        int startMs = int.Parse(parts[0]);

        //////        int endMs = int.Parse(parts[1]);

        //////        double freq = double.Parse(parts[2], CultureInfo.InvariantCulture);

        //////        if (freq < 20 || freq > 2000) continue; // Skip unrealistic frequencies

        //////        int midiNote = (int)(69 + 12 * Math.Log(freq / 440.0, 2));

        //////        midiNote = Math.Max(0, Math.Min(127, midiNote));

        //////        double duration = endMs - startMs;

        //////        var note = new SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES.PUBLIC_CLASS_TO_LOAD_FOR_PRELISTENS_SINGLE_ROWS_NOTE_DATA_DETAILS

        //////        {

        //////            PUBLIC_STRING_THE_LYR_FOUND = "NA",

        //////            PUBLIC_STRING_THE_INDINOTE_FOUND = "",

        //////            INT_NOTE_NUMBER_TO_PLAY_0_TO_127 = midiNote,

        //////            DOUBLE_MILLISECOND_DURATION_FOR_THE_NOTE_TO_PLAY = duration,

        //////            INT_CURRENT_NOTES_VELOCITY_0_TO_127 = 100,

        //////            INT_CURRENT_NOTES_PATCH_0_TO_127 = 73, // flute

        //////            STRING_COMMA_SEPERATED_WITHIN_NOTES_PITCH_BENDS_PERCENTAGES_DURATIONS = "0,100",

        //////            STRING_COMMA_SEPERATED_WITHIN_NOTES_PITCH_BENDS_VALUES = "8192,8192",

        //////            PUBLIC_INT_CHANNEL_NUMBER_0_TO_15 = 3,

        //////            PUBLIC_INT_TRACK_NUMBER_0_TO_ANY_NUMBER = 3,

        //////            PUBLIC_DOUBLE____Column_PITCHBEND_JERKS_MILLIS_GAP = 0,

        //////            PUBLIC_INT___Column_JUERK_UP_PITCHBEND = 0,

        //////            PUBLIC_INT___Column_JERK_DOWNS_PITCH_BEND = 0,

        //////            PUBLIC_DOUBLE_NOTES_HERTZ_FOUND = freq,

        //////            PUBIC_DOUBLE_ENFORCER_START_TIMES_MILLIS_FOR_DECORATIONS = startMs,

        //////            PUBLIC_DOUBLE___Column___ENFORCED_START_MILLIS_FOR_PERCUSSIONS_NOTES = 0,

        //////            Column___ENFORCED_START_MILLIS_FOR_PUREMELODY_NOTES = startMs,

        //////            Column___REFERENCE_CUMULATIVE_START_MILLIS_FOR_CURRENT_NOTES = startMs,

        //////            PUBLIC_INT___Column___NOTE_WISE_PITHBENDS_RANGE_2X2_SEMITONES_DEFAULT_TO_10X2_20 = 6,

        //////            PUBLIC_INT___Column_NOTES_WISE_PAN_0_LEFT_TO_127_RIGHT = 64

        //////        };

        //////        //freq.ToString("F1") + "Hz",

        //////        //"to_fill"

        //////        notes.Add(note);

        //////    }

        //////    SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES.RagaPaltas_OddEvenConcatenator.SaveNotesToFile(outputPath, notes);

        //////}//public static void Convert_CLUBBED_DURATIONS_FrequencyReportToNoteFile(List<string> reportLines, string outputPath)

        public static void ConvertFrequencyReportToNoteFile(List<string> reportLines, string outputPath)

        {

            StringBuilder ___the_stringbuilder_for_swarlipiswith_millis = new StringBuilder();

            ___the_stringbuilder_for_swarlipiswith_millis.Clear();

            var notes = new List<SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES.PUBLIC_CLASS_TO_LOAD_FOR_PRELISTENS_SINGLE_ROWS_NOTE_DATA_DETAILS>();

                ___the_stringbuilder_for_swarlipiswith_millis

                .AppendLine

                (

                "FREQ,NOTES_NUMBER,INDINOTES_LEFT,INDINOTES_RIGHT,DURATIONS_MILLIS"

                );

            foreach (var line in reportLines.Skip(1)) // skip header

            {

                var parts = line.Split(',');

                if (parts.Length < 3) continue;

                int startMs = int.Parse(parts[0]);

                int endMs = int.Parse(parts[1]);

                double freq = double.Parse(parts[2], CultureInfo.InvariantCulture);

                if (freq < 20 || freq > 2000) continue; // Skip unrealistic frequencies

                //  int midiNote = (int)(69 + 12 * Math.Log(freq / 440.0, 2));

                // int midiNote = (int)(69 + 12 * Math.Log(freq / 440.0, 2));

                int midiNote = GetNearestNoteMidiNumber_FromBand(freq);// (int)(69 + 12 * Math.Log(freq / 440.0, 2));

                midiNote = Math.Max(0, Math.Min(127, midiNote));

                double duration = endMs - startMs;

                string indinotes_names_found_LEFT_SIDES = "";

                indinotes_names_found_LEFT_SIDES

                =

                SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES

                .PUBLIC_STATIC_CLASS_TO_PRELISTEN_HANDLING

                .PUBLIC_STATIC_STRING_GET_INDINOTESNAME_ONLY_LEFT_SIDES___FIRST_OCCURANCES___from_____PUBLIC_STATIC_STRING_ARRAY_FOR_36_NOTES___50_X_3____FOR_GIVENS_MIDSNOTESNUMBER

                (midiNote);

                string indinotes_names_found_RIGHT_SIDES = "";

                indinotes_names_found_RIGHT_SIDES

                =

                SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES

                .PUBLIC_STATIC_CLASS_TO_PRELISTEN_HANDLING

                .PUBLIC_STATIC_STRING_GET_INDINOTESNAME_ONLY_RIGHT_SIDES_SIDES___FIRST_OCCURANCES___from_____PUBLIC_STATIC_STRING_ARRAY_FOR_36_NOTES___50_X_3____FOR_GIVENS_MIDSNOTESNUMBER

                (midiNote);

              if(  indinotes_names_found_LEFT_SIDES.TrimEnd().TrimStart().Trim().Length==0   && indinotes_names_found_RIGHT_SIDES.TrimEnd().TrimStart().Trim().Length == 0)

                {

                    indinotes_names_found_LEFT_SIDES

                        =

                    public_static_string_get_note_NAMES_from_frequency_Hertz

                        (freq);

                    indinotes_names_found_LEFT_SIDES = indinotes_names_found_LEFT_SIDES.Replace("/", "   /   ");

                }// if(  indinotes_names_found_LEFT_SIDES.TrimEnd().TrimStart().Trim().Length==0   && indinotes_names_found_RIGHT_SIDES.TrimEnd().TrimStart().Trim().Length == 0)

                 //////////////////////////////////////////////////////////////////////////////////////////

                ___the_stringbuilder_for_swarlipiswith_millis

                        .AppendLine

                        (

                        //  "FREQ,NOTES_NUMBER,INDINOTES,DURATIONS_MILLIS"

                        freq

                        +","+

                        midiNote

                        + "," +

                        indinotes_names_found_LEFT_SIDES

                        + "," +

                        indinotes_names_found_RIGHT_SIDES

                        + "," +

                        duration

                        );

                        //////////////////////////////////////////////////////////////////////////////////////////

                //////___the_stringbuilder_for_swarlipiswith_millis

                //////    .AppendLine

                //////    (

                //////    "FREQ,NOTES_NUMBER,INDINOTES,DURATIONS_MILLIS"

                //////    );

                var note = new SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES.PUBLIC_CLASS_TO_LOAD_FOR_PRELISTENS_SINGLE_ROWS_NOTE_DATA_DETAILS

                {

                    PUBLIC_STRING_THE_LYR_FOUND = "NA",

                    PUBLIC_STRING_THE_INDINOTE_FOUND = indinotes_names_found_RIGHT_SIDES,

                    INT_NOTE_NUMBER_TO_PLAY_0_TO_127 = midiNote,

                    DOUBLE_MILLISECOND_DURATION_FOR_THE_NOTE_TO_PLAY = duration,

                    INT_CURRENT_NOTES_VELOCITY_0_TO_127 = 100,

                    INT_CURRENT_NOTES_PATCH_0_TO_127 = 73, // flute

                    STRING_COMMA_SEPERATED_WITHIN_NOTES_PITCH_BENDS_PERCENTAGES_DURATIONS = "0,100",

                    STRING_COMMA_SEPERATED_WITHIN_NOTES_PITCH_BENDS_VALUES = "8192,8192",

                    PUBLIC_INT_CHANNEL_NUMBER_0_TO_15 = 3,

                    PUBLIC_INT_TRACK_NUMBER_0_TO_ANY_NUMBER = 3,

                    PUBLIC_DOUBLE____Column_PITCHBEND_JERKS_MILLIS_GAP = 0,

                    PUBLIC_INT___Column_JUERK_UP_PITCHBEND = 0,

                    PUBLIC_INT___Column_JERK_DOWNS_PITCH_BEND = 0,

                    PUBLIC_DOUBLE_NOTES_HERTZ_FOUND= freq,

                    PUBIC_DOUBLE_ENFORCER_START_TIMES_MILLIS_FOR_DECORATIONS = startMs,

                    PUBLIC_DOUBLE___Column___ENFORCED_START_MILLIS_FOR_PERCUSSIONS_NOTES = 0,

                    Column___ENFORCED_START_MILLIS_FOR_PUREMELODY_NOTES = startMs,

                    Column___REFERENCE_CUMULATIVE_START_MILLIS_FOR_CURRENT_NOTES = startMs,

                    PUBLIC_INT___Column___NOTE_WISE_PITHBENDS_RANGE_2X2_SEMITONES_DEFAULT_TO_10X2_20 = 6,

                    PUBLIC_INT___Column_NOTES_WISE_PAN_0_LEFT_TO_127_RIGHT = 64

                };

                //freq.ToString("F1") + "Hz",

                //"to_fill"

                notes.Add(note);

            }

            SAANS_ROUGH_BEATS_COMPOSER_FOR_ON_SELECTIONS_LOOP_CYCLES

                .RagaPaltas_OddEvenConcatenator

                .SaveNotesToFile(outputPath, notes);

            System.IO.File.WriteAllText

                (

                outputPath+"_(with_customs_thresholds)saans_swaralipis.txt"

                ,

                ___the_stringbuilder_for_swarlipiswith_millis.ToString()

                );

            System.Diagnostics.Process.Start("notepad.exe", outputPath + "_(with_customs_thresholds)saans_swaralipis.txt");

        }//public static void ConvertFrequencyReportToNoteFile(List<string> reportLines, string outputPath)

        public static List<string> Get100msFrequencyReport(float[] samples, int sampleRate,double ___the_milliseconds_value)

        {

            //  int windowSize = (int)(0.100 * sampleRate); // 100ms window

            int windowSize = (int)( (___the_milliseconds_value/1000) * sampleRate); // 100ms window

            int totalWindows = samples.Length / windowSize;

            List<string> reportLines = new List<string>();

            reportLines.Add("Start_ms,End_ms,ZeroCrossingFrequencyHz");

            for (int w = 0; w < totalWindows; w++)

            {

                int startIndex = w * windowSize;

                int endIndex = Math.Min(startIndex + windowSize, samples.Length);

                int zeroCrossings = 0;

                for (int i = startIndex + 1; i < endIndex; i++)

                {

                    if ((samples[i - 1] >= 0 && samples[i] < 0) || (samples[i - 1] < 0 && samples[i] >= 0))

                        zeroCrossings++;

                }//for (int i = startIndex + 1; i < endIndex; i++)

                // ZCR gives half the frequency (because 1 full cycle has 2 zero crossings)

                float durationSec = (endIndex - startIndex) / (float)sampleRate;

                float estimatedFreq = zeroCrossings / (2 * durationSec);

                int startMs = (int)(startIndex * 1000.0 / sampleRate);

                int endMs = (int)(endIndex * 1000.0 / sampleRate);

                reportLines.Add($"{startMs},{endMs},{estimatedFreq:F2}");

            }// for (int w = 0; w < totalWindows; w++)

            return reportLines;

        }// public static List<string> Get100msFrequencyReport(float[] samples, int sampleRate)

        public static List<string> Get20msFrequencyReport(float[] samples, int sampleRate)

        {

            int windowSize = (int)(0.020 * sampleRate); // 30ms window

            int totalWindows = samples.Length / windowSize;

            List<string> reportLines = new List<string>();

            reportLines.Add("Start_ms,End_ms,ZeroCrossingFrequencyHz");

            for (int w = 0; w < totalWindows; w++)

            {

                int startIndex = w * windowSize;

                int endIndex = Math.Min(startIndex + windowSize, samples.Length);

                int zeroCrossings = 0;

                for (int i = startIndex + 1; i < endIndex; i++)

                {

                    if ((samples[i - 1] >= 0 && samples[i] < 0) || (samples[i - 1] < 0 && samples[i] >= 0))

                        zeroCrossings++;

                }

                // ZCR gives half the frequency (because 1 full cycle has 2 zero crossings)

                float durationSec = (endIndex - startIndex) / (float)sampleRate;

                float estimatedFreq = zeroCrossings / (2 * durationSec);

                int startMs = (int)(startIndex * 1000.0 / sampleRate);

                int endMs = (int)(endIndex * 1000.0 / sampleRate);

                reportLines.Add($"{startMs},{endMs},{estimatedFreq:F2}");

            }

            return reportLines;

        }// public static List<string> Get30msFrequencyReport(float[] samples, int sampleRate)

        public static List<string> Get30msFrequencyReport(float[] samples, int sampleRate)

        {

            int windowSize = (int)(0.030 * sampleRate); // 30ms window

            int totalWindows = samples.Length / windowSize;

            List<string> reportLines = new List<string>();

            reportLines.Add("Start_ms,End_ms,ZeroCrossingFrequencyHz");

            for (int w = 0; w < totalWindows; w++)

            {

                int startIndex = w * windowSize;

                int endIndex = Math.Min(startIndex + windowSize, samples.Length);

                int zeroCrossings = 0;

                for (int i = startIndex + 1; i < endIndex; i++)

                {

                    if ((samples[i - 1] >= 0 && samples[i] < 0) || (samples[i - 1] < 0 && samples[i] >= 0))

                        zeroCrossings++;

                }

                // ZCR gives half the frequency (because 1 full cycle has 2 zero crossings)

                float durationSec = (endIndex - startIndex) / (float)sampleRate;

                float estimatedFreq = zeroCrossings / (2 * durationSec);

                int startMs = (int)(startIndex * 1000.0 / sampleRate);

                int endMs = (int)(endIndex * 1000.0 / sampleRate);

                reportLines.Add($"{startMs},{endMs},{estimatedFreq:F2}");

            }

            return reportLines;

        }// public static List<string> Get30msFrequencyReport(float[] samples, int sampleRate)

        public static List<double> DetectBeats(float[] samples, int sampleRate, double thresholdPercent = 0.65)

        {

            // Step 1: Convert to mono — assuming it's already mono

            // Step 2: Low-pass filter below 50Hz

            float[] bass = LowPassFilter(samples, sampleRate, 50.0);

            // Step 3: Envelope follower (simple absolute + smoothing)

            float[] envelope = EnvelopeFollower(bass, sampleRate);

            // Step 4: Downsample to 1000 Hz

            int downsampleRate = 1000;

            float[] downsampled = Downsample(envelope, sampleRate, downsampleRate);

            // Step 5: Find dynamic threshold

            float peak = downsampled.Max();

            float threshold = (float)(thresholdPercent * peak);

            // Step 6: Detect beats at threshold crossings

            List<double> beatTimesMs = new List<double>();

            bool flag = true;

            for (int i = 0; i < downsampled.Length; i++)

            {

                float val = downsampled[i];

                if (flag && val > threshold)

                {

                    beatTimesMs.Add(i); // at 1ms steps

                    flag = false;

                }

                if (val < threshold)

                    flag = true;

            }//for (int i = 0; i < downsampled.Length; i++)

            return beatTimesMs;

        }// public static List<double> DetectBeats(float[] samples, int sampleRate, double thresholdPercent = 0.65)

        //////public static void CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        //////{

        //////    //////short[] sinSamples;

        //////    //////short[] mirroredSamples;

        //////    float[] sinSamples;

        //////    float[] mirroredSamples;

        //////    string path = Path.ChangeExtension(wavPath, "__crest_trough_counter_as_y_scaling_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATA.dxf");

        //////    using (StreamWriter sw = new StreamWriter(path))

        //////    {

        //////        sw.WriteLine("0\nSECTION\n2\nENTITIES");

        //////        float w = (float)CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS.PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS;

        //////        float h = (float)(CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS.PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS * 10000f);

        //////        float left = 0f, right = w, top = h, bottom = -h;

        //////        int color = 6;

        //////        float center_x = w / 2;

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{top:F3}\n31\n0");

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{bottom:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0");

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{left:F3}\n21\n{bottom:F3}\n31\n0");

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{right:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0");

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{left:F3}\n20\n0.000\n30\n0\n11\n{right:F3}\n21\n0.000\n31\n0");

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{center_x:F3}\n20\n{bottom:F3}\n30\n0\n11\n{center_x:F3}\n21\n{top:F3}\n31\n0");

        //////        int totalSamples = crestTroughs.Max(ct => ct.EndSampleIndex + 1);

        //////        int sampleRate = 8000;

        //////        sinSamples = new float[totalSamples]; ;// new short[totalSamples];

        //////        mirroredSamples = new float[totalSamples]; ;// new short[totalSamples];

        //////        for (int i = 0; i < crestTroughs.Count; i++)

        //////        {

        //////            CrestTroughObject ct = crestTroughs[i];

        //////            float _saans_x_width_scales_factor = (float)(w / ct.WidthMicroseconds);

        //////            float _saans_y_height_scales_factor = (float)(h / ct.HeightAmplitude);

        //////            float cx = (float)(_saans_x_width_scales_factor * ct.CG.X);

        //////            ct.PUBLIC_DOUBLE_NON_DUPLICATE_CG_X_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS = cx;

        //////            float cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

        //////            float preserved_cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

        //////            int counter = (int)ct.OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA;

        //////            float factor = (float)counter / crestTroughs.Count;

        //////            cy *= (factor * _saans_y_height_scales_factor);

        //////            ct.PUBLIC_DOUBLE_NON_DUPLICATE_CG_Y_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_HEIGHTS_OF_ALL_AABB_OBJECTS = preserved_cy * _saans_y_height_scales_factor;

        //////            ct.LIST_OF_ALL_RECONSTRUCTED_SIN_WAVES_SAMPLES_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Clear();

        //////            ct.LIST_OF_ALL_RECONSTRUCTED_SAMPLES_WHERE_AMPLITUDES_ARE_MIRROR_IMAGE_ABOUT_VERTICAL_LINE_WITHIN_CG_X_OF_CURRENT_CREST_TROUGH_AABB_SAMPLES_RANGE___FLOATING_VALUES_OF_ACTUAL_SAMPLES_AMPLITUDES_SWAPPED_AS_MIRROR_IMAGE_SAMPLE_INDEX___WE_WILL_RECONSTRUCT_WHOLE_WAVE_WITH_SUCH_MIRRORED_SAMPLES.Clear();

        //////            int len = ct.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Count;

        //////            float[] normalizedSin = new float[len];

        //////            float sumSin = 0f;

        //////            for (int k = 0; k < len; k++)

        //////            {

        //////                normalizedSin[k] = (float)Math.Sin(2 * Math.PI * k / len);

        //////                sumSin += normalizedSin[k];

        //////            }//for (int k = 0; k < len; k++)

        //////            float avgSin = sumSin / len;

        //////            float desiredAvgY = ct.CG.Y;

        //////            float amplitude = ct.MaxAmplitude;

        //////            float offset = desiredAvgY - (avgSin * amplitude);

        //////            for (int k = 0; k < len; k++)

        //////            {

        //////                float val = amplitude * normalizedSin[k] + offset;

        //////                ct.LIST_OF_ALL_RECONSTRUCTED_SIN_WAVES_SAMPLES_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Add(val);

        //////                float mirroredVal = ct.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[len - 1 - k];

        //////                ct.LIST_OF_ALL_RECONSTRUCTED_SAMPLES_WHERE_AMPLITUDES_ARE_MIRROR_IMAGE_ABOUT_VERTICAL_LINE_WITHIN_CG_X_OF_CURRENT_CREST_TROUGH_AABB_SAMPLES_RANGE___FLOATING_VALUES_OF_ACTUAL_SAMPLES_AMPLITUDES_SWAPPED_AS_MIRROR_IMAGE_SAMPLE_INDEX___WE_WILL_RECONSTRUCT_WHOLE_WAVE_WITH_SUCH_MIRRORED_SAMPLES.Add(mirroredVal);

        //////                int index = ct.StartSampleIndex + k;

        //////                if (index >= 0 && index < totalSamples)

        //////                {

        //////                    //////sinSamples[index] = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, val));

        //////                    //////mirroredSamples[index] = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, mirroredVal));

        //////                    ///

        //////                    sinSamples[index] = (float)Math.Max(float.MinValue, Math.Min(float.MaxValue, val));

        //////                    mirroredSamples[index] = (float)Math.Max(float.MinValue, Math.Min(float.MaxValue, mirroredVal));

        //////                }

        //////            }

        //////            color = ct.IsCrest ? 5 : 1;

        //////            float radius = Math.Max(1f, (ct.EndSampleIndex - ct.StartSampleIndex) / 10f);

        //////            sw.WriteLine($"0\nCIRCLE\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}");

        //////            sw.WriteLine($"0\nTEXT\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}\n1\n#i={i}___{factor}");

        //////        }

        //////        sw.WriteLine("0\nENDSEC\n0\nEOF");

        //////    }

        //////    string folder = Path.GetDirectoryName(wavPath);

        //////    string fileNameWithoutExt = Path.GetFileNameWithoutExtension(wavPath);

        //////    //////WriteMono16BitPCM_WAV(Path.Combine(folder, fileNameWithoutExt + "__RECONSTRUCTED_FROM_SINE_AABB_ONLY.wav"), sinSamples, 8000);

        //////    //////WriteMono16BitPCM_WAV(Path.Combine(folder, fileNameWithoutExt + "__RECONSTRUCTED_FROM_MIRRORED_AABB_ONLY.wav"), mirroredSamples, 8000);

        //////    WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, fileNameWithoutExt + "__RECONSTRUCTED_FROM_SINE_AABB_ONLY.wav"), sinSamples, 8000);

        //////    WriteMono32BitFloatPCM_WAV_WithNormalization(Path.Combine(folder, fileNameWithoutExt + "__RECONSTRUCTED_FROM_MIRRORED_AABB_ONLY.wav"), mirroredSamples, 8000);

        //////}//public static void CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        //////public static void CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        //////{

        //////    short[] sinSamples = { };// new short[totalSamples];

        //////    short[] mirroredSamples = { };// new short[totalSamples];

        //////    string path = Path.ChangeExtension(wavPath, "__crest_trough_counter_as_y_scaling_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATA.dxf");

        //////    using (StreamWriter sw = new StreamWriter(path))

        //////    {

        //////        sw.WriteLine("0\nSECTION\n2\nENTITIES");

        //////        float w = (float)CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS.PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS;

        //////        float h = (float)(CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS.PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS * 10000f);

        //////        float left = 0f, right = w, top = h, bottom = -h;

        //////        int color = 6;

        //////        float center_x = w / 2;

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{top:F3}\n31\n0");

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{bottom:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0");

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{left:F3}\n21\n{bottom:F3}\n31\n0");

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{right:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0");

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{left:F3}\n20\n0.000\n30\n0\n11\n{right:F3}\n21\n0.000\n31\n0");

        //////        sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{center_x:F3}\n20\n{bottom:F3}\n30\n0\n11\n{center_x:F3}\n21\n{top:F3}\n31\n0");

        //////        int totalSamples = crestTroughs.Max(ct => ct.EndSampleIndex + 1);

        //////        int sampleRate = 8000;

        //////      //  short[] 

        //////            sinSamples = new short[totalSamples];

        //////       // short[]

        //////            mirroredSamples = new short[totalSamples];

        //////        for (int i = 0; i < crestTroughs.Count; i++)

        //////        {

        //////            CrestTroughObject ct = crestTroughs[i];

        //////            float _saans_x_width_scales_factor = (float)(w / ct.WidthMicroseconds);

        //////            float _saans_y_height_scales_factor = (float)(h / ct.HeightAmplitude);

        //////            float cx = (float)(_saans_x_width_scales_factor * ct.CG.X);

        //////            ct.PUBLIC_DOUBLE_NON_DUPLICATE_CG_X_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS = cx;

        //////            float cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

        //////            float preserved_cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

        //////            int counter = (int)ct.OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA;

        //////            float factor = (float)counter / crestTroughs.Count;

        //////            cy *= (factor * _saans_y_height_scales_factor);

        //////            ct.PUBLIC_DOUBLE_NON_DUPLICATE_CG_Y_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_HEIGHTS_OF_ALL_AABB_OBJECTS = preserved_cy * _saans_y_height_scales_factor;

        //////            ct.LIST_OF_ALL_RECONSTRUCTED_SIN_WAVES_SAMPLES_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Clear();

        //////            ct.LIST_OF_ALL_RECONSTRUCTED_SAMPLES_WHERE_AMPLITUDES_ARE_MIRROR_IMAGE_ABOUT_VERTICAL_LINE_WITHIN_CG_X_OF_CURRENT_CREST_TROUGH_AABB_SAMPLES_RANGE___FLOATING_VALUES_OF_ACTUAL_SAMPLES_AMPLITUDES_SWAPPED_AS_MIRROR_IMAGE_SAMPLE_INDEX___WE_WILL_RECONSTRUCT_WHOLE_WAVE_WITH_SUCH_MIRRORED_SAMPLES.Clear();

        //////            int len = ct.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Count;

        //////            for (int k = 0; k < len; k++)

        //////            {

        //////                float amp = ct.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[k];

        //////                float sinValue = (float)(Math.Sin(2 * Math.PI * k / len) * ct.MaxAmplitude);

        //////                ct.LIST_OF_ALL_RECONSTRUCTED_SIN_WAVES_SAMPLES_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES.Add(sinValue);

        //////                ct.LIST_OF_ALL_RECONSTRUCTED_SAMPLES_WHERE_AMPLITUDES_ARE_MIRROR_IMAGE_ABOUT_VERTICAL_LINE_WITHIN_CG_X_OF_CURRENT_CREST_TROUGH_AABB_SAMPLES_RANGE___FLOATING_VALUES_OF_ACTUAL_SAMPLES_AMPLITUDES_SWAPPED_AS_MIRROR_IMAGE_SAMPLE_INDEX___WE_WILL_RECONSTRUCT_WHOLE_WAVE_WITH_SUCH_MIRRORED_SAMPLES.Add(

        //////                    ct.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[len - 1 - k]);

        //////                int index = ct.StartSampleIndex + k;

        //////                if (index >= 0 && index < totalSamples)

        //////                {

        //////                    sinSamples[index] = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, sinValue));

        //////                    mirroredSamples[index] = (short)Math.Max(short.MinValue, Math.Min(short.MaxValue, ct.LIST_OF_ALL_ACTUAL_FLOATING_VALUES_OF_SAMPLES_AMPLITUDES[len - 1 - k]));

        //////                }

        //////            }

        //////            color = ct.IsCrest ? 5 : 1;

        //////            float radius = Math.Max(1f, (ct.EndSampleIndex - ct.StartSampleIndex) / 10f);

        //////            sw.WriteLine($"0\nCIRCLE\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}");

        //////            sw.WriteLine($"0\nTEXT\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}\n1\n#i={i}___{factor}");

        //////        }

        //////        sw.WriteLine("0\nENDSEC\n0\nEOF");

        //////    }

        //////    string folder = Path.GetDirectoryName(wavPath);

        //////    string fileNameWithoutExt = Path.GetFileNameWithoutExtension(wavPath);

        //////    WriteMono16BitPCM_WAV(Path.Combine(folder, fileNameWithoutExt + "__RECONSTRUCTED_FROM_SINE_AABB_ONLY.wav"), sinSamples, 8000);

        //////    WriteMono16BitPCM_WAV(Path.Combine(folder, fileNameWithoutExt + "__RECONSTRUCTED_FROM_MIRRORED_AABB_ONLY.wav"), mirroredSamples, 8000);

        //////}// public static void CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        public static void DISCARDING___IT_WAS_WORKING_OK___NOW_WE_GENERATE_TWO_WAVES_ALSO______________________CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        {

            string path = Path.ChangeExtension(wavPath, "__crest_trough_counter_as_y_scaling_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATA.dxf");

            using (StreamWriter sw = new StreamWriter(path))

            {

                sw.WriteLine("0\nSECTION\n2\nENTITIES");

                float w =

                   (float)CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                        .PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS;

                //ct.BoundingBox.Width;

               // float h =

                //  10000f;

                float h =

                 //  10000f;

                 (float)

            (CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

            .PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS)

            *10000f

            ;

                //  ct.BoundingBox.Height;

                float left = 0f;// cx - w / 2;

                float right = w;//  cx + w / 2;

                float top = h;// ct.IsCrest ? 0 + h : 0;

                float bottom = -h;// ct.IsCrest ? 0 : 0 - h;

                int color = 6;// ct.IsCrest ? 5 : 1;

                float center_x = w / 2;// 0;

                //////// Bounding box edges (4 lines)

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{top:F3}\n31\n0");     // top

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{bottom:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0"); // bottom

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{left:F3}\n21\n{bottom:F3}\n31\n0");     // left

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{right:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0");   // right

                //////// Axes lines

                color = 1;//

                sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{left:F3}\n20\n0.000\n30\n0\n11\n{right:F3}\n21\n0.000\n31\n0");   // X axis

                                                                                                                            //  sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{cx:F3}\n20\n{bottom:F3}\n30\n0\n11\n{cx:F3}\n21\n{top:F3}\n31\n0"); // Y axis

                sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{center_x:F3}\n20\n{bottom:F3}\n30\n0\n11\n{center_x:F3}\n21\n{top:F3}\n31\n0"); // Y axis

                /// crestTroughs.ToArray<CrestTroughObject>().

                /// 

                //done in open and scan wav files

                ////////CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS.

                //////public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_CRESTS = +600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_CRESTS = -600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_TROUGHS = +600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_TROUGHS = -600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS = +600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS = -600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUND_IN_CRESTS = -600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUND_IN_TROUGHS = -600000000;

                //////public static double PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS = -600000000;

                //////CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS

                //////.PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                //////=

                //////Math.Min

                //////(

                //////CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS

                //////.PUBLIC_STATIC_DOUBLE_MIN_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                //////,

                //////(double)current.WidthMicroseconds

                //////);

                //////CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS

                //////.PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                //////=

                //////Math.Max

                //////(

                //////CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS

                //////.PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                //////,

                //////(double)current.WidthMicroseconds

                //////);

                for (int i = 0; i < crestTroughs.Count; i++)

                {

                    float _saans_x_width_scales_factor = 1.0f;

                    float _saans_y_height_scales_factor = 1.0f;

                    // var ct = crestTroughs[i];

                    CrestTroughObject ct = crestTroughs[i];

                    _saans_x_width_scales_factor

                        =

                        (float)

                     ((float)CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                        .PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS

                        /

                        (ct.WidthMicroseconds));

                    //   Console.WriteLine("to calculate cx  data  ======  max mikros found = " + CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS.PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS + " ct.WidthMicroseconds = " + ct.WidthMicroseconds + " _saans_x_width_scales_factor= " + _saans_x_width_scales_factor);

                    _saans_y_height_scales_factor

                        =

                        (float)

                     ((float)CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                        .PUBLIC_STATIC_DOUBLE_MAX_ABS_AMPLITUDES_FOUND_10000_TIMES_FOUNDOVERALL_IN_CRESTS_AND_TROUGHS

                        /

                        (ct.HeightAmplitude));

                    //   Console.WriteLine("to calculate cx  data  ======  max mikros found = " + CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS.PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS + " ct.WidthMicroseconds = " + ct.WidthMicroseconds + " _saans_x_width_scales_factor= " + _saans_x_width_scales_factor);

                    float cx = ct.CG.X;

                    cx

                   = (float)((_saans_x_width_scales_factor) * cx);

                    // this is important to generate ranked wav files

                    crestTroughs.ElementAt<CrestTroughObject>(i)

                    .PUBLIC_DOUBLE_NON_DUPLICATE_CG_X_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_WIDH_OF_ALL_AABB_OBJECTS

                        = (double)cx;

                    // this is important to generate ranked wav files

                    float cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

                    float preserved_cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

                    int ___overallcresttroughcounter = (int)ct.OVERALL_AABB_COUNTER_EITHER_IT_IS_CREST_OR_IT_IS_TROUGH____COUNTER_TO_RECONSTRUCTION_THE_ACTUAL_QUEUE_STRUCTURE_FROM_THE_STACK_ANALYSIS_DATA;

                   float factor___overallcresttroughcounter=(float)(((float)___overallcresttroughcounter) /((float)(crestTroughs.Count)));

                     cy = cy * (factor___overallcresttroughcounter * _saans_y_height_scales_factor);

                    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                    crestTroughs.ElementAt<CrestTroughObject>(i)

                     .

                    PUBLIC_DOUBLE_NON_DUPLICATE_CG_Y_FOR_SAAN_STYLES_NORMALIZATION_DONE_ON_GLOBAL_MAX_HEIGHTS_OF_ALL_AABB_OBJECTS

                        = (double)preserved_cy * _saans_y_height_scales_factor;

                    //////float w = ct.BoundingBox.Width;

                    //////float h = ct.BoundingBox.Height;

                    //////float left = cx - w / 2;

                    //////float right = cx + w / 2;

                    //////float top = ct.IsCrest ? 0 + h : 0;

                    //////float bottom = ct.IsCrest ? 0 : 0 - h;

                    //////int color = ct.IsCrest ? 5 : 1;

                    color = ct.IsCrest ? 5 : 1;

                    // CG circle

                    float radius = Math.Max(1f, (ct.EndSampleIndex - ct.StartSampleIndex) / 10f);

                    sw.WriteLine($"0\nCIRCLE\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}");

                    // Label text

                    sw.WriteLine($"0\nTEXT\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}\n1\n#i={i}___{factor___overallcresttroughcounter}");

                }

                sw.WriteLine("0\nENDSEC\n0\nEOF");

            }

        }//public static void CALL_THIS_BEFORE_GENERATING___RANKED_WAV_FILES___ExportDxf_With_CREST_TROUGH_COUNTER_AS_Y_VALUES___SAAN_STYLES_SINGLE_OUTER_GRAPH_SAANS_NORMALIZED_SCALED_TO_MAX_WIDTH_CG_X_DATABoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        public static void ExportDxfWithBoxesAndText_UNSCALED_CG_LEFTSALIGNED_AABB_GRAPH_CG_SHOWS_VERTS_SPECTRAS(List<CrestTroughObject> crestTroughs, string wavPath)

        {

            string path = Path.ChangeExtension(wavPath, "_UNSCALED_CG_LEFTSALIGNED_AABB_GRAPH_CG_SHOWS_VERTS_SPECTRAS.dxf");

            using (StreamWriter sw = new StreamWriter(path))

            {

                sw.WriteLine("0\nSECTION\n2\nENTITIES");

                float w =

                   (float)CrestTroughAnalyzer___SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS_BITMAPS_DXF_CSV_REPORTS

                        .PUBLIC_STATIC_DOUBLE_MAX_WIDTH_MIKROSEC_FOUND_IN_OVERALL_IN_CRESTS_AND_TROUGHS;

                //ct.BoundingBox.Width;

                float h =

                    10000f;

                //  ct.BoundingBox.Height;

                float left = 0f;// cx - w / 2;

                float right = w;//  cx + w / 2;

                float top = h;// ct.IsCrest ? 0 + h : 0;

                float bottom = -h;// ct.IsCrest ? 0 : 0 - h;

                int color = 6;// ct.IsCrest ? 5 : 1;

                float center_x = w / 2;// 0;

                //////// Bounding box edges (4 lines)

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{top:F3}\n31\n0");     // top

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{bottom:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0"); // bottom

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{left:F3}\n21\n{bottom:F3}\n31\n0");     // left

                sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{right:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0");   // right

                //////// Axes lines

                color = 1;//

                sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{left:F3}\n20\n0.000\n30\n0\n11\n{right:F3}\n21\n0.000\n31\n0");   // X axis

                                                                                                                            //  sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{cx:F3}\n20\n{bottom:F3}\n30\n0\n11\n{cx:F3}\n21\n{top:F3}\n31\n0"); // Y axis

                sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{center_x:F3}\n20\n{bottom:F3}\n30\n0\n11\n{center_x:F3}\n21\n{top:F3}\n31\n0"); // Y axis

                for (int i = 0; i < crestTroughs.Count; i++)

                {

                    var ct = crestTroughs[i];

                    float cx = ct.CG.X;

                    float cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

                   // float

                        w = ct.BoundingBox.Width;

                  //  float

                        h = ct.BoundingBox.Height;

                   // float 

                        left = cx - w / 2;

                  //  float

                        right = cx + w / 2;

                   // float

                        top = ct.IsCrest ? 0 + h : 0;

                   // float

                        bottom = ct.IsCrest ? 0 : 0 - h;

                    top = top * (10000f);

                    bottom = bottom * (10000f);

                  //  int 

                        color = ct.IsCrest ? 5 : 1;

                    // Bounding box edges (4 lines)

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{top:F3}\n31\n0");     // top

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{bottom:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0"); // bottom

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{left:F3}\n21\n{bottom:F3}\n31\n0");     // left

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{right:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0");   // right

                    // Axes lines

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{left:F3}\n20\n0.000\n30\n0\n11\n{right:F3}\n21\n0.000\n31\n0");   // X axis

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{cx:F3}\n20\n{bottom:F3}\n30\n0\n11\n{cx:F3}\n21\n{top:F3}\n31\n0"); // Y axis

                    // CG circle

                    float radius = Math.Max(1f, (ct.EndSampleIndex - ct.StartSampleIndex) / 10f);

                    sw.WriteLine($"0\nCIRCLE\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}");

                    // Label text

                    sw.WriteLine($"0\nTEXT\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}\n1\n#{i}");

                }

                sw.WriteLine("0\nENDSEC\n0\nEOF");

            }

        }//public static void ExportDxfWithBoxesAndText_UNSCALED_CG_LEFTSALIGNED_AABB_GRAPH_CG_SHOWS_VERTS_SPECTRAS(List<CrestTroughObject> crestTroughs, string wavPath)

        public static void ExportDxfWithBoxesAndText___WITH_4_BOUNDARY_LINES_2_AXES_LINES_FOR_ALL_AABB_CREST_TROUGHT(List<CrestTroughObject> crestTroughs, string wavPath)

        {

            string path = Path.ChangeExtension(wavPath, "_GRAPH_CG_BOXES_AXES.dxf");

            using (StreamWriter sw = new StreamWriter(path))

            {

                sw.WriteLine("0\nSECTION\n2\nENTITIES");

                for (int i = 0; i < crestTroughs.Count; i++)

                {

                    var ct = crestTroughs[i];

                    float cx = ct.CG.X;

                    float cy = ct.IsCrest ? ct.CG.Y : -Math.Abs(ct.CG.Y);

                    float w = ct.BoundingBox.Width;

                    float h = ct.BoundingBox.Height;

                    float left = cx - w / 2;

                    float right = cx + w / 2;

                    float top = ct.IsCrest ? 0 + h : 0;

                    float bottom = ct.IsCrest ? 0 : 0 - h;

                    int color = ct.IsCrest ? 5 : 1;

                    // Bounding box edges (4 lines)

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{top:F3}\n31\n0");     // top

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{bottom:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0"); // bottom

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{left:F3}\n20\n{top:F3}\n30\n0\n11\n{left:F3}\n21\n{bottom:F3}\n31\n0");     // left

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n{color}\n10\n{right:F3}\n20\n{top:F3}\n30\n0\n11\n{right:F3}\n21\n{bottom:F3}\n31\n0");   // right

                    // Axes lines

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{left:F3}\n20\n0.000\n30\n0\n11\n{right:F3}\n21\n0.000\n31\n0");   // X axis

                    sw.WriteLine($"0\nLINE\n8\n0\n62\n8\n10\n{cx:F3}\n20\n{bottom:F3}\n30\n0\n11\n{cx:F3}\n21\n{top:F3}\n31\n0"); // Y axis

                    // CG circle

                    float radius = Math.Max(1f, (ct.EndSampleIndex - ct.StartSampleIndex) / 10f);

                    sw.WriteLine($"0\nCIRCLE\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}");

                    // Label text

                    sw.WriteLine($"0\nTEXT\n8\n0\n62\n{color}\n10\n{cx:F3}\n20\n{cy:F3}\n30\n0\n40\n{radius:F3}\n1\n#{i}");

                }

                sw.WriteLine("0\nENDSEC\n0\nEOF");

            }

        }//public static void ExportDxfWithBoxesAndText(List<CrestTroughObject> crestTroughs, string wavPath)

        public static void AddDxfDecorations(StreamWriter dxf, List<CrestTroughObject> objects, string wavPath)

        {

            dxf.WriteLine("0\nSECTION\n2\nENTITIES");

            foreach (var ct in objects)

            {

                float cx = ct.CG.X;

                float cy = ct.CG.Y;

                float radius = Math.Max(0.001f, (ct.EndSampleIndex - ct.StartSampleIndex) / 10f);

                string color = ct.IsCrest ? "5" : "1";

                dxf.WriteLine($"0\nCIRCLE\n8\n0\n62\n{color}\n10\n{cx:F2}\n20\n{cy:F6}\n30\n0\n40\n{radius:F2}");

            }

            dxf.WriteLine("0\nENDSEC\n0\nEOF");

        }//public static void AddDxfDecorations(StreamWriter dxf, List<CrestTroughObject> objects, string wavPath)

    }//public class CrestTroughAnalyzer___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS

}//namespace SANJOY_NATHS_QHENOMENOLOGY_REASONING_SYSTEMS_TESTED_ON_380000_WAV_FILES_GETTING_VERTICAL_SPECTRUMS_DISMANTLES_ANY_WAVES_TO_CREST_AABB_TRANSPARENT_RECTANGLES_TROUGH_AABB_TRANSPARENT_RECTANGLES_AND_STACK_THESE_TRANSPARENT_AABB_RECTANGLES_ONE_ABOVE_ANOTHER_GETS_VERTICAL_STRIPS_OF_CG_TRACINGS_ON_TRACING_PAPER_STACKS__ANALYSISWaveform___WITH_TRANSPARENT_RECTANGLES_OF_TRACING_PAPER_STACKS_BITMAPS_CSV_REPORTS

No comments:

Post a Comment