まいど、いかおです
表題の件、考えてみます。間違ってたらツッコミをよろしくお願いします。
サイン波ですからsin/cos/tanのsinを使いますよね。これを1秒間に440回転させればいいんです。
ここでサンプリングレートが48Kですから、1回転の長さ(サンプル数)は
1回転の長さ=48000/440
この長さで1回転させるのでサンプル取得のステップ幅は
サンプル取得のステップ幅 = 1回転の長さ / 360
で、コード的にはこんな感じなのか?
// 1秒分の440Hzのサイン波作成 // サンプルはunsigned shortで作ってみる(16bit) // 音量はどうしよう・・・とりあえず128 static const double PI = 3.1415926535; static const short vol = 128; double sampleWidth = (48000 / 440) / 360; double deg = 0.0f; unsigned short sample[48000]: for(int i=0;i < 48000;i++){ sample[i] = (unsigned short)vol * sin(deg * PI /180); deg = deg + (48000 / 440) / 360; }
次回、実際にやってみて検証します。