1289 lines · 42.2 KB · C#
RawDownload
//******************************************************************************************************//  Note.cs - Gbtc////  Copyright © 2012, Grid Protection Alliance.  All Rights Reserved.////  Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See//  the NOTICE file distributed with this work for additional information regarding copyright ownership.//  The GPA licenses this file to you under the MIT License (MIT), the "License"; you may//  not use this file except in compliance with the License. You may obtain a copy of the License at:////      http://www.opensource.org/licenses/MIT////  Unless agreed to in writing, the subject software distributed under the License is distributed on an//  "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the//  License for the specific language governing permissions and limitations.////  Code Modification History://  ----------------------------------------------------------------------------------------------------//  07/29/2009 - J. Ritchie Carroll//       Generated original version of source code.//  08/06/2009 - Josh L. Patterson//       Edited Comments.//  09/14/2009 - Stephen C. Wills//       Added new header and license agreement.//  12/14/2012 - Starlynn Danyelle Gilliam//       Modified Header.////****************************************************************************************************** #region [ Contributor License Agreements ] /**************************************************************************\   Copyright © 2009 - J. Ritchie Carroll   All rights reserved.     Redistribution and use in source and binary forms, with or without   modification, are permitted provided that the following conditions   are met:        * Redistributions of source code must retain the above copyright        notice, this list of conditions and the following disclaimer.             * Redistributions in binary form must reproduce the above        copyright notice, this list of conditions and the following        disclaimer in the documentation and/or other materials provided        with the distribution.     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY   EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY   OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  \**************************************************************************/ #endregion using System;using System.ComponentModel;using System.Reflection; namespace GSF.Media.Music{    /// <summary>    /// Defines fundamental musical note frequencies and methods to create them.    /// </summary>    /// <example>    /// This example creates an in-memory wave file and adds notes to create a basic musical scale:    /// <code>    /// using System;    /// using GSF.Media;    /// using GSF.Media.Music;    ///    /// static class Program    /// {    ///     static void Main()    ///      {    ///          WaveFile waveFile = new WaveFile();    ///          long samplePeriod = 6 * waveFile.SampleRate;   // Compute total sample period    ///          int totalNotes = 15;                           // Total notes to traverse    ///          string noteID = Note.MiddleC;                  // Start note at middle C    ///          double frequency = Note.GetFrequency(noteID);  // Get frequency for middle C    ///          bool reverse = false;                          // Traverse notes in reverse order    ///    ///          for (int sample = 0; sample <![CDATA[<]]> samplePeriod; sample++)    ///          {    ///              // Change notes at even intervals within the sample period    ///              if (sample > 0 <![CDATA[&&]]> (sample % (samplePeriod / totalNotes)) == 0)    ///              {    ///                  if (reverse)    ///                  {    ///                      noteID = Note.GetPreviousID(noteID, false);    ///                      frequency = Note.GetFrequency(noteID);    ///                  }    ///                  else    ///                  {    ///                      noteID = Note.GetNextID(noteID, false);    ///                      frequency = Note.GetFrequency(noteID);    ///                  }    ///    ///                  // Go back down the scale after C5    ///                  if (noteID == "C5")    ///                      reverse = true;    ///              }    ///    ///              waveFile.AddSample(Timbre.BasicNote(frequency, sample, samplePeriod, waveFile.SampleRate) * 4500);    ///          }    ///    ///          waveFile.Play();    ///          Console.ReadKey();    ///      }    /// }    /// </code>    /// </example>    public class Note : IEquatable<Note>, IComparable<Note>, IComparable    {        #region [ Members ]         // Constants         // Fundamental musical note frequencies (http://www.phy.mtu.edu/~suits/notefreqs.html)         /// <summary>        /// Fundamental frequency for note C0.        /// </summary>        public const double C0 = 16.35;         /// <summary>        /// Fundamental frequency for note C0#.        /// </summary>        public const double C0S = 17.32;         /// <summary>        /// Fundamental frequency for note D0.        /// </summary>        public const double D0 = 18.35;         /// <summary>        /// Fundamental frequency for note D0#.        /// </summary>        public const double D0S = 19.45;         /// <summary>        /// Fundamental frequency for note E0.        /// </summary>        public const double E0 = 20.6;         /// <summary>        /// Fundamental frequency for note F0.        /// </summary>        public const double F0 = 21.83;         /// <summary>        /// Fundamental frequency for note F0#.        /// </summary>        public const double F0S = 23.12;         /// <summary>        /// Fundamental frequency for note G0.        /// </summary>        public const double G0 = 24.5;         /// <summary>        /// Fundamental frequency for note G0#.        /// </summary>        public const double G0S = 25.96;         /// <summary>        /// Fundamental frequency for note A0.        /// </summary>        public const double A0 = 27.5;         /// <summary>        /// Fundamental frequency for note A0#.        /// </summary>        public const double A0S = 29.14;         /// <summary>        /// Fundamental frequency for note B0.        /// </summary>        public const double B0 = 30.87;         /// <summary>        /// Fundamental frequency for note C1.        /// </summary>        public const double C1 = 32.7;         /// <summary>        /// Fundamental frequency for note C1#.        /// </summary>        public const double C1S = 34.65;         /// <summary>        /// Fundamental frequency for note D1.        /// </summary>        public const double D1 = 36.71;         /// <summary>        /// Fundamental frequency for note D1#.        /// </summary>        public const double D1S = 38.89;         /// <summary>        /// Fundamental frequency for note E1.        /// </summary>        public const double E1 = 41.2;         /// <summary>        /// Fundamental frequency for note F1.        /// </summary>        public const double F1 = 43.65;         /// <summary>        /// Fundamental frequency for note F1#.        /// </summary>        public const double F1S = 46.25;         /// <summary>        /// Fundamental frequency for note G1.        /// </summary>        public const double G1 = 49.0;         /// <summary>        /// Fundamental frequency for note G1#.        /// </summary>        public const double G1S = 51.91;         /// <summary>        /// Fundamental frequency for note A1.        /// </summary>        public const double A1 = 55.0;         /// <summary>        /// Fundamental frequency for note A1#.        /// </summary>        public const double A1S = 58.27;         /// <summary>        /// Fundamental frequency for note B1.        /// </summary>        public const double B1 = 61.74;         /// <summary>        /// Fundamental frequency for note C2.        /// </summary>        public const double C2 = 65.41;         /// <summary>        /// Fundamental frequency for note C2#.        /// </summary>        public const double C2S = 69.3;         /// <summary>        /// Fundamental frequency for note D2.        /// </summary>        public const double D2 = 73.42;         /// <summary>        /// Fundamental frequency for note D2#.        /// </summary>        public const double D2S = 77.78;         /// <summary>        /// Fundamental frequency for note E2.        /// </summary>        public const double E2 = 82.41;         /// <summary>        /// Fundamental frequency for note F2.        /// </summary>        public const double F2 = 87.31;         /// <summary>        /// Fundamental frequency for note F2#.        /// </summary>        public const double F2S = 92.5;         /// <summary>        /// Fundamental frequency for note G2.        /// </summary>        public const double G2 = 98.0;         /// <summary>        /// Fundamental frequency for note G2#.        /// </summary>        public const double G2S = 103.83;         /// <summary>        /// Fundamental frequency for note A2.        /// </summary>        public const double A2 = 110.0;         /// <summary>        /// Fundamental frequency for note A2#.        /// </summary>        public const double A2S = 116.54;         /// <summary>        /// Fundamental frequency for note B2.        /// </summary>        public const double B2 = 123.47;         /// <summary>        /// Fundamental frequency for note C3.        /// </summary>        public const double C3 = 130.81;         /// <summary>        /// Fundamental frequency for note C3#.        /// </summary>        public const double C3S = 138.59;         /// <summary>        /// Fundamental frequency for note D3.        /// </summary>        public const double D3 = 146.83;         /// <summary>        /// Fundamental frequency for note D3#.        /// </summary>        public const double D3S = 155.56;         /// <summary>        /// Fundamental frequency for note E3.        /// </summary>        public const double E3 = 164.81;         /// <summary>        /// Fundamental frequency for note F3.        /// </summary>        public const double F3 = 174.61;         /// <summary>        /// Fundamental frequency for note F3#.        /// </summary>        public const double F3S = 185.0;         /// <summary>        /// Fundamental frequency for note G3.        /// </summary>        public const double G3 = 196.0;         /// <summary>        /// Fundamental frequency for note G3#.        /// </summary>        public const double G3S = 207.65;         /// <summary>        /// Fundamental frequency for note A3.        /// </summary>        public const double A3 = 220.0;         /// <summary>        /// Fundamental frequency for note A3#.        /// </summary>        public const double A3S = 233.08;         /// <summary>        /// Fundamental frequency for note B3.        /// </summary>        public const double B3 = 246.94;         /// <summary>        /// Fundamental frequency for note C4 - Middle C.        /// </summary>        public const double C4 = 261.63;         /// <summary>        /// Fundamental frequency for note C4#.        /// </summary>        public const double C4S = 277.18;         /// <summary>        /// Fundamental frequency for note D4.        /// </summary>        public const double D4 = 293.66;         /// <summary>        /// Fundamental frequency for note D4#.        /// </summary>        public const double D4S = 311.13;         /// <summary>        /// Fundamental frequency for note E4.        /// </summary>        public const double E4 = 329.63;         /// <summary>        /// Fundamental frequency for note F4.        /// </summary>        public const double F4 = 349.23;         /// <summary>        /// Fundamental frequency for note F4#.        /// </summary>        public const double F4S = 369.99;         /// <summary>        /// Fundamental frequency for note G4.        /// </summary>        public const double G4 = 392.0;         /// <summary>        /// Fundamental frequency for note G4#.        /// </summary>        public const double G4S = 415.3;         /// <summary>        /// Fundamental frequency for note A4.        /// </summary>        public const double A4 = 440.0;         /// <summary>        /// Fundamental frequency for note A4#.        /// </summary>        public const double A4S = 466.16;         /// <summary>        /// Fundamental frequency for note B4.        /// </summary>        public const double B4 = 493.88;         /// <summary>        /// Fundamental frequency for note C5.        /// </summary>        public const double C5 = 523.25;         /// <summary>        /// Fundamental frequency for note C5#.        /// </summary>        public const double C5S = 554.37;         /// <summary>        /// Fundamental frequency for note D5.        /// </summary>        public const double D5 = 587.33;         /// <summary>        /// Fundamental frequency for note D5#.        /// </summary>        public const double D5S = 622.25;         /// <summary>        /// Fundamental frequency for note E5.        /// </summary>        public const double E5 = 659.26;         /// <summary>        /// Fundamental frequency for note F5.        /// </summary>        public const double F5 = 698.46;         /// <summary>        /// Fundamental frequency for note F5#.        /// </summary>        public const double F5S = 739.99;         /// <summary>        /// Fundamental frequency for note G5.        /// </summary>        public const double G5 = 783.99;         /// <summary>        /// Fundamental frequency for note G5#.        /// </summary>        public const double G5S = 830.61;         /// <summary>        /// Fundamental frequency for note A5.        /// </summary>        public const double A5 = 880.0;         /// <summary>        /// Fundamental frequency for note A5#.        /// </summary>        public const double A5S = 932.33;         /// <summary>        /// Fundamental frequency for note B5.        /// </summary>        public const double B5 = 987.77;         /// <summary>        /// Fundamental frequency for note C6.        /// </summary>        public const double C6 = 1046.5;         /// <summary>        /// Fundamental frequency for note C6#.        /// </summary>        public const double C6S = 1108.73;         /// <summary>        /// Fundamental frequency for note D6.

Lines 1–500 of 1289.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t