こちらの本でサウンドプログラミングを勉強中。 Unity に移植してみたコードを書いておきます。コードの解説は書籍の方を参照して下さい。
サウンドプログラミング入門――音響合成の基本とC言語による実装 (Software Design plus)
- 作者: 青木直史
- 出版社/メーカー: 技術評論社
- 発売日: 2013/02/01
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 18回
- この商品を含むブログ (6件) を見る
SineWave という名前で C# ファイルを作成し、 Main Camera にドラッグするとテスト出来ます。
using UnityEngine; using System.Collections; using System; /* Math クラスを使うため追加 */ public struct MonoPCM { public int fs; /* 標本化周波数 */ } /* サイン波 */ public class SineWave : MonoBehaviour { bool playing = false; MonoPCM pcm; int n; double a, f0; double increment; double phase; void Awake () { pcm = new MonoPCM(); pcm.fs = 44100; /* 標本化周波数 */ } void OnAudioFilterRead (float[] data, int channels) { if (!playing) return; a = 0.1; /* 振幅 */ f0 = 500.0f; /* 周波数 */ increment = 2.0 * Math.PI * f0 / pcm.fs; /* サイン波 */ for (n = 0; n < data.Length; n = n + channels) { phase = phase + increment; data[n] = (float)(a * Math.Sin(phase)); if (channels == 2) data [n + 1] = data [n]; if (phase > 2 * Math.PI) phase = 0; } } void OnGUI () { int y = 10; if (GUI.Button (new Rect (10, y, 100, 30), "Play")) { playing = true; } y += 40; if (GUI.Button (new Rect (10, y, 100, 30), "Stop")) { playing = false; } } }
関連情報
nakamura001 @ ウィキ - トップページ/Unity(Unity3D)/サウンド/作成
http://www32.atwiki.jp/nakamura001/pages/274.html