Exemplo n.º 1
0
    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();
        }
    }
Exemplo n.º 2
0
 public void Dispose()
 {
     if (writer != null)
     {
         writer.Dispose();
         writer = null;
     }
 }
Exemplo n.º 3
0
 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();
        }
    }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
        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) { }
        }
Exemplo n.º 7
0
 public DataController(IMachineState machineState, ISampleWriter sampleWriter, IHubContext <FeedHub> feedHub)
 {
     this.machineState = machineState;
     this.sampleWriter = sampleWriter;
     this.feedHub      = feedHub;
 }
Exemplo n.º 8
0
 public FeedHub(IMachineState machineState, ISampleWriter sampleWriter)
 {
     this.machineState = machineState;
     this.sampleWriter = sampleWriter;
 }