Esempio n. 1
0
        // This is our response to when a track had been loaded
        //
        //
        public override void AfterTrackLoaded(object sender, EventArgs e)
        {
            base.AfterTrackLoaded(sender, e);

            // clear note-list
            this.listNotes.Items.Clear();
            // notes have been collected by the midi parser,
            // filter them.
            foreach (MidiNote n in UserInterface.MidiParser.Notes)
            {
                timing.SolveSamples(
                    Convert.ToDouble(n.Start),
                    samplerate,
                    this.UserInterface.MidiParser.MidiTimeInfo.Tempo,
                    MidiReader.FileDivision,
                    true);
                if (!(n is MidiNote))
                {
                    continue;
                }
                // s, n, o, l, off
                listNotes.AddItem(
                    // Paint
                    ListView.DefaultBackColor,
                    // MBQT
                    n.GetMBT(MidiReader.FileDivision),
                    // SAMPLE TIME
                    timing.TimeString,
                    // MIDI CHANNEL
                    n.Ch.HasValue ? n.Ch.ToString() : "?",
                    // NOTE KEY
                    n.KeyStr,
                    // NOTE ON VELOCITY
                    n.V1.ToString(),
                    // NOTE LENGTH
                    n.GetMbtLen2(MidiReader.FileDivision),
                    // NOTE OFF VELOCITY
                    n.V2.ToString()
                    );
            }
            this.listNotes.Visible = true;
        }
Esempio n. 2
0
        /// we should have prepared a list of notes and each channel contained in
        /// our view.
        void UpdateView()
        {
            foreach (MidiMessage n in SetOfNotes)
            {
                timing.SolveSamples(Convert.ToDouble(n.DeltaTime), Player.Settings);
                if (!(n is MidiMessage))
                {
                    continue;
                }
                // s, n, o, l, off
//				listNotes.AddItem(
//					ListView.DefaultBackColor,
//					n.GetMBT(MidiReader.FileDivision),
//					timing.TimeString,
//					n.Ch.HasValue ? n.Ch.ToString() : "?",
//					n.KeyStr,
//					n.V1.ToString(),
//					n.GetMbtLen(MidiReader.FileDivision),
//					n.V2.ToString()
//				);
            }
        }
Esempio n. 3
0
        void GotMidiEventD(MidiMsgType t, int track, int offset, int imsg, byte bmsg, ulong ppq, int rse, bool isrse)
        {
            timing.SolveSamples(
                ppq,
                UserInterface.VstContainer.VstPlayer.Settings.Rate,
                UserInterface.MidiParser.MidiTimeInfo.Tempo,
                UserInterface.MidiParser.SmfFileHandle.Division,
                true
                );
            switch (t)
            {
            case MidiMsgType.MetaStr:
                lve.AddItem(MidiReader.c4, UserInterface.MidiParser.GetMbtString(ppq), string.Empty, string.Empty, MetaHelpers.MetaNameFF(imsg), UserInterface.MidiParser.GetMetaString(offset));
                break;

            case MidiMsgType.MetaInf:
                lve.AddItem(UserInterface.MidiParser.GetEventColor(imsg, MidiReader.cR), UserInterface.MidiParser.GetMbtString(ppq), string.Empty, string.Empty, MetaHelpers.MetaNameFF(imsg), UserInterface.MidiParser.GetMetaSTR(offset));
                break;

            case MidiMsgType.SysCommon:
            case MidiMsgType.System:
                lve.AddItem(UserInterface.MidiParser.GetEventColor(imsg, MidiReader.cR), UserInterface.MidiParser.GetMbtString(ppq), string.Empty, string.Empty, MetaHelpers.MetaNameFF(imsg), UserInterface.MidiParser.GetMetaSTR(offset));
                break;

            default:
//				case MsgType.Channel:
                if (isrse)
                {
                    lve.AddItem(UserInterface.MidiParser.GetRseEventColor(UserInterface.MidiParser.Colors["225"]), UserInterface.MidiParser.GetMbtString(ppq), timing.TimeString, bmsg == 0xF0?"":(rse & 0x0F).ToString(), UserInterface.MidiParser.GetRseEventString(offset), UserInterface.MidiParser.chRseV(offset));
                }
                else
                {
                    lve.AddItem(UserInterface.MidiParser.GetEventColor(UserInterface.MidiParser.Colors["225"]), UserInterface.MidiParser.GetMbtString(ppq), timing.TimeString, bmsg == 0xF0?"":(rse & 0x0F).ToString(), UserInterface.MidiParser.GetEventString(offset), UserInterface.MidiParser.chV(offset));
                }
//				if (t== MsgType.NoteOn||t== MsgType.NoteOff) UserInterface.MidiParser.CheckNote(t,ppq,Convert.ToByte((rse) & 0x0F),offset,bmsg,isrse);
                break;
            }
        }
