Skip to content

Commit d2d6918

Browse files
committed
Update sound frequency tool to improve note handling and add detailed frequency output
1 parent 4a4bfc0 commit d2d6918

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

tools/soundfreq.cpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
// SOFTWARE.
2424
//
2525
//---------------------------------------------------------------------------------------
26+
#include <array>
2627
#include <iostream>
2728
#include <iomanip>
2829
#include <cmath>
@@ -54,7 +55,7 @@ std::pair<std::string, float> closestNoteX(float freq) {
5455

5556
// Note names (use sharps)
5657
static constexpr std::array<const char*, 12> names{
57-
"C-","C#","D-","D#","E-","F-","F#","G-","G#","A-","A#","B-"
58+
"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"
5859
};
5960

6061
// Index within octave [0..11], handle negatives safely
@@ -85,4 +86,25 @@ int main()
8586
std::cout << std::setprecision(4) << (freq * 128) << " " << (freq / 44100.0) << " " << (freq / 48000.0) << std::endl;
8687
// std::cout << i << " : " << freq << " Hz - (" << closestNote(freq) << "Hz, " << closestNote(freq*2) << "Hz, " << closestNote(freq*4) << "Hz)" << std::endl;
8788
}
89+
for(int i = 0; i < 256; ++i) {
90+
auto freq = 4000 * std::pow(2.0f, (i - 64) / 48.0f) / 128;
91+
std::cout << "| " << std::setw(3) << i << std::fixed << std::setprecision(2);
92+
auto [note, frac] = closestNoteX(freq);
93+
if (std::fabs(frac) < 0.1f)
94+
std::cout << " | " << freq << "Hz ~" << note;
95+
else
96+
std::cout << " | " << freq << "Hz";
97+
auto [note2, frac2] = closestNoteX(freq * 2);
98+
if (std::fabs(frac2) < 0.1f)
99+
std::cout << " | " << freq*2 << "Hz ~" << note2;
100+
else
101+
std::cout << " | " << freq*2 << "Hz";
102+
auto [note3, frac3] = closestNoteX(freq * 4);
103+
if (std::fabs(frac3) < 0.1f)
104+
std::cout << " | " << freq*4 << "Hz ~" << note3;
105+
else
106+
std::cout << " | " << freq*4 << "Hz";
107+
std::cout << " | " << (freq * 128) << " | " << std::setprecision(6) << (freq / 44100.0) << " | " << (freq / 48000.0) << " |" << std::endl;
108+
// std::cout << i << " : " << freq << " Hz - (" << closestNote(freq) << "Hz, " << closestNote(freq*2) << "Hz, " << closestNote(freq*4) << "Hz)" << std::endl;
109+
}
88110
}

0 commit comments

Comments
 (0)