<注>Win7ではうまく音が出ないことが有ります。
サウンドカード(ボード)をパソコンに増設している人は多くないので、Windowsが標準で備えているメッセージ音を使って付属のスピーカーを鳴らしてみることにします。
それは電子機器が発する「ピッ」または「ピー」というおなじみの電子音で、任意に鳴らすには「Beep」という命令を使用します。
今回この説明をするのは、(84)「斜めドップラー効果」(2014.3.6Up 音波-5)でこの「Beep」を使用したからです。
Sheet1のVBエディタを開いてご覧ください。(標準モジュールではPrivateではなくPublic宣言にする)赤文字部分が救急車の「ピーポー」を再現するためにタイマーの中に新たに組み込んだ部分です。ただし、Beep関数を使うと音の長さが優先しTimerの⊿tとは無関係の動きになることがあります。
Private Declare Function Beep Lib "kernel32"
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long 'Beepもプロパティ宣言 これが大切!
Private 停止 As Boolean 'ストップの判定(論理判定)記号の宣言 これが大切!
----------------------------------------------------------------------------------------------------
Private Sub SpinButton2_Change() この部分は手動でタイマーを動かす時にも音が出るようにした部分
Beep Range("M32"), Range("G31")
Beep Range("M32") * 783.99 / 987.76, Range("G31") - 100
End Sub
-----------------------------------------------------------------------------------------------------
Private Sub CommandButton3_Click() 'Startボタン
'「 Private 停止 As Boolean 'ストップの判定 」の貼り付けとSTOPコマンドボタンの取り付けを忘れないように。
・・・・・・・・・・・・・・・・・・・・・・
略
・・・・・・・・・・・・・・・・・・・・・・
'*********************************************************************
'Range("I33") = Range("I33") + 10
Beep Range("M32"), Range("G31")
Beep Range("M32") * 783.99 / 987.76, Range("G31") - 100
Do Until Timer - 開始時刻 >= 経過時間 '(⊿t経つまでループする)
Loop
DoEvents
Loop
End Sub
-----------------------------------------------------------------------------------------------------
Beepの要素
Beep 周波数,音をだす時間(ミリ秒で指定)
したがって、600Hzの音を300ミリ秒鳴らすには、Beep 600,300 と記述します。
音の高さ(音階)
1オクターブ高い音は振動数が2倍で半音があり12段階(12半音)に分かれているので、振動数は1段階あたり2の12乗根(2^(1/12))倍ずつ高くなる。
平均律のラ=440Hz(調律基準)を基準に音階を計算してみると、
ラ=440
ラ#=440×(2^(1/12))=440×((2^(1/12)))^1≒466.1637615
シ=440×(2^(1/12))×(2^(1/12))=440×((2^(1/12)))^2≒493.8833013
ド=440×(2^(1/12))×(2^(1/12))×(2^(1/12))=440×((2^(1/12)))^3≒523.2511306
ド#=440×((2^(1/12)))^4≒554.365262
レ=440×((2^(1/12)))^5≒587.3295358
レ#=440×((2^(1/12)))^6≒622.2539674
ミ=440×((2^(1/12)))^7≒659.2551138
ファ=440×((2^(1/12)))^8≒698.4564629
ファ#=440×((2^(1/12)))^9≒739.9888454
ソ=440×((2^(1/12)))^10≒783.990872
ソ#=440×((2^(1/12)))^11≒830.6093952
ラ=440×((2^(1/12)))^12=880
(84)「斜めドップラー効果」の救急車の「ピー^ポー」は「シ」「ソ」と聞こえる気がしたので、493.8833013×2≒987.76Hzと783.990872≒783.99Hzを使用した。
音の長さ
物理なので音楽的に考えなくとも良いが、気になる人は次のように計算する。
例えば、テンポ120では、1分間に四分音符120個の速度なので、四分音符1個の音の長さは、60÷120=0.5秒=500ミリ秒となる。
したがって、高い四分音符の「ド」は Beep 1046.5,500 となる。