投稿

3月, 2014の投稿を表示しています

C言語 ホワイトノイズをつくる

イメージ
ホワイトノイズ すべての周波数を含み、そのすべてが一定の強度を持つ波。これをまじめに計算するとなると、結構厄介な話になる。ここでは1Hzからナイキスト周波数(サンプリング周波数44100Hzであれば、22050Hz)を扱う。また1Hz単位のサイン波を同じ音量にして足していくことで実現してみた。計算が膨大になるため、処理に時間がかかる。ちなみに1秒のホワイトノイズを作るのに4分ぐらいかかっている。速いマシンなら1分以内で処理できるとは思う。またサイン波の初期角度は、ランダム関数を使って2pi以内でばらつかせることでお互いの干渉を防いでいる。 ホワイトノイズ生成プログラム /* White noise * sin波の合成による生成 * 32bit float RAW ヘッダなしwaveファイル出力 */ #include &ltstdio.h&gt #include &ltstdlib.h&gt #include &ltmath.h&gt int main(void){ FILE *fpw; /* 書き込み用ファイルポインタ */ float *pbuff; /* メモリのデータを指す */ int samplingfreq = 44100; /* サンプリング周波数 */ int sec = 1; /* 作成する波形の長さ(秒) */ int fileSize = samplingfreq * sec * 2; /* ファイルの大きさ */ float gain = 0.005; /* ひとつの波形の振幅 */ float step = 2 * M_PI / samplingfreq; /* 点間のステップ */ float phase; int i, j; /* 新規ファイル作成 */ fpw = fopen("white_noise_32bitF_raw.wav", "wb"); /* 失敗時終了 */ if (fpw == NULL) exit(EXIT_FAILURE); /* メモリを確保して先頭アドレスをpbuffに入れる */ pbuff = (float*)m

C言語 三角波をつくる

イメージ
三角波 三角波は、のこぎり波や矩形波に比べ倍音は少なく、おとなし目の音。 生成方法 基音となるサイン波に奇数倍音のサイン波を合成することで、三角波を生成。また振幅は2乗の逆数に比例して減衰させることで三角波になる。1オクターブにつき-12dB傾斜する。ちなみに矩形波は1オクターブにつき-6dBなので、倍音成分は三角波よりも多い。 サイン波の合成で三角波をつくる /* triangle wave * sin波の合成による生成 * 32bit float RAW ヘッダなしwaveファイル出力 */ #include &ltstdio.h&gt #include &ltstdlib.h&gt #include &ltmath.h&gt int main(void){ FILE *fpw; /* 書き込み用ファイルポインタ */ float *pbuff; /* メモリのデータを指す */ int samplingfreq = 44100; /* サンプリング周波数 */ int sec = 10; /* 作成する波形の長さ(秒) */ int fileSize = samplingfreq * sec; /* ファイルの大きさ */ float a = 0.5; /* Aの値 初期振幅 */ float note = 440; float step = 2 * M_PI / samplingfreq; /* 点間のステップ */ int i; int j; /* 新規ファイル作成 */ fpw = fopen("triangle_32bitF_raw.wav", "wb"); /* 失敗時終了 */ if (fpw == NULL) exit(EXIT_FAILURE); /* メモリを確保して先頭アドレスをpbuffに入れる */ pbuff = (float*)malloc(sizeof(float) * fileSize); /* 失敗時終了 */ if (pbuff == NULL) exit(EXIT_FAILURE); /* tria

C言語 矩形波をつくる

イメージ
矩形波 矩形波(くけいは)は、方形波、Square waveとも呼ばれている。 生成方法 基音となるサイン波に奇数倍音のサイン波を合成することで、矩形波を生成。また振幅は倍音と同じ数で割って、小さくしていく。 サイン波の合成で、矩形波をつくる /* Square wave * sin波の合成による生成 * 32bit float RAW ヘッダなしwaveファイル出力 */ #include &ltstdio.h&gt #include &ltstdlib.h&gt #include &ltmath.h&gt int main(void){ FILE *fpw; /* 書き込み用ファイルポインタ */ float *pbuff; /* メモリのデータを指す */ int samplingfreq = 44100; /* サンプリング周波数 */ int sec = 10; /* 作成する波形の長さ(秒) */ int fileSize = samplingfreq * sec; /* ファイルの大きさ */ float a = 0.6; /* Aの値 初期振幅 */ float note = 440; float step = 2 * M_PI / samplingfreq; /* 点間のステップ */ int i; int j; /* 新規ファイル作成 */ fpw = fopen("square_32bitF_raw.wav", "wb"); /* 失敗時終了 */ if (fpw == NULL) exit(EXIT_FAILURE); /* メモリを確保して先頭アドレスをpbuffに入れる */ pbuff = (float*)malloc(sizeof(float) * fileSize); /* 失敗時終了 */ if (pbuff == NULL) exit(EXIT_FAILURE); /* Square 奇数倍音の合成(15回) メモリ書き込み */ for(i=1; i&lt=29; i++){ for

