]> git.sesse.net Git - casparcg/blob - mixer/audio/audio_transform.cpp
2.0.0.2: Mayor solution reconfiguration.
[casparcg] / mixer / audio / audio_transform.cpp
1 #include "../stdafx.h"\r
2 \r
3 #include "audio_transform.h"\r
4 \r
5 namespace caspar { namespace core {\r
6         \r
7 audio_transform::audio_transform()\r
8         : gain_(1.0)\r
9         , audio_(true){}\r
10 \r
11 void audio_transform::set_gain(double value)\r
12 {\r
13         gain_ = value;\r
14 }\r
15 \r
16 double audio_transform::get_gain() const\r
17 {\r
18         return gain_;\r
19 }\r
20 \r
21 void audio_transform::set_has_audio(bool value)\r
22 {\r
23         audio_ = value;\r
24 }\r
25 \r
26 bool audio_transform::get_has_audio() const\r
27 {\r
28         return audio_;\r
29 }\r
30 \r
31 audio_transform& audio_transform::operator*=(const audio_transform &other) \r
32 {\r
33         gain_ *= other.gain_;\r
34         audio_ &= other.audio_;\r
35         return *this;\r
36 }\r
37 \r
38 const audio_transform audio_transform::operator*(const audio_transform &other) const\r
39 {\r
40         return audio_transform(*this) *= other;\r
41 }\r
42 \r
43 template<typename T>\r
44 T mix(const T& lhs, const T& rhs, float alpha)\r
45 {\r
46         return (1.0f - alpha) * lhs + alpha * rhs;\r
47 }\r
48 \r
49 audio_transform lerp(const audio_transform& lhs, const audio_transform& rhs, float alpha)\r
50 {\r
51         audio_transform result;\r
52         result.set_gain(mix(lhs.get_gain(), rhs.get_gain(), alpha));\r
53         result.set_has_audio(lhs.get_has_audio() || rhs.get_has_audio());\r
54         return result;\r
55 }\r
56 \r
57 }}