static void Main(string[] args)
        {
            // Altseed2 を初期化します。
            if (!Engine.Initialize("PostEffect - LightBloom", 640, 480))
            {
                return;
            }

            // 画像を表示するノードを作成して登録します。
            // 詳しくはSpriteのサンプルを参照してください。
            var node = new SpriteNode
            {
                Texture = Texture2D.Load(@"TestData/Graphics/flower.png"),
                Scale   = new Vector2F(0.5f, 0.5f)
            };

            Engine.AddNode(node);

            // ライトブルームを適用するポストエフェクトを作成して登録します。
            var postEffect = new PostEffectLightBloomNode
            {
                // ライトブルームの強さを設定します。
                Intensity = 5.0f,
                Threshold = 0.5f
            };

            Engine.AddNode(postEffect);

            // メインループ。
            // Altseed のウインドウが閉じられると終了します。
            while (Engine.DoEvents())
            {
                // Altseed を更新します。
                Engine.Update();
            }

            // Altseed の終了処理をします。
            Engine.Terminate();
        }
        static void Main(string[] args)
        {
            // Altseed を初期化します。
            Engine.Initialize("~ Altseed2 DEMO ~", 640, 480);
            Engine.ClearColor = new Color(0, 0, 0);

            // テキストを描画するノードを作成し、エンジンに登録します。
            var title = new TextNode();

            title.Font           = Font.LoadDynamicFont("Courier.ttf", 64);
            title.FontSize       = 48;
            title.Text           = Engine.WindowTitle;
            title.CenterPosition = title.ContentSize / 2;
            title.Position       = new Vector2F(320.0f, 80.0f);
            Engine.AddNode(title);

            // スペクトルバーを示す図形ノードを作成し、エンジンに登録します。
            var spectrumBars = new RectangleNode[16, 16];

            for (int i = 0; i < 16; ++i)
            {
                for (int j = 0; j < 16; ++j)
                {
                    spectrumBars[i, j] = new RectangleNode();
                    spectrumBars[i, j].RectangleSize  = new Vector2F(20.0f, 8.0f);
                    spectrumBars[i, j].CenterPosition = new Vector2F(10.0f, 4.0f);
                    spectrumBars[i, j].Position       = new Vector2F(28.0f * i + 110.0f, 16.0f * j + 60.0f);
                    spectrumBars[i, j].Color          = HSV2RGB((int)(22.5 * i), 255, 255);

                    Engine.AddNode(spectrumBars[i, j]);
                }
            }

            // シークバーを示す図形ノードを作成し、エンジンに登録します。
            var seekBarLine = new LineNode();

            seekBarLine.Point1    = new Vector2F(0.0f, 0.0f);
            seekBarLine.Point2    = new Vector2F(500.0f, 0.0f);
            seekBarLine.Thickness = 5.0f;
            seekBarLine.Position  = new Vector2F(70.0f, 400.0f);

            var seekBarDot = new CircleNode();

            seekBarDot.VertNum  = 360;
            seekBarDot.Radius   = 12.0f;
            seekBarDot.Position = new Vector2F(0.0f, 2.5f);

            seekBarLine.AddChildNode(seekBarDot);
            Engine.AddNode(seekBarLine);

            // ライトブルームのポストエフェクトを作成し、エンジンに登録します。
            var lightBloom = new PostEffectLightBloomNode();

            lightBloom.Intensity   = 5.0f;
            lightBloom.Threshold   = 0.1f;
            lightBloom.CameraGroup = 1;
            Engine.AddNode(lightBloom);

            // 音ファイルを読み込んで再生します。
            var sound   = Sound.Load(@"sample.ogg", false);
            var soundId = Engine.Sound.Play(sound);

            // メインループ。
            // Altseed のウインドウが閉じられると終了します。
            while (Engine.DoEvents())
            {
                // スペクトル情報を取得します。
                var spectrum = Engine.Sound.GetSpectrum(soundId, 1024, FFTWindow.Blackman);

                // スペクトル情報を区分ごとに合計し、スペクトルバーにその値を反映させます。
                for (int i = 0; i < 16; ++i)
                {
                    var amplitude = spectrum.Skip(i * 8).Take(8).Average();
                    for (int j = 0; j < 16; ++j)
                    {
                        var color = spectrumBars[i, 15 - j].Color;
                        color.A = (byte)((amplitude > j * 4.5) ? 255 : 0);
                        spectrumBars[i, 15 - j].Color = color;
                    }
                }

                // スペクトル情報を全て平均し、ライトブルームの光の強さに使用します。
                var amplitudeTotal = spectrum.Average();
                lightBloom.Exposure = amplitudeTotal * 0.5f;

                // 曲の長さと再生位置を取得します。
                var songLength   = sound.Length;
                var songPosition = Engine.Sound.GetPlaybackPosition(soundId);

                // 曲の長さと再生位置を、シークバーに反映させます。
                seekBarDot.Position = new Vector2F(songPosition / songLength * 500.0f, 2.5f);

                // Altseed を更新します。
                Engine.Update();

                // 音が止まっていたらメインループを終了します。
                if (!Engine.Sound.GetIsPlaying(soundId))
                {
                    break;
                }
            }

            // Altseed の終了処理をします。
            Engine.Terminate();
        }