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