1 / 14

サウンド

はじめに
ここでは、Mathematicaを用いて音を作成する方法について述べる。音は波なので、三角関数などを用いれば作成できる。三角関数をグラフ表示するためにPlot関数を用いていたが、PlotをPlayに変更するだけで簡単に音を演奏することができる。ドレミの作成から和音の演奏などまで行ってみよう。
1. PlayとListPlay
2. うなり3. 倍音と楽器の音色
4. ドレミと和音

1. PlayとListPlay
Mathematicaでは、グラフィックだけでなくサウンドも容易に作成することができる。もっとも、普通に用いるのはPlay関数である。Play関数を用いて周波数f(Hz)の音をs秒間演奏するためには以下のように入力する。
Play[Sin[2π f t],{t,0,s}]

周波数f(Hz)の音をs秒間演奏する。

ここでは、例としてラの音を演奏することを考えよう。例えば、ラの音は周波数は440Hzである。ラの音を1分間(4分音符)だけ演奏するためには次のように入力する。
In[7]:=

Out[7]=

2 / 14

ステレオ効果を出すためには、チャンネル１、２の音の周波数をなる。
Play[ { Sin[2πt], Sin[2πt]},{t,0,s}]
チャンネル１、２の音の周波数がそれぞれ,,とすれば次のように(Hz)のの音をs秒間演奏する。

つまり、チャンネル１、２の音の周波数を、ならべて{}でくくって指定すればよい。また、チャンネルがさらに多い場合は、同様にして関数を{}で複数くくって表示すればよい。
試みに、チャンネル１と２で、それぞれ１オクターブ異なるラの音を1秒間発生すると以下のようになる。
In[8]:=

Out[8]=

利用できるオプションの設定状況を確認するためには、Options関数を用いる。つまり、
In[2]:=

Out[2]=

これらのオプションを全て用いることは必ずしも必要ないが、オプションのうちから２つだけ特に紹介する。第１はPlayRangeである。PlayRangeは表示する振幅の範囲を指定する。例えば、
In[4]:=

3 / 14

また、SampleRateオプションは、作成する秒当たりの振幅のサンプル点数を指定する。
In[20]:=

一方、何らかのデ-タ（離散データ）をサウンドとして聴くためには、ListPlayコマンドを用いる。
ListPlay[{リスト}]

リストとして与えられた離散データからサウンドを生成する。

最初にデータを作成し、リストnlに定義する。
In[25]:=

ここで、Random[]は0から1の間の疑似乱数を発生する関数である。この場合、サンプル点を2000個発生することになる。そして、このサンプル点について音を発生するためにはListPlay関数を用いる。つまり、
In[26]:=

Out[26]=

一度作成した音をもう一度発生するには、Showコマンドを用いても良い。
In[27]:=

In[28]:=

演習問題1.1
ドレミの周波数は、それぞれ 261.6, 293.6, 329.6 Hzです。これらの音を発生しなさい。

4 / 14

演習問題1.2
ドの音のサンプル点数を100, 500,1000,2000,4000,8000と変更して発生し、それらの違いについて述べなさい。
演習問題1.3
ミの音(329.6 Hz)と、その１オクターブと２オクターブ上のミの音を、それぞれチャンネル１，２，３として音を発生しなさい。

2. うなり周波数が非常に近い波が重なると、振幅が時間的・空間的にも周期的に変化する現象を「うなり」という。波が可聴音であれば、音が大きくなったり、小さくなったりする。
最初に、440Hzの音に444Hzの音を重ねると以下のようになる。
In[24]:=

Out[24]=

また、440Hzの音に442Hzの音を重ねると以下のようになる。先の場合に比べて、すこし振幅の変化がゆっくりしているのがわかるでしょうか。
In[19]:=

Out[19]=In[20]:=

5 / 14Out[20]=

演習問題2.1
レの音に対して、+2,4,10Hzの音を重ねた音を生成し、うなりの発生を確認しなさい。

