オーディオパッケージ
このパッケージには,標準波形およびユーザ指定のスペクトルを持つ波形の生成,振幅・周波数が変調された正弦波の合成,およびサウンドファイルの Mathematica への読込みのための関数が含まれている.
Mathematica のサウンド関数のグラフィックス出力はハードウェアに依存するため,使用中のマシンで例題を評価して得られた波形が,このドキュメントに含まれているグラフィックスとは異なることがある.
標準波形の生成
| Waveform[type,freq,dur] | 基本周波数 freq ヘルツ,継続時間 dur 秒,タイプ type の標準波形Soundオブジェクトを作成する |
標準波形の生成
Waveformでは理論的に無限数の倍音を含む標準波形の作成に,計算上効率のよいアルゴリズムが用いられる.
標準波形の定義
次の例を実行すると,
Waveformは440 Hzの基本波を持ち,継続時間が0.2秒である三角波に相当する
Soundオブジェクトを返す.
| Out[2]= |  |
指定数の倍音を持つ標準波形の作成
オプションOvertonesを指定すると,Waveformで作成されるサウンドに含まれる倍音の数を制限することができる.
8倍音のみの矩形波を生成し,
Show関数を使ってサウンドを聴く.
| Out[3]= |  |
次の例では,10倍音からわずか2倍音にまで下げられる一連ののこぎり波サウンドの作成に
Tableを使う.
| Out[4]= |  |
オプションOvertonesを使うと, Waveform関数はサウンドの作成にフーリエ(Fourier)の総和を用いる.この方法は計算する上ではデフォルトのアルゴリズムほど効率的ではないが,指定数の倍音だけを持つよりクリーンなサウンドを生成することができる.Mathematica のSetOptions関数はフーリエの総和をデフォルトにする場合に用いられる.
| Out[5]= |  |
サウンドの作成に,より速いアルゴリズムが用いられるようにする.
| Out[6]= |  |
波形のスペクトルの指定
| ListWaveform[{{n1,a1},{n2,a2},...},freq,dur] |
| 基本周波数 freq,継続時間 dur 秒で,相対周波数 において相対振幅が であるスペクトルのSoundオブジェクトを作成する |
指定のスペクトルを持つ波形の作成
ListWaveformを使うと,特定のスペクトルを持つ波形を作成することができる.第1引数はペアのリストである.各ペアの最初の要素は基本周波数に対する相対周波数であり,2つ目の要素はその周波数における相対振幅である.
例えば,部分音の周波数が非調和関係にあり,複雑な振幅の関係を持つ「楽器」に相当する部分音リストを定義することができる.その後,ListWaveformを用いて,これらの関係を異なる基本周波数で生成することができる.
次の式は,440 Hzから始めて上昇していく6つの半音階を生成する.すべて同じ部分音リストを使い,それぞれ継続時間は0.2秒である.
| Out[9]= |  |
ListWaveformを使うと,すべての周波数成分が同じ振幅を共有するように振幅を1とする部分音リストを定義することで,和音を作成することもできる.
次の一連の相対周波数は長和音を定義するものである.振幅は1に設定されているので,すべての周波数成分において同じ振幅である.
次の式は493.88 Hz(ピッチB4)の基本波に基づく長和音を作成する.
| Out[11]= |  |
振幅変調
振幅変調はスタジオで使われる一般的なアナログ技術であり,これには作成されたサウンドには搬送波周波数と,搬送波周波数・変調周波数の和および差の3つの周波数が含まれる.
振幅変調
AmplitudeModulationで用いられる式は
である.
変調周波数が低周波(20 Hz未満)である場合,振幅変調の結果は音楽家がトレモロと呼ぶものとなる.
| Out[12]= |  |
変調の深さや強度は変調指数 mi で制御される.
のとき,搬送波は過変調であるという.mi の影響を理解するのに最適な方法は,0.1から2.0の間の様々な値を試してみることである.
リング変調
オプションをRingModulation->Trueと設定した場合,AmplitudeModulationで作成されたSound オブジェクトが含む周波数は,搬送波周波数と変調周波数の和と差の2つだけである.これはリング変調と呼ばれ,式
で与えられる.
次の例では,出力サウンドは700 Hzおよび300 Hzの周波数を含む.これは搬送波周波数と変調周波数のそれぞれ和と差である.
| Out[13]= |  |
周波数変調
周波数変調(FM)は主な大学でワークステーションに,また郊外の家でシンセサイザーに用いられる技術である.この技術が偏在する理由の一部として,数学的に簡単であることと,電子回路への実装が容易であることが挙げられる.周波数変調の式は
で与えられる.
周波数変調
変調周波数が低周波(20Hz未満)である場合,結果は音楽家がビブラートと呼ぶものとなる.
| Out[14]= |  |
変調指数は変調周波数に対する周波数偏移の比となる.変調指数が大きいと,部分音が多くなり,音が明るくなる.変調指数の値が非常に大きいとエイリアシングノイズが発生し,音に低周波成分が加わる.
| Out[15]= |  |
周波数比は搬送波周波数に対する変調周波数の比である.この比が1以上の整数である場合,結果の倍音と側波帯は互いに調和関係となる.これは標準的なオーケストラの楽器の調和関係に類似している.一方,周波数比が整数でない場合は,結果の倍音と側波帯は非調和関係を持つ.これはパーカッションやベルに類似している.調和関係とは倍音と側波帯が,ある基音(搬送波とは限らない)の高調波と一致する周波数のときのことである.
カスケード周波数変調
カスケード周波数変調は周波数変調の一種である.この方式では変調周波数自体が変調されるので,変調が段階的に行われることになる.2つの変調周波数を持つカスケード周波数変調の式は
と表される.このネストした演算は任意の大きさの変調周波数のリストについて実行できる.
次のカスケード周波数変調の例では,各変調周波数には別々の周波数偏移が与えられる.
| Out[16]= |  |
並列周波数変調
カスケード周波数変調とは逆に,並列周波数変調は搬送波周波数が2つ以上の変調周波数で変調される技術である.この変調周波数は互いに変調し合うことはない.2つの変調周波数を持つ並列周波数変調の式は
で与えられる.
カスケードFMの例と同じ値を用いて並列FMの例を生成する.結果のサウンドでは,より高い部分音の方がより強くなっている.
| Out[17]= |  |
オプションDisplayFunction,SampleRate,SampleDepth,PlayRangeの設定
Audioパッケージのサウンド生成関数はすべて,サウンド生成の低レベル操作に Mathematica のPlay関数を使う.Playのオプションの中には,SampleRate,SampleDepth,PlayRange等,結果のサウンドの質と構成を大幅に変えることのできるものがある.オプションDisplayFunctionは,作成されたSoundオブジェクトが返された直後に再生されるかどうかを決定する.
パッケージをロードすると,オプションSampleRate,SampleDepth,PlayRangeは使用中のマシンにおけるそれぞれの最適値に設定される.また,DisplayFunction->Identityも設定される.これにより,Sound オブジェクトが返されても再生はされない.これらの値は Mathematica のSetOptions関数を使って再設定したり,コマンドラインから指定したりすることができる.
| Out[18]= |  |
オプションDisplayFunction->$SoundDisplayFunctionを設定すると,毎回Show関数を使わなくても Mathematica がサウンドを作成した直後にそのサウンドが再生できる.引数の組合せを試験しており,引数が結果のサウンドにもたらす影響を聴きたい場合には,この設定が最も便利である.
| Out[19]= |  |
次の式は周波数変調されたサウンドを

