|
1.9.12 サウンド
Mathematicaを使えばグラフィックスだけでなくサウンドも作れる(一部のコンピュータではシステム的に制約がありこの機能がサポートされない場合がある).Mathematicaでは,グラフィックスとサウンドはほとんど同じように扱われる.
例えば,グラフィックスでは,Plot[f, x, xmin, xmax ]により関数fをプロットする.これに対して,サウンドでは,Play[f, t, 0, tmax ]により関数fを「プレイ」する.Playでは,関数が音の波形の定義に使われる.また,関数の値は,時間の関数である発生音の振幅を与える.

関数のプレイ
システム的に機能がサポートされていれば,この入力をすると周波数440Hzのピュアトーンが1秒間発生する.
In[1]:= Play[Sin[2Pi 440 t], {t, 0, 1}]
Out[1]= -Sound-
サウンドプレイするものはどんな波形の音でもよい.例えば,倍音で構成されたものでなくてもよい.Playの引数として入力する振幅関数は,発生させたい音に対応した瞬間信号値を与えるものである.この信号は,まず電圧に変換され,そして,スピーカの振動に変換されて音を発生させる.文献によっては,振幅は音のピーク信号強度と定義するものもあるが,本書では,常に,時間の関数である瞬間的な信号強度とする.
多少複雑な音を発生させる.
In[2]:= Play[ Sin[700 t + 25 t Sin[350 t]], {t, 0, 4} ]
Out[2]= -Sound-
Playで使う時間変数は常に秒単位で指定する.実際に音の生成が開始されると,音の振幅が毎秒決まった回数だけ標本化(サンプリング)される.この毎秒当りのサンプル数はサンプルレートと呼ばれ,オプションSampleRateを使うことで任意な値に設定することができる.

サンプルレートの指定
一般に,サンプルレートを上げると,高い周波数帯域の音成分をより忠実に表現できるようになる.サンプルレートが であれば再生可能な周波数域は Hzまでである.普通,人間の聴力は周波数で20〜22,000Hzの音を聞き取ることができると言われている(年齢や性別等によって多少差はある).ちなみに,ピアノの持つ88音階は基本周波数で27.5〜4,096Hzに相当する.
また,CDプレーヤーで使われている標準サンプルレートは44,100Hzで,実効的な電話のサンプルレートは8,000Hz程度である.特別なシステム仕様でなければ,Mathematicaにおけるサンプルレートは,規定で約8,000Hzに設定されている.
Play[ ,  , ... ]を使いステレオ効果を出すこともできる.2チャンネルにとどまらず,何チャンネルでも操作可能である.

サンプリングされた音のプレイ
ListPlayを使いデータを音として聞くことが可能である.この場合,データはリスト形式で入力し,各データ点は特定のレートでサンプリングされた振幅の値とする.
現実のプレイでは,どのような振幅・音域でも実際に音の生成ができる訳ではない.出力装置に送る前に,演奏可能な音域に入るよう振幅の値を調整しておく必要がある.これは,PlayまたはListPlayのコマンドにオプションPlayRangeを使った区間値を与えることでできる.この設定は,1.9.2のプロット範囲の指定で使ったPlotRangeと同じように行えばよい.

サウンドの振幅のスケール
デフォルト設定であるPlayRange -> Automaticを使えば,適切なスケール率が選択され便利だが,PlayRangeを使い音域を限定した方が,内部でプレイ範囲の計算をする必要がなくなるため,Playの処理スピードが上がる.

サウンドオブジェクトの再生
PlayとListPlayは,音を生成するための手続きを含んだSoundオブジェクトを返す.このオブジェクトに,グラフィックスの再表示でも使ったShowを作用させることでもとの音を再生することができる.
Soundオブジェクトの内部構造は,2.10.18で説明する.
|