Esempio n. 1
0
        public override void Draw(GameTime gameTime, AnalyzedAudio data)
        {
            if (Vertices == null)
            {
                Vertices = new VertexPositionColor[256];
            }


            var heartData = Shapes.CreateHeart();

            for (int i = 0; i < heartData.Length; i++)
            {
                Vertices[i].Position = new Vector3(heartData[i], 0) * 15;
                Vertices[i].Color    = AppShell.ColorPalette.Color1;
            }

            int drawCount = heartData.Length - 1;


            var basicEffect = AppShell.BasicEffect;

            var View       = Matrix.Identity;
            var Projection = Matrix.CreateOrthographic(AppShell.Width, AppShell.Height, -1.0f, 1.0f);

            basicEffect.View       = View;
            basicEffect.Projection = Projection;

            foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes)
            {
                pass.Apply();
                AppShell.GraphicsDevice.DrawUserPrimitives(PrimitiveType.LineStrip, Vertices, 0, drawCount, VertexPositionColor.VertexDeclaration);
            }
        }
Esempio n. 2
0
 public AnalyzedAudioCache(Type operatorType, AnalyzedAudio analyzedAudio, int sampleCount, int sampleRate, string hash)
 {
     OperatorType  = operatorType;
     AnalyzedAudio = analyzedAudio;
     SampleCount   = sampleCount;
     SampleRate    = sampleRate;
     AudioHash     = hash;
 }
Esempio n. 3
0
        public WaveData Synthesize(AnalyzedAudio analyzedAudio, Action <double> notifyProgress)
        {
            var waa            = analyzedAudio as WorldAnalyzedAudio;
            var samplePosition = (int)Math.Ceiling(waa.BeginFrame * waa.FrameSize);
            var result         = new double[waa.SampleCount + 1];
            var fadeRad        = Math.PI * 2.0 / Math.Floor(waa.FrameSize);
            var beginFade      = Enumerable.Range(0, (int)waa.FrameSize).Select((i) => (1.0 + Math.Tanh(i * fadeRad - Math.PI)) * 0.5).ToArray();
            var endFade        = beginFade.Reverse().ToArray();

            var progress = 0;

            Parallel.For(0, waa.Elements.Length, (i) =>
            {
                var e = waa.Elements[i];
                if (e.FramePosition < waa.BeginFrame || e.FramePosition > waa.BeginFrame + waa.FrameLength)
                {
                    return;
                }

                var w = e.Synthesize();

                if (e.SilentStart)
                {
                    for (var n = 0; n < beginFade.Length; n++)
                    {
                        w[n] *= beginFade[n];
                    }
                }
                for (var n = 0; n < endFade.Length; n++)
                {
                    w[w.Length - endFade.Length + n] *= endFade[n];
                }

                lock (LockObject)
                {
                    var srcOffset = Math.Max(samplePosition - e.SamplePosition, 0);
                    var dstOffset = Math.Max(e.SamplePosition - samplePosition, 0);
                    w.BlockCopy(srcOffset, result, dstOffset, Math.Min(w.Length - srcOffset, result.Length - dstOffset));
                    progress++;
                    notifyProgress(progress / (double)waa.Elements.Length * 100.0);
                }
            });

            return(new WaveData(
                       result.Skip((int)(waa.BeginFrame * waa.FrameSize))
                       .Take((int)Math.Ceiling((waa.BeginFrame + waa.FrameLength) * waa.FrameSize))
                       .ToArray(),
                       waa.SampleRate
                       ));
        }
Esempio n. 4
0
 public WaveDataStream Synthesize(AnalyzedAudio analyzedAudio)
 {
     return(new WorldSynthesisStream(analyzedAudio as WorldAnalyzedAudio));
 }