2017.11.30 Thu |
Pythonを使ってWindowsのビープ音で遊んでみる
WindowsのPCを使っていると,時々「ピッ」とか「ピー」といった音が鳴ることがあると思います.特に箱型をしてるような古いパソコンほどそんな音をよく聞くきもします.
いかにもパソコンっぽいこれらの音がどういった目的のために鳴らされているのか気になったので調べてみました.
どうやらこの音はビープ音と呼ばれていて,主にPCの不調を知らせる際に鳴らし不具合の原因を特定するために用いられるようです.
さらに調べてみたところ,これらの音はどうやらプログラムによって制御することで周波数を変えて鳴らすことができるとのことでした.
なかなか面白そうだったので,今回はPythonを使ってWindowsのビープ音で遊んでみました.
python2.7を使用,実行環境はwindows8.1を用いています.
周波数を変えて音を出せる→楽器として使えるのでは?→PCのキーボードの形をよく見る→ピアノに似てるんじゃね?(2段のキーが交互にずれて並んでいる.キーボードの上の段を黒鍵とみなせそう.)
という発想により,PCのキーボードでビープ音による録音再生機能つきのピアノを作ってみました.
…似てませんか?
ちょっと長いのですが,作成したコードはこちらになります.
まずビープ音はwinsoundモジュールをインポートし,
winsound.Beep(f,t)
という表記により鳴らしたい周波数f[Hz]と鳴らす時間t[ms]を決めることができます.
Beep関数では音色を決めることはできないので,ピアノの美しい音色を鳴らすことは残念ながらできません.
例えば440Hzの”ラ”の音を1秒間鳴らしたければ,
winsound.Beep(440,1000)
と記述すればOKです.
なるほど,ここまでで先ほどのように記述することでビープ音を鳴らしたい周波数と鳴らしたい時間で制御することができるようになりました.しかしここで疑問がひとつ生じます.
”音楽で用いるちゃんとした音程で鳴らすには周波数をどのように決めればよいのか?”
高校の物理の時間などで”ラ”の音が440Hzだと習って知っている人は多いかもしれません.しかし,そのほかの音はどう決定すればよいのでしょうか?
いまどきネットで検索すればいくらでも調べられますが,せっかくなのでピアノの音程と周波数との関係の話をします.
まず,先ほどの”ラ”の音(A3)を440Hzとします.
実際には各音の周波数の絶対値はさほど重要ではなく,音同士の周波数の関係(相対値)の方が重要になるのですが,ここではわかりやすく”ラ”の音(A3)を440Hzとします.
そして,この周波数の2倍,つまり880Hzが1オクターブ上の”ラ”の音(A4)になります.そして間の残りの音は,隣の音の周波数の比率が同じとなるように定められていきます.数学でいう等比数列のような関係になっているのです.
1オクターブの音階には全部で12個の音がありますから,1オクターブ上の音が2倍の周波数になるという関係を踏まえると,隣同士の音は
2の12乗根倍=1.0594…=約1.06倍
という関係になっています.
以上より,基本の”ド”の音(C3)からひとつ上の”ド”の音までを順に周波数で表すと以下のようになります.
ド(C3) : 262Hz
↓1.06(2の12乗根)倍
ド#(C#3) : 277Hz
↓1.06(2の12乗根)倍.以下同様
レ(D3) : 294Hz
↓
レ#(D#3) : 311Hz
↓
ミ(E3) : 330Hz
↓
ファ(F3) : 349Hz
↓
ファ#(F#3) : 370Hz
↓
ソ(G3) : 392Hz
↓
ソ#(G#3) : 415Hz
↓
ラ(A3) : 440Hz
↓
ラ#(A#3) : 466Hz
↓
シ(B3) : 494Hz
↓
高いド(C4) : 523Hz
こうして無事にピアノの1オクターブ分の音の周波数を決定することができました.
(この音程の決め方は「平均律」と言って,調が変わっても和音の構成音同士の周波数比が一定のため,曲の中で転調をする場合非常に便利な方法になります.
実はこの「平均律」は厳密にはきれいな和音を作ることができず,わずかながらうなりが生じてしまいます.そのためたくさんの音がなっていてうなりをかき消せるようなクラシックなどで用いられるのです.
転調をしない場合に限り厳密に綺麗な和音を作るには「純正律」という手法があります.こちらは少し複雑になるので,もし興味があれば調べてみてください.
ちなみに伝統的には純正律が用いられており,教会音楽などの綺麗なハーモニーを奏でる音楽では普通に用いられています.現代普通に聞かれているポップスなどの音楽は基本的に平均律です.)
少し長くなったのでプログラムコードの中を詳しく見ていくのは次回にします.
次の記事はこちらです.
【出典】
・http://net-shitsuji.jp/pc/repair/contents/beep.html
・http://d.hatena.ne.jp/aldente39/touch/20110402/1301725962
K.M
東京大学大学院 工学系研究科 修士課程1年