2017-10-04 13 views
-3

rtaudioで簡単な正弦波を生成して、何が起こっているのかを確認しようとしています。しかし、間違っています。正弦波の生成:不正な出力

私はグローバルfloat timecを持っていて、コールバックはopenStreamで呼び出され、サンプルでバッファを満たす必要があります。

float freq = 440; // center frequency 
int SAMPLE_RATE = 44100; 
for (int i = 0; i < numFrames; i++) { 
    float v = sin(2 * M_PI * freq * (timec/SAMPLE_RATE)); 
    outputbuffer[i] = v; 
    timec++; 
} 

どうしたのですか?正弦波ではなく、低音が聞こえます。

+0

デバッガを使用し、デバッガに 'timec/SAMPLE_RATE'の値を表示させます。たとえば、「timec」が1であるとき、「1/44100」はゼロである。そして、その除算の結果は 'timec'が44100の値に達するまでゼロになるでしょう.Sp、最初の44100サンプルは' sin(0) 'として計算されます。これがC++の仕組みです。 –

+0

@SamVarshavchik timecは浮動小数点なので、自動的に結果を宣言するべきではありませんか? –

+0

「timec」は浮動小数点ですか?示されたコードでは 'timec'の宣言は与えられておらず、' int'とみなされていました。 –

答えて

0

私自身の質問に答える。

Rtaudioは、トリッキーな方法で出力バッファを処理します。フロートの配列は単一のモノラルチャンネル用ではなく、チャンネルごとに1つのフレームを表すスロットを含み、次のフレームには複数のスロットが続きます。この出力は2チャンネルであるため、キーの修正は次のとおりです。

outputbuffer[2 * i] = v;

出力するチャンネルは1つだけです。

関連する問題