MUSX Document Model
Loading...
Searching...
No Matches
musx::dom::others::TempoChange Class Reference

A single tempo change value entered with Finale's Tempo tool. More...

#include <Others.h>

+ Inheritance diagram for musx::dom::others::TempoChange:

Public Member Functions

 TempoChange (const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper, Inci inci)
 Constructor function.
 
int getAbsoluteTempo (NoteType noteType=NoteType::Quarter) const
 Computes the absolute tempo represented by the TempoChange Instance.
 
- Public Member Functions inherited from musx::dom::OthersBase
Cmper getCmper () const
 Gets the cmper key value.
 
std::optional< IncigetInci () const
 Gets the optional array index (inci).
 
- Public Member Functions inherited from musx::dom::Base
virtual ~Base () noexcept(false)=default
 Virtual destructor for polymorphic behavior.
 
DocumentPtr getDocument () const
 Gets a reference to the Document.
 
Cmper getPartId () const
 Gets the partId for this instance (or 0 for score)
 
std::shared_ptr< others::PartDefinitiongetPartDefinition () const
 Gets the others::PartDefinition corresponding to getPartId.
 
ShareMode getShareMode () const
 Gets the sharing mode for this instance.
 
const SharedNodesgetUnlinkedNodes () const
 Gets the unlinked nodes for this instance. (Only populated for ShareMode::Partial)
 
void addUnlinkedNode (const std::string &nodeName)
 Adds a shared node for this instance.
 
virtual void integrityCheck ()
 Allows a class to determine if it has been properly contructed by the factory and fix issues that it can, such as creating default instances of contained classes.
 
virtual bool requireAllFields () const
 Specifies if the parser should alert (print or throw) when an unknown xml tag is found for this class.
 

Static Public Member Functions

static const xml::XmlElementArray< TempoChange > & xmlMappingArray ()
 Required for musx::factory::FieldPopulator.
 

Public Attributes

int ratio {}
 
Edu eduPosition {}
 The position within the measure. (xml node is <eldur>)
 
int unit {}
 Hardware ticks/sec. For Macs this is 1000.
 
bool isRelative
 

Static Public Attributes

static constexpr std::string_view XmlNodeName = "tempoDef"
 The XML node name for this type.
 

Additional Inherited Members

- Public Types inherited from musx::dom::Base
enum class  ShareMode { All , Partial , None }
 Describes how this instance is shared between part and score. More...
 
using SharedNodes = std::set< std::string >
 The container type for shared nodes.
 
- Protected Member Functions inherited from musx::dom::OthersBase
 OthersBase (const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper, std::optional< Inci > inci=std::nullopt)
 Constructs an OthersBase object.
 
- Protected Member Functions inherited from musx::dom::Base
 Base (const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode)
 Constructs the base class and enforces the static constexpr XmlNodeName.
 
Baseoperator= (const Base &)
 assignment constructor: m_unlinkedNodes is intentionally omitted
 

Detailed Description

A single tempo change value entered with Finale's Tempo tool.

Although the Finale UI dropped the Tempo tool around 2010, the notation engine still supported them. It was always possible (even as late as Finale 27.4) to add tempo changes using third-pary plugins.

The most common tool for creating TempoChange instances was the plugin JW Tempo. It only ever used absolute ratios, so the focus of this class is on them.

The cmper is the measure number, and incis should be stored in order by eduPosition.

This class is identified by the XML node name "tempoDef".

Member Function Documentation

◆ getAbsoluteTempo()

int musx::dom::others::TempoChange::getAbsoluteTempo ( NoteType  noteType = NoteType::Quarter) const

Computes the absolute tempo represented by the TempoChange Instance.

Parameters
noteTypeoptional note type for which to get the beats per minute. (The default is NoteType::Quarter.)
Returns
The per minute value.
Exceptions
std::logic_errorif this instance represents a relative tempo.

Member Data Documentation

◆ isRelative

bool musx::dom::others::TempoChange::isRelative

A computed value that determines if ratio is relative or absolute. This value is not represented in the xml but instead captures whether the ratio property was populated from <relativeRatio> or <absoluteRatio>.

◆ ratio

int musx::dom::others::TempoChange::ratio {}

Absolute or relative ratio. Relative ratios are are a percent value * 10. 100% would have a value of 1000. See getAbsoluteTempo for how to use absolute ratios. The xml provides one of two nodes for this field: <relativeRatio> or <absoluteRatio>.