〈目 次〉
1.はじめに
2.ソフトウェアの図解
3.ソフトウェアの主な機能・特徴
4.起動方法
5.いくつかの実験例
 (1)0.01秒(10ミリ秒)間に振動する波の数の比較
 (2)音波のうなり及びグラフ図示
 (3)うなりを利用して、周波数未知の音叉の周波数、蛍光管から出る光の周波数の測定
 (4)音波の干渉の位相差による変化。
 (5)スペクトラムアナライザーWaveSpectraと連携して、音波の干渉の位相差による変化の測定。
 (6)弦の定常波
 (7)リサジュー
 (8)クラドニ図形
 〈発展:Grapesの利用〉
6.このソフトウエアのプロジェクト一式(ソースプログラム)の公開

〈本 文〉
1.はじめに

 物理の実験装置に低周波発振器がありますが、学校によっては古くなって壊れてしまったり、無かったりすることがあると思います。このソフトウェアはこの低周波発振器の機能を簡便にコンピュータ(PC)で行うことができるようにしたものです。レイアウトは見ればすぐに使えるシンプルなものにしてあります。教室にノートコンピュータと必要であればいくつかの実験装置を持って行き、短い時間で分かりやすい演示実験等を生徒に見せることができます。このソフトウェアはオープンソースで公開しているので、自由に利用・改変ができます。是非使ってみてください。

2.ソフトウェアの図解

3.ソフトウェアの主な機能・特徴
@周波数が連続的に変化する低周波をWindowsコンピュータ内で発振する。

 (周波数範囲は1〜2万2千ヘルツの正弦波)
A位相差を含めたステレオ発振ができる。左右別々に周波数を設定できる。
B波形(モノラル波、ステレオ波、合成波)をリアルタイムでグラフ表示させることができる。
C上記の機能及び他のソフトウェアとの連携による様々な実験ができる。


4.起動方法
 このソフトウェアはインストール不要の実行形式である。PCの任意の場所に連続可変低周波発振器フォルダーごとコピーして、その中の実行ファイル(連続可変低周波発振器.exe)をダブルクリックする。(ここをクリックしフォルダを開いてソフトウェアを起動させることもできる。このフォルダはCD内に入っている)