Esempio n. 4
0
        static bool IsContained(MidiMessage message, Loop constraint, SampleClock clockRef, double min, double max)
        {
            double samplePos = clockRef.SolveSamples(message.DeltaTime).Samples32;

            return(samplePos >= min && samplePos < max && samplePos < constraint.End);
        }
Esempio n. 5
0
        /// <summary>
        /// Check sample-range
        /// </summary>
        /// <param name="c">must have Division and PPQ set.</param>
        /// <param name="b">We currently check the end position of the loop.</param>
        /// <returns>True if delta-time is contained within sample ranges min and max</returns>
        public bool IsContained(SampleClock c, Loop b)
        {
            double samplePos = c.SolveSamples(DeltaTime).Samples32;

            return(samplePos >= b.Begin && samplePos < b.End);
        }
Esempio n. 6
0
        /// <summary>
        /// Check sample-range
        /// </summary>
        /// <param name="c">must have Division and PPQ set.</param>
        /// <param name="b">We currently check the end position of the loop.</param>
        /// <param name="min">first sample in search block</param>
        /// <param name="max">last sample in search block</param>
        /// <returns>True if delta-time is contained within sample ranges min and max</returns>
        public bool IsContained(SampleClock c, Loop b, double min, double max)
        {
            double samplePos = c.SolveSamples(DeltaTime).Samples32;

            return(samplePos >= min && samplePos < max && samplePos < b.End);
        }
Esempio n. 7
0
        static public Jacobi.Vst.Core.VstMidiSysExEvent ToVstMidiSysex(this MidiMessage item, int offset, ITimeConfiguration config, SampleClock c)
        {
            int samples = c.SolveSamples(item.DeltaTime).Samples32Floor - offset;

            return(new Jacobi.Vst.Core.VstMidiSysExEvent(samples, (item as MidiSysexMessage).SystemData));
        }
Esempio n. 8
0
 /// <summary>
 /// Check sample-range
 /// </summary>
 /// <param name="c">must have Division and PPQ set.</param>
 /// <param name="b">We currently check the end position of the loop.</param>
 /// <returns>True if delta-time is contained within sample ranges min and max</returns>
 public bool IsContained(SampleClock c, Loop b)
 {
     double samplePos = c.SolveSamples(DeltaTime).Samples32;
     return samplePos >= b.Begin && samplePos < b.End;
 }
Esempio n. 9
0
 /// <summary>
 /// Check sample-range
 /// </summary>
 /// <param name="c">must have Division and PPQ set.</param>
 /// <param name="b">We currently check the end position of the loop.</param>
 /// <param name="min">first sample in search block</param>
 /// <param name="max">last sample in search block</param>
 /// <returns>True if delta-time is contained within sample ranges min and max</returns>
 public bool IsContained(SampleClock c, Loop b, double min, double max)
 {
     double samplePos = c.SolveSamples(DeltaTime).Samples32;
     return samplePos >= min && samplePos < max && samplePos < b.End;
 }
Esempio n. 10
0
 public static Jacobi.Vst.Core.VstMidiSysExEvent ToVstMidiSysex(this MidiMessage item, int offset, ITimeConfiguration config, SampleClock c)
 {
     int samples = c.SolveSamples(item.DeltaTime).Samples32Floor-offset;
     return new Jacobi.Vst.Core.VstMidiSysExEvent(samples,(item as MidiSysexMessage).SystemData);
 }
