added hz to end of regex expression and implemented rounding to two decimal places without libs
parent
3cb282831e
commit
30814e454e
|
@ -4,8 +4,6 @@ package DDG::Goodie::NoteFrequency;
|
||||||
use DDG::Goodie;
|
use DDG::Goodie;
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
use Math::Round;
|
|
||||||
|
|
||||||
zci answer_type => "note_frequency";
|
zci answer_type => "note_frequency";
|
||||||
zci is_cached => 1;
|
zci is_cached => 1;
|
||||||
|
|
||||||
|
@ -26,10 +24,12 @@ handle remainder => sub {
|
||||||
|
|
||||||
return unless $_;
|
return unless $_;
|
||||||
|
|
||||||
# must be a note letter, optional sharp or flat, octave number, and optional tuning frequency for A4
|
# must be a note letter, optional sharp or flat,
|
||||||
# e.g. "g#3 432"
|
# octave number, optional tuning frequency for A4,
|
||||||
|
# and optional case-insensitive "hz" with or without preceding whitespace
|
||||||
|
# e.g. "g#3 432 hz" or "ab5 435Hz"
|
||||||
|
|
||||||
return unless ($_ =~ /^([A-Ga-g])([b#])?([0-8])(\s+[0-9]{1,4})?$/ );
|
return unless ($_ =~ /^([A-Ga-g])([b#])?([0-8])(\s+[0-9]{1,4})?(\s?[hH][zZ])?$/ );
|
||||||
|
|
||||||
my( $letter, $accidental, $octave, $tuning, $pitchClass, $midi, $frequency );
|
my( $letter, $accidental, $octave, $tuning, $pitchClass, $midi, $frequency );
|
||||||
|
|
||||||
|
@ -66,13 +66,15 @@ handle remainder => sub {
|
||||||
|
|
||||||
# calculate frequency
|
# calculate frequency
|
||||||
$frequency = $tuning * ( 2 ** (($midi-69)/12) );
|
$frequency = $tuning * ( 2 ** (($midi-69)/12) );
|
||||||
$frequency = nearest(0.01, $frequency);
|
|
||||||
|
# round to two decimal places (is never negative anyway and avoids libs)
|
||||||
|
$frequency = int(100 * ($frequency + 0.005)) / 100;
|
||||||
|
|
||||||
# result
|
# result
|
||||||
return $frequency,
|
return $frequency,
|
||||||
structured_answer => {
|
structured_answer => {
|
||||||
input => [html_enc($letter.$accidental.$octave." in A".$tuning." tuning")],
|
input => [html_enc($letter.$accidental.$octave." in A".$tuning." tuning")],
|
||||||
operation => "Note Frequency",
|
operation => "Note Frequency",
|
||||||
result => html_enc($frequency." Hz"),
|
result => html_enc($frequency." Hz"),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -31,6 +31,14 @@ ddg_goodie_test(
|
||||||
operation => "Note Frequency",
|
operation => "Note Frequency",
|
||||||
result => "128.43 Hz"
|
result => "128.43 Hz"
|
||||||
}),
|
}),
|
||||||
|
"notefreq c3 432Hz" => test_zci(
|
||||||
|
"128.43",
|
||||||
|
structured_answer => {
|
||||||
|
input => ["C3 in A432 tuning"],
|
||||||
|
operation => "Note Frequency",
|
||||||
|
result => "128.43 Hz"
|
||||||
|
}),
|
||||||
|
"notefreq c3 432 Hz" => undef,
|
||||||
"notefreq a4 100000" => undef,
|
"notefreq a4 100000" => undef,
|
||||||
"notefreq b#8" => undef,
|
"notefreq b#8" => undef,
|
||||||
"notefreq cb0" => undef,
|
"notefreq cb0" => undef,
|
||||||
|
|
Loading…
Reference in New Issue