add API to Evoral::SMF to retrieve all track/instrument names for use when importing

This commit is contained in:
Paul Davis 2016-12-14 11:42:54 +00:00
parent 7e0dbd06db
commit d2fd01c241
2 changed files with 54 additions and 1 deletions

View File

@ -78,8 +78,10 @@ public:
bool is_type0 () const { return _type0; }
std::set<uint8_t> channels () const { return _type0channels; }
void track_names (std::vector<std::string>&) const;
void instrument_names (std::vector<std::string>&) const;
private:
private:
smf_t* _smf;
smf_track_t* _smf_track;
bool _empty; ///< true iff file contains(non-empty) events

View File

@ -472,4 +472,55 @@ SMF::round_to_file_precision (double val) const
return round (val * div) / div;
}
void
SMF::track_names(vector<string>& names) const
{
if (!_smf) {
return;
}
names.clear ();
Glib::Threads::Mutex::Lock lm (_smf_lock);
for (uint16_t n = 0; n < _smf->number_of_tracks; ++n) {
smf_track_t* trk = smf_get_track_by_number (_smf, n+1);
if (!trk) {
names.push_back (string());
} else {
if (trk->name) {
names.push_back (trk->name);
} else {
names.push_back (string());
}
}
}
}
void
SMF::instrument_names(vector<string>& names) const
{
if (!_smf) {
return;
}
names.clear ();
Glib::Threads::Mutex::Lock lm (_smf_lock);
for (uint16_t n = 0; n < _smf->number_of_tracks; ++n) {
smf_track_t* trk = smf_get_track_by_number (_smf, n+1);
if (!trk) {
names.push_back (string());
} else {
if (trk->instrument) {
names.push_back (trk->instrument);
} else {
names.push_back (string());
}
}
}
}
} // namespace Evoral