summaryrefslogtreecommitdiff
path: root/libs/evoral
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-12-16 13:45:43 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2016-12-16 13:45:43 +0000
commit6a0ea658850b32cd06ff0fcc72a14ea57e5a0388 (patch)
tree15c3a621d4a2286ad8533dd9f5ff48cc66c373b8 /libs/evoral
parentc0aa738395f500923e67696deb46a71395a7cc07 (diff)
"toll free bridging" between smf_tempo_t and Evoral::SMF::Tempo
Diffstat (limited to 'libs/evoral')
-rw-r--r--libs/evoral/evoral/SMF.hpp21
-rw-r--r--libs/evoral/src/SMF.cpp30
2 files changed, 47 insertions, 4 deletions
diff --git a/libs/evoral/evoral/SMF.hpp b/libs/evoral/evoral/SMF.hpp
index 0c312890b2..f0757929bd 100644
--- a/libs/evoral/evoral/SMF.hpp
+++ b/libs/evoral/evoral/SMF.hpp
@@ -93,7 +93,26 @@ public:
int num_tempos () const;
- typedef smf_tempo_t Tempo;
+ /* This is exactly modelled on smf_tempo_t */
+ struct Tempo {
+ size_t time_pulses;
+ double time_seconds;
+ int microseconds_per_quarter_note;
+ int numerator;
+ int denominator;
+ int clocks_per_click;
+ int notes_per_note;
+
+ Tempo ()
+ : time_pulses (0)
+ , time_seconds (0)
+ , microseconds_per_quarter_note (-1)
+ , numerator (-1)
+ , denominator (-1)
+ , clocks_per_click (-1)
+ , notes_per_note (-1) {}
+ Tempo (smf_tempo_t*);
+ };
Tempo* tempo_at_smf_pulse (size_t smf_pulse) const;
Tempo* tempo_at_seconds (double seconds) const;
diff --git a/libs/evoral/src/SMF.cpp b/libs/evoral/src/SMF.cpp
index 63050b63be..b5d34aa538 100644
--- a/libs/evoral/src/SMF.cpp
+++ b/libs/evoral/src/SMF.cpp
@@ -522,6 +522,17 @@ SMF::instrument_names(vector<string>& names) const
}
}
+SMF::Tempo::Tempo (smf_tempo_t* smft)
+ : time_pulses (smft->time_pulses)
+ , time_seconds (smft->time_seconds)
+ , microseconds_per_quarter_note (smft->microseconds_per_quarter_note)
+ , numerator (smft->numerator)
+ , denominator (smft->denominator)
+ , clocks_per_click (smft->clocks_per_click)
+ , notes_per_note (smft->notes_per_note)
+{
+}
+
int
SMF::num_tempos () const
{
@@ -532,13 +543,21 @@ SMF::num_tempos () const
SMF::Tempo*
SMF::tempo_at_smf_pulse (size_t smf_pulse) const
{
- return smf_get_tempo_by_seconds (_smf, smf_pulse);
+ smf_tempo_t* t = smf_get_tempo_by_seconds (_smf, smf_pulse);
+ if (!t) {
+ return 0;
+ }
+ return new Tempo (t);
}
SMF::Tempo*
SMF::tempo_at_seconds (double seconds) const
{
- return smf_get_tempo_by_seconds (_smf, seconds);
+ smf_tempo_t* t = smf_get_tempo_by_seconds (_smf, seconds);
+ if (!t) {
+ return 0;
+ }
+ return new Tempo (t);
}
SMF::Tempo*
@@ -546,7 +565,12 @@ SMF::nth_tempo (size_t n) const
{
assert (_smf);
- return smf_get_tempo_by_number (_smf, n);
+ smf_tempo_t* t = smf_get_tempo_by_number (_smf, n);
+ if (!t) {
+ return 0;
+ }
+
+ return new Tempo (t);
}
} // namespace Evoral