Track.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * Copyright (c) 2021, kleines Filmröllchen <malu.bertsch@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include "Clip.h"
  8. #include "Music.h"
  9. #include "Processor.h"
  10. #include <LibCore/Object.h>
  11. namespace LibDSP {
  12. // A track is also known as a channel and serves as a container for the audio pipeline: clips -> processors -> mixing & output
  13. class Track : public Core::Object {
  14. C_OBJECT_ABSTRACT(Track)
  15. public:
  16. Track(NonnullRefPtr<Transport> transport)
  17. : m_transport(move(transport))
  18. {
  19. }
  20. virtual ~Track() override = default;
  21. virtual bool check_processor_chain_valid() const = 0;
  22. bool add_processor(NonnullRefPtr<Processor> new_processor);
  23. // Creates the current signal of the track by processing current note or audio data through the processing chain
  24. Sample current_signal();
  25. NonnullRefPtrVector<Processor> const& processor_chain() const { return m_processor_chain; }
  26. NonnullRefPtr<Transport> const transport() const { return m_transport; }
  27. protected:
  28. bool check_processor_chain_valid_with_initial_type(SignalType initial_type) const;
  29. // Subclasses override to provide the base signal to the processing chain
  30. virtual Signal current_clips_signal() = 0;
  31. NonnullRefPtrVector<Processor> m_processor_chain;
  32. NonnullRefPtr<Transport> const m_transport;
  33. };
  34. class NoteTrack final : public Track {
  35. public:
  36. virtual ~NoteTrack() override = default;
  37. bool check_processor_chain_valid() const override;
  38. NonnullRefPtrVector<NoteClip> const& clips() const { return m_clips; }
  39. protected:
  40. virtual Signal current_clips_signal() override;
  41. private:
  42. NonnullRefPtrVector<NoteClip> m_clips;
  43. };
  44. class AudioTrack final : public Track {
  45. public:
  46. virtual ~AudioTrack() override = default;
  47. bool check_processor_chain_valid() const override;
  48. NonnullRefPtrVector<AudioClip> const& clips() const { return m_clips; }
  49. protected:
  50. virtual Signal current_clips_signal() override;
  51. private:
  52. NonnullRefPtrVector<AudioClip> m_clips;
  53. };
  54. }