オーディオやマルチメディア関連のプログラムを書いていると、手早くノコギリ波や矩形波を生成したいことがある。 そこで、簡単にいろいろな波形を生成する方法をまとめる。 1. ノコギリ波1サンプルごとに少しずつ値を足していくと、直線的に増加していく波形ができる。値が 1.0 を超えた瞬間に 0.0 へ戻すことで、ノコギリ状の周期波形が生成できる。これは、値の小数点以下のみを取り出すことで実装できる。 実装してみる。 以下のコードでは、オーディオ信号として扱いやすいよう出力値の範囲を 0〜1 から -1〜1 へ変換している。 double sawtooth(double 周波数, double サンプルレート) { static double phase = 0.0; // 初期値 phase += 周波数 / サンプルレート; phase -= floor(phase); // 整数部分を引き算
![基本波形の生成](https://cdn-ak-scissors.b.st-hatena.com/image/square/c637ef9d90ac16f94f3881a1f266eb34758d1753/height=288;version=1;width=512/https%3A%2F%2Fblogger.googleusercontent.com%2Fimg%2Fb%2FR29vZ2xl%2FAVvXsEiuC8fdT_2o4e0ngwJxveHo0tXgBXwLC1FWNW0KxOe9oXqLxRJmTHaaIO_bt7iA4x5lrYxCcLcWYY6hdEieoVVfLntGeRnzOECdih99y3mYTXMbTxF3jpk1YB0XrHecxWRHtJqaQHo7DZQY%2Fw1200-h630-p-k-no-nu%2F%2525E5%252590%25258D%2525E7%2525A7%2525B0%2525E6%25259C%2525AA%2525E8%2525A8%2525AD%2525E5%2525AE%25259A.png)