protected override void GetData(out SevenBitNumber msb, out SevenBitNumber?lsb)
 {
     msb = BankNumber;
     lsb = null;
 }
 internal override void Read(MidiReader reader, ReadingSettings settings, int size)
 {
     _lsb = ProcessValue(reader.ReadByte(), "LSB", settings.InvalidSystemCommonEventParameterValuePolicy);
     _msb = ProcessValue(reader.ReadByte(), "MSB", settings.InvalidSystemCommonEventParameterValuePolicy);
 }
Exemplo n.º 3
0
 public override void Merge(SevenBitNumber velocity)
 {
     _velocity = (SevenBitNumber)Math.Min(_velocity, velocity);
 }
Exemplo n.º 4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Note"/> with the specified note number.
 /// </summary>
 /// <param name="noteNumber">Number of the note (60 is middle C).</param>
 public Note(SevenBitNumber noteNumber)
     : this(noteNumber, 0)
 {
 }
Exemplo n.º 5
0
        public static bool TryParseNoteNumber(string input, NoteNumberFormat noteNumberFormat, out SevenBitNumber result)
        {
            result = default(SevenBitNumber);

            switch (noteNumberFormat)
            {
            case NoteNumberFormat.NoteNumber:
                return(SevenBitNumber.TryParse(input, out result));

            case NoteNumberFormat.Letter:
            {
                MusicTheory.Note note;
                if (!MusicTheory.Note.TryParse(input, out note))
                {
                    return(false);
                }

                result = note.NoteNumber;
                return(true);
            }
            }

            return(false);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Retrieves an instance of the <see cref="Playback"/> for playing musical objects using
        /// the specified program.
        /// </summary>
        /// <typeparam name="TObject">The type of objects to play.</typeparam>
        /// <param name="objects">Objects to play.</param>
        /// <param name="tempoMap">Tempo map used to calculate events times.</param>
        /// <param name="outputDevice">Output MIDI device to play <paramref name="objects"/> through.</param>
        /// <param name="programNumber">Program that should be used to play <paramref name="objects"/>.</param>
        /// <returns>An instance of the <see cref="Playback"/> for playing <paramref name="objects"/>.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="objects"/> is null. -or-
        /// <paramref name="tempoMap"/> is null. -or- <paramref name="outputDevice"/> is null.</exception>
        public static Playback GetPlayback <TObject>(this IEnumerable <TObject> objects, TempoMap tempoMap, OutputDevice outputDevice, SevenBitNumber programNumber)
            where TObject : IMusicalObject, ITimedObject
        {
            ThrowIfArgument.IsNull(nameof(objects), objects);
            ThrowIfArgument.IsNull(nameof(tempoMap), tempoMap);
            ThrowIfArgument.IsNull(nameof(outputDevice), outputDevice);

            return(GetMusicalObjectsPlayback(objects,
                                             tempoMap,
                                             outputDevice,
                                             channel => new[] { new ProgramChangeEvent(programNumber)
                                                                {
                                                                    Channel = channel
                                                                } }));
        }
Exemplo n.º 7
0
        internal static void PostRelease(SevenBitNumber noteNumber)
        {
            Keys keycode = (Keys)Config.config.KeyMap[noteNumber];

            PostMessage(gameWindowHandle, WM_KEYUP, (int)keycode, 0x001F0001);
        }
Exemplo n.º 8
0
 protected override void GetData(out SevenBitNumber msb, out SevenBitNumber?lsb)
 {
     msb = HalfSteps;
     lsb = (SevenBitNumber)MathUtilities.EnsureInBounds((int)Math.Round(Cents * CentResolution), SevenBitNumber.MinValue, SevenBitNumber.MaxValue);
 }
Exemplo n.º 9
0
 public void Parse_InvalidFormat()
 {
     Assert.Throws <FormatException>(() => SevenBitNumber.Parse("sdsd"));
 }
Exemplo n.º 10
0
 public NoteInfo(SevenBitNumber noteNumber, ITimeSpan time, ITimeSpan length, SevenBitNumber velocity)
 {
     NoteNumber = noteNumber;
     Time       = time;
     Length     = length;
     Velocity   = velocity;
 }
Exemplo n.º 11
0
 public ModulationDepthRangeParameter(SevenBitNumber halfSteps, float cents)
     : this(halfSteps, cents, ParameterValueType.Exact)
 {
 }
Exemplo n.º 12
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="parentModule"></param>
 /// <param name="noteOnEvent"></param>
 /// <param name="programNumber"></param>
 /// <param name="slot"></param>
 public MT32Sound(MT32 parentModule, MT32SoundManager manager, TimbreBase timbre, int tindex, TaggedNoteOnEvent noteOnEvent, int slot) : base(parentModule, manager, timbre, tindex, noteOnEvent, slot)
 {
     this.parentModule  = parentModule;
     this.programNumber = (SevenBitNumber)parentModule.ProgramNumbers[noteOnEvent.Channel];
     this.timbre        = (MT32Timbre)timbre;
 }
Exemplo n.º 13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ProgramChangeEvent"/> with the specified
 /// program number.
 /// </summary>
 /// <param name="programNumber">Program number.</param>
 public ProgramChangeEvent(SevenBitNumber programNumber)
     : this()
 {
     ProgramNumber = programNumber;
 }
Exemplo n.º 14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="NoteOnEvent"/> with the specified
 /// note number and velocity.
 /// </summary>
 /// <param name="noteNumber">Note number.</param>
 /// <param name="velocity">Velocity.</param>
 public NoteOnEvent(SevenBitNumber noteNumber, SevenBitNumber velocity)
     : base(MidiEventType.NoteOn, noteNumber, velocity)
 {
 }
Exemplo n.º 15
0
 /// <summary>
 /// Initializes a new instance of the <see cref="NoteAftertouchEvent"/> with the specified
 /// note number and aftertouch (pressure) value.
 /// </summary>
 /// <param name="noteNumber">Note number.</param>
 /// <param name="aftertouchValue">Aftertouch (pressure) value.</param>
 public NoteAftertouchEvent(SevenBitNumber noteNumber, SevenBitNumber aftertouchValue)
     : this()
 {
     NoteNumber      = noteNumber;
     AftertouchValue = aftertouchValue;
 }
Exemplo n.º 16
0
 public void Parse_OutOfRange()
 {
     Assert.Throws <FormatException>(() => SevenBitNumber.Parse("200"));
     Assert.Throws <FormatException>(() => SevenBitNumber.Parse("128"));
 }
Exemplo n.º 17
0
        /// <summary>
        /// Gets an instance of the <see cref="NoteOffEvent"/> corresponding to the specified
        /// General MIDI Level 1 percussion.
        /// </summary>
        /// <param name="percussion"><see cref="GeneralMidiPercussion"/> to get an event for.</param>
        /// <param name="velocity">Velocity of the <see cref="NoteOffEvent"/>.</param>
        /// <returns>An instance of the <see cref="NoteOffEvent"/> corresponding to the specified
        /// <paramref name="percussion"/>.</returns>
        /// <exception cref="InvalidEnumArgumentException"><paramref name="percussion"/> specified an invalid value.</exception>
        public static NoteOffEvent GetNoteOffEvent(this GeneralMidiPercussion percussion, SevenBitNumber velocity)
        {
            ThrowIfArgument.IsInvalidEnumValue(nameof(percussion), percussion);

            return(new NoteOffEvent(percussion.AsSevenBitNumber(), velocity));
        }
Exemplo n.º 18
0
 public void Parse()
 {
     Assert.AreEqual((SevenBitNumber)12, SevenBitNumber.Parse("12"));
     Assert.AreEqual((SevenBitNumber)0, SevenBitNumber.Parse("0"));
     Assert.AreEqual((SevenBitNumber)127, SevenBitNumber.Parse("127"));
 }
Exemplo n.º 19
0
        /// <summary>
        /// Plays musical objects using the specified program.
        /// </summary>
        /// <typeparam name="TObject">The type of objects to play.</typeparam>
        /// <param name="objects">Objects to play.</param>
        /// <param name="tempoMap">Tempo map used to calculate events times.</param>
        /// <param name="outputDevice">Output MIDI device to play <paramref name="objects"/> through.</param>
        /// <param name="programNumber">Program that should be used to play <paramref name="objects"/>.</param>
        /// <exception cref="ArgumentNullException"><paramref name="objects"/> is null. -or-
        /// <paramref name="tempoMap"/> is null. -or- <paramref name="outputDevice"/> is null.</exception>
        public static void Play <TObject>(this IEnumerable <TObject> objects, TempoMap tempoMap, OutputDevice outputDevice, SevenBitNumber programNumber)
            where TObject : IMusicalObject, ITimedObject
        {
            ThrowIfArgument.IsNull(nameof(objects), objects);
            ThrowIfArgument.IsNull(nameof(tempoMap), tempoMap);
            ThrowIfArgument.IsNull(nameof(outputDevice), outputDevice);

            using (var playback = objects.GetPlayback(tempoMap, outputDevice, programNumber))
            {
                playback.Play();
            }
        }
Exemplo n.º 20
0
        public void TryParse_InvalidFormat()
        {
            SevenBitNumber result;

            Assert.AreEqual(false, SevenBitNumber.TryParse("sdsd", out result));
        }
Exemplo n.º 21
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Note"/> with the specified
 /// note number and length.
 /// </summary>
 /// <param name="noteNumber">Number of the note (60 is middle C).</param>
 /// <param name="length">Length of the note in units defined by time division of a MIDI file.</param>
 public Note(SevenBitNumber noteNumber, long length)
     : this(noteNumber, length, 0)
 {
 }
Exemplo n.º 22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ControlChangeEvent"/> with the specified
 /// controller number and controller value.
 /// </summary>
 /// <param name="controlNumber">Controller number.</param>
 /// <param name="controlValue">Controller value.</param>
 public ControlChangeEvent(SevenBitNumber controlNumber, SevenBitNumber controlValue)
     : this()
 {
     ControlNumber = controlNumber;
     ControlValue  = controlValue;
 }
Exemplo n.º 23
0
        public static IEnumerable <Note> ConvertToNotes(Stream stream, TempoMap tempoMap, NoteCsvConversionSettings settings)
        {
            using (var csvReader = new CsvReader(stream, settings.CsvDelimiter))
            {
                CsvRecord record = null;

                while ((record = csvReader.ReadRecord()) != null)
                {
                    var values = record.Values;
                    if (values.Length < 6)
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Missing required parameters.");
                    }

                    ITimeSpan time;
                    if (!TimeSpanUtilities.TryParse(values[0], settings.TimeType, out time))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid time.");
                    }

                    FourBitNumber channel;
                    if (!FourBitNumber.TryParse(values[1], out channel))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid channel.");
                    }

                    SevenBitNumber noteNumber;
                    if (!TryParseNoteNumber(values[2], settings.NoteNumberFormat, out noteNumber))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid note number or letter.");
                    }

                    ITimeSpan length;
                    if (!TimeSpanUtilities.TryParse(values[3], settings.NoteLengthType, out length))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid length.");
                    }

                    SevenBitNumber velocity;
                    if (!SevenBitNumber.TryParse(values[4], out velocity))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid velocity.");
                    }

                    SevenBitNumber offVelocity;
                    if (!SevenBitNumber.TryParse(values[5], out offVelocity))
                    {
                        CsvError.ThrowBadFormat(record.LineNumber, "Invalid off velocity.");
                    }

                    var convertedTime   = TimeConverter.ConvertFrom(time, tempoMap);
                    var convertedLength = LengthConverter.ConvertFrom(length, convertedTime, tempoMap);

                    yield return(new Note(noteNumber, convertedLength, convertedTime)
                    {
                        Channel = channel,
                        Velocity = velocity,
                        OffVelocity = offVelocity
                    });
                }
            }
        }
