2020.07.22 波形処理 第2回 平均律と純正律 (2020.08.23更新)
YouTubeでポイントを説明しています。画像をクリックすると再生できます。
波形処理第1回では音の基本となる波を、三角関数を使って作り出しました。
第2回では音程と音階を作っていきます。
音程とは、音の高さではなく、音と音との隔たりを指し、音階は音の高さにより昇順あるいは降順にならべたものです。
■ピタゴラス音律
まず最初に疑問に思うのが、1オクターブがなぜ12個の音で構成されているかです。
この起源は、ギリシャ時代のピタゴラスにまで遡ります。
ピタゴラスは一弦琴を2つ並べ、基本音とその3倍音を同時に弾くと心地よく響くことを発見しました。
ピタゴラスは基準となる音(根音)の周波数を3倍して、根音から1オクターブ内に収まるように2で割って、音を重ね合わせていきました。
これはピタゴラス音律と呼ばれ、12個の音で構成されています。
ピタゴラス音律に関しては、次回「黒鍵と白鍵」で詳しくみていきます。
音律の系譜は、ピタゴラス音律→純正律→ミーントーン→ウェル・テンペラメント→平均律と流れていきます。
■平均律
ヨーロッパで最初に平均律を2の12乗根に基づいて算出したのは数学者、物理学者であるシモン・ステヴィン(Simon Stevin、1548年 - 1620年、フランドル(現:ベルギー)ブルッヘ出身)です。
イタリアの天文学者、哲学者、物理学者であるガリレオ・ガリレイよりも早く落下の法則を発見し、また、ヨーロッパで初めて小数を提唱したとして名高く。また、力の平行四辺形の法則の発見者としても知られています。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
平均律の音程では、1オクターブの中に含まれる12個の半音程をすべて等しく配置します。
つまり、音の周波数は2の12乗根を公比とする等比数列になっています。
実際の音の周波数は、(基準になる音)×2(n/12)となります。1オクターブ上の音は、2(12/12)=21=2で、基準となる音の2倍の周波数になります。
実際に、python で基準音の周波数を1として、平均律による音の周波数の比率を求めてみます。
$ vi equaltemp.py
if __name__ == '__main__':
print('1.000')
for i in range(1,13):
print('2^({0:d}/12) = {1:.3f}'.format(i,round(2**(i/12),3)))
$ python3 equaltemp.py
1.000
2^(1/12) = 1.059
2^(2/12) = 1.122
2^(3/12) = 1.189
2^(4/12) = 1.260
2^(5/12) = 1.335
2^(6/12) = 1.414
2^(7/12) = 1.498
2^(8/12) = 1.587
2^(9/12) = 1.682
2^(10/12) = 1.782
2^(11/12) = 1.888
2^(12/12) = 2.000
みてわかるように、オクターブ以外の音程に対応する周波数比は整数比にはなりません。
1つの音を鳴らす分には問題ありませんが、複数の音を同時に鳴らすと濁った音になり、平均律の音程では、きれいな音は得られません。
心地よく響く音は、基準となる音(主音)との周波数比が単純な整数比になる必要があります。
つまり、重なり合った音の、周波数比の最小公倍数が小さいほど、短い周期で同じ合成波形を繰り返し、澄んだ音になります。
澄んだ音にするには、音楽の専門家のような複雑な知識は必要ありません。
音程をできるだけ単純な整数比になるように、プログラムで比率を補正してしまいましょう。
まずは、周波数比1~2の1オクターブの範囲で分数を生成していきます。
3/2,4/3,5/3,5/4,6/4,7/4・・・
平均律の等比数列の値を、この分数で割って、1に近い値となる分数を採用します。
例えば、2^(4/12)の比率1.260を例にとると
1.260/(3/2)=0.8400
1.260/(4/3)=0.9450
1.260/(5/3)=0.7560
1.260/(5/4)=1.0080
プログラムを書くと、こんな感じになります。
$ vi justtemp.py
def ratio(target):
loop = 100
frac, denom = 3,2
error = 0.0095
while loop:
diff = abs(target*denom/frac -1)
if diff < error:
just = frac/denom;
print('{0:d}/{1:d}={2:.3f}'.format(frac,denom,just))
return
else:
frac +=1
if (frac/denom)>=2.0:
denom +=1
frac = denom + 1
loop -= 1
print('{0:d}/{1:d}'.format(frac,denom))
if __name__ == '__main__':
print('1.000')
for i in range(1,12):
hz = round(2**(i/12),3)
print('{0:.3f} '.format(hz),end="")
ratio(hz)
プログラムを実行してみます。
$ python3 justtemp.py
1.000
1.059 16/15=1.067
1.122 9/8=1.125
1.189 6/5=1.200
1.260 5/4=1.250
1.335 4/3=1.333
1.414 17/12=1.417
1.498 3/2=1.500
1.587 8/5=1.600
1.682 5/3=1.667
1.782 16/9=1.778
1.888 15/8=1.875
左側の値が平均律、真ん中が補正した整数比、右が真ん中の分数の値です。
この補正した音階は純正律音階(ツァルリーノ音階)になっていて、音階内の多くの和音が美しく響きます。
音階の構成音の周波数比を純正律音階と平均律音階で比較すると、下記のようになります。
平均律 |
1 | 1.059 | 1.122 | 1.189 | 1.260 | 1.335 | 1.414 | 1.498 | 1.587 | 1.682 | 1.782 | 1.888 |
純正律 |
1 | 1.067 | 1.125 | 1.200 | 1.250 | 1.333 | 1.417 | 1.500 | 1.600 | 1.667 | 1.778 | 1.875 |
1 | 16/15 | 9/8 | 6/5 | 5/4 | 4/3 | 17/12 | 3/2 | 8/5 | 5/3 | 16/9 | 15/8 |
純正律における基準となる音をドとして、ハ長調の音階に当てはめてみましょう。
C | D | E | F | G | A | B |
1 | 1.125 | 1.250 | 1.333 | 1.500 | 1.667 | 1.875 |
1 | 9/8 | 5/4 | 4/3 | 3/2 | 5/3 | 15/8 |
主要3和音の周波数比をみてみると
ド:ミ:ソ | = | 1:5/4:3/2 | = | 4:5:6 |
ファ:ラ:ド | = | 4/3:5/3:2 | = | 4:5:6 |
ソ:シ:レ | = | 3/2:15/8:(9/8)*2 | = | 12:15:18 = 4:5:6 |
すべての周波数比は、4:5:6と単純な比率になっています。
この中の一番高い音を1オクターブ下げた転回音程をとると、6/2=3、周波数比でいうと、4:5:3になり、ピタゴラスの定理にてでくる整数比に一致するから不思議です。
ピタゴラスの定理(三平方の定理)

