GUIDOLib  1.7.7
Guido Engine Internal Documentation
ARMeter.h
1 #ifndef ARMeter_H
2 #define ARMeter_H
3 
4 /*
5  GUIDO Library
6  Copyright (C) 2002 Holger Hoos, Juergen Kilian, Kai Renz
7  Copyright (C) 2002-2017 Grame
8 
9  This Source Code Form is subject to the terms of the Mozilla Public
10  License, v. 2.0. If a copy of the MPL was not distributed with this
11  file, You can obtain one at http://mozilla.org/MPL/2.0/.
12 
13  Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
14  research@grame.fr
15 
16 */
17 
18 #include <string>
19 
20 #include "ARMTParameter.h"
21 #include "Fraction.h"
22 
23 /*@mkdoc
24 
25 @group:Clef Key Meter
26 
27 @tagname:\meter
28 @tagalias:
29 @tagtype:P
30 @tagnotation:time signatures
31 @tagdesc
32 The **\meter** tag displays a time signature.
33 @tagend
34 
35 
36 @params:
37 @param:type:string:C, c, C/, c/<br />a rational string<br />a complex time signature string:4/4:false
38 @param:autoBarlines:boolean:control automatic barlines:on:true
39 @param:autoMeasuresNum:string:on, off, system, page:off:true
40 @param:group:boolean:control complex meter appearance:off:true
41 @param:hidden:boolean:to be used to hide the meter:off:true
42 @paramdesc
43 - C, c, C/, c/ : a C or a crossed C meter.
44 - complex time strings are in on of the following forms:
45  - a) "a+b+...+n/d" a rational with a sum as numerator
46  - b) "a/b + c/d" a sum of rationals
47  - c) a combination of a) and b)
48 - **autoMeasuresNum** activates automatic measures numbering and supports 3 modes:
49  - on: the measure number is displayed at every bar
50  - system: the measure number is displayed on every system only
51  - page: the measure number is displayed on every page only
52 - **group** applies to complex time signatures and control how the a) form encountered in a c) form is displayed: when **group** if off, the a) form is transformed in a b) form
53 
54 See the [Meter](@EXAMPLES/clefkeymeter/) example.
55 
56 See also the [Sonata](@EXAMPLES/cpebach/) example for measure numbers at system level.
57 @paramend
58 
59 */
60 
61 
64 class ARMeter : public ARMTParameter
65 {
66  public:
67  enum metertype { NONE, NUMERIC, C, C2 };
69 
70  ARMeter();
71  ARMeter(int p_numerator, int p_denominator);
72  virtual ~ARMeter() {}
73 
74  virtual bool IsStateTag() const { return true; }
75 
76  virtual int getOrder() const { return kMeterOrder; }
77  virtual const char* getParamsStr() const { return kARMeterParams; };
78  virtual const char* getTagName() const { return "ARMeter"; };
79  virtual std::string getGMNName() const { return "\\meter"; };
80 
81  virtual void setTagParameters (const TagParameterMap& params);
82 
83  int getAutoBarlines() const { return fAutoBarlines; }
84  int getAutoMeasuresNum() const { return fAutoMeasuresNum; }
85  bool isSingleUnit() const { return fSingleUnit; }
86  bool groupComplex() const { return fGroupComplex; }
87  bool hidden() const { return fHidden; }
88 
89  const std::vector<Fraction>& getMeters()const { return fMetersVector; }
90  int getNumerator() const { return fMeterDuration.getNumerator(); }
91  int getDenominator() const { return fMeterDuration.getDenominator(); }
92  TYPE_DURATION getMeterDuration() const { return fMeterDuration; }
93 
94  metertype getMeterType() const { return fType; }
95  const char* getName() const { return fMeterName.c_str(); }
96 
97  int getMeasureNum() const { return mnum; }
98  void setMeasureNum(int p_num) { mnum = p_num; }
99 
100  const TYPE_TIMEPOSITION & getTimeOffset() const { return timeoffset; }
101  void setTimeOffset(const TYPE_TIMEPOSITION &tp) { timeoffset = tp; }
102  ARMusicalObject *isARMeter() { return this; }
103 
104  const std::vector<Fraction>& getMetersVector() const { return fMetersVector; }
105 
106  protected:
107  // timeoffset describes the offset from the current meter-position within a staff.
108  // This is set and read by GRStaff
110  // mnum is the MeasureNumber. It is set and read through GRStaff.
111  int mnum;
112 
113  private:
114  bool isNumeric (const std::string& meter) const;
115  bool singleUnit (const std::vector<Fraction>& m) const;
116  void setMeter (const std::string& str);
117  Fraction str2meter (std::string str) const;
118  Fraction metersDuration (const std::vector<Fraction>& m) const;
119  const std::vector<Fraction> finalizeMeters (const std::vector<Fraction>& m) const;
120  const std::vector<Fraction> parseMeters (std::string str) const;
121 
122  bool fAutoBarlines;
123  int fAutoMeasuresNum;
124 
125  std::string fMeterName;
126  std::vector<Fraction> fMetersVector;
127  Fraction fMeterDuration;
128  bool fSingleUnit; // a flag that indicates if one or several units are used
129  bool fGroupComplex; // a flag that indicates if complex meters must be grouped by common denominator
130  metertype fType;
131  bool fHidden = false;
132 };
133 
134 #endif
ARMeter::setTagParameters
virtual void setTagParameters(const TagParameterMap &params)
ARMeter::getMeters
const std::vector< Fraction > & getMeters() const
Definition: ARMeter.h:89
ARMeter::kAutoMeasureNum
Definition: ARMeter.h:68
ARMeter::getMeasureNum
int getMeasureNum() const
Definition: ARMeter.h:97
ARMeter::IsStateTag
virtual bool IsStateTag() const
Definition: ARMeter.h:74
ARMeter
not yet documented
Definition: ARMeter.h:64
ARMeter::getTimeOffset
const TYPE_TIMEPOSITION & getTimeOffset() const
Definition: ARMeter.h:100
ARMeter::setTimeOffset
void setTimeOffset(const TYPE_TIMEPOSITION &tp)
Definition: ARMeter.h:101
ARMeter::getAutoMeasuresNum
int getAutoMeasuresNum() const
Definition: ARMeter.h:84
ARMeter::C2
Definition: ARMeter.h:67
Fraction
Numerator and denominator.
Definition: Fraction.h:23
ARMusicalTag::kMeterOrder
Definition: ARMusicalTag.h:40
ARMeter::hidden
bool hidden() const
Definition: ARMeter.h:87
ARMTParameter
not yet documented
Definition: ARMTParameter.h:24
ARMeter::getTagName
virtual const char * getTagName() const
Definition: ARMeter.h:78
ARMeter::getGMNName
virtual std::string getGMNName() const
Definition: ARMeter.h:79
ARMeter::C
Definition: ARMeter.h:67
ARMeter::getOrder
virtual int getOrder() const
Definition: ARMeter.h:76
ARMeter::ARMeter
ARMeter()
ARMeter::kAutoMeasureNumPage
Definition: ARMeter.h:68
ARMeter::mnum
int mnum
Definition: ARMeter.h:111
ARMeter::~ARMeter
virtual ~ARMeter()
Definition: ARMeter.h:72
Fraction::getDenominator
int getDenominator() const
Definition: Fraction.h:92
ARMeter::getMetersVector
const std::vector< Fraction > & getMetersVector() const
Definition: ARMeter.h:104
ARMeter::isSingleUnit
bool isSingleUnit() const
Definition: ARMeter.h:85
ARMeter::getMeterType
metertype getMeterType() const
Definition: ARMeter.h:94
ARMeter::getMeterDuration
TYPE_DURATION getMeterDuration() const
Definition: ARMeter.h:92
ARMeter::NUMERIC
Definition: ARMeter.h:67
ARMeter::timeoffset
TYPE_TIMEPOSITION timeoffset
Definition: ARMeter.h:109
ARMeter::getDenominator
int getDenominator() const
Definition: ARMeter.h:91
ARMeter::isARMeter
ARMusicalObject * isARMeter()
Definition: ARMeter.h:102
ARMeter::getNumerator
int getNumerator() const
Definition: ARMeter.h:90
ARMeter::kAutoMeasureNumSystem
Definition: ARMeter.h:68
ARMeter::getParamsStr
virtual const char * getParamsStr() const
Definition: ARMeter.h:77
ARMeter::metertype
metertype
Definition: ARMeter.h:67
TagParameterMap
A list of tag parameters represented as a map.
Definition: TagParameterMap.h:31
ARMusicalObject
The base class for all AR objects. It contains all musical information : duration and time position.
Definition: ARMusicalObject.h:33
ARMeter::kNoAutoMeasureNum
Definition: ARMeter.h:68
ARMeter::groupComplex
bool groupComplex() const
Definition: ARMeter.h:86
ARMeter::NONE
Definition: ARMeter.h:67
Fraction::getNumerator
int getNumerator() const
Definition: Fraction.h:91
ARMeter::getAutoBarlines
int getAutoBarlines() const
Definition: ARMeter.h:83
ARMeter::getName
const char * getName() const
Definition: ARMeter.h:95
ARMeter::setMeasureNum
void setMeasureNum(int p_num)
Definition: ARMeter.h:98

Guido Project Copyright © 2019 Grame-CNCM