グラフィックスとサウンド

基本的なプロット
Plot[f,{x,xmin,xmax}]
xmin から xmax までの x の関数として f をプロットする
Plot[{f1,f2,},{x,xmin,xmax}]
いくつかの関数を一緒にプロットする
基本的なプロット関数
の関数のグラフを0 〜 の区間でプロットする:
特異点を持つ関数をプロットすることもできる.適切なスケールが自動的に選択され軸の範囲が決定される:
Exclusionsを使うと,プロットから特異点を省くことができる:
プロットする関数のリストを与えることもできる.それぞれの関数に,自動的に異なる色が使われる:
微分方程式の数値解を求めておく.解法に関しては「微分方程式の数値解法」を参照のこと:
解のプロットである:
プロット仕様の変更
Wolfram言語では,どんな軸スケールを使うかとか,プロットする式のサンプリング点をどこにするかとか,また座標軸をどう描画するかとか,プロットの仕様をいろいろ変更できるようになっている.通常は,Wolfram言語により自動的に採用される設定条件で間に合うが,グラフの用途によっては,仕様を変更した方がよいときもあるだろう.
これはWolfram言語の関数全般に関して言えることだが,関数の動作条件を変更するには,「オプション」指定を行う.各オプションには決まった名前がある.例えば,プロットの条件を指定するにはPlot関数の最後に引数として,書式 name->value で書かれた規則を引数として加える(ここで,name はオプション名,value は変更する設定値を示す).何も規則を指定しなければ,「デフォルト値」の規則が使われる.
Plot[f,{x,xmin,xmax},option->value]
オプションに値を指定し,式をプロットする
プロット仕様の変更
Plotのような関数には設定できるオプションが数多くある.普通は,多くても2,3の項目を変更する程度で事が足りるだろう.プロットを見やすくするには,いろいろと実験してみるのが最善の方法である.例えば,あるオプションに一連の異なった値を設定していったとき,プロットの表示がどうなるかを見ていくとよいだろう.
オプションはプロットごとに指定することができる.また,プロットした後でも,オプションだけを変えて再表示することができるようにもなっている.これについては「プロットの再描画と組合せ」で説明する.
オプション
デフォルト値
AspectRatio1/GoldenRatio
プロット領域の縦幅を横幅で割った比.Automaticは, の絶対座標から自動的に算出される比にする
AxesTrue
軸を表示するかどうかを指定する
AxesLabelNone
軸に表示するラベル.ylabel は, 軸のラベルを指定する.書式{xlabel,ylabel}は両軸のラベルを指定する
AxesOriginAutomatic
軸が交差する点
BaseStyle{}
プロット中のテキスト要素に適用するデフォルトのスタイル
FormatTypeTraditionalForm
プロット中のテキスト要素に適用する標準表記法
FrameFalse
プロット領域の囲み枠を表示するかどうかを指定する
FrameLabelNone
囲み枠に付けるラベル.ラベルはリスト形式で指定され,下部 軸から始まり時計方向の並び順になっていること
FrameTicksAutomatic
囲み枠を引く場合,そこに目盛を付けるどうかを指定する.Noneは,目盛を付けない
GridLinesNone
どんな方眼線を入れるかを指定する.Automaticは,主な目盛の位置だけに線を描く
PlotLabelNone
プロットの題目
PlotRangeAutomatic
プロットする座標の範囲.Allは,すべての点を含む
TicksAutomatic
軸に付ける目盛の形を指定する.Noneは,目盛なし
Plot用オプション その1(これらはShowにも使える)
オプションをデフォルト値としてプロットする:
今度は,プロット領域の周りに囲み枠を描く:
軸のラベルを指定する.ラベルは,TraditionalFormのWolfram言語の出力として生成されるときと同じように表示される.ラベルの文字はダブルクォートでくくって指定することができる:
オプションは複数同時に使用でき,順不同である:
AspectRatioオプションの設定を変更するとグラフの全景が変わる.AspectRatioは縦幅を横幅で割った比として与えられる.デフォルト値は,長方形では最も見やすいといわれている比で,いわゆる,黄金比の逆数である:
Automatic
内部アルゴリズムを使い最適値を探す
None
特に指定しない
All
すべてを含める
True
有効にする
False
無効にする
オプションの一般的な設定値
自動設定でプロットを行うと, 軸と 軸のスケールが自動設定され,式の挙動で特に重要と思われる部分だけがプロットされる.もし,プロットする式の値が急激に増加する場合や,特異点が現れる場合は,局所的に式の値が大きくなりすぎて,その部分は自動的にプロット範囲から除外されてしまう.PlotRangeを指定することにより,プロットに入れたい 軸と 軸の範囲を正確に制御できる.
Automatic
式の挙動で「重要」と思われる部分がプロットに含まれるように,割合大きな範囲が選択される(デフォルト時の設定)
All
プロット可能な全区間が選択される
{ymin,ymax}
の下限と上限を指定する
{xrange,yrange}
区間と 区間を指定する
オプションPlotRangeの設定
PlotRangeを使い の区間を指定する. の極限をこのように指定すると,曲線の下の部分は表示されなくなる:
関数の曲線をなるべく滑らかにプロットできるように,Wolfram言語内部で調整が取られる.つまり,増減の激しい関数に対してはより多くのプロット点が使われる.通常,関数の取る形に応じて関数のサンプリングを「適応」させるが,上限はあり,それ以上の細かさで関数をサンプリングすることはできない.この上限は設定可能なので,必要ならば変更しておく.
において,は無限に増減を繰り返す.増減する区間において,それに見合った点数のサンプリングが試みられるが,サンプリング点は有限であるために関数の挙動が十分に再現されない.このため,曲線がところどころで切れてしまっている:
ここで重要なのは,プロットする関数は限られた点数までしかサンプリングできないので,必ずしも関数の特徴を再現できるとは限らない,ということである.Wolfram言語は適応的に関数をサンプリングするため,関心のある部分付近のサンプル数を増加させるが,それでも何かが足りないという可能性もある.もちろん,PlotPointsでプロット点数を増やしておき,もっと多くの点でサンプリングすることは可能である.ただし,PlotPointsを大きく設定すればするほど,曲線は滑らかにできるが,プロットする時間も長くなってしまうことになる.
オプション
デフォルト値
PlotStyleAutomatic
曲線の描画スタイルを決めるグラフィックスプリミティブをリスト形式で指定する(「グラフィックス指示子とグラフィックスオプション」を参照のこと)
ClippingStyleNone
曲線が省略されている場合に, 何を描画するか
FillingNone
各曲線の下に挿入する塗り潰し
FillingStyleAutomatic
塗り潰しに使用するスタイル
PlotPoints50
関数をサンプリングする点の最小数
MaxRecursionAutomatic
反復細分化が許される最大回数
Plot用オプション その2(注:これらはShowには使えない)
PlotStyleを使って,破線の曲線を指定する:
複数の関数をプロットするときは,リストの中のPlotStyle設定はそれぞれの関数に継続的に使われる:
複数の関数をプロットするときは,リストの中のPlotStyle設定はそれぞれの関数に継続的に使われる:
PlotRangeが曲線を切り取るように指定されている場合,デフォルトで何も表示されない:
ClippingStyleAutomaticに設定すると,曲線が切り取られた部分に破線が描画される:
ClippingStyleをリストに設定すると,下部と上部で切り取られた部分に対するスタイルが指定される:
曲線と 軸との間の塗り潰しを指定する:
塗り潰しは,グラフィックスの下等,任意の高さに拡張して指定することができる.塗り潰しの色は,オーバーラップするときは自動的に混ぜられる:
特定の塗り潰しを,最初の曲線にだけ使うよう指定する:
デフォルトではない塗り潰しスタイルを使い,最初の曲線から2つ目の曲線への塗り潰しを表示する:
プロットの再描画と組合せ
一度プロットしたなら,いつでもそれを再表示できるようにプロット操作に関する情報がWolfram言語内部に保存される.このため,プロットを再表示するときは,必要なオプションだけを変更すればよい.
Show[plot,option->value]
オプションを変更してプロットを再描画する
Show[plot1,plot2,]
複数のプロットを重ねて表示する
GraphicsGrid[{{plot1,plot2,},}]
プロットの配列を表示する
InputForm[plot]
内在するプロットについてのテキスト記述を参照する
プロットの操作に使う関数
簡単なプロットである:
プロットの再描画を行う際にいくつかオプションの設定を変更してもよい.この例では, 軸の範囲を変更した:
同じプロットをまた表示する.今度は,別のオプションを変更した:
Showを入力するたびにオプション設定を変えてやることで,1つのプロットをいろいろな方法で見ることができる.最良なプロット仕様を見付けるには,このようにひとつひとつ設定条件を試しながら行うのもよい方法である.
Showを使い複数のプロットを重ねて表示することもできる.結果のグラフィックスのオプションはすべて,Show式の最初のグラフィックスのオプションを従う.
からまででプロットする.プロットは,gj0の名前で内部保持される:
次に,からまででプロットする:
Plotはそれぞれのグラフィックスに対する明示的なPlotRangeを指定する:
PlotRangeを使って,gj0に対して設定されている明示的な値をオーバーライドする:
Wolfram言語のグラフィックスはすべて式なので,他の式と同様に操作することができる.このような操作を行うときはShowを使う必要はない.
シンボルLineをすべて,gj0で表されるグラフィックス式のシンボルPointで置換する:
書式Show[plot1,plot2,]を使うと,複数のプロットを1つに重ね合せることができる.また,GraphicsGridを指定しておけば,複数のプロットを配列的に並べることもできる.
GraphicsGrid[{{plot11,plot12,},}]
縦横表示
GraphicsRow[{plot1,plot2,}]
横並び表示
GraphicsColumn[{plot1,plot2,}]
縦並び表示
GraphicsGrid[plots,Spacings->{h,v}]
間隔指定付き再表示
複数のプロットの一括表示
先にプロットした複数のプロットを並べて表示する:
Showで並べて表示するときにオプションを指定すると,それは個々のプロットに対してでなく,配列全体に対して有効になる:
特に指定がない場合,GraphicsGridを指定するとプロットとプロットの境界に狭い間隔が置かれる.この間隔は,書式Spacings->{h,v}を使ったオプション設定で変えることができる.ここで,hv は,それぞれ,水平方向と垂直方向の間隔幅を表すパラメータである.デフォルトでは,Spacingsオプションはデフォルトフォントの文字の幅と高さを使って,h および v パラメータをスケールするが,グラフィックスでは一般にScaled座標を使った方が便利である.Scaledは値1が格子の1要素の幅と高さを表すようにスケールする.
プロットの配列表示において,水平間隔は増やすが,垂直間隔は減らしてみる:
プロットすると,他の情報と一緒にプロットした点もリスト形式で保存される.Showを使うことで,これらの情報をもとに,プロットをいろいろな描画条件で再表示することができる.また,条件を変えても,Showにはもともとプロットした値が保存されているので,例えば,オプション設定で最初に作ったプロットを部分的に拡大表示させ,Plotで使われた個々の標本点を確認する,というようなことも可能である.ただし,オプションPlotPointsを使ったプロット点数の指定は,Plotコマンドを指定したときだけに有効である.(Wolfram言語では,常に保持してある実際の点がプロットされる.平滑化した曲線やスプライン曲線は使われない.これは,数学のグラフィックスで誤った解釈を与えかねないからである.)
簡単なプロットを見てみる:
部分的に拡大表示させる.この解像度ならば,Plotコマンドで生成されたひとつひとつの区間線を見分けることができる:
3D曲面プロット
Plot3D[f,{x,xmin,xmax},{y,ymin,ymax}]
fxy の関数として3Dでプロットする
基本的な3Dプロットの関数
関数を3Dでプロットする
三次元グラフィックスは,その内部でマウスをドラッグしてグラフィックスを回転させることができる.グラフィックスの内部でドラッグすると,グラフィックスはマウスに従う方向に転倒し,グラフィックスの境界線付近をドラッグするとスクリーン上のそのままの場所で回転する.Shiftキーを押したままグラフィックスをドラッグすると,グラフィックスをパンすることができる.Ctrlキーを使うとズームされる.
3Dプロットには非常に多くのオプションがある.ここではその中の基本的なものに限って説明する.他は「グラフィックスとサウンドオブジェクトの構造」で説明する.
次に掲げる3Dプロットの最初のオプション群は,2D用に提供される同名のオプションと機能面で同じである.
オプション名
デフォルト値
AxesTrue
軸を表示するかどうか
AxesLabelNone
軸に表示するラベル.zlabel 軸のラベルを指定し,書式{xlabel,ylabel,zlabel}はすべての座標軸にラベルを指定する
BaseStyle{}
プロットに適用するデフォルトのスタイル
BoxedTrue
曲面の周囲に三次元ボックスを描画するかどうか
FaceGridsNone
プロット空間を囲む枠に方眼線をどう表示するか.Allの場合,すべての面に方眼線が表示される
LabelStyle{}
ラベルに対するスタイル指定
LightingAutomatic
面の色付けに使用する照明効果
MeshAutomatic
曲面に メッシュを描画するかどうか
PlotRange{Full,Full,Automatic}
あるは他の値の範囲の指定
SphericalRegionFalse
外接球を最終的な表示領域にフィットさせるかどうか
ViewAngleAll
視野の角度
ViewCenter{1,1,1}/2
中心に表示する点
ViewPoint{1.3,-2.4,2}
曲面を眺める空間点
ViewVectorAutomatic
シミュレートされるカメラの位置と方向
ViewVertical{0,0,1}
垂直にするための方向
BoundaryStyleAutomatic
曲面の境界線の描画方法
ClippingStyleAutomatic
曲面の省略部分の描画方法
ColorFunctionAutomatic
曲面の色の決定方法
FillingNone
各曲面の下の塗潰し
FillingStyleOpacity[.5]
塗潰しに使用するスタイル
PlotPoints25
関数をサンプルする各方向での点の数. および 方向に異なる数を指定する
PlotStyleAutomatic
各曲面のスタイルに対するグラフィックス指示子
Plot3Dの基本的なオプション(注:上段の項目群はShowにも当てはまる)
設定を変えて前のプロットを表示し直す.この例のPlotRangeの設定では,範囲の曲面部分だけが表示される:
省略された領域を塗潰すためには,Plot3DClippingStyleオプションが使える:
オリジナルのプロットを作成する場合は,より多くの点をサンプリングするようにすることもできる.Wolframシステムは適応的にプロットをサンプルリングし,きれいに見せるために点を加える.しかしそれでももっと多くの点を指定した方がよい場合もある:
同じプロットに今度は軸ラベルと格子を指定する:
3Dプロットで特に重要な設定はどこの空間点からプロット面を眺めるかを決めることだろう.実際の設定は,視点となるの座標位置を選び,オプションViewPointに設定することで行える.Plot3DShowの機能のどちらでも設定の仕方は同じである.座標の算出法は「3Dグラフィックスの座標系」で説明する.マウスを使ってグラフィックスを回転させている場合は,ViewPoint値を調整していることになる.
これは,プロットした面をデフォルトの視点{1.3,-2.4,2}から眺めたときのグラフである.視点のデフォルト値としては,視覚的に紛らわしいプロット面の部分的な配合が起らないようにした「一般的な」位置が選択される:
同じプロット面を今度は真正面から眺めてみる.遠近法にならってプロットの後方部は前方部に比べずっと小さくなっている:
ViewPointオプションは,一般的な視点を表すさまざまな記号値も取る:
{1.3,-2.4,2}
デフォルトの視点
Front
負の 方向に沿って正面から眺める
Back
正の 方向に沿って後ろから眺める
Above
正の 方向に沿って上から眺める
Below
負の 方向に沿って下から眺める
Left
負の 方向に沿って左から眺める
Right
正の 方向に沿って右から眺める
代表的なViewPointオプションの値
人間は,複雑な数学的曲面を視覚的にとらえるのがどちらかというと苦手である.曲面の形を把握しやすくするためには,理解を助けるような手掛りをできるだけ多くプロットに入れておくとよい.
視点に関しては,プロット面を多少斜め上方向から眺めるような値に設定するとたいていは最良の効果が得られる.また,視点をプロット面にある程度接近させ,遠近効果を付けた方が一般によくなる.また,プロット空間に囲み枠を引いて,プロット面の空間配置(オリエンテーション)を分かりやすくするのもひとつの方法だろう.
デフォルトのオプション設定で曲面プロットを行う:
メッシュ表示を禁止にして再表示させる.この例のように,普通はメッシュがないと見づらくなってしまう:
3Dのイメージに実在感を与えるために,デフォルトでは,擬似的な照明モデルを使いプロット面に特殊な色付けが施される.この場合,4点の光源とアンビエント照明がオブジェクトを照らしているものと想定される.他の光源の設定方法やオブジェクトの反射特性の設定方法は,「照明効果と曲面の反射特性」で説明する.
照明は,照明特性の集まりを表す文字列を使って指定することもできる.例えば,オプション設定Lighting->"Neutral"では白い光の集まりが使われるので,プリンタ等の白黒出力デバイスで忠実に再現することができる.
ColorFunctionオプションはデフォルトでLighting->"Neutral"を使うので,曲面の色は色付きの照明により歪められることはない:
データリストのプロット
Wolfram言語を使って関数の値をプロットすることができる.Wolfram言語に関数を入力し,それを複数のプロット点で評価することで曲線や曲面を形成させる.
ここでは関数ではなく,リストとしてあるデータ点をどうプロットするかを説明する(外部ファイルやプログラムからどうデータを読み込むかは,「データのインポートとエキスポート」で説明する).プロットの対象物がリスト形式のデータであっても,使うWolfram言語コマンドは,関数のプロットで使ったものと似ていて,類推できる.
ListPlot[{y1,y2,}]
リスト形式のデータ y1,y2,x の値1,2,でプロットする
ListPlot[{{x1,y1},{x2,y2},}]
(x1,y1),でプロットする
ListLinePlot[list]
点と点を結び,折れ線グラフを作る
ListPlot3D[{{z11,z12,},{z21,z22,},}]
データ点を zyx として3Dプロットを作成する
ListPlot3D[{{x1,y1,z1},{x2,y2,z2},}]
位置{xi,yi}において,高さ zi の3Dプロットを作成する
ListContourPlot[array]
配列データを等高線プロットする
ListDensityPlot[array]
配列データを密度プロットする
データのプロット関数
一次元データを生成し,リストとして保持しておく:
データの値をプロットする:
線で結び折れ線グラフにする:
複数のデータをプロットするとき,Wolfram言語はそれぞれのデータに対して自動的に異なる色を選ぶ:
これは のペアのリストを返す:
点をプロットする:
次に値の三次元配列を作る.配列は非常に大きいので,入力の末尾にセミコロンをタイプして結果の表示が行われないようにした:
配列の値を三次元的にプロットする:
配列の値を密度プロットする:
パラメトリックプロット
「基本的なプロット」において,Wolfram言語を使いどう 座標を 座標の関数としてプロットし,曲線を生成するかを説明した.Wolfram言語を使いパラメトリックプロットを行うことも可能である.パラメトリックプロットでは,各点の 座標は,ともに第3のパラメータ,例えば, に依存した関数として与えられる.
ParametricPlot[{fx,fy},{t,tmin,tmax}]
パラメトリックプロットを行う
ParametricPlot[{{fx,fy},{gx,gy},},{t,tmin,tmax}]
複数のパラメトリック曲線を同一領域にプロットする
パラメトリックプロット用の関数
各プロット点の 座標をSin[t]とし, 座標をSin[2t]とした曲線をプロットする:
ParametricPlot3D[{fx,fy,fz},{t,tmin,tmax}]
3D曲線をパラメトリックプロットする
ParametricPlot3D[{fx,fy,fz},{t,tmin,tmax},{u,umin,umax}]
3D曲面をパラメトリックプロットする
ParametricPlot3D[{{fx,fy,fz},{gx,gy,gz},},]
複数のパラメトリック曲線を一括してプロットする
3Dパラメトリックプロット
3Dパラメトリックプロットで使うParametricPlot3D[{fx,fy,fz},{t,tmin,tmax}]は,二次元のParametricPlot[{fx,fy},{t,tmin,tmax}]に準じている.また,どちらの次元のプロットでも,パラメータ t を変化させることでプロット点が生成され,また,それらの点が結ばれることで曲線が形成される.ParametricPlotなら曲線は二次元,ParametricPlot3Dなら三次元である.
パラメトリックプロットでらせん状の曲線を作る.tを変化させることで - 平面上の回転運動と, 方向の直線運動を作り出している:
ParametricPlot3D[{fx,fy,fz},{t,tmin,tmax},{u,umin,umax}]を使うと,形成されるのは3Dの曲面で,曲線ではない.曲面は四辺形の面要素で構成され,四辺形の各頂点は,等間隔の格子上で tu が取る値において決定される fi の各値に対応した座標を持つ.
プロットされる四辺形の および 座標は,単にt, uで置き換えたものである.したがって,Plot3Dで生成されるものと同種の曲面プロットが得られる:
これは,前のものとほとんど同じだが,1つ違いがある. の式を二次曲線としたのでプロットがその方向に歪んでしまった:
上でプロットしたらせん状曲線をもとに,らせん状の曲面を作ってみる.曲線の各点で四辺形を描いていくことで曲面を形成する:
ParametricPlot3Dをうまく使えば,複雑に入り組んだ構造の曲面を作ることができる.このような曲面の形成の仕方は,- 平面を「歪めたり」,「丸めたり」して行うものととらえると分かりやすいかもしれない.
円筒形の曲面を作る.パラメータtを変化させることで,- 平面に円を描き,uを変化させることで 方向に円を移動させる:
ドーナツ状の曲面(トーラス)を作る.uを変化させることで円を描き,tを変化させることで円を 軸中心に回転させる:
最後に,球を作ってみる:
ParametricPlot3Dで曲面プロットをするときは,特に,パラメータとして適切な変数を選択することが大切である.また,パラメータを変化させていったときプロット面が部分的にでも複数回に渡って描画されないように注意しなければいけない.同じ点を何回もプロットするとメッシュが部分的に途切れてしまうことがあるし,また,ParametricPlot3Dがプロットを完了するのに余計な時間がかかってしまう.
特殊なプロット
「グラフィックスとサウンドオブジェクトの構造」で触れるが,Wolfram言語には機能的に非常に充実したグラフィックス用プログラミング言語が組み込まれている.この言語を使うことで,いろいろな形式のプロットを行うことが可能になる.
LogPlot[f,{x,xmin,xmax}]
片対数でプロットしたグラフを作成する
LogLinearPlot[f,{x,xmin,xmax}]
対数線形プロットを作成する
LogLogPlot[f,{x,xmin,xmax}]
両対数プロットを作成する
ListLogPlot[list]
データのリストから片対数プロットを作成する
ListLogLinearPlot[list]
データのリストから片対数プロットを作成する
ListLogLogPlot[list]
データのリストから両対数プロットを作成する
DateListPlot[list]
日付座標でデータのリストからプロットを作成する
DateListLogPlot[list]
日付座標でデータのリストから片対数プロットを作成する
PolarPlot[r,{t,tmin,tmax}]
角度 t の関数として半径 r の極プロットを作成する
SphericalPlot3D[r,{theta,min,max},{phi,min,max}]
3Dの球プロットを作成する
RevolutionPlot3D[f,{t,tmin,tmax}]
3Dの回転面を作成する
BarChart[list]
データのリストを棒グラフとして作成する
PieChart[list]
データのリストを円グラフとして作成する
特殊プロットの関数
指数関数である:
以下で関数の線形対数および対数線形プロットを生成する:
次で金融の時系列データを集める:
次は金融データを線形および対数スケールにプロットする:
RevolutionPlot3Dを使って 軸および 軸を中心にして曲線を回転させる:
最初の10個の素数のリストである:
素数の大きさを棒グラフで比べてみる:
今度は円グラフにする:
利用できるプロット関数のいくつかが,Wolframシステムに付属の標準パッケージで定義されている.
ErrorListPlot[{{x1,y1,dy1},}]
エラーバー付きのプロットを作成する
BoxWhiskerPlot[list]
データの箱ひげ図を作成する
ParetoPlot[list]
データのパレート図を作成する
PairwiseScatterPlot[data]
多変量データの座標のペアをプロットする
Wolframシステム標準パッケージのプロット関数の例
以下は関連したエラーと一緒にデータをプロットする:
次は正規分布からの標本に対する箱ひげ図を生成する:
aからfまでの文字からなるランダムなデータである:
そのデータのパレート図を生成する:
PairwiseScatterPlotは三変量データから列のペアをプロットするのに使うことができる:
サウンド

