2010-09-09

【音楽】自作音源製作

ソフトウェアで音源作成してます。
サイン波の波形は簡単に作れる(大抵のプログラミング言語には最初からsin関数がついてる)んだけど、三角波やノコギリ波、矩形波にパルス波を 作り出そうとすると結構めんどい。

まぁ、最初なのでファミコン(チップチューンとかいうジャンルらしい)のような音になる予定。

以下、メモ的に少し具体的な話を。

1)テンポが120だとすると、大体2秒で1小節。よって4分音符は0.5秒だと分かる。
2)A4(ラの音ね)の音を出す場合、1秒間に440回サインカーブの波形を作成する。これを440Hzという。
3)4分音符なら0.5秒なので440÷2=220Hz。例えば全音符なら440*2=880の周波数となる。
4)この波のデータは単位円の話なので-1~1までの実数になる。
5)CDの音質だとこの波形データから44100回サンプリングする。44100Hzの標本化周波数という。
6)この取り出した44100個のデータを16ビット(0~65535まで)の情報として量子化する。
7)Waveファイル形式として書き出し。

と言う感じの流れになってる(これで正しい処理かどうかは分からないw)。
たぶん、2)~7)を音を替えながら繰り返せば曲データとして保存可能。
後はディジタルフィルタなんかを実装すればリバーブとかの効果を持たせられる。

実は既にディジタルフィルタのプログラムは作ってある(高速フーリエ変換のプログラムも)ので、音源ができればWebサービスとして公開可能だっ たりします。

---
ここで分からない人のための三角関数のおさらい。

◆サイン
単位円(半径が1の円のことね)の線上をある点が移動するときのY座標の値を返すもの。
つまり、Yの高さを得られるわけだね。
角度が90度の時はY=1になったり、0度や180度の時はX軸上にあるからY=0になったりする。

◆コサイン
こっちは単位円の線上をある点が移動するときのX座標の値を返すもの。
つまりXの長さを得られる。
角度が0度の時X=1だし、90度の時はX=0。180度の時はー1になる。



ちなみに、サインカーブの周波数を変えてどんどん足していくといろんな波形にできる(たとえばノコギリ波とか)。
その「いろんな周波数」を分解して「どんな周波数が足されているのか」を見るために「フーリエ変換」を使用したりする。
普通の波のグラフは横軸が「時間(t)」になってるけど、フーリエ変換後のグラフは横軸が「周波数」になる。見え方を変えられる処理ということ。

ローパスフィルターやハイパスフィルターはこのフーリエ変換された周波数のデータから低い周波数のみ通したり、高い周波数のみ通したりするディジ タルフィルタ。

ZenBack

WebMoney ぷちカンパ