Мне нужно рассчитать треугольник и пилообразную волну, но это немного сложно из-за моей модели и данных, с которыми я могу работать (но, возможно, я просто запутался).
Я могу рассчитать свою синусоиду, но на самом деле я не использую счетчик кадров. Что я делаю, так это вычисляю переменную theta_increment
, которую я могу использовать в следующий раз, когда мне нужно будет рассчитать выборку. Это работает следующим образом:
float x = note.frequency / AppSettings::sampleRate;
float theta_increment = 2.0f * M_PI * x;
float value = 0;
if(waveType == SINE){
value = sin(note.theta) * fixedAmplitude;
}
Теперь, когда у меня есть значение текущего фрейма/образца, я сохраняю theta_increment
внутри своего члена note.theta
, чтобы использовать его для следующего образца:
note.theta += theta_increment;
Я просмотрел множество примеров того, как я должен вычислять пилу или треугольник, но я не могу понять это. (В моем распоряжении есть только данные, упомянутые выше) Это моя последняя попытка, но она не работает и дает мне массу сбоев:
value = 1.0f - (2.0f * ((float)note.theta / (float)44100));