サウンドの生成

Wolframシステムを使えばグラフィックスだけでなくサウンドも作れる(一部のコンピュータではシステム的に制約がありこの機能がサポートされない場合がある).Wolframシステムでは,グラフィックスとサウンドはほとんど同じように扱われる.
例えば,グラフィックスでは,Plot[f,{x,xmin,xmax}]により関数をプロットする.これに対して,サウンドでは,Play[f,{t,0,tmax}]により関数を「プレイ」する.Playでは,関数が音の波形の定義に使われる.また,関数の値は,時間の関数である発生音の振幅を与える.
Play[f,{t,0,tmax}]
振幅が時間 t の関数 f で与えられる音を演奏する(t は秒単位で入力する)
関数のプレイ
システム的に機能がサポートされていれば,この入力をすると周波数440Hzの純音が1秒間発生する:
Playのサウンドはどんな波形の音でもよい.例えば,倍音で構成されたものでなくてもよい.Playの引数として入力する振幅関数は,発生させたい音に対応した瞬間信号値を与えるものである.この信号は,まず電圧に変換され,そして,スピーカの振動に変換されて音を発生させる.文献によっては,振幅は音のピーク信号強度と定義するものもあるが,本書では,常に,時間の関数である瞬間的な信号強度とする.
多少複雑な音を発生させる:
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}
振幅を aminamax に制限する
サウンドの振幅のスケール
設定PlayRange->Automaticを使えば,適切なスケール率が選択され便利だが,PlayRangeを使い音域を限定した方が,内部でプレイ範囲の計算をする必要がなくなるため,Playの処理スピードが上がる.
EmitSound[snd]
評価されたときにサウンドを発する
プログラムでのサウンドのプレイ
出力のSoundオブジェクトは通常,サウンドの可視化を含むボタンとしてフォーマットされ,押されたときにサウンドを発する.サウンドはユーザが介入しなくても,またEmitSoundを使って出力を生成しなくてもプレイすることができる.事実,Soundボタンの内部の内装ではボタンが押されたときにEmitSoundが使われる.
Soundオブジェクトの内部構造は,「サウンド表現」で説明する.