Audio plugin host https://kx.studio/carla
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.

65 lines
1.6KB

  1. /* Copyright 2016, Ableton AG, Berlin. All rights reserved.
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. *
  16. * If you would like to incorporate Link into a proprietary software application,
  17. * please contact <link-devs@ableton.com>.
  18. */
  19. #pragma once
  20. // Make sure to define this before <cmath> is included for Windows
  21. #define _USE_MATH_DEFINES
  22. #include "ableton/Link.hpp"
  23. #include <mutex>
  24. struct LinkTimeInfo {
  25. double beatsPerBar, beatsPerMinute, beat, phase;
  26. };
  27. namespace ableton
  28. {
  29. namespace link
  30. {
  31. class AudioEngine
  32. {
  33. public:
  34. AudioEngine(Link& link);
  35. double beatTime() const;
  36. void setTempo(double tempo);
  37. double quantum() const;
  38. void setQuantum(double quantum);
  39. void timelineCallback(const std::chrono::microseconds hostTime, LinkTimeInfo* const info);
  40. private:
  41. struct EngineData
  42. {
  43. double requestedTempo;
  44. bool resetBeatTime;
  45. double quantum;
  46. };
  47. EngineData pullEngineData();
  48. Link& mLink;
  49. EngineData mSharedEngineData;
  50. std::mutex mEngineDataGuard;
  51. };
  52. } // namespace link
  53. } // namespace ableton