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); } }
public AnalyzedAudioCache(Type operatorType, AnalyzedAudio analyzedAudio, int sampleCount, int sampleRate, string hash) { OperatorType = operatorType; AnalyzedAudio = analyzedAudio; SampleCount = sampleCount; SampleRate = sampleRate; AudioHash = hash; }
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 )); }
public WaveDataStream Synthesize(AnalyzedAudio analyzedAudio) { return(new WorldSynthesisStream(analyzedAudio as WorldAnalyzedAudio)); }