PdExecutor.hpp
1 #pragma once
2 #include <Process/Execution/ProcessComponent.hpp>
3 #include <Process/ExecutionContext.hpp>
4 
5 #include <Explorer/DeviceList.hpp>
6 
7 #include <Pd/PdInstance.hpp>
8 #include <Pd/PdProcess.hpp>
9 
10 #include <score/document/DocumentContext.hpp>
11 #include <score/document/DocumentInterface.hpp>
12 
13 #include <ossia/dataflow/graph_node.hpp>
14 #include <ossia/detail/string_view.hpp>
15 #include <ossia/editor/scenario/time_process.hpp>
16 #include <ossia/editor/scenario/time_value.hpp>
17 
18 #include <boost/circular_buffer.hpp>
19 
20 #include <QString>
21 
22 #include <memory>
23 
24 namespace Pd
25 {
26 
27 class ProcessModel;
28 
29 class PdGraphNode final : public ossia::graph_node
30 {
31 public:
33  std::shared_ptr<Instance> instance, ossia::string_view folder,
34  ossia::string_view file, const Execution::Context& ctx, std::size_t audio_inputs,
35  std::size_t audio_outputs, Process::Inlets inmess, Process::Outlets outmess,
36  const Pd::PatchSpec& spec, bool midi_in = true, bool midi_out = true);
37 
38  ~PdGraphNode();
39 
40  ossia::outlet* get_outlet(const char* str) const;
41 
42  ossia::value_port* get_value_port(const char* str) const;
43 
44  ossia::midi_port* get_midi_in() const;
45  ossia::midi_port* get_midi_out() const;
46 
47  void run(const ossia::token_request& t, ossia::exec_state_facade e) noexcept override;
48  void add_dzero(std::string& s) const;
49 
50  std::shared_ptr<Instance> m_instance;
51 
52  std::size_t m_audioIns{};
53  std::size_t m_audioOuts{};
54  std::vector<Process::Port*> m_inport, m_outport;
55  std::vector<std::string> m_inmess, m_outmess;
56 
57  std::vector<float> m_inbuf, m_outbuf;
58  std::vector<boost::circular_buffer<float>> m_prev_outbuf;
59  std::size_t m_firstInMessage{}, m_firstOutMessage{};
60  ossia::audio_port* m_audio_inlet{};
61  ossia::audio_port* m_audio_outlet{};
62  ossia::midi_port* m_midi_inlet{};
63  ossia::midi_port* m_midi_outlet{};
64  std::string m_file;
65 };
66 
68 {
69  COMPONENT_METADATA("78657f42-3a2a-4b80-8736-8736463442b4")
70 
71 public:
73  Component(Pd::ProcessModel& element, const Execution::Context& ctx, QObject* parent);
74 
75  ~Component();
76 };
77 
79 }
Definition: Process/Execution/ProcessComponent.hpp:119
Definition: Process/Execution/ProcessComponent.hpp:48
Definition: PdExecutor.hpp:68
Definition: PdExecutor.hpp:30
Definition: PdProcess.hpp:40
Definition: ExecutionContext.hpp:75
Definition: PdProcess.hpp:24
Definition: PortForward.hpp:23
Definition: PortForward.hpp:27