Big Mouth Billy Bass automation library

Dependents:   BillyBass_with_SD

Revision:
4:f009306756b3
Parent:
3:6c91a6232c4a
Child:
5:869b3711bdb3
--- a/song.cpp	Tue Jun 18 13:11:07 2013 +0000
+++ b/song.cpp	Tue Jun 18 14:10:34 2013 +0000
@@ -15,16 +15,15 @@
 char const *Song::sampleExtension = "raw";
 // class static
 unsigned const Song::NO_FISH = MAX_FISH + 1;
+// one song, re-used
+Song Song::theSong;
 
 // _name is relative to BASS_DIRECTORY
 // class static
 Song *Song::newSong(char const *_name)
 {
-    Song *s = new Song;
-    if (!s) {
-        fprintf(stderr, "new Song == 0\r\n");
-        return 0;
-    }
+    Song *s = &theSong;
+    s->reset();
     if (! s->parseFilename(_name)) {
         fprintf(stderr, "parseFilename(%s) failed\r\n", _name);
         goto on_error;
@@ -38,7 +37,6 @@
     return s;
 
 on_error:
-    delete s;
     return 0;
 }
 
@@ -131,11 +129,11 @@
         }
         // fprintf(stderr, "%d add %f %f %s\r\n", line, startTime, endTime, outName);
 
-        actions.push_back(Action(startTime, bass->onState(), out, outName));
-        actions.push_back(Action(endTime, bass->offState(), out, outName));
+        addAction(startTime, bass->onState(), out);
+        addAction(endTime, bass->offState(), out);
     }
-    fprintf(stderr, "Added %d actions\r\n", actions.size());
-    std::sort(actions.begin(), actions.end()); // sort actions by time
+    fprintf(stderr, "Added %d actions\r\n", numActions);
+    qsort(actions, numActions, sizeof(Action), &Action::compare);
     retval = true;
 
 done:
@@ -143,3 +141,4 @@
     fclose(txtfile);
     return retval;
 }
+