Mathematica 9 is now available
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.
Mathematica > サウンドと音声 >

サウンド

Mathematica を使えばグラフィックスだけでなくサウンドも作れる(一部のコンピュータではシステム的に制約がありこの機能がサポートされない場合がある).Mathematica では,グラフィックスとサウンドはほとんど同じように扱われる.
例えば,グラフィックスでは,Plot[f, {x, xmin, xmax}]により関数f をプロットする.これに対して,サウンドでは,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 であれば再生可能な周波数域はr/2Hzまでである.普通,人間の聴力は周波数で20〜22,000Hzの音を聞き取ることができるといわれている(年齢や性別等によって多少差はある).ちなみに,ピアノの持つ88音階は基本周波数で27.5〜4,096Hzに相当する.
また,CDプレーヤーで使われている標準サンプルレートは44,100Hzで,実効的な電話のサンプルレートは8,000Hz程度である.特別なシステム仕様でなければ,Mathematica におけるサンプルレートは,規定で約8,000Hzに設定されている.
Play[{f1, f2, ...]を使いステレオ効果を出すこともできる.2チャンネルにとどまらず,何チャンネルでも操作可能である.
ListPlay[{a1,a2,...},SampleRate->r]
振幅の値の列に基づいてプレイする

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

ListPlayを使いデータを音として聞くことが可能である.この場合,データはリスト形式で入力し,各データ点は特定のレートでサンプリングされた振幅の値とする.
Mathematica で実際にサウンドが生成される場合,一定範囲の振幅・音域だけが許される.これは,PlayまたはListPlayのコマンドにオプションPlayRangeを使った区間値を与えることでできる.この設定は,「プロット仕様の変更」のプロット範囲の指定で使ったPlotRangeと同じように行えばよい.
PlayRange->Automatic内部処理により自動的に振幅を調整する
PlayRange->Allすべての振幅値が演奏可能音域に入るように調整する
PlayRange->{amin,amax}振幅をaminamax に制限する

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

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

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

出力のSoundオブジェクトは通常,サウンドの可視化を含むボタンとしてフォーマットされ,押されたときにサウンドを発する.サウンドはユーザが介入しなくても,またEmitSoundを使って出力を生成しなくてもプレイすることができる.事実,Soundボタンの内部の内装ではボタンが押されたときにEmitSoundが使われる.
Soundオブジェクトの内部構造は,「サウンド表現」で説明する.
Ask a question about this page  |  Suggest an improvement  |  Leave a message for the team