VstEvent_Range(IMidiParserUI ui, bool ignoreMidiPgm, double start, int len) { var list = new List <NVstEvent>(); SampleClock c = new SampleClock(ui.VstContainer.VstPlayer.Settings); foreach (MidiMessage item in MidiMessage_Range(ui, new Loop() { Begin = start, Length = len })) { if (item.MessageBit == 0xC0 && ignoreMidiPgm) { continue; } if (item is MidiChannelMessage) { list.Add(item.ToVstMidiEvent(Convert.ToInt32(ui.VstContainer.VstPlayer.SampleOffset), ui.VstContainer.VstPlayer.Settings, c)); } else if (item is MidiSysexMessage) { list.Add(item.ToVstMidiSysex(Convert.ToInt32(ui.VstContainer.VstPlayer.SampleOffset), ui.VstContainer.VstPlayer.Settings, c)); } } c = null; list.Sort(SortAlgo); foreach (NVstEvent vstevent in list) { yield return(vstevent); } }
/// <summary> /// Process messages looking for Channel and Sysex messages. /// look at channel-message parsing for channel message types (or look into this). /// </summary> /// <param name="ui">core</param> /// <param name="start">Begin in samples</param> /// <param name="len">Length from begin in samples</param> /// <returns>Filtered Events</returns> static NVstEvent[] FilterSampleRange(IMidiParserUI ui, double start, int len) { if (HasParserErrors(ui)) { return(null); } var list = new List <NVstEvent>(); SampleClock c = new SampleClock(ui.VstContainer.VstPlayer.Settings); foreach (MidiMessage item in MidiMessage_Range(ui, new Loop() { Begin = start, Length = len })) { if (item is MidiChannelMessage) { list.Add(item.ToVstMidiEvent(Convert.ToInt32(ui.VstContainer.VstPlayer.SampleOffset), ui.VstContainer.VstPlayer.Settings, c)); } else if (item is MidiSysexMessage) { list.Add(item.ToVstMidiSysex(Convert.ToInt32(ui.VstContainer.VstPlayer.SampleOffset), ui.VstContainer.VstPlayer.Settings, c)); } } c = null; list.Sort(SortAlgo); return(list.ToArray()); }
/// <summary> /// Retrieve all MIDI events from all tracks as found in the MIDI parser. /// </summary> /// <param name="Parser"></param> /// <param name="loop"></param> /// <returns></returns> static IEnumerable <MidiMessage> MidiMessage_Range(IMidiParserUI Parser, Loop loop) { SampleClock c = new SampleClock(Parser.VstContainer.VstPlayer.Settings); for (int trackId = 0; trackId < Parser.MidiParser.FileHandle.NumberOfTracks; trackId++) { var elements = Parser.MidiParser.MidiDataList[trackId].Where(msg0 => msg0.IsContained(c, loop)); foreach (MidiMessage item in elements) { yield return(item); } } c = null; }
void Perform() { double bpm = (double)this.udBpm.Value; double div1 = (double)udDiv1.Value, div2 = (double)udDiv2.Value, m = (double)nMulti.Value; double result = BpmCalculator.GetHz(bpm, div1, div2, m); try { this.udOutput.Value = (decimal)result; this.udOutput.BackColor = NumericUpDown.DefaultBackColor; } catch { this.udOutput.Value = 0; this.udOutput.BackColor = Color.Red; } s2mbqt = new SampleClock( (double)s2m_Samples.Value, (int)s2m_Rate.Value, (double)s2m_BPM.Value, (int)s2m_Division.Value, true); }
static public VstEvent[] EnumerateMidiData(IMidiParserUI ui, double start, int len) { if (ui == null) { return(null); } if (ui.MidiParser.MidiDataList.Count == 0) { return(null); } List <VstEvent> list = new List <VstEvent>(); // lock (locker) { SampleClock c = new SampleClock(ui.VstContainer.VstPlayer.Settings); foreach (MidiMessage item in EnumerateMidiMessages(ui, new Loop() { Begin = start, Length = len })) { if (item is MidiChannelMessage) { list.Add(item.ToVstMidiEvent(Convert.ToInt32(ui.VstContainer.VstPlayer.SampleOffset), ui.VstContainer.VstPlayer.Settings, c)); } else if (item is MidiSysexMessage) { list.Add( item.ToVstMidiSysex( ui.VstContainer.VstPlayer.SampleOffset.ToInt32(), ui.VstContainer.VstPlayer.Settings, c ) ); } } c = null; } list.Sort(SortAlgo); return(list.ToArray()); }
void Perform() { double bpm = (double)this.udBpm.Value; double div1 = (double)udDiv1.Value, div2 = (double)udDiv2.Value, m = (double)nMulti.Value; double result = BpmCalculator.GetHz(bpm,div1,div2,m); try { this.udOutput.Value = (decimal) result; this.udOutput.BackColor = NumericUpDown.DefaultBackColor; } catch { this.udOutput.Value = 0; this.udOutput.BackColor = Color.Red; } s2mbqt = new SampleClock( (double)s2m_Samples.Value, (int)s2m_Rate.Value, (double)s2m_BPM.Value, (int)s2m_Division.Value, true); }
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); }
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); }
/// <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); }
/// <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; }
public FpsCounter(SampleClock clock) { _clock = clock; }
/// <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); }
/// <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; }
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 ); }
public FpsCounter(SampleClock clock) { _clock = clock; }
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)); }
static public 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)); }