母音をつくろうと試みた

フォルマントについて大体の話を読んで、じゃあつくってみよう!という話になった。

 

sin wave の合成をしまくってスペクトル図をモデルと同じようにしようと試みた

 f:id:sekibotbot:20151117015444p:plain



この通り和をとったつもりなのだが、出力したwavファイルをスペクトル解析し直してみると、どうやらなんかおかしい、、、、、

 

プログラムのバグか、はたまた直感的なことではいけないのかが気になるところ.

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// ./spec [1]samplingrate [2]time [3]formant1 [4]formant2 
// の順番に書く予定

int main(int argc, char *argv[])
{
double sample = atof(argv[1]);
double Time = atof(argv[2]);
double formant1 = atof(argv[3]);
double formant2 = atof(argv[4]);

double pi = M_PI;
double freq;
double t=0.0;
double amp = 0.01;
double data=0.0;

while (t<=Time){
data =0.0;


for(freq=0;freq<=2*formant2;freq=freq+100){

if(freq<=formant1){
data += (amp*freq/formant1)*sin(2*pi*freq*t);
}else if((formant1<freq)&&(2*freq<=(formant1+formant2))){
data += (amp*((2*formant1)-freq)/formant1)*sin(2*pi*freq*t);
}else if(((formant1+formant2)<2*freq)&&(freq<formant2)){
data += (amp*freq/formant2)*sin(2*pi*freq*t);
}else if(formant2<=freq){
data += (amp*((2*formant2)-freq)/formant2)*sin(2*pi*freq*t);
}
}

printf("%f %f\n", t, data);
t = t + 1/sample;
}

return 0;
}