13
0

"toll free bridging" between smf_tempo_t and Evoral::SMF::Tempo

This commit is contained in:
Paul Davis 2016-12-16 13:45:43 +00:00
parent c0aa738395
commit 6a0ea65885
2 changed files with 47 additions and 4 deletions

View File

@ -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;

View File

@ -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