###実現したい事
C言語でリコーダーの音の波形を生成したいのですが、上手くいきません。リコーダーの音はこのサイトから引っ張ってきました。その音源をフリーソフトで読み込んで周波数分析し、参考サイトのex10_6をいじってプログラムを記述したのですが取り込んだ波形とプログラムによって生成された波形が一致しませんでした。どう修正すればよいか分かる方回答お願いします。
###ソース
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4#include "wave.h" 5int main(void) 6{ 7 MONO_PCM pcm; 8 int n, i; 9 double *ac, fc, *am, fm, ratio, gain, S, H[20], G[20] = {-35.5, -6.2, -34.4, -36.8, -55.8, -50.2, -57.7, -54.7, -67.9, -60.9, -67.7, -63.9, -71.5, -73.7, -77,9}; 10 11 pcm.fs = 44100; /* 標本化周波数 */ 12 pcm.bits = 16; /* 量子化精度 */ 13 pcm.length = pcm.fs * 4; /* 音データの長さ */ 14 pcm.s = calloc(pcm.length, sizeof(double)); /* 音データ */ 15 16 ac = calloc(pcm.length, sizeof(double)); 17 am = calloc(pcm.length, sizeof(double)); 18 19 20 for(i = 0; i < 15; i++){ 21 H[i] = pow(10, (G[i]-G[0])/20.0); 22 23 } 24 25 ac[0] = 0; 26 /* AM変調 */ 27 for (n = 0; n < pcm.length; n++) 28 { 29 ac[n+1] = ac[n] + M_PI/180; 30 pcm.s[n] += H[0] * sin(1*ac[n])/10; 31 pcm.s[n] += H[1] * sin(2*ac[n])/10; 32 pcm.s[n] += H[2] * sin(3*ac[n])/10; 33 pcm.s[n] += H[3] * sin(4*ac[n])/10; 34 pcm.s[n] += H[4] * sin(5*ac[n])/10; 35 pcm.s[n] += H[5] * sin(6*ac[n])/10; 36 pcm.s[n] += H[6] * sin(7*ac[n])/10; 37 pcm.s[n] += H[7] * sin(8*ac[n])/10; 38 pcm.s[n] += H[8] * sin(9*ac[n])/10; 39 pcm.s[n] += H[9] * sin(10*ac[n])/10; 40 pcm.s[n] += H[10] * sin(11*ac[n])/10; 41 pcm.s[n] += H[11] * sin(12*ac[n])/10; 42 pcm.s[n] += H[12] * sin(13*ac[n])/10; 43 pcm.s[n] += H[13] * sin(14*ac[n])/10; 44 pcm.s[n] += H[14] * sin(15*ac[n])/10; 45 46 } 47 48 gain = 0.1; /* ゲイン */ 49 50 for (n = 0; n < pcm.length; n++) 51 { 52 pcm.s[n] *= gain; 53 } 54 55 wave_write_16bit_mono(&pcm, "リコーダー3.wav"); 56 57 free(pcm.s); 58 free(ac); 59 free(am); 60 61 return 0; 62} 63
###(元の波形)周波数分析の結果
###(プログラムによって生成された波形)周波数分析の結果
###補足
配列Gに格納されている値は波形をスペクトラム表示させたときのピークのdb値が入ってます。