private static void PrintAudioFrequencies(AbstractReactiveAnimation CurrentAnimation)
 {
     int availableWidth = (Processing_Limit_Display ? Processing_Limited_Display_Width : Console.WindowWidth);
     // Limit the maximum output according to whether or not limited display width is requested
     int calculatedBarWidth = (int)(availableWidth / 3) - 2;
     if (calculatedBarWidth < 10)
         return;
     // Divided by the number of meter bars displayed
     Console.WriteLine (MathUtilities.GenerateMeterBar (CurrentAnimation.Audio_Low_Intensity, 0, 1, calculatedBarWidth, true) + " " +
                        MathUtilities.GenerateMeterBar (CurrentAnimation.Audio_Mid_Intensity, 0, 1, calculatedBarWidth, true) + " " +
                        MathUtilities.GenerateMeterBar (CurrentAnimation.Audio_High_Intensity, 0, 1, calculatedBarWidth, true)
                        );
 }
 private static void PrintAudioVariables(AbstractReactiveAnimation CurrentAnimation)
 {
     int availableWidth = (Processing_Limit_Display ? Processing_Limited_Display_Width : Console.WindowWidth);
     // Limit the maximum output according to whether or not limited display width is requested
     int calculatedBarWidth = (int)(availableWidth / 4) - 2;
     if (calculatedBarWidth < 10)
         return;
     // Divided by the number of meter bars displayed
     Console.WriteLine (MathUtilities.GenerateMeterBar (CurrentAnimation.Audio_Realtime_Intensity, 0, 1, calculatedBarWidth, true) + " " +
                        MathUtilities.GenerateMeterBar (CurrentAnimation.Audio_Delta_Intensity, -1, 1, calculatedBarWidth, true) + " " +
                        MathUtilities.GenerateMeterBar (MathUtilities.ConvertRange (CurrentAnimation.Audio_Frequency_Distribution_Percentage, 0, 1, -1, 1), -1, 1, calculatedBarWidth, true) + " " +
                        MathUtilities.GenerateMeterBar (CurrentAnimation.Audio_Delta_Frequency_Distribution_Percentage, -1, 1, calculatedBarWidth, true)
                        );
 }
        /// <summary>
        /// If requested, prints information about audio processing to the console
        /// </summary>
        /// <param name="CurrentAnimation">Current abstract animation to retrieve audio information from.</param>
        public static void PrintAudioInformationToConsole(AbstractReactiveAnimation CurrentAnimation)
        {
            string VU_Intensity_Delta_Sign = " ";
            if (CurrentAnimation.Audio_Delta_Intensity < 0) {
                VU_Intensity_Delta_Sign = "-";
            }
            if (Processing_Show_Analysis) {
                try {
                    Console.SetCursorPosition (0, 0);
                } catch (ArgumentOutOfRangeException) {
                    // Stupid Mono System.Console bug...
                }
                string animationType = CurrentAnimation.GetType ().Name.Replace ("ReactiveAnimation", "").Trim ();
                if (animationType == "") {
                    animationType = "Unknown";
                }
                if (CurrentAnimation is LegacyReactiveAnimation) {
                    animationType = String.Format ("Legacy: {0}", (CurrentAnimation as LegacyReactiveAnimation).VU_Selected_Mode.ToString ());
                }
                Console.WriteLine ("--------------------- [{0}] Channels: {1} ------------------------", animationType, CurrentAnimation.AudioProcessedSnapshot.Count);
                Console.WriteLine ("Intensity: " + Math.Round (CurrentAnimation.Audio_Realtime_Intensity, 3).ToString ().PadRight (5) + " (avg: " + Math.Round (CurrentAnimation.Audio_Average_Intensity, 3).ToString ().PadRight (5) + ", delta: " + VU_Intensity_Delta_Sign + Math.Abs (Math.Round (CurrentAnimation.Audio_Delta_Intensity, 3)).ToString ().PadRight (5) + ")  Smoothing: " + Math.Round (CurrentAnimation.SmoothingAmount, 3).ToString ().PadRight (5) + "  Color fade: " + CurrentAnimation.ColorShift_Amount.ToString ().PadRight (4));
                Console.WriteLine ("Freq. distribution: " + Math.Round ((double)CurrentAnimation.Audio_Frequency_Distribution_Percentage, 3).ToString ().PadRight (5) + "  (avg: " + Math.Round ((double)CurrentAnimation.Audio_Average_Frequency_Distribution_Percentage, 3).ToString ().PadRight (5) + ")  Color boost, high: " + CurrentAnimation.ColorShift_HighBoost.ToString ().PadRight (4) + " - low: " + CurrentAnimation.ColorShift_LowBoost.ToString ().PadRight (4));

                int availableWidth = (Processing_Limit_Display ? Processing_Limited_Display_Width : Console.WindowWidth);
                // Limit the maximum output according to whether or not limited display width is requested
                int calculatedBarWidth = (availableWidth) - (5 + 2);
                // Two for padding, a few for the numbers at the end.  Only one bar, no need to divide it
                if (calculatedBarWidth < 10)
                    return;

                for (int i = 0; i < CurrentAnimation.AudioProcessedSnapshot.Count; i++) {
                    Console.WriteLine (MathUtilities.GenerateMeterBar (CurrentAnimation.AudioProcessedSnapshot [i], 0, 1, calculatedBarWidth, true));
                    //Console.WriteLine (new String ('=', (int)MathUtilities.ConvertRange (CurrentAnimation.AudioProcessedSnapshot[i], 0, 1, 0, 50)).PadRight (50, ' ') + "|  (" + Math.Round (CurrentAnimation.AudioProcessedSnapshot[i], 3).ToString ().PadRight (5, ' ')+ ")");
                }
            }
            if (Processing_Show_Variables) {
                PrintAudioVariables (CurrentAnimation);
            }
            if (Processing_Show_Frequencies) {
                PrintAudioFrequencies (CurrentAnimation);
            }
        }