Esempio n. 11
0
 public static Jacobi.Vst.Core.VstMidiEvent ToVstMidiEvent(this MidiMessage item, int offset, ITimeConfiguration config, SampleClock c)
 {
     // byte b0 = (config.IsSingleZeroChannel) ? (byte)item.MessageBit : item.Data[0];
     int samples = c.SolveSamples(item.DeltaTime).Samples32Floor - offset;
     return new Jacobi.Vst.Core.VstMidiEvent(samples, 0, 0, new byte[4]{ item.Data[0], item.Data[1], item.Data[2], 0 }, 0 , 0 );
 }
Esempio n. 12
0
        /// <inheritdoc />
        public Jacobi.Vst.Core.VstTimeInfo GetTimeInfo(Jacobi.Vst.Core.VstTimeInfoFlags filterFlags)
        {
            RaisePluginCalled("GetTimeInfo(" + filterFlags + ")");


            // our sample calculator performs:
            // Create TimeInfo class
            VstTimeInfo vstTimeInfo = new VstTimeInfo();

            // most common settings
            vstTimeInfo.SamplePosition = Parent.SampleOffset + Parent.BufferIncrement;
            vstTimeInfo.SampleRate     = Parent.Settings.Rate;
            //
            filterFlags |= VstTimeInfoFlags.ClockValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.ClockValid))
            {
                // should we floor this?
                int cp = MasterClock.SolvePPQ(Parent.SampleOffset, Parent.Settings).ClocksAtPosition.ToInt32();

                vstTimeInfo.SamplesToNearestClock = MasterClock.SolveSamples(cp * 24, Parent.Settings).Samples32Floor;
            }
            // NanoSecondsValid
            filterFlags |= VstTimeInfoFlags.NanoSecondsValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.NanoSecondsValid))
            {
                vstTimeInfo.NanoSeconds = (Parent.SampleOffset / Parent.Settings.Rate) * billionth;
            }
            // TempoValid
            filterFlags |= VstTimeInfoFlags.TempoValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.TempoValid))
            {
                vstTimeInfo.Tempo = Parent.Settings.Tempo;
            }
            // PpqPositionValid
            filterFlags |= VstTimeInfoFlags.PpqPositionValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.PpqPositionValid))
            {
                vstTimeInfo.PpqPosition = MasterClock.SolvePPQ(vstTimeInfo.SamplePosition, Parent.Settings).Frame;
            }
            // BarStartPositionValid
            filterFlags |= VstTimeInfoFlags.BarStartPositionValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.BarStartPositionValid))
            {
                vstTimeInfo.BarStartPosition = MasterClock.SolvePPQ(vstTimeInfo.SamplePosition, Parent.Settings).Pulses; // * st.SamplesPerQuarter
            }
            // CyclePositionValid
            filterFlags |= VstTimeInfoFlags.CyclePositionValid;
            if (filterFlags.HasFlag(VstTimeInfoFlags.CyclePositionValid))
            {
                vstTimeInfo.CycleStartPosition = Parent.SampleOffset;//st.SolvePPQ(Parent.SampleOffset,Parent.Settings).Frame;
                vstTimeInfo.CycleEndPosition   = Parent.SampleOffset + Parent.CurrentSampleLength;
            }
            // TimeSignatureValid
            if (filterFlags.HasFlag(VstTimeInfoFlags.TimeSignatureValid))
            {
                vstTimeInfo.TimeSignatureNumerator   = Parent.Settings.TimeSignature.Numerator;
                vstTimeInfo.TimeSignatureDenominator = Parent.Settings.TimeSignature.Denominator;
            }
            // SmpteValid
            if (filterFlags.HasFlag(VstTimeInfoFlags.SmpteValid))
            {
                vstTimeInfo.SmpteFrameRate = smpte_rate; /* 30 fps no-drop */
                vstTimeInfo.SmpteOffset    = 0;
                /* not quite valid */
            }
            vstTimeInfo.Flags = filterFlags;
            return(vstTimeInfo);
        }