オーディオパッケージ

このパッケージには,標準波形およびユーザ指定のスペクトルを持つ波形の生成,振幅・周波数が変調された正弦波の合成,およびサウンドファイルのWolfram言語への読込みのための関数が含まれている.

Wolfram言語のサウンド関数のグラフィックス出力はハードウェアに依存するため,使用中のマシンで例題を評価して得られた波形が,このドキュメントに含まれているグラフィックスとは異なることがある.

標準波形の生成

Waveform[type,freq,dur]基本周波数 freq ヘルツ,継続時間 dur 秒,タイプ type の標準波形Soundオブジェクトを作成する

標準波形の生成

Waveformでは理論的に無限数の倍音を含む標準波形の作成に,計算上効率のよいアルゴリズムが用いられる.

標準波形の定義

パッケージをロードする.
In[1]:=
Click for copyable input
次の例を実行すると,Waveformは440 Hzの基本波を持ち,継続時間が0.2秒である三角波に相当するSoundオブジェクトを返す.
In[2]:=
Click for copyable input
Out[2]=
Waveform[type,freq,dur,Overtones->n]
n 倍音の標準波形を作成する

指定数の倍音を持つ標準波形の作成

オプションOvertonesを指定すると,Waveformで作成されるサウンドに含まれる倍音の数を制限することができる.

8倍音のみの矩形波を生成し,Show関数を使ってサウンドを聴く.
In[3]:=
Click for copyable input
Out[3]=
次の例では,10倍音からわずか2倍音にまで下げられる一連ののこぎり波サウンドの作成にTableを使う.
In[4]:=
Click for copyable input
Out[4]=

オプションOvertonesを使うと, Waveform関数はサウンドの作成にフーリエ(Fourier)の総和を用いる.この方法は計算する上ではデフォルトのアルゴリズムほど効率的ではないが,指定数の倍音だけを持つよりクリーンなサウンドを生成することができる.Wolfram言語のSetOptions関数はフーリエの総和をデフォルトにする場合に用いられる.

Waveformがサウンドの作成にフーリエの総和を使うようにする.
In[5]:=
Click for copyable input
Out[5]=
サウンドの作成に,より速いアルゴリズムが用いられるようにする.
In[6]:=
Click for copyable input
Out[6]=

波形のスペクトルの指定

ListWaveform[{{n1,a1},{n2,a2},},freq,dur]
基本周波数 freq,継続時間 dur 秒で,相対周波数 において相対振幅が であるスペクトルのSoundオブジェクトを作成する

指定のスペクトルを持つ波形の作成

ListWaveformを使うと,特定のスペクトルを持つ波形を作成することができる.第1引数はペアのリストである.各ペアの最初の要素は基本周波数に対する相対周波数であり,2つ目の要素はその周波数における相対振幅である.

例えば,部分音の周波数が非調和関係にあり,複雑な振幅の関係を持つ「楽器」に相当する部分音リストを定義することができる.その後,ListWaveformを用いて,これらの関係を異なる基本周波数で生成することができる.

次の部分音リストで楽器を定義する.
In[7]:=
Click for copyable input
次の式は,440 Hzから始めて上昇していく6つの半音階を生成する.すべて同じ部分音リストを使い,それぞれ継続時間は0.2秒である.
In[8]:=
Click for copyable input
次に異なる基本周波数での部分音リストを聴く.
In[9]:=
Click for copyable input
Out[9]=

ListWaveformを使うと,すべての周波数成分が同じ振幅を共有するように振幅を1とする部分音リストを定義することで,和音を作成することもできる.

次の一連の相対周波数は長和音を定義するものである.振幅は1に設定されているので,すべての周波数成分において同じ振幅である.
In[10]:=
Click for copyable input
次の式は493.88 Hz(ピッチB4)の基本波に基づく長和音を作成する.
In[11]:=
Click for copyable input
Out[11]=

振幅変調

振幅変調はスタジオで使われる一般的なアナログ技術であり,これには作成されたサウンドには搬送波周波数と,搬送波周波数・変調周波数の和および差の3つの周波数が含まれる.

AmplitudeModulation[fc,fm,mi,dur]搬送波周波数と変調周波数がそれぞれ ヘルツと ヘルツ,変調指数が mi,継続時間が dur 秒である振幅変調正弦波のSoundオブジェクトを作成する

振幅変調

AmplitudeModulationで用いられる式はである.

変調周波数が低周波(20 Hz未満)である場合,振幅変調の結果は音楽家がトレモロと呼ぶものとなる.
In[12]:=
Click for copyable input
Out[12]=