3. 倍音と楽器の音色
基本音と倍音ある音が１オクターブあがる場合、その周波数は2倍になる。従って、１オクターブ下がる場合、周波数は半分となる。試みとして、１オクターブ上のラは880Hzとなる。まず、基本音の場
合は次のようになる。
In[9]:=

6 / 14

Out[9]=

次に、１オクターブ高い音は次のようになる。
In[10]:=

Out[10]=

音色

楽器の場合、音色には基本音と倍音が合わさっている。同じラの音であっても、楽器の場合、周波数440Hzの基本音に、それと数オクターブことなる音が加わっている。例えば、周波数440Hzの基本音のラと、それに１オクターブ高い音が重なったラの音を演奏するためには次のように入力する。
In[29]:=

Out[29]=In[30]:=

Out[30]=In[31]:=

7 / 14Out[31]=

In[32]:=

Out[32]=

ここで音の波形を0≤t≤0.01 でグラフ化してみると、それぞれ次のようになる。
In[33]:=

8 / 14Out[33]=In[34]:=

Out[34]=

演習問題3.1
ミの音について、基本音とそれより１オクターブ高い倍音をそれぞれ個別に発生しなさい。また、基本音と、基本音にそれより１オクターブ、２オクターブ高い音を重ねた音を発生させて聞き比べなさい。
演習問題3.2
演習問題５で発生した、ミの基本音と、基本音にそれより１オクターブ、２オクターブ高い音を重ねた音の波形を0≤t≤0.01 でグラフ化しなさい。

9 / 14

4. ドレミと和音ドレミファソラシドを演奏する。

ドレミファソラシドの周波数は、それぞれ 261.6, 293.6, 329.6, 349.2, 392, 440, 493.8, 523.3 Hz
なので、最初にそれをリスト定義する。
In[1]:=

Out[1]=

きちんと代入されているか、確認してみると次のようになる。
In[2]:=

Out[2]=

In[3]:=

Out[3]=

そして、先の周波数を用いてドを演奏すると、次のようになる。
In[8]:=

Out[8]=

いちいち入力するのは面倒なので、Map関数と準関数の定義を用いることを考える。まず、上記の例を準関数を用いる形で書き換えると次のようになる。

10 / 14

In[13]:=

Out[13]=

続いてMap関数を用いてドレミファソラシドを演奏すると、次のようになる。
In[14]:=

Out[14]=

演習問題4.1
先の関係式や定義を利用して、１オクターブ高いドレミファソラシドを演奏しなさい。
和音を演奏する。

11 / 14

ドミソを3秒間演奏するためには、次のように入力する。
In[15]:=

Out[15]=

せっかくなので、少し高度ですがApplyを用いて書き換えてみましょう。かえって、難しくなったように思うかもしれませんが、複雑なものではこちらのほうが便利なときもあります。
In[21]:=

演習問題4.2
和音のうち、ドファラとシレソを演奏しなさい。

5. 作曲してみよう「さくら さくら」の出だしのところは「ララシ」である．ここのところをMathematicaで演奏してみよう．
In[44]:=

12 / 14

何だか,おかしくなかっただろうか.じつは，上記の記述では，さいしょの「ララ」の間に切れ目がないので，ひとつの「ラ」となってしまい，全体が「ラシ」ときこえているのです．そこで．音の切れ目として，をいれると，すこしすっきりするのではないだろうか．
In[43]:=

Out[43]=

13 / 14

一つの音楽としてまとめて定義し,再びプレイするには以下のように入力するとよい.
In[57]:=Out[57]=

In[58]:=Out[58]=14 / 14

演習問題9
楽譜を参考にして，「さくらさくら」を最後まで演奏してみなさい.
演習問題10
3つの楽器についてサウンドを作成し,必要とあれば友人とともにそれらを合わせて合奏してみよ.

6.サウンドのエキスポ-ト
サウンドをファイルとして出力するには以下のように入力する.

この結果,フォルダc:のところにpolaylist.wav というファイルが作成される.
(努力)演習問題11
好きな曲の主旋律をMathematicaで演奏してみなさい.

Created by Mathematica (March 30, 2007)