まいど、いかおです
表題の件、考えてみます。間違ってたらツッコミをよろしくお願いします。
サイン波ですから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;
}
次回、実際にやってみて検証します。