変調の深さや強度は変調指数 mi で制御される.のとき,搬送波は過変調であるという.mi の影響を理解するのに最適な方法は,0.1から2.0の間の様々な値を試してみることである.

AmplitudeModulation[fc,fm,mi,dur,RingModulation->True]
リング変調正弦波のSoundオブジェクトを作成する

リング変調

オプションをRingModulation->Trueと設定した場合,AmplitudeModulationで作成されたSound オブジェクトが含む周波数は,搬送波周波数と変調周波数の和と差の2つだけである.これはリング変調と呼ばれ,式 で与えられる.

次の例では,出力サウンドは700 Hzおよび300 Hzの周波数を含む.これは搬送波周波数と変調周波数のそれぞれ和と差である.
In[13]:=
Click for copyable input
Out[13]=

周波数変調

周波数変調(FM)は主な大学でワークステーションに,また郊外の家でシンセサイザーに用いられる技術である.この技術が偏在する理由の一部として,数学的に簡単であることと,電子回路への実装が容易であることが挙げられる.周波数変調の式はで与えられる.

FrequencyModulation[fc,{fm,pd},dur]
搬送波周波数と変調周波数がそれぞれ ヘルツと ヘルツ,周波数偏移が pd ヘルツ,継続時間が dur 秒の周波数変調正弦波のSoundオブジェクトを作成する

周波数変調

変調周波数が低周波(20Hz未満)である場合,結果は音楽家がビブラートと呼ぶものとなる.
In[14]:=
Click for copyable input
Out[14]=

変調指数は変調周波数に対する周波数偏移の比となる.変調指数が大きいと,部分音が多くなり,音が明るくなる.変調指数の値が非常に大きいとエイリアシングノイズが発生し,音に低周波成分が加わる.

変調指数が5500/550の周波数変調の例.
In[15]:=
Click for copyable input
Out[15]=

周波数比は搬送波周波数に対する変調周波数の比である.この比が1以上の整数である場合,結果の倍音と側波帯は互いに調和関係となる.これは標準的なオーケストラの楽器の調和関係に類似している.一方,周波数比が整数でない場合は,結果の倍音と側波帯は非調和関係を持つ.これはパーカッションやベルに類似している.調和関係とは倍音と側波帯が,ある基音(搬送波とは限らない)の高調波と一致する周波数のときのことである.

FrequencyModulation[fc,{{f1,pd1},{f2,pd2},},dur,ModulationType->Cascade]
カスケード周波数変調正弦波のSoundオブジェクトを作成する. は変調周波数 に関連付けられた周波数偏移で,両値とも単位はヘルツである

カスケード周波数変調

カスケード周波数変調は周波数変調の一種である.この方式では変調周波数自体が変調されるので,変調が段階的に行われることになる.2つの変調周波数を持つカスケード周波数変調の式はと表される.このネストした演算は任意の大きさの変調周波数のリストについて実行できる.

次のカスケード周波数変調の例では,各変調周波数には別々の周波数偏移が与えられる.
In[16]:=
Click for copyable input
Out[16]=
FrequencyModulation[fc,{{f1,pd1},{f2,pd2},},dur,ModulationType->Parallel]
並列周波数変調正弦波のSoundオブジェクトを作成する. は変調周波数 に関連付けられた周波数偏移で,両値とも単位はヘルツである

並列周波数変調

カスケード周波数変調とは逆に,並列周波数変調は搬送波周波数が2つ以上の変調周波数で変調される技術である.この変調周波数は互いに変調し合うことはない.2つの変調周波数を持つ並列周波数変調の式はで与えられる.

カスケードFMの例と同じ値を用いて並列FMの例を生成する.結果のサウンドでは,より高い部分音の方がより強くなっている.
In[17]:=
Click for copyable input
Out[17]=

オプションDisplayFunction,SampleRate,SampleDepth,PlayRangeの設定

Audioパッケージのサウンド生成関数はすべて,サウンド生成の低レベル操作にWolfram言語のPlay関数を使う.Playのオプションの中には,SampleRateSampleDepthPlayRange等,結果のサウンドの質と構成を大幅に変えることのできるものがある.オプションDisplayFunctionは,作成されたSoundオブジェクトが返された直後に再生されるかどうかを決定する.

パッケージをロードすると,オプションSampleRateSampleDepthPlayRangeは使用中のマシンにおけるそれぞれの最適値に設定される.また,DisplayFunction->Identityも設定される.これにより,Sound オブジェクトが返されても再生はされない.これらの値はWolfram言語のSetOptions関数を使って再設定したり,コマンドラインから指定したりすることができる.

