public GeneralMidi2ProgramData(GeneralMidi2Program generalMidi2Program, GeneralMidiProgram generalMidiProgram, SevenBitNumber bankMsb, SevenBitNumber bankLsb)
 {
     GeneralMidi2Program = generalMidi2Program;
     GeneralMidiProgram  = generalMidiProgram;
     BankMsb             = bankMsb;
     BankLsb             = bankLsb;
 }
Ejemplo n.º 2
0
 private static GeneralMidi2ProgramData GetProgramData(GeneralMidi2Program generalMidi2Program,
                                                       GeneralMidiProgram generalMidiProgram, byte bankMsb, byte bankLsb)
 {
     return(new GeneralMidi2ProgramData(generalMidi2Program,
                                        generalMidiProgram,
                                        (SevenBitNumber)bankMsb,
                                        (SevenBitNumber)bankLsb));
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Gets an instance of the <see cref="ProgramChangeEvent"/> corresponding to the specified
        /// General MIDI Level 1 program.
        /// </summary>
        /// <param name="program"><see cref="GeneralMidiProgram"/> to get an event for.</param>
        /// <param name="channel">Channel an event should be created for.</param>
        /// <returns>An instance of the <see cref="ProgramChangeEvent"/> corresponding to the <paramref name="program"/>.</returns>
        /// <exception cref="InvalidEnumArgumentException"><paramref name="program"/> specified an invalid value.</exception>
        public static MidiEvent GetProgramEvent(this GeneralMidiProgram program, FourBitNumber channel)
        {
            ThrowIfArgument.IsInvalidEnumValue(nameof(program), program);

            return(new ProgramChangeEvent(program.AsSevenBitNumber())
            {
                Channel = channel
            });
        }
 private static IEnumerable <GeneralMidi2ProgramData> GetProgramsData(GeneralMidiProgram generalMidiProgram, params GeneralMidi2Program[] programs)
 {
     return(programs.Select((p, i) => GetProgramData(p, generalMidiProgram, MelodyChannelBankMsb, (byte)i)));
 }
        /// <summary>
        /// Plays musical objects using the specified General MIDI 1 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="generalMidiProgram">Program that should be used to play <paramref name="objects"/>.</param>
        /// <param name="clockSettings">Settings of the internal playback's clock.</param>
        /// <exception cref="ArgumentNullException">
        /// <para>One of the following errors occured:</para>
        /// <list type="bullet">
        /// <item>
        /// <description><paramref name="objects"/> is <c>null</c>.</description>
        /// </item>
        /// <item>
        /// <description><paramref name="tempoMap"/> is <c>null</c>.</description>
        /// </item>
        /// <item>
        /// <description><paramref name="outputDevice"/> is <c>null</c>.</description>
        /// </item>
        /// </list>
        /// </exception>
        /// <exception cref="InvalidEnumArgumentException"><paramref name="generalMidiProgram"/> specified an invalid value.</exception>
        public static void Play <TObject>(this IEnumerable <TObject> objects, TempoMap tempoMap, IOutputDevice outputDevice, GeneralMidiProgram generalMidiProgram, MidiClockSettings clockSettings = null)
            where TObject : IMusicalObject, ITimedObject
        {
            ThrowIfArgument.IsNull(nameof(objects), objects);
            ThrowIfArgument.IsNull(nameof(tempoMap), tempoMap);
            ThrowIfArgument.IsNull(nameof(outputDevice), outputDevice);
            ThrowIfArgument.IsInvalidEnumValue(nameof(generalMidiProgram), generalMidiProgram);

            using (var playback = objects.GetPlayback(tempoMap, outputDevice, generalMidiProgram, clockSettings))
            {
                playback.Play();
            }
        }
        /// <summary>
        /// Retrieves an instance of the <see cref="Playback"/> for playing musical objects using
        /// the specified General MIDI 1 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="generalMidiProgram">Program that should be used to play <paramref name="objects"/>.</param>
        /// <param name="clockSettings">Settings of the internal playback's clock.</param>
        /// <returns>An instance of the <see cref="Playback"/> for playing <paramref name="objects"/>.</returns>
        /// <exception cref="ArgumentNullException">
        /// <para>One of the following errors occured:</para>
        /// <list type="bullet">
        /// <item>
        /// <description><paramref name="objects"/> is <c>null</c>.</description>
        /// </item>
        /// <item>
        /// <description><paramref name="tempoMap"/> is <c>null</c>.</description>
        /// </item>
        /// <item>
        /// <description><paramref name="outputDevice"/> is <c>null</c>.</description>
        /// </item>
        /// </list>
        /// </exception>
        /// <exception cref="InvalidEnumArgumentException"><paramref name="generalMidiProgram"/> specified an invalid value.</exception>
        public static Playback GetPlayback <TObject>(this IEnumerable <TObject> objects, TempoMap tempoMap, IOutputDevice outputDevice, GeneralMidiProgram generalMidiProgram, MidiClockSettings clockSettings = null)
            where TObject : IMusicalObject, ITimedObject
        {
            ThrowIfArgument.IsNull(nameof(objects), objects);
            ThrowIfArgument.IsNull(nameof(tempoMap), tempoMap);
            ThrowIfArgument.IsNull(nameof(outputDevice), outputDevice);
            ThrowIfArgument.IsInvalidEnumValue(nameof(generalMidiProgram), generalMidiProgram);

            return(GetMusicalObjectsPlayback(objects,
                                             tempoMap,
                                             outputDevice,
                                             channel => new[] { generalMidiProgram.GetProgramEvent(channel) },
                                             clockSettings));
        }
 public SetGeneralMidiProgramAction(GeneralMidiProgram program)
 {
     Program = program;
 }
Ejemplo n.º 8
0
        /// <summary>
        ///     Converts <see cref="GeneralMidiProgram" /> to the corresponding value of the
        ///     <see cref="SevenBitNumber" /> type.
        /// </summary>
        /// <param name="program"><see cref="GeneralMidiProgram" /> to convert to <see cref="SevenBitNumber" />.</param>
        /// <returns><see cref="SevenBitNumber" /> representing the <paramref name="program" />.</returns>
        /// <exception cref="InvalidEnumArgumentException"><paramref name="program" /> specified an invalid value.</exception>
        public static SevenBitNumber AsSevenBitNumber(this GeneralMidiProgram program)
        {
            ThrowIfArgument.IsInvalidEnumValue(nameof(program), program);

            return((SevenBitNumber)(byte)program);
        }