Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
external_sync.hpp
Go to the documentation of this file.
1#pragma once
2
6
7#include <array>
8#include <compare>
9#include <cstddef>
10#include <cstdint>
11#include <span>
12
13namespace pulp::playback {
14
16
17enum class MtcFrameRate : std::uint8_t {
22};
23
25 std::uint8_t hours = 0;
26 std::uint8_t minutes = 0;
27 std::uint8_t seconds = 0;
28 std::uint8_t frames = 0;
30 constexpr auto operator<=>(const MtcTimecode&) const = default;
31};
32
33bool valid_mtc_timecode(const MtcTimecode& timecode) noexcept;
34
38 timebase::RationalRate sample_rate) noexcept;
40 timebase::RationalRate sample_rate,
41 MtcFrameRate frame_rate) noexcept;
42
50
51enum class MtcDirection : std::int8_t {
52 Reverse = -1,
55};
56
63
67class MtcChaser {
68 public:
70 timebase::RationalRate sample_rate) noexcept;
71 MtcChaseUpdate consume_sysex(std::span<const std::uint8_t> message,
72 timebase::RationalRate sample_rate) noexcept;
73 void reset() noexcept;
74
75 private:
76 MtcChaseUpdate complete(timebase::RationalRate sample_rate, MtcDirection direction) noexcept;
77
78 std::array<std::uint8_t, 8> pieces_{};
79 std::uint8_t received_mask_ = 0;
80 std::uint8_t last_piece_ = 0;
81 MtcDirection cycle_direction_ = MtcDirection::Unknown;
82 bool have_last_piece_ = false;
83};
84
92
101
107
113 public:
116
117 explicit ExternalSyncOutput(ExternalSyncOutputConfig config = {}) noexcept : config_(config) {}
118
120 midi::MidiBuffer& output) const noexcept;
121
122 private:
123 ExternalSyncOutputConfig config_{};
124};
125
126} // namespace pulp::playback
Collection of timestamped MIDI events within a single audio buffer period.
Definition buffer.hpp:31
static constexpr audio::RtSafetyClass process_rt_safety_class
Definition external_sync.hpp:114
ExternalSyncOutputResult process(const TransportSnapshot &transport, midi::MidiBuffer &output) const noexcept
ExternalSyncOutput(ExternalSyncOutputConfig config={}) noexcept
Definition external_sync.hpp:117
Allocation-free MTC decoder.
Definition external_sync.hpp:67
MtcChaseUpdate consume_sysex(std::span< const std::uint8_t > message, timebase::RationalRate sample_rate) noexcept
MtcChaseUpdate consume(const midi::MidiEvent &event, timebase::RationalRate sample_rate) noexcept
RtSafetyClass
Definition rt_safety_contract.hpp:11
@ AudioCallbackSafeAfterPrepare
Definition rt_safety_contract.hpp:13
Definition audio_renderer.hpp:20
bool valid_mtc_timecode(const MtcTimecode &timecode) noexcept
@ Complete
Definition compile_executor.hpp:15
timebase::SamplePosition mtc_timecode_to_samples(const MtcTimecode &timecode, timebase::RationalRate sample_rate) noexcept
Convert between an MTC wall-clock label and a non-negative timeline sample.
MtcDirection
Definition external_sync.hpp:51
@ Forward
Definition external_sync.hpp:54
@ Reverse
Definition external_sync.hpp:52
@ Unknown
Definition external_sync.hpp:53
@ InvalidTransport
Definition audio_renderer.hpp:218
MtcFrameRate
Definition external_sync.hpp:17
@ Fps30
Definition external_sync.hpp:21
@ Fps24
Definition external_sync.hpp:18
@ Fps2997Drop
Definition external_sync.hpp:20
@ Fps25
Definition external_sync.hpp:19
MtcTimecode samples_to_mtc_timecode(timebase::SamplePosition position, timebase::RationalRate sample_rate, MtcFrameRate frame_rate) noexcept
ExternalSyncOutputCode
Definition external_sync.hpp:93
@ OutputOverflow
Definition external_sync.hpp:99
@ InvalidFrameRate
Definition external_sync.hpp:97
@ InvalidSampleRate
Definition external_sync.hpp:96
@ Complete
Definition external_sync.hpp:94
@ InvalidOutputLimit
Definition external_sync.hpp:98
MtcChaseCode
Definition external_sync.hpp:43
@ Incomplete
Definition external_sync.hpp:45
@ Invalid
Definition external_sync.hpp:48
@ Discontinuity
Definition external_sync.hpp:47
@ Locked
Definition external_sync.hpp:46
@ Ignored
Definition external_sync.hpp:44
Definition beat_division.hpp:11
STL namespace.
Timestamped MIDI event combining a choc::midi::ShortMessage with timing info.
Definition message.hpp:32
Definition external_sync.hpp:85
std::uint32_t max_messages_per_block
Definition external_sync.hpp:90
std::uint8_t mtc_device_id
Definition external_sync.hpp:89
bool emit_mtc
Definition external_sync.hpp:87
MtcFrameRate mtc_frame_rate
Definition external_sync.hpp:88
bool emit_midi_clock
Definition external_sync.hpp:86
Definition external_sync.hpp:102
std::uint32_t sysex_messages
Definition external_sync.hpp:105
std::uint32_t short_messages
Definition external_sync.hpp:104
ExternalSyncOutputCode code
Definition external_sync.hpp:103
Definition external_sync.hpp:57
MtcChaseCode code
Definition external_sync.hpp:58
MtcDirection direction
Definition external_sync.hpp:59
MtcTimecode timecode
Definition external_sync.hpp:60
timebase::SamplePosition position
Definition external_sync.hpp:61
Definition external_sync.hpp:24
std::uint8_t hours
Definition external_sync.hpp:25
std::uint8_t minutes
Definition external_sync.hpp:26
std::uint8_t seconds
Definition external_sync.hpp:27
constexpr auto operator<=>(const MtcTimecode &) const =default
std::uint8_t frames
Definition external_sync.hpp:28
MtcFrameRate frame_rate
Definition external_sync.hpp:29
Definition transport.hpp:71
Definition rational_time.hpp:14
Definition rational_time.hpp:9