ピタゴラスの定理では、直角三角形において、斜辺の長さを c, 他の2辺の長さを a, b とすると、
a2+b2=c2 という関係が成り立ちます。
この際、a,b,c の最も簡単な整数比は a:b:c=3:4:5 となります。この均衡のとれた3,4,5という比率はとても魅力的で
さらに、aとbとcを足してできる12という数字も意味深いものに思えてきます。
ここで、1つ問題があります。
D | E | F# | G | A | B | C# |
1.125 | 1.250 | 1.417 | 1.500 | 1.667 | 1.875 | 1.067 |
9/8 | 5/4 | 17/12 | 3/2 | 5/3 | 15/8 | 16/15 |
ドを基準音として組み立てた場合には、綺麗な周波数比になりますが、
このままの状態で、レを基準とするニ長調に適用しようととすると、二長調の主要3和音は簡単な周波数比ではなくなり、二長調の主和音は濁った響きになってしまいます。
レ:ファ#:ラ | = | 9/8:17/12:5/3 | = | 27:34:40 |
ソ:シ:レ | = | 3/2:15/8:(9/8)*2 | = | 12:15:18 = 4:5:6 |
ラ:ド#:ミ | = | 5/3:(16/15)*2:(5/4)*2 | = | 100:128:150 = 50:64:75 |
このように、純正律音階は移調すると美しい響きが失われてしまいます。
これは、純正律では音階の中に、周波数比9/8と10/9の2通りの全音音程が存在することが原因です。
ド:レ=ファ:ソ=ラ:シ=8:9
レ:ミ=ソ:ラ=9:10
コンピュータで音階を作るのであれば、ニ長調の場合は基準音をレとして、音程を配置すればよく、造作ないことですが、
生のピアノを調律する場合にはそうはいきません。
ドの音を基準に調律すると、ハ長調はきれいに響き、二長調は濁った響きになってしまいます。
平均律の利点は、音の濁りは発生するものの、すべての音程が均一なので移調は自由にできるという点です。
調律の現場では、ピアノの調律はほとんど平均律で行っているようです。
最後に周波数比4:5:6となる和音の波形を合成してみます。
$ vi chord.py
import matplotlib.pyplot as plt
import math
if __name__ == '__main__':
lcm = 16
sampling = 64
amplitude = [0]*sampling*lcm
cycle = [0]*sampling*lcm
for i in range(0,sampling*lcm):
amplitude4 = math.sin(2*math.pi*i/sampling)
amplitude5 = math.sin(2*math.pi*(5/4)*i/sampling)
amplitude6 = math.sin(2*math.pi*(3/2)*i/sampling)
amplitude[i] = amplitude4 + amplitude5 + amplitude6
cycle[i] = i/sampling
plt.plot(cycle, amplitude)
plt.show()
plt.close()
$ python3 chord.py