に割り当て,サウンドを再生する.
| Out[20]= |  |
同じ関数の変調周波数の値を少し変えて聴くこともできる.
| Out[21]= |  |
| Out[22]= |  |
Playのさまざまなオプションの効果を知ると,サウンド生成関数がよりうまく使いこなせるようになる.
SampleRateはサウンドプリミティブのオプションで,サウンドの生成の際の1秒あたりのサンプル数を指定するものである.ナイキスト(Nyquist)の標本化定理によると,最大周波数
ヘルツの波形を正確に表現するためには,1秒あたり
サンプルが必要となる.つまり,サンプリングレートが聴きたいサウンドの最大周波数の少なくとも2倍である必要があるということである.サンプリングレートが小さいとエイリアシングが生じ,サンプリングレートの半分以上の周波数成分が実際より低い周波数成分として表されてしまう.人間の聴覚は音声信号として20 Hzから20,000 Hzまでの間の周波数を聞き取ることができるので,音声範囲をすべて正しくエンコードするためには,少なくとも1秒あたり40,000サンプルのサンプリングレートが必要となる.
Mathematica では,SampleRateは任意の正の数に設定できる.しかし,作成されるサウンドはデジタル・アナログコンバータのサンプリングレートに依存する.コンバータのサンプリングレートが指定のサンプリングレートの倍数でない場合は,コンバータのサンプリングレートのソフトウェア変換が自動的に行われるため,結果のサウンドに歪みが生じることがある.
| Out[23]= |  |
同じサウンドを
SampleRate->1234で再生する.デジタル・アナログコンバータのサンプリングレートが1234 Hzの倍数でないため,雑音が加わる.
| Out[24]= |  |
SampleDepth(量子化ともよく呼ばれる)はサウンドプリミティブのオプションで,サウンドの振幅レベルのエンコードに何ビット必要であるかを指定するものである.これをSampleDepth->8と設定すると
通りの振幅レベルが可能となり,SampleDepth->16とすると
通りとなる.使用するハードウェアに最適なSampleDepthを選択しなければならない.
| Out[25]= |  |
コンピュータによっては,この
SampleDepthではサウンドが生成されなかったり,雑音が多いサウンドが生成されたりすることがある.
| Out[26]= |  |
PlayRangeはPlay および関連する関数オプションで,含むべきサウンドの振幅レベルの範囲を指定するものである.関数Waveform,FrequencyModulationではこの値はAllとなり,AmplitudeModulation関数では
となる.Play のPlayRangeはPlotのPlotRangeと同じように動作する.
| Out[27]= |  |
| Out[28]= |  |
2つ目のプロットは関数の値がPlotRangeで指定された限界を越えると,値が切り捨てられる.同様に,サウンドの振幅がPlayRangeの設定を超えると,結果のサウンドは元の関数を完全には表現できない.この現象は作曲家の間では波形形成,エンジニアの間では波形歪みと呼ばれる.すべての生成されたサンプルが波形歪みなしで表されるように, PlayRangeは十分高く設定しなければならない.
任意の順序でのSoundオブジェクトの再生
Audio`で定義されているサウンド生成関数はすべてSoundオブジェクトを返すので,返された値はShow関数を使って順に聴くことができる.
逆の順序で3つの
Soundオブジェクトを再生する.
| Out[30]= |  |