]> git.treefish.org Git - seamulator.git/blobdiff - src/synthesizer.cpp
place plucks at random positions
[seamulator.git] / src / synthesizer.cpp
index b2254c01f8b4bb059639dc4ee91d280a3c365242..5943b06d400a4cfbb63afff8afdff1b40076add1 100644 (file)
@@ -55,17 +55,25 @@ Synthesizer::Synthesizer(ConstWaterSurfacePtr surface) :
 //        m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(i, 0), 440.0) );
         //}
 
-    m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(0, 0), 939.85) );
-    m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(0, 10), 704.09) );
-    m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(0, 20), 469.92) );
-    m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(0, 30), 352.04) );
-    m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(0, 40), 279.42) );
-
-    m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(10, 10), 1054.94) );
-    m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(20, 10), 704.09) );
-    m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(30, 10), 527.47) );
-    m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(40, 10), 418.65) );
-    m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(50, 10), 313.64) );
+    srand (time(NULL));
+    
+    const std::vector<double> frequencies = {939.85, 704.09, 469.92, 352.04, 279.42, 1054.94, 704.09, 527.47, 418.65, 313.64};
+
+    for (const auto& frequency : frequencies) {
+        m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(rand() % m_surface->size(), rand() %  m_surface->size()), frequency) );
+    }
+    
+    // m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(10, 50), 939.85) );
+    // m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(20, 40), 704.09) );
+    // m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(30, 30), 469.92) );
+    // m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(40, 20), 352.04) );
+    // m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(50, 10), 279.42) );
+
+    // m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(50, 10), 1054.94) );
+    // m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(40, 20), 704.09) );
+    // m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(30, 30), 527.47) );
+    // m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(20, 40), 418.65) );
+    // m_dots.emplace_back( std::make_unique<Dot>(m_surface->at(10, 50), 313.64) );
 
     m_audioThread = std::thread( [this]{audioLoop();} );
 
@@ -172,7 +180,9 @@ void Synthesizer::tick()
 void Synthesizer::audioLoop()
 {
     stk::PRCRev effect0(0.5);
-    stk::Echo effect;
+    stk::Echo echo1;
+    stk::Echo echo2{4000};
+    stk::Echo echo3{7000};
     stk::Chorus chorus{6000};
     stk::StkFrames frames(88200, 2);
     while (!m_stop) {
@@ -185,7 +195,10 @@ void Synthesizer::audioLoop()
             //frames(i,1) = frames(i,0);
         }
         //       frames = effect0.tick(frames);
-//        frames = effect.tick(frames);
+        frames = echo1.tick(frames);
+        // frames = echo2.tick(frames);
+        // frames = echo3.tick(frames);
+
         frames = chorus.tick(frames);
 
         m_dac->tick(frames);