You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
855B

  1. #pragma once
  2. #include "MidiTrack.h"
  3. #include <vector>
  4. #include <memory>
  5. class MidiSong;
  6. class MidiLock;
  7. using MidiSongPtr = std::shared_ptr<MidiSong>;
  8. class MidiSong
  9. {
  10. public:
  11. MidiSong();
  12. ~MidiSong();
  13. std::shared_ptr<MidiTrack> getTrack(int index);
  14. std::shared_ptr<const MidiTrack> getTrackConst(int index) const;
  15. void createTrack(int index);
  16. void assertValid() const;
  17. /**
  18. * returns -1 if no tracks exist
  19. */
  20. int getHighestTrackNumber() const;
  21. /**
  22. * factory method to generate test content
  23. */
  24. static MidiSongPtr makeTest(MidiTrack::TestContent, int trackNumber);
  25. std::shared_ptr<MidiLock> lock;
  26. private:
  27. std::vector<std::shared_ptr<MidiTrack>> tracks;
  28. /** like create track, but passes in the track
  29. */
  30. void addTrack(int index, std::shared_ptr<MidiTrack>);
  31. };