]> git.treefish.org Git - seamulator.git/blob - include/synthesizer.h
5d380539830f4a094c5dcc2cc756672b6ef12926
[seamulator.git] / include / synthesizer.h
1 /**
2  * Copyright (C) 2021  Alexander Schmidt
3  *
4  * This file is part of Seamulator.
5  *
6  * Seamulator is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Seamulator is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Seamulator.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #pragma once
21
22 #include "watersurfacefwd.h"
23
24 #include <chrono>
25 #include <mutex>
26 #include <thread>
27
28 #include "SineWave.h"
29 #include "RtWvOut.h"
30 #include "BlowBotl.h"
31 #include "Plucked.h"
32
33 #include "dot.h"
34
35 class Synthesizer {
36
37 public:
38     Synthesizer(ConstWaterSurfacePtr surface);
39     ~Synthesizer();
40
41     void tick();
42
43 private:
44     const ConstWaterSurfacePtr m_surface;
45
46     bool m_stop = false;
47     
48     std::chrono::time_point<std::chrono::system_clock> m_startTime;
49     double m_lastRuntime;
50     double m_pos = 0.0;
51     double m_vel = 0.0;
52
53
54     double m_pos2 = 0.0;
55     double m_vel2 = 0.0;
56
57     double m_velMax1 = 0.0;
58     double m_velMax2 = 0.0;
59
60     double getRuntime() const;
61
62     // int audioTick(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
63     //                double streamTime, RtAudioStreamStatus status, void *dataPointer );
64
65     void audioLoop();
66
67     std::vector<std::unique_ptr<Dot>> m_dots;
68     
69     stk::Plucked m_sine1;
70     stk::Plucked m_sine2;
71     //RtAudio m_dac;
72     std::unique_ptr<stk::RtWvOut> m_dac;
73
74     std::thread m_audioThread;
75
76 };