サウンド

Wolframシステムを使えばグラフィックスだけでなくサウンドも作れる(一部のコンピュータではシステム的に制約がありこの機能がサポートされない場合がある).Wolframシステムでは,グラフィックスとサウンドはほとんど同じように扱われる.

例えば,グラフィックスでは,Plot[f,{x,xmin,xmax}]により関数をプロットする.これに対して,サウンドでは,Play[f,{t,0,tmax}]により関数を「プレイ」する.Playでは,関数が音の波形の定義に使われる.また,関数の値は,時間の関数である発生音の振幅を与える.

Play[f,{t,0,tmax}]振幅が時間 t の関数 f で与えられる音を演奏する(t は秒単位で入力する)

関数のプレイ

システム的に機能がサポートされていれば,この入力をすると周波数440Hzの純音が1秒間発生する.
In[1]:=
Click for copyable input
Out[1]=

Playのサウンドはどんな波形の音でもよい.例えば,倍音で構成されたものでなくてもよい.Playの引数として入力する振幅関数は,発生させたい音に対応した瞬間信号値を与えるものである.この信号は,まず電圧に変換され,そして,スピーカの振動に変換されて音を発生させる.文献によっては,振幅は音のピーク信号強度と定義するものもあるが,本書では,常に,時間の関数である瞬間的な信号強度とする.

多少複雑な音を発生させる.
In[2]:=
Click for copyable input
Out[2]=

Playで使う時間変数は常に秒単位で指定する.実際に音の生成が開始されると,音の振幅が毎秒決まった回数だけ標本化(サンプリング)される.この毎秒当りのサンプル数はサンプルレートと呼ばれ,オプションSampleRateを使うことで任意な値に設定することができる.

Play[f,{t,0,tmax},SampleRate->r]サンプルレートを r にして,サウンドプレイを開始する

サンプルレートの指定

一般に,サンプルレートを上げると,高い周波数帯域の音成分をより忠実に表現できるようになる.サンプルレートがr であれば再生可能な周波数域は Hzまでである.普通,人間の聴力は周波数で20〜22,000Hzの音を聞き取ることができるといわれている(年齢や性別等によって多少差はある).ちなみに,ピアノの持つ88音階は基本周波数で27.5〜4,096Hzに相当する.

また,CDプレーヤーで使われている標準サンプルレートは44,100Hzで,実効的な電話のサンプルレートは8,000Hz程度である.特別なシステム仕様でなければ,Wolframシステムにおけるサンプルレートは,規定で約8,000Hzに設定されている.

Play[{f1,f2,]を使いステレオ効果を出すこともできる.2チャンネルにとどまらず,何チャンネルでも操作可能である.

ListPlay[{a1,a2,},SampleRate->r]振幅の値の列に基づいてプレイする

サンプリングされた音のプレイ

ListPlayを使いデータを音として聞くことが可能である.この場合,データはリスト形式で入力し,各データ点は特定のレートでサンプリングされた振幅の値とする.

Wolframシステムで実際にサウンドが生成される場合,一定範囲の振幅・音域だけが許される.これは,PlayまたはListPlayのコマンドにオプションPlayRangeを使った区間値を与えることでできる.この設定は,「プロット仕様の変更」のプロット範囲の指定で使ったPlotRangeと同じように行えばよい.

PlayRange->Automatic内部処理により自動的に振幅を調整する
PlayRange->Allすべての振幅値が演奏可能音域に入るように調整する
PlayRange->{amin,amax}振幅を に制限する

サウンドの振幅のスケール

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

EmitSound[snd]評価されたときにサウンドを発する

プログラムでのサウンドのプレイ

出力のSoundオブジェクトは通常,サウンドの可視化を含むボタンとしてフォーマットされ,押されたときにサウンドを発する.サウンドはユーザが介入しなくても,またEmitSoundを使って出力を生成しなくてもプレイすることができる.事実,Soundボタンの内部の内装ではボタンが押されたときにEmitSoundが使われる.

Soundオブジェクトの内部構造は,「サウンド表現」で説明する.