サウンド
Mathematica を使えばグラフィックスだけでなくサウンドも作れる(一部のコンピュータではシステム的に制約がありこの機能がサポートされない場合がある).
Mathematica では,グラフィックスとサウンドはほとんど同じように扱われる.
例えば,グラフィックスでは,
Plot[f, {x, xmin, xmax}]により関数
f をプロットする.これに対して,サウンドでは,
Play[f, {t, 0, tmax}]により関数を「プレイ」する.
Playでは,関数が音の波形の定義に使われる.また,関数の値は,時間の関数である発生音の振幅を与える.
| Play[f,{t,0,tmax}] | 振幅が時間t の関数f で与えられる音を演奏する(t は秒単位で入力する) |
関数のプレイ
システム的に機能がサポートされていれば,この入力をすると周波数440Hzのピュアトーンが1秒間発生する. |
Playのサウンドはどんな波形の音でもよい.例えば,倍音で構成されたものでなくてもよい.
Playの引数として入力する振幅関数は,発生させたい音に対応した瞬間信号値を与えるものである.この信号は,まず電圧に変換され,そして,スピーカの振動に変換されて音を発生させる.文献によっては,振幅は音のピーク信号強度と定義するものもあるが,本書では,常に,時間の関数である瞬間的な信号強度とする.
Playで使う時間変数は常に秒単位で指定する.実際に音の生成が開始されると,音の振幅が毎秒決まった回数だけ標本化(サンプリング)される.この毎秒当りのサンプル数はサンプルレートと呼ばれ,オプション
SampleRateを使うことで任意な値に設定することができる.
サンプルレートの指定
一般に,サンプルレートを上げると,高い周波数帯域の音成分をより忠実に表現できるようになる.サンプルレートが
r であれば再生可能な周波数域は
r/2Hzまでである.普通,人間の聴力は周波数で20〜22,000Hzの音を聞き取ることができるといわれている(年齢や性別等によって多少差はある).ちなみに,ピアノの持つ88音階は基本周波数で27.5〜4,096Hzに相当する.
また,CDプレーヤーで使われている標準サンプルレートは44,100Hzで,実効的な電話のサンプルレートは8,000Hz程度である.特別なシステム仕様でなければ,
Mathematica におけるサンプルレートは,規定で約8,000Hzに設定されている.
Play[{f1, f2, ...]を使いステレオ効果を出すこともできる.2チャンネルにとどまらず,何チャンネルでも操作可能である.
サンプリングされた音のプレイ
ListPlayを使いデータを音として聞くことが可能である.この場合,データはリスト形式で入力し,各データ点は特定のレートでサンプリングされた振幅の値とする.
Mathematica で実際にサウンドが生成される場合,一定範囲の振幅・音域だけが許される.これは,
Playまたは
ListPlayのコマンドにオプション
PlayRangeを使った区間値を与えることでできる.この設定は,
「プロット仕様の変更」のプロット範囲の指定で使った
PlotRangeと同じように行えばよい.
サウンドの振幅のスケール
設定
PlayRange->Automaticを使えば,適切なスケール率が選択され便利だが,
PlayRangeを使い音域を限定した方が,内部でプレイ範囲の計算をする必要がなくなるため,
Playの処理スピードが上がる.
プログラムでのサウンドのプレイ
出力の
Soundオブジェクトは通常,サウンドの可視化を含むボタンとしてフォーマットされ,押されたときにサウンドを発する.サウンドはユーザが介入しなくても,また
EmitSoundを使って出力を生成しなくてもプレイすることができる.事実,
Soundボタンの内部の内装ではボタンが押されたときに
EmitSoundが使われる.
Soundオブジェクトの内部構造は,
「サウンド表現」で説明する.