数式での翻訳 |
---|
調\(N\)と階名\(n\)に対し、 \[ \textrm{Seventh}_{N,n} = (\textrm{OnMeiTable}(N,n+2i))_{i=0}^{3} \] と置きます。\(n,n+2,n+4,n+6 \in \textrm{KaiMei}\)が互いに異なることから\(\textrm{Seventh}_{N,n} \in \textrm{YonWaOn}\)となります。\(\textrm{Seventh}_{N,n}\)の同値類である\(4\)和音を\(\overline{\textrm{Seventh}}_{N,n}\)と置きます。
\(4\)和音\(H\)が七の和音であるとは、\(H = \overline{\textrm{Seventh}}_{N,n}\)を満たす調\(N\)と階名\(n\)が存在するということです。この時、\(H\)は調\(N\)における七の和音であると言います。七の和音全体のなす部分集合を\(\textrm{Seventh} \subset \overline{\textrm{YonWaOn}}\)と置きます。七の和音は協和音と違って定義に現れる階名に制限がないことに注意しましょう。
\(H\)が七の和音の時、\(H = \overline{\textrm{Seventh}}_{N,n}\)かつ\(n \neq \textrm{VII}\)を満たす調\(N\)と階名\(n\)は一意ではありません。実際、\((\textrm{Do} \textrm{ChouOnKai},\textrm{I}) \neq (\textrm{So} \textrm{ChouOnKai},\textrm{IV})\)である一方で\(\overline{\textrm{Seventh}}_{\textrm{Do} \textrm{ChouOnKai},\textrm{I}} = \overline{\textrm{Seventh}}_{\textrm{So} \textrm{ChouOnKai},\textrm{IV}}\)となります。その意味で「七の和音の調」や「七の和音の階名」はill-definedです。一方で調\(N\)を固定した時、\(H\)が調\(N\)における七の和音であるならば、\(H = \overline{\textrm{Seventh}}_{N,n}\)かつ\(n \neq \textrm{VII}\)を満たす階名\(n\)が一意に存在します。その意味で、「特定の調における七の和音の階名」はwell-definedとなります。ただしここでのwell-defined性は\(3\)和音の記事で解説したような商集合と写像を用いた定式化とはまた少し異なるものなので「その意味で」と断りを入れています。様々なwell-defined性の定式化がいずれも「与えられた論理式で一意に特徴付けが出来る」ということを表現していてよく似た概念であることが納得できれば、同じ「well-defined」という用語で形容したくなる気持ちが分かると思います。
さて協和音に対して根音等の概念を定義したのと同様の方法で七の和音に対しても根音等の概念を定義していきます。\(4\)和音の記事で述べたように、写像\(\textrm{GetOnMei} \colon \textrm{YonWaOn} \times \{0,1,2,3\} \to \textrm{OnMei}\)はwell-definedな写像\(\overline{\textrm{YonWaOn}} \times \{0,1,2,3\} \to \textrm{OnMei}\)を誘導しません。協和音の記事で導入した用語に直すと、\(\textrm{GetOnMei}\)は標準射影を通じて\(\overline{\textrm{YonWaOn}} \times \{0,1,2,3\}\)を経由しない、ということになります。一方で写像 \[ \begin{align} (\textrm{Chou} \times \textrm{KaiMei}) \times \{0,1,2,3\} & \to \textrm{OnMei} \\
((N,n),i) & \mapsto \textrm{GetOnMei}(\textrm{Seventh}_{N,n},i) \end{align} \] は全射 \[ \begin{align} (\textrm{Chou} \times \textrm{KaiMei}) \times \{0,1,2,3\} & \twoheadrightarrow \textrm{Seventh} \times \{0,1,2,3\} \\
((N,n),i) & \mapsto (\overline{\textrm{Seventh}}_{N,n},i) \end{align} \] を通じて\(\textrm{Seventh} \times \{0,1,2,3\}\)を経由します。何故なら、七の和音\(H\)が調\(N\)と階名\(n\)を用いて\(\overline{\textrm{Seventh}}_{N,n}\)と表せる時、\(H\)の代表元\(\textrm{Seventh}_{N,n}\)は(\(H\)から一意に定まらない\(N\)と\(n\)を使うことなく\(H\)のみの情報を用いて)「\(H\)の代表元\((N_0,N_1,N_2,N_3)\)であって、\(N_0 = \textrm{GetOnMei}(P_0)\)かつ\(N_1 = \textrm{GetOnMei}(P_1)\)かつ\(N_2 = \textrm{GetOnMei}(P_2)\)かつ\(N_3 = \textrm{GetOnMei}(P_3)\)かつ\(\textrm{GetNoteNumber}(P_0) < \textrm{GetNoteNumber}(P_3)\)かつ\(P_0\)と\(P_1\)の音度と\(P_1\)と\(P_2\)の音度と\(P_2\)と\(P_3\)の音度が\(3\)であるようなピッチ\(P_0\)と\(P_1\)と\(P_2\)と\(P_3\)が存在するもの」と特徴付けることが出来るからです。こうして誘導されたwell-definedな写像 \[ \textrm{Seventh} \times \{0,1,2,3\} \to \textrm{OnMei} \] を\(\textrm{GetOnMei}\)とオーバーロードします。七の和音\(H\)に対し、\(\textrm{GetOnMei}(H,0)\)を\(H\)の根音と呼び、\(\textrm{GetOnMei}(H,1)\)を\(H\)の第三音と呼び、\(\textrm{GetOnMei}(H,2)\)を\(H\)の第五音と呼び、\(\textrm{GetOnMei}(H,3)\)を\(H\)の第七音と呼びます。
\(\textrm{GetOnMei} \colon \textrm{YonWaOn} \times \{0,1,2,3\} \to \textrm{OnMei}\)が標準射影を通じて\(\overline{\textrm{YonWaOn}} \times \{0,1,2,3\}\)を経由しないという意味で「\(4\)和音の\(1\)番目の音名」等はill-definedであった一方で、七の和音のみに絞ることで「\(1\)番目の音名」等の代わりとなる概念として根音等の概念を自然に定義することができました。
C++での宣言 |
---|
七の和音のクラスおよび関係する関数たちを以下のように宣言します。
class Seventh :
public YonWaOn
{
public:
inline Seventh( const Chou& N , const KaiMei& n ) noexcept;
inline const OnMei& GetNeOn() const noexcept;
inline const OnMei& GetDaiSanOn() const noexcept;
inline const OnMei& GetDaiGoOn() const noexcept;
inline const OnMei& GetDaiNanaOn() const noexcept;
};
inline bool operator==( const Seventh& H1 , const Seventh& H2 ) noexcept;
inline bool operator!=( const Seventh& H1 , const Seventh& H2 ) noexcept;
C++での定義 |
---|
実際の実装例についてはこちらをご覧下さい。実装においては以下の仕様を要請します。
inline Seventh::Seventh( const Chou& N , const KaiMei& n ) noexcept
はメンバ初期化子YonWaOn( N.OnMeiTable( n ) , N.OnMeiTable( n + 2 ) , N.OnMeiTable( n + 4 ) , N.OnMeiTable( n + 6 ) )
で定める。inline const OnMei& Seventh::GetNeOn() const noexcept
はreturn GetOnMei( 0 )
で定める。inline const OnMei& Seventh::GetDaiSanOn() const noexcept
はreturn GetOnMei( 1 )
で定める。inline const OnMei& Seventh::GetDaiGoOn() const noexcept
はreturn GetOnMei( 2 )
で定める。inline const OnMei& Seventh::GetDaiNanaOn() const noexcept
はreturn GetOnMei( 3 )
で定める。bool operator==( const Seventh& H1 , const Seventh& H2 ) noexcept
はH1.m_N0 == H2.m_N0
かつH1.m_N1 == H2.m_N1
かつH1.m_N2 == H2.m_N2
かつH1.m_N3 == H2.m_N3
であることとtrue
を返すことが同値である。inline bool operator!=( const Seventh& H1 , const Seventh& H2 ) noexcept
はreturn !( H1 == H2 )
で定める。