Entropy Piano Tuner  1.1.3 (documentation not yet complete)
An open-source experimental software for piano tuning by entropy minimization
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
piano.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright 2015 Haye Hinrichsen, Christoph Wick
3  *
4  * This file is part of Entropy Piano Tuner.
5  *
6  * Entropy Piano Tuner is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by the
8  * Free Software Foundation, either version 3 of the License, or (at your
9  * option) any later version.
10  *
11  * Entropy Piano Tuner is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14  * more details.
15  *
16  * You should have received a copy of the GNU General Public License along with
17  * Entropy Piano Tuner. If not, see http://www.gnu.org/licenses/.
18  *****************************************************************************/
19 
20 //=============================================================================
21 // Piano class
22 //=============================================================================
23 
24 #ifndef PIANO_H
25 #define PIANO_H
26 
27 #include <string>
28 #include <fstream>
29 
30 #include "keyboard.h"
31 #include "pianodefines.h"
32 
33 
39 
40 class Piano
41 {
42 public:
43  static const int DEFAULT_NUMBER_OF_KEYS;
44  static const int DEFAULT_KEY_NUMBER_OF_A;
45  static const int DEFAULT_KEYS_ON_BASS_BRIDGE;
46  static const double DEFAULT_CONCERT_PITCH;
47 
48 public:
49  Piano();
50  ~Piano() {};
51 
52  using Keys = std::vector<Key>;
53 
54  // access functions
55 
56  void setName(const std::string &name) {mName = name;}
57  const std::string &getName() const {return mName;}
58 
59  void setType(piano::PianoType type) {mType = type;}
62 
63  void setSerialNumber(const std::string &number) {mSerialNumber = number;}
64  const std::string &getSerialNumber() const {return mSerialNumber;}
65 
66  void setManufactureYear(const std::string &year) {mManufactureYear = year;}
67  const std::string &getManufactionYear() const {return mManufactureYear;}
68 
69  void setManufactureLocation(const std::string &loc) {mManufactureLocation = loc;}
70  const std::string &getManufactionLocation() const {return mManufactureLocation;}
71 
72  void setTuningLocation(const std::string &loc) {mTuningLocation = loc;}
73  const std::string &getTuningLocation() const {return mTuningLocation;}
74 
75  void setTuningTime(const std::string &time) {mTuningTime = time;}
77  const std::string &getTuningTime() const {return mTuningTime;}
78 
79  void setConcertPitch(double pitch) {mConcertPitch = pitch;}
80  const double &getConcertPitch() const {return mConcertPitch;}
81  double &getConcertPitch() {return mConcertPitch;}
82 
83  const Keyboard &getKeyboard() const {return mKeyboard;}
85 
86  const Key &getKey(int i) const {return mKeyboard[i];}
87  Key &getKey(int i) {return mKeyboard[i];}
88  const Key*getKeyPtr(int i) const {if (i < 0) return nullptr; else return &(mKeyboard[i]);}
89  Key *getKeyPtr(int i) {if (i<0) return nullptr; else return &(mKeyboard[i]);}
90 
91  void setKey (int i, const Key &key) { mKeyboard[i] = key; }
92 
93  // other:
94 
95  double getExpectedInharmonicity (double f) const;
96 
97  double getEqualTempFrequency (int keynumber, double cents=0, double A4=0) const;
98 
99  double getDefiningTempFrequency (int keynumber, double cents=0, double A4=0) const;
100 
101 
102 private:
104  std::string mName;
108  std::string mSerialNumber;
110  std::string mManufactureYear;
112  std::string mManufactureLocation;
113 
115  std::string mTuningLocation;
117  std::string mTuningTime;
120 
123 
124 };
125 
126 #endif // PIANO_H
void setConcertPitch(double pitch)
Definition: piano.h:79
piano::PianoType mType
type of the real piano
Definition: piano.h:106
double & getConcertPitch()
Definition: piano.h:81
Keyboard mKeyboard
the keyboard
Definition: piano.h:122
Key & getKey(int i)
Definition: piano.h:87
PianoType
Enumeration of piano types.
Definition: pianodefines.h:28
static const double DEFAULT_CONCERT_PITCH
default concert pitch of A
Definition: piano.h:46
const Key * getKeyPtr(int i) const
Definition: piano.h:88
double mConcertPitch
concert pitch (default 440 Hz)
Definition: piano.h:119
Class describing the piano keyboard, holding a collection of keys.
Definition: keyboard.h:39
piano::PianoType getPianoType() const
Definition: piano.h:60
void setName(const std::string &name)
Definition: piano.h:56
const std::string & getManufactionYear() const
Definition: piano.h:67
Keyboard & getKeyboard()
Definition: piano.h:84
double getDefiningTempFrequency(int keynumber, double cents=0, double A4=0) const
Compute the defining temperatent.
Definition: piano.cpp:148
Class describing a single piano key.
Definition: key.h:45
static const int DEFAULT_KEY_NUMBER_OF_A
Definition: piano.h:44
Definition: piano.h:40
const std::string & getManufactionLocation() const
Definition: piano.h:70
Piano()
Constructor of the piano, initializing the member variables.
Definition: piano.cpp:45
double getEqualTempFrequency(int keynumber, double cents=0, double A4=0) const
Function returning the equal temperament.
Definition: piano.cpp:123
void setKey(int i, const Key &key)
Definition: piano.h:91
const std::string & getSerialNumber() const
Definition: piano.h:64
static const int DEFAULT_KEYS_ON_BASS_BRIDGE
Definition: piano.h:45
void setType(piano::PianoType type)
Definition: piano.h:59
void setSerialNumber(const std::string &number)
Definition: piano.h:63
~Piano()
Definition: piano.h:50
std::string mManufactureLocation
location where the piano was produced
Definition: piano.h:112
const Keyboard & getKeyboard() const
Definition: piano.h:83
std::string mName
name of the real piano
Definition: piano.h:104
void setTuningTimeToActualTime()
This function resets the tuning time to the actual time. This is used as default value.
Definition: piano.cpp:70
void setManufactureYear(const std::string &year)
Definition: piano.h:66
std::vector< Key > Keys
Definition: piano.h:52
static const int DEFAULT_NUMBER_OF_KEYS
Definition: piano.h:43
std::string mManufactureYear
manufaction year of the real piano
Definition: piano.h:110
std::string mSerialNumber
serial number of the real piano
Definition: piano.h:108
const std::string & getTuningTime() const
Definition: piano.h:77
std::string mTuningLocation
location where the piano is now
Definition: piano.h:115
const std::string & getTuningLocation() const
Definition: piano.h:73
const double & getConcertPitch() const
Definition: piano.h:80
std::string mTuningTime
time when the tuning hast been started (format yyyy-mm-dd HH:MM:SS, UTC)
Definition: piano.h:117
Key * getKeyPtr(int i)
Definition: piano.h:89
void setTuningLocation(const std::string &loc)
Definition: piano.h:72
void setManufactureLocation(const std::string &loc)
Definition: piano.h:69
double getExpectedInharmonicity(double f) const
Compute expected approximative inharmonicity.
Definition: piano.cpp:102
const std::string & getName() const
Definition: piano.h:57
void setTuningTime(const std::string &time)
Definition: piano.h:75
const Key & getKey(int i) const
Definition: piano.h:86
piano::PianoType & getPianoType()
Definition: piano.h:61