summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibAudio
diff options
context:
space:
mode:
authorHendiadyoin1 <leon2002.la@gmail.com>2022-02-03 12:48:17 +0100
committerAndreas Kling <kling@serenityos.org>2022-03-15 11:39:42 +0100
commitcd21e0322510bdd95c5d53075f80c49efcb2f24d (patch)
treec735ef5b046067f3da5fd961b6b74600451b4b5b /Userland/Libraries/LibAudio
parent47fe911196b5551f5b4a829a1a310ca66cf12e99 (diff)
downloadserenity-cd21e0322510bdd95c5d53075f80c49efcb2f24d.zip
AK+Everywhere: Add sincos and use it in some places
Calculating sin and cos at once is quite a bit cheaper than calculating them individually. x87 has even a dedicated instruction for it: `fsincos`.
Diffstat (limited to 'Userland/Libraries/LibAudio')
-rw-r--r--Userland/Libraries/LibAudio/Sample.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/Userland/Libraries/LibAudio/Sample.h b/Userland/Libraries/LibAudio/Sample.h
index ec52cd90c1..b3b5e57e2f 100644
--- a/Userland/Libraries/LibAudio/Sample.h
+++ b/Userland/Libraries/LibAudio/Sample.h
@@ -97,8 +97,10 @@ struct Sample {
double const pi_over_2 = AK::Pi<double> * 0.5;
double const root_over_2 = AK::sqrt(2.0) * 0.5;
double const angle = position * pi_over_2 * 0.5;
- left *= root_over_2 * (AK::cos(angle) - AK::sin(angle));
- right *= root_over_2 * (AK::cos(angle) + AK::sin(angle));
+ double s, c;
+ AK::sincos(angle, s, c);
+ left *= root_over_2 * (c - s);
+ right *= root_over_2 * (c + s);
return *this;
}
@@ -116,7 +118,7 @@ struct Sample {
return *this;
}
- constexpr Sample operator*(double const mult)
+ constexpr Sample operator*(double const mult) const
{
return { left * mult, right * mult };
}
@@ -134,7 +136,7 @@ struct Sample {
return *this;
}
- constexpr Sample operator+(Sample const& other)
+ constexpr Sample operator+(Sample const& other) const
{
return { left + other.left, right + other.right };
}