指定のSampleRateでサウンドを作成する.
In[18]:=
Click for copyable input
Out[18]=

オプションDisplayFunction->$SoundDisplayFunctionを設定すると,毎回Show関数を使わなくてもWolfram言語がサウンドを作成した直後にそのサウンドが再生できる.引数の組合せを試験しており,引数が結果のサウンドにもたらす影響を聴きたい場合には,この設定が最も便利である.

FrequencyModulationが返したSoundオブジェクトはすべて,返された直後に再生される.
In[19]:=
Click for copyable input
Out[19]=
次の式は周波数変調されたサウンドをに割り当て,サウンドを再生する.
In[20]:=
Click for copyable input
Out[20]=
同じ関数の変調周波数の値を少し変えて聴くこともできる.
In[21]:=
Click for copyable input
Out[21]=
次のように設定すると,FrequencyModulationは作成したSoundオブジェクトを再生しない.
In[22]:=
Click for copyable input
Out[22]=

Playのさまざまなオプションの効果を知ると,サウンド生成関数がよりうまく使いこなせるようになる.

SampleRateはサウンドプリミティブのオプションで,サウンドの生成の際の1秒あたりのサンプル数を指定するものである.ナイキスト(Nyquist)の標本化定理によると,最大周波数 ヘルツの波形を正確に表現するためには,1秒あたり サンプルが必要となる.つまり,サンプリングレートが聴きたいサウンドの最大周波数の少なくとも2倍である必要があるということである.サンプリングレートが小さいとエイリアシングが生じ,サンプリングレートの半分以上の周波数成分が実際より低い周波数成分として表されてしまう.人間の聴覚は音声信号として20 Hzから20,000 Hzまでの間の周波数を聞き取ることができるので,音声範囲をすべて正しくエンコードするためには,少なくとも1秒あたり40,000サンプルのサンプリングレートが必要となる.

Wolfram言語では,SampleRateは任意の正の数に設定できる.しかし,作成されるサウンドはデジタル・アナログコンバータのサンプリングレートに依存する.コンバータのサンプリングレートが指定のサンプリングレートの倍数でない場合は,コンバータのサンプリングレートのソフトウェア変換が自動的に行われるため,結果のサウンドに歪みが生じることがある.

デフォルトのSampleRateでの周波数変調サウンド.
In[23]:=
Click for copyable input
Out[23]=
同じサウンドをSampleRate->1234で再生する.デジタル・アナログコンバータのサンプリングレートが1234 Hzの倍数でないため,雑音が加わる.
In[24]:=
Click for copyable input
Out[24]=

SampleDepth(量子化ともよく呼ばれる)はサウンドプリミティブのオプションで,サウンドの振幅レベルのエンコードに何ビット必要であるかを指定するものである.これをSampleDepth->8と設定すると通りの振幅レベルが可能となり,SampleDepth->16とすると通りとなる.使用するハードウェアに最適なSampleDepthを選択しなければならない.

デフォルトのSampleDepth設定を使ったピッチA5.
In[25]:=
Click for copyable input
Out[25]=
コンピュータによっては,このSampleDepthではサウンドが生成されなかったり,雑音が多いサウンドが生成されたりすることがある.
In[26]:=
Click for copyable input
Out[26]=

PlayRangePlay および関連する関数オプションで,含むべきサウンドの振幅レベルの範囲を指定するものである.関数WaveformFrequencyModulationではこの値はAllとなり,AmplitudeModulation関数ではとなる.PlayPlayRangePlotPlotRangeと同じように動作する.

正弦波形の単純なプロット.
In[27]:=
Click for copyable input
Out[27]=
PlotRangeを制限した場合の上と同じプロット.
In[28]:=
Click for copyable input
Out[28]=

2つ目のプロットは関数の値がPlotRangeで指定された限界を越えると,値が切り捨てられる.同様に,サウンドの振幅がPlayRangeの設定を超えると,結果のサウンドは元の関数を完全には表現できない.この現象は作曲家の間では波形形成,エンジニアの間では波形歪みと呼ばれる.すべての生成されたサンプルが波形歪みなしで表されるように, PlayRangeは十分高く設定しなければならない.

任意の順序でのSoundオブジェクトの再生

Audio`で定義されているサウンド生成関数はすべてSoundオブジェクトを返すので,返された値はShow関数を使って順に聴くことができる.

3つのサウンドを作成する.
In[29]:=
Click for copyable input
逆の順序で3つのSoundオブジェクトを再生する.
In[30]:=
Click for copyable input
Out[30]=