短い周期の中で、同じ波形が繰り返されているのがわかります。
今回、説明なしにいきなり、ハ長調、二長調という用語を使用してしまいました。
また、ピアノでいうところの白鍵、#の付いた黒鍵など、その成り立ちについてはまた改めて考えていきたいと思います。
■参考文献
・小林 亮 広島大学大学院理学研究科 - 音の波と三角関数
・音律と音階の科学 小方厚著 講談社
|

【深層学習関連】
【画像処理関連】

【音楽関連】

【WEBサイト構築関連】

【開発環境関連】

【SNS関連】

【周辺機器関連】

【その他】

トランジスタ技術 2021年1月号
特集: アナログ回路はノイズと闘う ~システムの性能を維持して安定な動作を実現するために~
Interface 2021年1月号
☆特集 Jetson/ラズパイ/PCで自習 Python画像処理100
☆特別付録:コンピュータ手帳2021
日経Linux 2021年 1月号
★超保存版・冊子付録 Ubuntu完全対応 Linuxコマンド逆引き大辞典 264項目
★付録DVD 特集連動2本入り「Ubuntu 20.10 日本語Remix」「Ubuntu Server20.10」
ラズパイマガジン2020年12月号
温度、距離、におい、圧力など、さまざまな種類のセンサー350種類を一挙に紹介します。特性や価格を示した一覧表を用意したので、用途に合った適切な製品を選べます。そのうちの34種類のセンサーは、仕組みから配線図まで図解で分かりやすく解説します。
15Stepで踏破 自然言語処理アプリケーション開発入門
エンジニアの実務に役立つ知識に絞り、独自に15の学習ステップを体系化しました。
数値計算にNumPy、形態素解析にMeCab、機械学習にscikit-learn、ディープラーニングに
Keras等を使い、Pythonのコードを記述し動かしていきます。
プログラミング・ビットコイン ―ゼロからビットコインをプログラムする方法
Linuxサーバーがゼロから作れる本
このLinuxを使いこなす上で一番手っ取り早いのが自分でLinuxサーバーを構築してみることです。
WindowsやMacのパソコンしか使ったことが無い人でも理解できるよう、
しくみや手順の解説を丁寧にまとめ上げた、ゼロからのサーバー入門ガイドです。
Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品
【仕様概要】CPU:ARM 1.2GHz 4コア、GPU:2コア 3D・動画支援、RAM:1GB、ネットワーク:LAN/Wi-Fi/Bluetooth、インターフェース:USB/HDMI/オーディオ/GPIO(UART/I2C/I2S/SPI...)。
Arduino Nano
ATmega328搭載/
動作電圧: 5V/
入力電源電圧(推奨):7~12V/
デジタル入出力ピン: 14本/
PWMチャンネル: 6本/
アナログ入力チャンネル: 8本/
直流電流(1ピン当り最大): 40 mA/
直流電流(3.3Vピン、1ピン当り最大): 50 mA/
Flashメモリ: 32 KB (ATmega328) 内2KBはブートローダーで使用/
SRAM: 2 KB (ATmega328)/
EEPROM: 1 KB (ATmega328)/
Clock Speed: 16 MHz
逆引き PIC電子工作 やりたいこと事典
機能が豊富で、速度・アナログ制御・省電力性・コストの面でもアドバンテージをもつPICマイコン。そんなPICマイコンの使い方を、目的別にやりたいことから引ける、逆引きタイプのガイドブックです。
C言語による PICプログラミング大全
2002年に初版、2009年に第2版を発売した名著『C言語によるPICプログラミング入門』
が大幅リニューアルし「大全」として生まれ変わりました。
本書では、機能豊富なPIC16F1シリーズを使いこなすために、統合開発環境を
MPLAB X IDEに、CコンパイラはMicrochip Technology社純正のXC8に、それぞれ変更しました。
C言語でPICマイコンのプログラミングを始めたい方から、最新のPICマイコンの機能をとことん使い倒したい方まで、必ず役に立つ1冊です。
PICと楽しむRaspberry Pi活用ガイドブック
「PICマイコン+Raspberry Pi3B」という組み合わせで、高機能な電子工作を簡単に実現し、電子工作を各段に高度化する方法について解説していきます。
ESP32&Arduino 電子工作 プログラミング入門
電子工作ファンに人気のマイコンArduino、そしてWiFiとBluetooth内蔵でネットワーク接続しやすいESP32。それらのマイコンでプログラムを組む際に使うのが「Arduino言語」です。
超特急Web接続!ESPマイコン・プログラム全集
IoT技術の回路とプログラムを解説しました.
トランジスタ技術2016年9月号と2017年3月号の特集に
最新の情報を加筆して一冊に仕上げました.
回路とプログラムのサンプル資料として最適です.
ラズベリー・パイやIchigoJamを連動させた例も紹介しています
M5Stack用カード型キーボードユニット
M5Stackにフル機能のQWERTY配列キーボードを実装できるユニットです。複数のボタンの組み合わせ(Sym + Key、Shift + Key、Fn + Key)や豊富なキーの値を出力することが可能です。
Ubuntu サーバー徹底構築
サーバー用UbuntuでLinuxサーバーを構築しよう!
導入からLinuxやコマンドの基本、各種サーバー構築、バックアップやストレージ管理まで!
サーバー用Linuxディストリビューションとして定評のあるUbuntu Serverの中でも、
10年長期サポート版であるUbuntu Server 18.04 LTSに対応!
[改訂第3版]Linuxコマンドポケットリファレンス
本書はLinux操作に必要なコマンドを収録したポケットリファレンスです。機能別にコマンドを分類し、各コマンドページでは書式/使用例などをコンパクトにまとめています。またアルファベット順索引も用意しており、名前しかわからなくてもすぐに目的のコマンドを探すことができます。今回の改訂では仮想化、データベース、クラウド時代に対応したネットワークコマンドなどを追加しています。おもなLinuxディストリビューションのCentOS、Fedora、Debian GNU/Linux、Ubuntuに対応し、初心者から上級者まで必携の1冊です。
できるPRO Apache Webサーバー 改訂版 Version 2.4/2.2/2.0対応
番のApache独学書を改訂しました!
CentOS、Ubuntu、Windows、Mac OS Xに対応しています。できるPROシリーズは、実際の画面や詳細なイラスト、概念図などで構成。
はじめての方でも理解しやすくなっています。
インストール、アクセス制限、CGI、モジュール拡張、ログ管理など、基本的なことから実践的なことまでていねいに解説しています。
[改訂第3版]PHPポケットリファレンス
PHPを利用したいすべての方必携の「PHPポケットリファレンス」最新版がついに登場! PHP 5/4による開発の際によく利用される機能を集約し、必要な知識を目的別、逆引きでまとめました。PHP5.3以降を対象とし、PHP4からある機能はPHP4でも利用できることがわかるようになっています。またオブジェクト指向型のAPI解説を大幅に強化。開発の現場には1冊置いておきたい書籍です。
MySQL ポケットリファレンス
MySQLはさまざまなWebサービスの中核を担うデータベースです。本書はMySQLの基礎的な内容を中心に、日常的によく使うちょっとしたコマンドや、外部管理ツールとの連携など、MySQLの管理/運用にあたって便利な情報を素早く探し出すことができます。MySQL自体の操作、MySQL特有のコマンド、MySQL専用管理ツール、PHPからの操作など、MySQLを実際に使っているユーザーに役立つ内容となっています。
Postfix詳解―MTAの理解とメールサーバの構築・運用
電子メールの配送システムの中核を担うプログラム「MTA」(Message Transfer Agent)のひとつが、「Postfix」です。 この全容を記した本です。
すところなく解説していきます。
DNSがよくわかる教科書
本書では、DNSの仕組みから、ドメイン名のルール、主なリソースレコードの内容、コマンドによる動作確認、DNSの運用ノウハウ、DNSSECの基礎知識まで、順を追ってやさしく解説します。
|