UnityのOnAudioFilterReadを使う事で音をならす事ができます。
ということで、サイン波とかノコギリ波とか使って音を操りたい!って
欲求が出てきたので少し勉強をはじめました。
※こちらの記事が勉強になります。
Procedural audio with Unity
http://www.develop-online.net/tools-and-tech/procedural-audio-with-unity/0117433
音響合成、Pdでシンセサイザーをつくる
http://yoppa.org/ssaw13/4567.html?fb_source=pubv1
さて、以下のスクリプトをカメラにつければ音が鳴らせます!
周波数の値をいじれば音は変化します。
以下のスクリプトの簡単な説明として
周波数は、1秒間に波が440個あるということで
サイン関数にラジアンを渡すことで波を作っています。
using UnityEngine;
using System; // Needed for Math
public class Sinus : MonoBehaviour
{
public double frequency = 440;
public double gain = 0.05;
private double increment;
private double phase;
private double sampling_frequency = 48000;
void OnAudioFilterRead(float[] data, int channels)
{
increment = frequency * 2 * Math.PI / sampling_frequency;
for (var i = 0; i < data.Length; i = i + channels)
{
phase = phase + increment;
data[i] = (float)(gain*Math.Sin(phase));
if (channels == 2) data[i + 1] = data[i];
if (phase > 2 * Math.PI) phase = 0;
}
}
}
さあ、音が鳴りました。
これは面白いですね。
波の形を変えれば音が変化します。ノコギリ波とか
「強火で進め」さんでは、波形ごとのソースを書いてますので
そちらを参考にするとさらに前進できますね!
http://d.hatena.ne.jp/nakamura001/20120724/1343148980