clap

CLAP Audio Plugin API
Log | Files | Refs | README | LICENSE

commit 2a1417871ee8915b4da389597cc41ddc146bee51
parent 184ea1faaa873d0ae47b069f7016e7b45ee846b2
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date:   Wed, 15 Sep 2021 17:46:51 +0200

More work on the transport info plugin

Diffstat:
Mexamples/plugins/gui/transport-proxy.cc | 50+++++++++++++++++++++-----------------------------
Mexamples/plugins/qml/transport-info/main.qml | 67+++++++++++++++++++++++++++++++++++++++++++++----------------------
Mexamples/plugins/remote-gui.cc | 7+++++++
3 files changed, 73 insertions(+), 51 deletions(-)

diff --git a/examples/plugins/gui/transport-proxy.cc b/examples/plugins/gui/transport-proxy.cc @@ -4,64 +4,56 @@ TransportProxy::TransportProxy(QObject *parent) : QObject(parent) {} -void TransportProxy::update(bool hasTransport, const clap_event_transport &transport) { +void TransportProxy::update(bool hasTransport, const clap_event_transport &t) { update(_hasTransport, hasTransport, &TransportProxy::hasTransportChanged); - update<bool>( - _hasTempo, transport.flags & CLAP_TRANSPORT_HAS_TEMPO, &TransportProxy::hasTempoChanged); + update<bool>(_hasTempo, t.flags & CLAP_TRANSPORT_HAS_TEMPO, &TransportProxy::hasTempoChanged); update<bool>(_hasBeatsTimeline, - transport.flags & CLAP_TRANSPORT_HAS_BEATS_TIMELINE, + t.flags & CLAP_TRANSPORT_HAS_BEATS_TIMELINE, &TransportProxy::hasBeatsTimelineChanged); update<bool>(_hasSecondsTimeline, - transport.flags & CLAP_TRANSPORT_HAS_SECONDS_TIMELINE, + t.flags & CLAP_TRANSPORT_HAS_SECONDS_TIMELINE, &TransportProxy::hasSecondsTimelineChanged); update<bool>(_hasTimeSignature, - transport.flags & CLAP_TRANSPORT_HAS_TIME_SIGNATURE, + t.flags & CLAP_TRANSPORT_HAS_TIME_SIGNATURE, &TransportProxy::hasTimeSignatureChanged); + update<bool>(_isPlaying, t.flags & CLAP_TRANSPORT_IS_PLAYING, &TransportProxy::isPlayingChanged); + update<bool>( + _isRecording, t.flags & CLAP_TRANSPORT_IS_RECORDING, &TransportProxy::isRecordingChanged); update<bool>( - _isPlaying, transport.flags & CLAP_TRANSPORT_IS_PLAYING, &TransportProxy::isPlayingChanged); - update<bool>(_isRecording, - transport.flags & CLAP_TRANSPORT_IS_RECORDING, - &TransportProxy::isRecordingChanged); - update<bool>(_isLoopActive, - transport.flags & CLAP_TRANSPORT_IS_LOOP_ACTIVE, - &TransportProxy::isLoopActiveChanged); + _isLoopActive, t.flags & CLAP_TRANSPORT_IS_LOOP_ACTIVE, &TransportProxy::isLoopActiveChanged); update<bool>(_isWithinPreRoll, - transport.flags & CLAP_TRANSPORT_IS_WITHIN_PRE_ROLL, + t.flags & CLAP_TRANSPORT_IS_WITHIN_PRE_ROLL, &TransportProxy::isWithinPreRollChanged); update(_songPositionBeats, - transport.song_pos_beats / double(CLAP_BEATTIME_FACTOR), + t.song_pos_beats / double(CLAP_BEATTIME_FACTOR), &TransportProxy::songPositionBeatsChanged); update(_songPositionSeconds, - transport.song_pos_seconds / double(CLAP_SECTIME_FACTOR), + t.song_pos_seconds / double(CLAP_SECTIME_FACTOR), &TransportProxy::songPositionSecondsChanged); - update(_tempo, transport.tempo, &TransportProxy::tempoChanged); + update(_tempo, t.tempo, &TransportProxy::tempoChanged); - update(_barStart, - transport.bar_start / double(CLAP_BEATTIME_FACTOR), - &TransportProxy::barStartChanged); - update(_barNumber, transport.bar_number, &TransportProxy::barNumberChanged); + update(_barStart, t.bar_start / double(CLAP_BEATTIME_FACTOR), &TransportProxy::barStartChanged); + update(_barNumber, t.bar_number, &TransportProxy::barNumberChanged); update(_loopStartBeats, - transport.loop_start_beats / double(CLAP_BEATTIME_FACTOR), + t.loop_start_beats / double(CLAP_BEATTIME_FACTOR), &TransportProxy::loopStartBeatsChanged); update(_loopEndBeats, - transport.loop_end_beats / double(CLAP_BEATTIME_FACTOR), + t.loop_end_beats / double(CLAP_BEATTIME_FACTOR), &TransportProxy::loopEndBeatsChanged); update(_loopStartSeconds, - transport.loop_start_seconds / double(CLAP_SECTIME_FACTOR), + t.loop_start_seconds / double(CLAP_SECTIME_FACTOR), &TransportProxy::loopStartSecondsChanged); update(_loopEndSeconds, - transport.loop_end_seconds / double(CLAP_SECTIME_FACTOR), + t.loop_end_seconds / double(CLAP_SECTIME_FACTOR), &TransportProxy::loopEndSecondsChanged); + update<int>(_timeSignatureNumerator, t.tsig_num, &TransportProxy::timeSignatureNumeratorChanged); update<int>( - _timeSignatureNumerator, transport.tsig_num, &TransportProxy::timeSignatureNumeratorChanged); - update<int>(_timeSignatureDenominator, - transport.tsig_denom, - &TransportProxy::timeSignatureDenominatorChanged); + _timeSignatureDenominator, t.tsig_denom, &TransportProxy::timeSignatureDenominatorChanged); emit updated(); } diff --git a/examples/plugins/qml/transport-info/main.qml b/examples/plugins/qml/transport-info/main.qml @@ -8,31 +8,54 @@ Rectangle { color: "#f8f8f8" Text { - text: "Has transport: " + transport.hasTransport + "\n" - + (!transport.hasTransport ? "" : - + "Is playing: " + transport.isPlaying + "\n" - + "Is recording: " + transport.isRecording + "\n" - + "Is loop active: " + transport.isLoopActive + "\n" - + (!(transport.isLoopActive && transport.hasBeatsTimeline) ? "" : - + "Loop (beats): " + transport.loopStartBeats + " .. " + transport.loopEndBeats) - + (!(transport.isLoopActive && transport.hasSecondsTimeline) ? "" : - + "Loop (seconds): " + transport.loopStartSeconds + " .. " + transport.loopEndSeconds) - + "Is within preroll: " + transport.isWithinPreroll + "\n" - + "Has tempo: " + transport.hasTempo + "\n" - + (!transport.hasTempo ? "" : - + "Tempo (bpm): " + transport.tempo) - + "Has beats timeline: " + transport.hasBeatsTimeline + "\n" - + (!transport.hasBeatsTimeline ? "" : - + "song position (beats): " + transport.songPositionBeats) - + (!transport.hasSecondsTimeline ? "" : - + "song position (seconds): " + transport.songPositionSeconds) - + "Has Time Signature: " + transport.hasTimeSignature + "\n" - + (!transport.hasTimeSignature ? "" : - + "Time Signature: " + transport.timeSignatureNumerator + "/" + transport.timeSignatureDenominator) - ) + id: display + text: computeText() + } + + function computeText() { + var text = "Has transport: " + transport.hasTransport + "\n"; + if (!transport.hasTransport) + return text; + + text += "Is playing: " + transport.isPlaying + "\n"; + text += "Is recording: " + transport.isRecording + "\n"; + text += "Is loop active: " + transport.isLoopActive + "\n"; + + if (transport.isLoopActive && transport.hasBeatsTimeline) { + text += "Loop (beats): " + transport.loopStartBeats + " .. " + transport.loopEndBeats + "\n"; + } + + if (transport.isLoopActive && transport.hasSecondsTimeline) { + text += "Loop (seconds): " + transport.loopStartSeconds + " .. " + transport.loopEndSeconds + "\n"; + } + + text += "Is within preroll: " + transport.isWithinPreRoll + "\n"; + + text += "Has tempo: " + transport.hasTempo + "\n"; + if (transport.hasTempo) + text += "Tempo (bpm): " + transport.tempo + "\n"; + + text += "Has beats timeline: " + transport.hasBeatsTimeline + "\n"; + if (transport.hasBeatsTimeline) + text += "song position (beats): " + transport.songPositionBeats + "\n"; + + text += "Has seconds timeline: " + transport.hasSecondsTimeline + "\n"; + if (transport.hasSecondsTimeline) + text += "song position (seconds): " + transport.songPositionSeconds + "\n"; + + text += "Has Time Signature: " + transport.hasTimeSignature + "\n"; + if (transport.hasTimeSignature) + text += "Time Signature: " + transport.timeSignatureNumerator + "/" + transport.timeSignatureDenominator + "\n"; + + return text; + } + + function updateText() { + display.text = computeText(); } Component.onCompleted: { transport.isSubscribed = true; + transport.updated.connect(updateText); } } diff --git a/examples/plugins/remote-gui.cc b/examples/plugins/remote-gui.cc @@ -111,6 +111,13 @@ namespace clap { msg.get(rq); _plugin.guiAdjust(rq.paramId, rq.value, rq.flags); break; + + case messages::kSubscribeToTransportRequest: { + messages::SubscribeToTransportRequest rq; + msg.get(rq); + _isTransportSubscribed = rq.isSubscribed; + break; + } } } }