Exemplo n.º 24
0
 /// <summary>
 /// Returns an upward <see cref="Interval"/> by the specified half steps number.
 /// </summary>
 /// <param name="intervalSize">The size of an interval as a number of half steps away.</param>
 /// <returns>An upward <see cref="Interval"/> with the specified interval.</returns>
 public static Interval GetUp(SevenBitNumber intervalSize)
 {
     return(Get(intervalSize, IntervalDirection.Up));
 }
Exemplo n.º 25
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ChannelAftertouchEvent"/> with the specified
 /// aftertouch (pressure) value.
 /// </summary>
 /// <param name="aftertouchValue">Aftertouch (pressure) value.</param>
 public ChannelAftertouchEvent(SevenBitNumber aftertouchValue)
     : this()
 {
     AftertouchValue = aftertouchValue;
 }
Exemplo n.º 26
0
 /// <summary>
 /// Returns a downward <see cref="Interval"/> by the specified half steps number.
 /// </summary>
 /// <param name="intervalSize">The size of an interval as a number of half steps away.</param>
 /// <returns>A downward <see cref="Interval"/> with the specified interval.</returns>
 public static Interval GetDown(SevenBitNumber intervalSize)
 {
     return(Get(intervalSize, IntervalDirection.Down));
 }
Exemplo n.º 27
0
 public SetProgramNumberAction(SevenBitNumber programNumber)
 {
     ProgramNumber = programNumber;
 }
Exemplo n.º 28
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Interval"/> with the
 /// specified interval and its direction.
 /// </summary>
 /// <param name="size">The size of interval as a number of half steps away.</param>
 /// <param name="direction">The direction of an interval (up or down).</param>
 private Interval(SevenBitNumber size, IntervalDirection direction)
 {
     Size      = size;
     Direction = direction;
 }
Exemplo n.º 29
0
 public NoteInfo(NoteName noteName, int octave, ITimeSpan time, ITimeSpan length, SevenBitNumber velocity)
     : this(NoteUtilities.GetNoteNumber(noteName, octave), time, length, velocity)
 {
 }
 public TuningBankSelectParameter(SevenBitNumber bankNumber, ParameterValueType valueType)
     : this()
 {
     BankNumber = bankNumber;
     ValueType  = valueType;
 }