音色の周波数解析
Mathematica による Wave File の解析

2003/2/26 平野拓一(東京工業大学)
2003/2/26 Takuichi Hirano (Tokyo Institute of Technology)

Wave ファイルの読み込み

In[1]:=

SetDirectory["c:/hira2/public_html/hobby/edu/sonic_wave/sound_analysis/sound_instruments"]

Out[1]=

c:\\hira2\\public_html\\hobby\\edu\\sonic_wave\\sound_analysis\\sound_instruments

In[2]:=

<< Miscellaneous`Audio` ;

In[3]:=

WaveFormPiano = ReadSoundfile["GrandPiano.wav", PrintHeader -> True] ;

Format:   Microsoft PCM WAVE RIFF

Duration:   5.500498866213152`   seconds

Channels:   1

Sampling rate:   22050

Bits per sample:   8

Data size:   121286   bytes

Number of samples:   121286

音を出して確認

In[4]:=

ListPlay[WaveFormPiano, SampleRate -> 22050, PlayRange -> {-2^16, 2^16}]

[Graphics:HTMLFiles/index_13.gif]

Out[4]=

-Sound -

時間波形を描く

In[5]:=

ListPlot[WaveFormPiano,  PlotRange -> {-2^16, 2^16},  PlotJoined -> True,  PlotStyle -&g ... gt; None,  FrameLabel -> {"Time", "Amplitude", "", ""}]

[Graphics:HTMLFiles/index_16.gif]

Out[5]=

-Graphics -

1周期を切り取る

[入力パラメータ]
smprate: wave ファイルのサンプリングレート
freq: 解析する音の周波数(うまく1周期を切り出すために指定)
n1: 切り出しを開始するリスト要素の開始番号

In[6]:=

smprate = 22050 ; freq = (27.5 * 2^3) * (2^1/12)^3 ; t = 1/freq ; n1 = 20000 ; n = Floor[(t/1) ... t; None,  FrameLabel -> {"Time", "Amplitude", "", ""}]

[Graphics:HTMLFiles/index_19.gif]

Out[13]=

-Graphics -

離散フーリエ変換してスペクトルを描く

In[14]:=

<< Graphics`Graphics` ; FWaveFormPiano2 = Fourier[WaveFormPiano2] ; FWaveFormPiano2 = Ta ... "},  BarStyle -> {RGBColor[0, 1, 1]},  BarEdgeStyle -> {},  BarGroupSpacing -> 0] ;

General :: spell1 :  スペル間違いの可能性があります.新規シンボル\" FWaveFormPiano2 \"はすでにあるシンボル\" WaveFormPiano2 \"に似ています.

[Graphics:HTMLFiles/index_23.gif]

[Graphics:HTMLFiles/index_24.gif]

切り出した1周期をいくつも並べて周期波形を作り、音を聴いてみる

In[21]:=

freq = 440 * (2^1/12)^3 ; t = 1/freq * 1 ; dur = 1.0 ; n = Ceiling[dur/t] ; WaveFormPiano3 = F ... , {i, 1, n}]] ; ListPlay[WaveFormPiano3, SampleRate -> 22050, PlayRange -> {-2^16, 2^16}] ;

[Graphics:HTMLFiles/index_26.gif]


Converted by Mathematica  (February 28, 2003)