留意点
@連続可変低周波発振器.exe と NAudio.dll は同じフォルダに入れて使う。
Aこのソフトウェアが動作するためには、マイクロソフトが出している.NET Framework が必要である。連続可変低周波発振器.exeをダブルクリックしたときに対応する.NET FrameworkがPCに入っていなければメッセージが出るので、その時は.NET FrameworkVer.4.0をインストールして使用する。
(.NET Framework は無料でhttp://www.microsoft.com/ja-jp/download/details.aspx?id=17851等からダウンロード出来る)
B動作OS Windows XP、vista、7 で確認済み

5.いくつかの実験例

(1)0.01秒(10ミリ秒)間に振動する波の数の比較

〈グラフ開〉ボタンをクリックしてグラフ領域を表示させる。
例としてステレオ左の周波数を400Hz(左周波数テキストボックスに400と入力)、ステレオ右の周波数を800Hz(右周波数テキストボックスに800と入力)にする。右下にある〈表示時間幅設定〉バーをマウスを使って動かし、表示時間幅を10.0ミリ秒にする。〈ステレオ左波グラフ〉ボタンをクリック、次に〈ステレオ右波グラフ〉ボタンをクリックする。それぞれ、4波長、及び8波長が表示されていることを確認する。(0.01秒間に4波長が入っているのであれば、4/0.01=400Hzである)

(2)音波のうなり及びグラフ図示
@うなり
ステレオ左の周波数を500Hzにする。
ステレオ右の周波数を510Hzにする。
発振〈左〉ボタンをクリックして500Hzの音を聞く。
発振〈右〉ボタンをクリックして510Hzの音を聞く。
発振〈左右〉ボタンをクリックしてうなりを聞く。毎秒10回のうなりが聞こえることを確かめる。         
 この方法は、左右から別々の振動数の音が出て、音波が耳の位置で干渉してうなりとなって聞こえる。
 発振〈混合〉ボタンをクリックして左側のスピーカーから音を出すとより明瞭なうなりが聞こえる。この場合は、左のスピーカーに2つの振動数の電気信号が流れて、電気的に変化し、スピーカーを振動させる。言うなれば、電気信号的「うなり」現象である。上記の場合は、音の「うなり」現象である。
 次にこの様子をグラフで見る。〈グラフ開〉ボタンをクリックしてグラフ領域を表示させる。
〈ステレオ左波グラフ〉ボタン、〈ステレオ右波グラフ〉ボタン、及び〈合成波グラフ〉ボタンをクリックして波を表示させる。
〈表示時間幅設定〉バー、及び〈合成波移動〉バーを適宜動かして、観察する。
左右の波の山と山が重なると大きな波になり、山と谷が重なると打ち消し合っていることを確認する。

連続可変低周波発振器Ver.1.2の使用方法といくつかの実験例

A長周期のうなり
 モノラル周波数を、〈周波数0.1増減〉ボタンも使って400.2Hzにする。ステレオ周波数を左右とも400Hzにする。(位相差は0度)
 モノラル波の〈発振〉ボタン及びステレオ波の発振〈左右〉ボタンをクリックする。この時、毎秒0.2回、すなわち5秒に1回のうなりが聞こえることを確認する。

(3)うなりを利用して、周波数未知の音叉の周波数、蛍光管から出る 
 光の周波数の測定

@音叉と発振器からの音を同時に出し、発振器の周波数を連続的に変えてうなりが無くなる周波数を調べる。この時、1秒間あたりのうなりの回数が少なくなってきて、ゼロになったと思われるあたりで周波数を増減させると正確な値を見つけやすい。(なお、音叉の音をサウンドレコーダー等で録音し、PCオシロスコープと連携して調べるとより正確に測定できる。)
                         右は実験の様子を示す動画

A蛍光灯(インバーター蛍光灯でないもの)の光を光電池に当て、増幅器とスピーカーを使って音に変える。PCから発振器を使って連続変化させた音を出し、うなり現象を利用して交流の周波数を調べる。なお、50ヘルツの交流であれば毎秒100回の光(音)を出していることに気をつける。(蛍光灯からの光の周波数については、太陽電池からの電流をPCオシロスコープに入れて測定する方法もある)

(4)音波の干渉の位相差による変化。
@ステレオの左右の周波数を800ヘルツにする。位相差を0度にする。
発振〈左右〉ボタンをクリックする。次に位相差を180度にして、発振〈左右〉ボタンをクリックする。
位相差を0度にした場合と180度にした場合の聞こえる音の大きさを、2つのスピーカーから等距離の位置で聞いて、180度にした方がかなり小さくなることを確認する。

再生(位相差0度)

再生(位相差180度)

再生(500Hz)

再生(510Hz)

再生(うなり)

再生(長周期うなり)

A位相差を180度にして、発振〈混合〉ボタンをクリックする。音が完全に打ち消し合っていることが確認できる。グラフ表示してみると、左右の波が上下逆(位相が180度ずれている)になっており、合成波は直線(振幅ゼロ)になっている。

コラム〈ノイズキャンセリングの原理と応用〉
 入力音波に対して逆位相(位相差が180度、波の山と谷が逆になった状態)の音波を重ねると、音波が干渉して弱め合うことになる。この原理を応用したものがいくつかある。一つはノイズキャンセリングヘッドフォン(イヤフォン)である。図に示すように小さなマイクロフォンでキャッチした外部の音を電子回路で処理して逆位相の音をスピーカーに流す。限られた狭い空間である耳の中に流す音なので案外簡単にノイズを軽減できる。

 しかし、広い空間のノイズを軽減するのはかなり難しいようである。音波の伝搬速度、伝搬方向、反射、等様々な要素が絡んでくる。最近、低騒音型PC冷却ファンや高級自動車の一部に車内に流れるエンジン音の軽減にこの原理が使われている。また、工場排気ダクトへの適用など様々な分野で実用化されつつある。



高速リアルタイム スペクトラムアナライザー WaveSpectra (フリーソフトウェア)使用
 URL:http://www.ne.jp/asahi/fa/efu/soft/ws/ws.html
 
WaveSpectraと連続可変低周波発振器を共に起動する。
WaveSpectraのCD内のファイルはここをクリックすると開く。


ステレオの左右の周波数を800ヘルツにする。マイクロフォンを図に示すように2つのスピーカーから等距離の位置に置く。
スピーカーからステレオ音を出す。最初位相差を0度に設定し、上記WaveSpectraでマイクロフォンの音量を表示する。次に位相差を180度に設定して同様に測定する。耳で聞いても干渉による音の減衰は確認できるが、WaveSpectraで数値的にも確認できる。インジケーターの数値の単位はdB。

サウンドコントロールの設定に注意
@マイク出力をゼロにする→マイクで拾った音をスピーカーから出さない。(マイク出力が無いPCもある)
A録音はマイクを選択する。音量は適当な値にする。→マイクの音がWaveSpectra で録音可能になる。
  ステレオミキサーを選択すると発振器からのデジタル信号が直接録音されるので注意。
B発振器から音を発振する。→スピーカーから音が出る。
  録音コントロールの設定等については、(7)リサジューの項目の下の注参照。

位相差0度

位相差180度

(6)弦の定常波

 右の写真の装置を作製して使う。左はフイルムケースをのり付けしたスピーカー。その右はキットで作った簡易増幅器。右下の写真はステレオプラグと端子3つをつないだ部品(これは大変便利である。300円ほどでできる)

 PCから連続的に変化する信号をイヤホンジャックから取り出し、増幅器で増幅し、フイルムケースをのり付けしたスピーカーから音を出す。フイルムケースを一定の張力を与えた弦に接触させて弦に振動を伝え、ある周波数の時に定常波が出来る様子を観察する。

(7)リサジュー
 録音コントロールで「ステレオミキサー」を選択する(下記の注参照)。発振器から左右の音を出す。上記のWaveSpectraを起動する。設定をリサジューにして録音ボタンを押すと下図のようなグラフが得られる。
 右の写真のように、外部のオシロスコープにつないでリサジューを表示させることもできるが、PC内でソフトウェアを連携させるとこのように簡便に行うことが出来る。

左周波数、右周波数、位相差 400,400,0

400,400,45

400,600,0

400,600,60

400,800,0

400,800,90

:PCで発振器を起動して発振し、それをマイクロフォンを通さずに直接PCで録音等をする場合、録音コントロールでステレオミキサー(PCによっては別の名前を付けているものもある)を選択する必要がある。インターネットで「PCのステレオ録音」等で検索するとわかりやすいサイトが出てくる。次のところもわかりやすい。
URL:http://kukulu.erinn.biz/live/wiki/index.php?サウンド入力の設定
    http://www.atamanikita.com/index.html

図1:デスクトップ右下のタスクバーの中にある音量アイコンをダブルクリックする。マスタ音量の「オプション」、「プロパティ」と進み、「録音」を選択する。ステレオミキサーにチェックを入れて「OK」ボタンをクリックする
図2:「録音コントロール」でステレオミキサーを選択する。
PCによって、使っている言葉が違ったり、ライン入力等が無い場合もあるので適宜当てはめる。

図1

図2



(8)クラドニ図形
 実験例(3)の装置を使い、PCにつないだ増幅器にスピーカーをつなぐ。スピーカーにのり付けされているフイルムケースを物体に押し当てて振動させる。周波数を変えていくとある周波数の時に美しいクラドニ図形が得られる。下図左はレコード盤にできた図形、周波数326Hz。下図右はプラスチックケースにできた図形、周波数362Hz。食卓塩を振りかけて図形を得た。

参考:下記のサイトにきれいなクラドニ図形が出ている。
http://www42.tok2.com/home/ashi58/ashi/science/Chladni/chladni.htm
http://elecho.blog98.fc2.com/blog-entry-108.html
http://ogawakeiic.exblog.jp/11084428 (動画がわかりやすい)

〈発展:Grapesの利用〉

 数学の関数グラフ描画ソフトウェア GRAPES を使ってリサジュー図形を描く。
 GRAPES は非常に素晴らしい数学のグラフ描画ソフトウェアです。簡単に使えて、美しいグラフが描けます。一度触れてみることをお勧めいたします。フリーソフトとして公開されています。URL:http://www.osaka-kyoiku.ac.jp/~tomodak/grapes/
ここをクリックするとGRAPES 6.82 のフォルダが開きます。(再配布が許可されているのでCDに入れておきました)
 Grapesを起動して次の操作を行うと簡単に描画できます。

 データパネルの曲線・作成の一つ(例えばP)を選択し、続けて媒介変数グラフを選択して下記の数式を入力する。変数をa にする。OKを押してグラフを表示させる。増減幅、線の太さ等を適宜調節する。
図1〈左400Hz、右480Hz、位相差0度〉のリサジュー図形
 Grapesへの入力例 x=sin4.8a y=sin4a (aはパラメーター)
図2〈左400Hz、右480Hz、位相差90度〉のリサジュー図形
Grapesへの入力例 x=sin(4.8a+π/2) y=sin4a (aはパラメーター)
図3〈左200Hzと右400Hz 位相差90度に、左右両方に600Hzが加わった場合のリサジュー図形を発振器から発振してWaveSpectraを使って表示させた図形。
図4上記の図3の条件をGrapseで表示させた図形。
Grapesへの入力例 x=sin4a+sin6a y=sin2a+sin6a (aはパラメーター)

図1

図2

図3

図4

モノラルプラグをステレオジャックに入れるとどのような音が出てくるか
 私は、このソフトウェアを開発している最中、ステレオ発振を確認するために手元にあった昔のモノラルイヤホンのプラグをPCのステレオジャックに入れ音を聞いた。このようにすると左右の音が混合して出てくると考えた。左右同じ周波数で位相差を180度にすると当然音が打ち消し合って鳴らないか、ほとんどならないと期待したが、結果は大きな音が出てきた。最初はプログラムの間違いであると考え、様々検討したが間違いは発見できなかった。結局、いろいろ調べて分かったことは、プラグやジャックは図に示すような構造になっているので、モノラルイヤホンで聴いていたのは左の音のみであったということである。モノラルイヤホンは左右の音を混合しているものだという先入観があったことが間違いの原因であった。この場合に限らず、先入観は失敗のもとであることを再確認した次第である。

6.このソフトウエアのプロジェクト一式(ソースプログラム)の公開

 このソフトウェアのプロジェクト一式はCD内に入れてあります。ここをクリックするとフォルダが開きます。 Lhaca等の適当なソフトウェアで解凍して自由に使ってください。(下記〈プログラムに関する少し詳しい説明〉参照)
 C# は無料で使うことが出来、少し勉強すれば誰でも使うことが出来るようになります。このソフトウェアに、例えばステレオ周波数入力に0.1Hz増減させるボタンを付ける、グラフ領域の背景色を選べるようにする、合成波だけを表示できるようにする等の機能を付け加えることが簡単にできます。挑戦してみてください。


開発環境
マシン Windows XP SP3
開発言語Microsoft Visual C# 2010 Express (ダウンロードはここから無料で出来ます)
その他 NAudio (CodePlex開発のライブラリ) 
     Microsoft .NET Framework4.0 (ダウンロードはここから無料で出来ます)

動作OS Windows XP、vista、7 で確認済み


注意点
連続可変低周波発振器.exe と NAudio.dll は同じフォルダに入れて使う。
.NET Framework がインストールされていないと動作しないので、PCに入っていなければインストールして使用する。

〈プログラムに関する少し詳しい説明〉
 普通、ある周波数データをPlayメソッドに送って再生させる場合、bufferのデータが無くなるまで続きます。従って、次々周波数を変えて再生させようとしても、変化についてこれなかったり、とぎれとぎれの音になります。これを解決したのが、「Playメソッドに次々にデータが送られたときに、bufferの残りサイズに基づいて周波数の計算に使用される値を段階的に変更する」方法です。この概念の基本は、Charles PetzoldさんがMSDNマガジンFeburary 2010に発表した「WPF アプリケーションでの音の生成」という記事に書いてあります。彼は一種の楽器のようなものの原型を作ったのですが、プロジェクト一式を公開して自由に使えるようにしております(上記記事の英語版にダウンロードボタンがあります。興味のある方は是非見てください。)
URL:http://msdn.microsoft.com/ja-jp/magazine/ee309883.aspx(日本語)
    http://msdn.microsoft.com/en-us/magazine/ee309883.aspx(英語)

 私はこのプログラムのソースコードの中の一つのクラスを利用させてもらいました。その結果、私のソフトウェアでスライダーを動かすとそれに応じて音がスムーズに変化するものを作ることが出来ました。急に大きな周波数変化を与えても、ピアノの鍵盤を押したようにはならないで、連続的な変化をするので聞きやすくなっています。(周波数を1Hzずつ変化させた場合には違いが分かりません)(註)。Charles Petzoldさんに感謝申し上げます。
 また、簡単なプログラムでこのソフトウェアを作ることが出来たのはCodePlexで公開されているNAudio.dllの威力によるところが大です。これらの、公開されているソフトウェアのお陰で効率的にソフトウェア(連続可変低周波発振器)を組み立てていくことが出来ました。私はこれらの人々に感謝する気持ちを込めてソフトウェアをオープンソースにして公開します。

(註)上記の「bufferの残りサイズに基づいて周波数の計算に使用される値を段階的に変更する」方法と、このやり方を取り入れないで「普通に計算させる」方法を比較できるように、ソースコードの一番下に【不連続発振用Class】を入れておきました。このClassは無効にしてあります。【不連続発振用Class】を有効にし、その上に書いてある【連続可変発振用Class】を無効にして、デバッグを実行すると比較するための発振器が起動します。興味のある方は試してみてください。

2012年10月 札幌北高等学校定時制課程教諭 高木伸雄

(インターネットエクスプローラで見ると正しく表示されます)

(5)スペクトラムアナライザーWaveSpectraと連携して、音波の干渉の位相差による変化の測定

右は実験の様子を示す動画