C言語 のこぎり波をつくる

イメージ
思い出したようにC言語のプログラムメモを再開。サイン波の合成で検索して来る人が多いということと、子供がプログラムで音を作り始めたというところが理由。とりあえずシンセサイザーの基本となるような波形をフーリエ変換の考えでプログラミングしてみるところから再スタート。 のこぎり波 波形がのこぎりのような形になっているため、そう呼ばれている特徴的な波形。 生成方法 音はサイン波に分解できるというフーリエの理論だが、ここでは逆のサイン波を合成することで、のこぎり波を生成している。 またフーリエ変換では数学的に無限大の数のサイン波を合成するのだが、実際には適当な数で打ち切って処理している。もしくはナイキスト周波数までやれば、デジタル処理としては完璧。 のこりぎ波にするには、整数倍のサイン波を合成していくのだが、振幅は倍音と同じ数で割って、小さくしていくところがポイント。これだけで、のこぎり波になっていく。 他にものこぎり波の生成方法はいくらでもあるが、まずはこのような理論的にベーシックなところを確認しておきたい。 理想的な、のこぎり波形は耳に痛いのだが、ここで作るような合成数が少ない波形は角が取れて聴きやすい。 サイン波の合成で、のこぎり波をつくる /* Sawtooth wave * sin波の合成による生成 * 32bit float RAW ヘッダなしwaveファイル出力 */ #include &ltstdio.h&gt #include &ltstdlib.h&gt #include &ltmath.h&gt int main(void){ FILE *fpw; /* 書き込み用ファイルポインタ */ float *pbuff; /* メモリのデータを指す */ int samplingfreq = 44100; /* サンプリング周波数 */ int sec = 10; /* 作成する波形の長さ(秒) */ int fileSize = samplingfreq * sec; /* ファイルの大きさ */ float a = 0.4; /* Aの値 初期振幅 */ float note = 440; float step =

チューナー KORG AT-12 Auto Chromatic Tuner

イメージ
コルグの古いオートクロマチックチューナー。発売は1983年。定価19800円。未だに現役で問題なく使えている。当時高精度で入手可能な価格のチューナーはこれぐらいしかなかった。研究用に精度が欲しかったので無理して買ったのを思い出す。楽器メーカーでもこの機種を使って調律するぐらい信頼できるチューナー。今ならパソコンで十分だったりするのだけど。コルグは一般向けにはじめてチューナーを作ったメーカーで、今でもリーダー的な存在。チューナーを買うならコルグで間違いないと思う。 AT-12の説明書は紛失してしまったが、オフィシャルページでPDFをダウンロードできた。 http://www.korg.co.jp/Support/Manual/download.php?id=289 オート・チューナーの幕開け 今では自動で測定するオート・チューナーが普通だが、当時は音名を指定してから調律するマニュアル・チューナーが主流だった。このAT-12以降はオート・チューナーの時代になる。 針式メーター このチューナーの良い点は精度に尽きるのだが、今時のLEDチューナーと違い、針式メーターなので、音の揺れ具合まで分かって何かと便利だったりする。さじ加減で数セント高く合わせるとかが簡単。平均律以外の調律をするときにも使える。 また楽器の調律以外の用途がいろいろある場合は針式は便利。また反応スピードもそこそこ速く困ったことはない。SLOWとFASTの切替はできるようになっているので不安定な音の場合はSLOWにすると、見やすくなったりする。また暗いステージなどで使用できるようにライトを点灯させることも可能。 測定範囲と精度 32.7Hz~3951.07kHzまで測定可能。低い音はC1の32.7Hzは計測できる。これは5弦(6弦)ベースの一番低いB1の半音上の音になる。実際には倍音が結構出ているので、5弦ベース最低音も問題なくチューニングできる。高い音はピアノの高いB(3951Hz)の音まで計測可能。ということで、ほとんどの楽器の音域はカバーしているし、一部範囲外の音も測定可能なケースが多い。また、どの音域も±1セントの精度で測定できるので、楽器の調律であれば問題はないだろう。最新のチューナーの一部では精度が±0.1セントなどもあるけど、ギターなどだったら、楽器の精