「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

音についてまとめる(1)

音についてまとめてみる。

1.1Hzの音とは? 1秒間に1回上下する波の事。 「1回上下」というのは、円として考えた時に、0°〜360°まで角度θが変化する事と動議。 0°〜360° = 0 rad〜2π rad

1ー1.周波数1Hzの音を1秒間サイン波として作る 1Hzの音は1秒間に1回上下する=1回円を描く=2πラジアン変化するという事。 ただコンピュータでアナログな音を再現するには、アナログ音をデジタル値にする必要がある。

この時、どのくらいの頻度でアナログ音を刻む=離散化=サンプリングするか?を示す値をサンプリング周期(秒)という。サンプリング周期の単位は秒だが、1秒間に何回サンプリング(標本化)するか?を、サンプリング周波数(Hz)と表す事が出来る。

1Hzの音(1秒間に2πラジアン変化する音)をサンプリング周波数 fs = 44.1KHzでサンプリングすると仮定してみると。

1サンプル間における角度(ラジアン)の変化量unitは、 unit = 1Hz x 2π / sampleRate として求める事が出来る。

以上より、1Hzの音を1秒間、サンプリング周波数 fsで作成するには、

// 作成したい音の基本周波数
double freq = 1.0;

// サンプリング周波数
double fs = 44100.0;

// 円の角度
double phase = 0.0;

// 作成する音の秒数
float sec = 1.0;

// 総サンプル数
int maxSampleUnit = (int)sec * sampleRate;

// 1サンプルにおける変化量
double unit = freq * 2 * M_PI / sampleRate;

for (int i = 0; i < maxSampleUnit; i++)
{
float wave = sin ( phase);
phase += unit;
}

2.2Hzの音を5秒間作成してみる。

2Hzの音は1秒間2回上下する=2回円を描く=4πラジアン変化するという事。

そうすると、 1サンプル間における角度(ラジアン)の変化量unitは、 unit = 2Hz x 2π / sampleRate として求める事が出来る。

※つまり、1サンプル間における角度(ラジアン)の変化量は、  基本周波数x2π / sampleRateとして求める事が出来る。

// 作成したい音の基本周波数
double freq = 2.0;

// サンプリング周波数
double fs = 44100.0;

// 円の角度
double phase = 0.0;

// 作成する音の秒数
float sec = 5.0;

// 総サンプル数
int maxSampleUnit = (int)sec * sampleRate;

// 1サンプルにおける変化量
double unit = freq * 2 * M_PI / sampleRate;

for (int i = 0; i < maxSampleUnit; i++)
{
float wave = sin ( phase);
phase += unit;
}