public ActionResult GetHarmonicDrillEx(string doNoteName, int type) { L1C5HarmonicDrillType drillType = (L1C5HarmonicDrillType)type; MemoryStream wavStream = GetHarmonicDrillEx(doNoteName, drillType); wavStream.WavToMp3File(out string fileName); return(Redirect($"~/Temp/{fileName}")); }
private MemoryStream GetHarmonicDrillEx(string doNoteName, L1C5HarmonicDrillType drillType) { TimeSpan duration = TimeSpan.FromSeconds(3); string doFileName = NAudioHelper.GetFileNameFromNoteName(doNoteName); doFileName = Path.GetFileName(doFileName); int doNoteNumber = int.Parse(doFileName.Split('.')[0]); ISampleProvider note1, note2; switch (drillType) { #region 4ths. case L1C5HarmonicDrillType.DoFa4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, duration); break; case L1C5HarmonicDrillType.ReSo4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor2nd, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, duration); break; case L1C5HarmonicDrillType.MiLa4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, duration); break; case L1C5HarmonicDrillType.FaTi4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, duration); break; case L1C5HarmonicDrillType.SoDo4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, duration); break; case L1C5HarmonicDrillType.LaRe4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor9th, duration); break; case L1C5HarmonicDrillType.TiMi4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, duration); break; #endregion 4ths. #region 5ths. case L1C5HarmonicDrillType.DoSo5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, duration); break; case L1C5HarmonicDrillType.ReLa5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor2nd, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, duration); break; case L1C5HarmonicDrillType.MiTi5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, duration); break; case L1C5HarmonicDrillType.FaDo5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, duration); break; case L1C5HarmonicDrillType.SoRe5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor9th, duration); break; case L1C5HarmonicDrillType.LaMi5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, duration); break; case L1C5HarmonicDrillType.TiFa5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect11th, duration); break; #endregion 5ths. default: throw new NotSupportedException($"L1C5HarmonicDrillType '{drillType}' is not supported."); } MixingSampleProvider msp = new MixingSampleProvider(note1.WaveFormat); msp.AddMixerInput(note1); msp.AddMixerInput(note2); var stwp = new SampleToWaveProvider(msp); MemoryStream wavStream = new MemoryStream(); WaveFileWriter.WriteWavFileToStream(wavStream, stwp); wavStream.Position = 0; return(wavStream); }