public MeltySynthTest(bool enableEffects) { soundFont = new SoundFont(Settings.SoundFontPath); midiFile = new MidiFile(Settings.MidiFilePath); var settings = new SynthesizerSettings(Settings.SampleRate); settings.EnableReverbAndChorus = enableEffects; settings.MaximumPolyphony = 40; synthesizer = new Synthesizer(soundFont, settings); sequencer = new MidiFileSequencer(synthesizer); sequencer.Play(midiFile, true); left = new float[Settings.BlockSize]; right = new float[Settings.BlockSize]; writeBuffer = new float[2 * Settings.BlockSize]; var name = enableEffects ? "meltysynth_output.wav" : "meltysynth_output_noeffect.wav"; if (Settings.OutputFile) { writer = new NAudioSampleWriter(name, Settings.WaveFormat); } else { writer = new NullSampleWriter(); } }
public void Dispose() { if (writer != null) { writer.Dispose(); writer = null; } }
public DiscreteSample(double[] samples) { _calculator = new SampleCalculator(this); Volume = _calculator.CalculateVolume(samples); VariationRange = _calculator.CalculateVariationRange(samples); VariationScope = _calculator.CalculateVariationScope(); FrequencyRange = _calculator.CalculateFrequencyRange(); Average = _calculator.CalculateAverage(); Mode = _calculator.CalculateMode(); Median = _calculator.CalculateMedian(); Dispersion = _calculator.CalculateDispersion(); Asymmetry = _calculator.CalculateAsymmetry(); Excess = _calculator.CalculateExcess(); VariationCoefficient = _calculator.CalculateVariationCoefficient(); Writer = SampleWriterFactory.CreateSampleWriter(this); }
public CSharpSynthTest() { midiFile = new MidiFile(Settings.MidiFilePath); synthesizer = new Synthesizer(Settings.SampleRate, 2, Settings.BlockSize, 1); synthesizer.LoadBank(Settings.SoundFontPath); sequencer = new MidiFileSequencer(synthesizer); sequencer.LoadMidi(midiFile); sequencer.Play(); if (Settings.OutputFile) { writer = new NAudioSampleWriter("csharpsynth_output.wav", Settings.WaveFormat); } else { writer = new NullSampleWriter(); } }
public NonDiscreteSample(double[] samples) { _calculator = new NonDiscreteSampleCalculator(this); Volume = _calculator.CalculateVolume(samples); VariationRange = _calculator.CalculateVariationRange(samples); VariationScope = _calculator.CalculateVariationScope(); IntervalAmount = _calculator.CalculateIntervalAmount(); IntervalStep = _calculator.CalculateIntervalStep(); FrequencyRange = _calculator.CalculateFrequencyRange(); Average = _calculator.CalculateAverage(); Mode = _calculator.CalculateMode(); Median = _calculator.CalculateMedian(); Dispersion = _calculator.CalculateDispersion(); GroupAverages = _calculator.CalculateGroupAverages(); GroupDispersions = _calculator.CalculateGroupDispersions(); AverageGroupDispersion = _calculator.CalculateAverageGroupDispersion(); InterGroupDispersion = _calculator.CalculateInterGroupDispersion(); DeterminationCoefficient = _calculator.CalculateDeterminationCoefficient(); Asymmetry = _calculator.CalculateAsymmetry(); Excess = _calculator.CalculateExcess(); VariationCoefficient = _calculator.CalculateVariationCoefficient(); Writer = SampleWriterFactory.CreateSampleWriter(this); }
public void Convert(ISampleWriter output, WaveFormat format, bool loudmax, CancellationToken cancel) { try { using (var bass = new BASSMIDI(format)) { ISampleSource bassSource; /*if (loudmax) bassSource = new AntiClipping(bass, 0.1); * else bassSource = bass;*/ bassSource = bass; //Why the hell was it running loudmax twice lol float[] buffer = new float[2048 * 16]; long prevWriteTime = 0; double time = 0; int read; foreach (MIDIEvent e in events) { cancel.ThrowIfCancellationRequested(); time += e.DeltaTime; converted = time; var writeTime = (long)(time * format.SampleRate); var offset = (int)((writeTime - prevWriteTime) * 2); prevWriteTime = writeTime; while (offset > 0) { if (offset < buffer.Length) { bassSource.Read(buffer, 0, offset); output.Write(buffer, 0, offset); offset = 0; } else { bassSource.Read(buffer, 0, buffer.Length); output.Write(buffer, 0, buffer.Length); offset -= buffer.Length; } } if (e is NoteOnEvent) { var ev = e as NoteOnEvent; bass.SendEventRaw((uint)(ev.Channel | 0x90 | (ev.Key << 8) | (ev.Velocity << 16)), 0); } else if (e is NoteOffEvent) { var ev = e as NoteOffEvent; bass.SendEventRaw((uint)(ev.Channel | 0x80 | (ev.Key << 8)), 0); } else if (e is PolyphonicKeyPressureEvent) { var ev = e as PolyphonicKeyPressureEvent; bass.SendEventRaw((uint)(ev.Channel | 0xA0 | (ev.Key << 8) | (ev.Velocity << 16)), 0); } else if (e is ControlChangeEvent) { if (Properties.Settings.Default.RVOverrideToggle) { for (int i = 0; i <= 15; i++) { bass.SendReverbEvent(i, Properties.Settings.Default.ReverbValue); bass.SendChorusEvent(i, Properties.Settings.Default.ChorusValue); } } var ev = e as ControlChangeEvent; bass.SendEventRaw((uint)(0xB0 | (ev.Controller << 8) | (ev.Value << 16)), ev.Channel + 1); } else if (e is ProgramChangeEvent) { var ev = e as ProgramChangeEvent; bass.SendEventRaw((uint)(ev.Channel | 0xC0 | (ev.Program << 8)), 0); } else if (e is ChannelPressureEvent) { var ev = e as ChannelPressureEvent; bass.SendEventRaw((uint)(ev.Channel | 0xD0 | (ev.Pressure << 8)), 0); } else if (e is PitchWheelChangeEvent) { var ev = e as PitchWheelChangeEvent; var val = ev.Value + 8192; bass.SendEventRaw((uint)(ev.Channel | 0xE0 | ((val & 0x7F) << 8) | (((val >> 7) & 0x7F) << 16)), 0); } } bass.SendEndEvent(); while ((read = bassSource.Read(buffer, 0, buffer.Length)) != 0) { output.Write(buffer, 0, read); } } } catch (OperationCanceledException) { } }
public DataController(IMachineState machineState, ISampleWriter sampleWriter, IHubContext <FeedHub> feedHub) { this.machineState = machineState; this.sampleWriter = sampleWriter; this.feedHub = feedHub; }
public FeedHub(IMachineState machineState, ISampleWriter sampleWriter) { this.machineState = machineState; this.sampleWriter = sampleWriter; }