public static void CreateMashup(string to, params string[] files) { if (files.Length < 2) { throw new Exception("Not enough files selected!"); } var internalFormat = WaveFormat.CreateIeeeFloatWaveFormat(16000, 1); var toFormat = WaveFormat.CreateIeeeFloatWaveFormat(44100, 1); var mixer = new MixingSampleProvider(internalFormat); var readers = files.Select(path => new Mp3FileReader(path)).ToList(); var waveStreams = readers.Select(WaveFormatConversionStream.CreatePcmStream).ToList(); var resampledEnumerable = waveStreams.Select(stream => new MediaFoundationResampler(stream, internalFormat)).ToList(); foreach (var resampled in resampledEnumerable) { mixer.AddMixerInput(resampled); } var waveProvider = new SampleToWaveProvider(mixer); using (var resampler = new MediaFoundationResampler(waveProvider, toFormat)) { MediaFoundationEncoder.EncodeToMp3(resampler, to); } resampledEnumerable.Dispose(); waveStreams.Dispose(); readers.Dispose(); }
public void OpenFile(string path) { if (System.IO.File.Exists(path)) { try { StopAndCloseStream(); // Dispose Init(); // and reinitialize the waveoutdevice //WaveStream waveStream = (WaveStream) new AudioFileReader(path); //WaveChannel32 waveChannel32 = new WaveChannel32(waveStream); //waveOutDevice.Init(waveChannel32); ISampleProvider sampleProvider = (ISampleProvider) new AudioFileReader(path); WaveProvider = new SampleToWaveProvider(sampleProvider); waveOutDevice.Init(waveProvider); CanPlay = true; } catch { waveProvider = null; CanPlay = false; } } }
public static bool TakeClipAddSilence(string file, TimeSpan lengthSilence, TimeSpan startTime, TimeSpan length, string newFile) { try { //byte[] buffer = new byte[1024]; AudioFileReader afr = new AudioFileReader(file); OffsetSampleProvider offsetter = new OffsetSampleProvider(afr) { DelayBy = lengthSilence, LeadOut = lengthSilence, SkipOver = startTime, Take = length }; offsetter.ToMono(); var provider = new SampleToWaveProvider(offsetter); WaveFileWriter.CreateWaveFile(newFile, provider); ChangeWaveFormat(newFile, 16000, 16, 1); return(true); } catch (Exception exc) { ErrorMessage.Raise(exc); return(false); } }
public void CanDownsampleAnMp3File() { string testFile = @"D:\Audio\Music\Coldplay\Mylo Xyloto\03 - Paradise.mp3"; if (!File.Exists(testFile)) { Assert.Ignore(testFile); } string outFile = @"d:\test22.wav"; using (var reader = new AudioFileReader(testFile)) { // downsample to 22kHz var resampler = new WdlResamplingSampleProvider(reader, 22050); var wp = new SampleToWaveProvider(resampler); using (var writer = new WaveFileWriter(outFile, wp.WaveFormat)) { byte[] b = new byte[wp.WaveFormat.AverageBytesPerSecond]; while (true) { int read = wp.Read(b, 0, b.Length); if (read > 0) { writer.Write(b, 0, read); } else { break; } } } //WaveFileWriter.CreateWaveFile(outFile, ); } }
public static Stream Convert(Stream inputStream) { using (var fileReader = new WaveFileReader(inputStream)) { Pcm8BitToSampleProvider sampleProvider = new Pcm8BitToSampleProvider(fileReader); SampleToWaveProvider waveProvider = new SampleToWaveProvider(sampleProvider); var outStream = new MemoryStream(); using (var fileWriter = new LameMP3FileWriter(outStream, waveProvider.WaveFormat, 24)) { int buff_length = 1024 * 1024; var buff = new byte[buff_length]; int position = 0; int length = waveProvider.Read(buff, position, buff_length); while (length > 0) { position += length; fileWriter.Write(buff, (int)fileWriter.Position, length); length = waveProvider.Read(buff, position, buff_length); } fileWriter.Flush(); return(outStream); } } }
/// <summary> /// Converts sound file to List of arrays. One array - data for 1 second /// </summary> /// <param name="v"></param> internal static List <float[]> GetArraysFromFile(string inFile) { var res = new List <float[]>(); if (!File.Exists(inFile)) { Program.LogError("No file " + inFile); return(null); } using (var reader = new AudioFileReader(inFile)) { Program.LogInfo("TotalTime:" + reader.TotalTime); Program.LogInfo("Length:" + reader.Length); Program.LogInfo("Volume:" + reader.Volume); var waveFormat = reader.WaveFormat; Program.LogInfo("SampleRate:" + waveFormat.SampleRate); Program.LogInfo("AverageBytesPerSecond:" + waveFormat.AverageBytesPerSecond); Program.LogInfo("BitsPerSample:" + waveFormat.BitsPerSample); Program.LogInfo("BlockAlign:" + waveFormat.BlockAlign); Program.LogInfo("Channels:" + waveFormat.Channels); Program.LogInfo("Encoding:" + waveFormat.Encoding); int valuesPerSecond = (int)(reader.Length / reader.TotalTime.TotalSeconds); Program.LogInfo("Values per second:" + valuesPerSecond); var resampler = new WdlResamplingSampleProvider(reader, 44100); var wp = new SampleToWaveProvider(reader); var rdr = wp.ToSampleProvider(); var wf2 = rdr.WaveFormat; Program.LogInfo("SampleRate:" + wf2.SampleRate); Program.LogInfo("AverageBytesPerSecond:" + wf2.AverageBytesPerSecond); Program.LogInfo("BitsPerSample:" + wf2.BitsPerSample); Program.LogInfo("BlockAlign:" + wf2.BlockAlign); Program.LogInfo("Channels:" + wf2.Channels); Program.LogInfo("Encoding:" + wf2.Encoding); // 1 sec length buffer var buf = new float[rdr.WaveFormat.SampleRate * rdr.WaveFormat.Channels]; while (true) { int read = rdr.Read(buf, 0, buf.Length); if (read > 0) { // only 1 channel res.Add(buf.Where((x, i) => i % 2 == 0).ToArray()); } else { break; } } return(res); } }
private MemoryStream GetResolutionNoDO(string doNoteName, ResolutionType resolutionType) { double bpm = double.Parse(ConfigurationManager.AppSettings["BPM"]); double quarterNotemillis = (60 / bpm) * 1000; TimeSpan quarterNoteDuration = TimeSpan.FromMilliseconds(quarterNotemillis); TimeSpan halfNoteDuration = quarterNoteDuration.Add(quarterNoteDuration); TimeSpan wholeNoteDuration = halfNoteDuration.Add(halfNoteDuration); string doFileName = NAudioHelper.GetFileNameFromNoteName(doNoteName); doFileName = Path.GetFileName(doFileName); int doNoteNumber = int.Parse(doFileName.Split('.')[0]); ISampleProvider note1; ISampleProvider note2; switch (resolutionType) { case ResolutionType.DoDoReDo: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor2nd, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber, wholeNoteDuration); break; case ResolutionType.DoDoFaMi: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, wholeNoteDuration); break; case ResolutionType.DoDoLaSo: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, wholeNoteDuration); break; case ResolutionType.DoDoTiHighDo: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + 12, wholeNoteDuration); break; case ResolutionType.DoDoLowTiDo: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.DownMinor2nd, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber, wholeNoteDuration); break; default: throw new NotSupportedException($"ResolutionType '{resolutionType}' is not supported."); } ISampleProvider phrase = note1 .FollowedBy(note2); SampleToWaveProvider stwp = new SampleToWaveProvider(phrase); MemoryStream wavStream = new MemoryStream(); WaveFileWriter.WriteWavFileToStream(wavStream, stwp); wavStream.Position = 0; return(wavStream); }
/// <summary> /// demo function fo reading and saving sound files /// </summary> /// <param name="testWavFile"></param> /// <param name="testOutWavFile"></param> public static void ReadAndWriteSound(string testWavFile, string testOutWavFile) { string testFile = testWavFile; if (!File.Exists(testFile)) { Program.LogError("No file " + testFile); return; } using (var reader = new AudioFileReader(testFile)) { Program.LogInfo("TotalTime:" + reader.TotalTime); Program.LogInfo("Length:" + reader.Length); Program.LogInfo("Volume:" + reader.Volume); var waveFormat = reader.WaveFormat; Program.LogInfo("SampleRate:" + waveFormat.SampleRate); Program.LogInfo("AverageBytesPerSecond:" + waveFormat.AverageBytesPerSecond); Program.LogInfo("BitsPerSample:" + waveFormat.BitsPerSample); Program.LogInfo("BlockAlign:" + waveFormat.BlockAlign); Program.LogInfo("Channels:" + waveFormat.Channels); Program.LogInfo("Encoding:" + waveFormat.Encoding); Program.LogInfo("Values per second:" + reader.Length / reader.TotalTime.TotalSeconds); var resampler = new WdlResamplingSampleProvider(reader, 44100); var wp = new SampleToWaveProvider(reader); var rdr = wp.ToSampleProvider(); var wf2 = rdr.WaveFormat; Program.LogInfo("SampleRate:" + wf2.SampleRate); Program.LogInfo("AverageBytesPerSecond:" + wf2.AverageBytesPerSecond); Program.LogInfo("BitsPerSample:" + wf2.BitsPerSample); Program.LogInfo("BlockAlign:" + wf2.BlockAlign); Program.LogInfo("Channels:" + wf2.Channels); Program.LogInfo("Encoding:" + wf2.Encoding); var wf = WaveFormat.CreateIeeeFloatWaveFormat(rdr.WaveFormat.SampleRate, rdr.WaveFormat.Channels); using (WaveFileWriter writer = new WaveFileWriter(testOutWavFile, wf)) { var buf = new float[rdr.WaveFormat.SampleRate]; while (true) { int read = rdr.Read(buf, 0, buf.Length); if (read > 0) { writer.WriteSamples(buf, 0, read); } else { break; } } } } }
public SynthPlatform() { _audioProvider = new AudioProvider(sampleRate: SampleRate); _waveOutEvent = new WaveOutEvent { NumberOfBuffers = 2, DesiredLatency = 100 }; _player = _waveOutEvent; _sampToWaveProvider = new SampleToWaveProvider(_audioProvider); _player.Init(_sampToWaveProvider); }
private static void CreateMp3File(ISampleProvider provider, string fileName) { // assumes MediaFoundationApi.Startup() was already called SampleToWaveProvider audioSpriteWave = new SampleToWaveProvider(provider); try { MediaFoundationEncoder.EncodeToMp3(audioSpriteWave, fileName); } catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); } }
private MemoryStream GetHarmonicDrill(string doNoteName, L1C7HarmonicDrillType 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) { // Minor 2nds. case L1C7HarmonicDrillType.MiFa2nd: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, duration); break; case L1C7HarmonicDrillType.TiDo2nd: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, duration); break; // Major 7ths. case L1C7HarmonicDrillType.DoTi7th: note1 = NAudioHelper.GetSampleProvider(doNoteNumber, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, duration); break; case L1C7HarmonicDrillType.FaMi7th: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, duration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, duration); break; default: throw new NotSupportedException($"L1C7HarmonicDrillType '{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); }
/// <summary> /// 使用指定的音频流绘制波形图 /// </summary> /// <param name="stream"></param> /// <returns></returns> public OptReturn Draw(WaveStream stream) { OptReturn optReturn = new OptReturn(); optReturn.Result = true; optReturn.Code = Defines.RET_SUCCESS; try { WaveStream reader = stream; reader.Position = 0; if (reader.WaveFormat.Encoding != WaveFormatEncoding.Pcm && reader.WaveFormat.Encoding != WaveFormatEncoding.IeeeFloat) { reader = WaveFormatConversionStream.CreatePcmStream(reader); reader = new BlockAlignReductionStream(reader); } InitDraw(); var waveChannel = new SampleChannel(reader, true); int samples = (int)(reader.TotalTime.TotalSeconds) * reader.WaveFormat.SampleRate / mPngWidth; var postVolumeMeter = new MeteringSampleProvider(waveChannel, samples); postVolumeMeter.StreamVolume += postVolumeMeter_StreamVolume; var waveProvider = new SampleToWaveProvider(postVolumeMeter); while (true) { byte[] buffer = new byte[waveProvider.WaveFormat.AverageBytesPerSecond]; int readcount = waveProvider.Read(buffer, 0, waveProvider.WaveFormat.AverageBytesPerSecond); if (readcount <= 0) { break; } } stream.Position = 0; if (mIsSaveFile) { return(GenerateImageFile()); } Bitmap[] bitmaps = new Bitmap[2]; bitmaps[0] = mBitmap; bitmaps[1] = mBitmap1; optReturn.Data = bitmaps; return(optReturn); } catch (Exception ex) { optReturn.Result = false; optReturn.Code = Defines.RET_FAIL; optReturn.Message = ex.Message; return(optReturn); } }
public static byte[] Generate(this WaveFormat waveFormat, TimeSpan interval, SignalGeneratorType type = SignalGeneratorType.Sin, double frequency = 1.0) { var sampleProvider = new SignalGenerator(waveFormat.SampleRate, waveFormat.Channels) { Frequency = frequency, Type = type }; var waveProvider = new SampleToWaveProvider(sampleProvider); var numBytes = (int)(interval.TotalSeconds * waveFormat.AverageBytesPerSecond); var data = new byte[numBytes]; waveProvider.Read(data, 0, data.Length); return(data); }
private void FadeInDurationButton_Click(object sender, EventArgs e) { string outputFileName = fileName.Substring(0, fileName.Length - 4); var outPath = outputFileName + "FadeInDuration.wav"; var reader = new AudioFileReader(open.FileName); var fader = new FadeInOutSampleProvider(reader); double totalTime = Int32.Parse(FadeInDurationTextBox.Text); fader.BeginFadeIn(totalTime); var stwp = new SampleToWaveProvider(fader); WaveFileWriter.CreateWaveFile(outPath, stwp); }
private void Play() { if (waveOut != null) { Stop(); } waveOut = new WaveOut(); this.patternSequencer = new DrumPatternSampleProvider(pattern); this.patternSequencer.Tempo = tempo; IWaveProvider wp = new SampleToWaveProvider(patternSequencer); waveOut.Init(wp); waveOut.Play(); }
public static byte[] Generate(this TimeSpan interval, int rate = 8000, int channels = 1, SignalGeneratorType type = SignalGeneratorType.Sin, double frequency = 1.0) { var waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(rate, channels); var sampleProvider = new SignalGenerator(rate, channels) { Frequency = frequency, Type = type }; var waveProvider = new SampleToWaveProvider(sampleProvider); var numBytes = (int)(interval.TotalSeconds * waveFormat.AverageBytesPerSecond); var data = new byte[numBytes]; waveProvider.Read(data, 0, data.Length); return(data); }
public ActionResult GetNoteEx(string doNoteName, int type) { int doNoteNumber = NoteHelper.NoteNumberFromNoteName(doNoteName); int thisNoteNumber = doNoteNumber + type; ISampleProvider note = NAudioHelper.GetSampleProvider(thisNoteNumber, TimeSpan.FromSeconds(3)); var stwp = new SampleToWaveProvider(note); MemoryStream wavStream = new MemoryStream(); WaveFileWriter.WriteWavFileToStream(wavStream, stwp); wavStream.Position = 0; wavStream.WavToMp3File(out string fileName); return(Redirect($"~/Temp/{fileName}")); }
public ActionResult GetDOEx(string doNoteName) { _log.Info("Entered. Getting the note..."); ISampleProvider note = NAudioHelper.GetSampleProvider(doNoteName, TimeSpan.FromSeconds(2)); _log.Info("Got the note"); var stwp = new SampleToWaveProvider(note); MemoryStream wavStream = new MemoryStream(); WaveFileWriter.WriteWavFileToStream(wavStream, stwp); wavStream.Position = 0; wavStream.WavToMp3File(out string fileName); return(Redirect($"~/Temp/{fileName}")); }
private void RestartAudio() { if (FWaveOut != null) { Dispose(); } if (FInput[0] != null) { FWaveOut = new WasapiOut(AudioClientShareMode.Shared, 4); FWaveProvider = new SampleToWaveProvider(FInput[0]); FWaveOut.Init(FWaveProvider); FWaveOut.Play(); } }
private void button3_Click(object sender, EventArgs e) { //var outPath = @"H:\Repos\fadeIn2.wav"; string outputFileName = fileName.Substring(0, fileName.Length - 4); var outPath = outputFileName + "FadeOut.wav"; var reader = new AudioFileReader(open.FileName); TimeSpan span = reader.TotalTime; var fader = new FadeInOutSampleProvider(reader); double totalTime = span.TotalMilliseconds; fader.BeginFadeOut(totalTime); var stwp = new SampleToWaveProvider(fader); WaveFileWriter.CreateWaveFile(outPath, stwp); }
public static void Init(this IWavePlayer wavePlayer, ISampleProvider sampleProvider, bool convertTo16Bit = false) { IWaveProvider waveProvider2; if (!convertTo16Bit) { IWaveProvider waveProvider = new SampleToWaveProvider(sampleProvider); waveProvider2 = waveProvider; } else { waveProvider2 = new SampleToWaveProvider16(sampleProvider); } IWaveProvider waveProvider3 = waveProvider2; wavePlayer.Init(waveProvider3); }
public AudioDevice(string fileName) : this() { ISampleProvider sampleProvider = new AudioFileReader(fileName); this.fileWaveStream = (WaveStream)sampleProvider; // create sample channel SampleToWaveProvider waveProvider = new SampleToWaveProvider(sampleProvider); this.sampleChannel = new SampleChannel(waveProvider, true); this.sampleChannel.PreVolumeMeter += OnPreVolumeMeter; // play //IWavePlayer waveOut = new WaveOut(); //waveOut.Init(waveProvider); //waveOut.Play(); }
public void OpenSampleProvider(ISampleProvider sampleProvider) { try { StopAndCloseStream(); // Dispose Init(); // and reinitialize the waveoutdevice WaveProvider = new SampleToWaveProvider(sampleProvider); waveOutDevice.Init(waveProvider); CanPlay = true; } catch { waveProvider = null; CanPlay = false; } }
public static void Init(this IWavePlayer wavePlayer, ISampleProvider sampleProvider, bool convertTo16Bit = false) { IWaveProvider arg_15_0; if (!convertTo16Bit) { IWaveProvider waveProvider = new SampleToWaveProvider(sampleProvider); arg_15_0 = waveProvider; } else { IWaveProvider waveProvider = new SampleToWaveProvider16(sampleProvider); arg_15_0 = waveProvider; } IWaveProvider waveProvider2 = arg_15_0; wavePlayer.Init(waveProvider2); }
public ActionResult CreateProgression(string pitchName, string chordProgression, string movementProgression) { _log.Debug($"pitchName: {pitchName}, chordProgression: {chordProgression}, movementProgression: {movementProgression}"); string[] chordsAndInversions = chordProgression.Split('-'); string[] movements = movementProgression.Split(','); MixingSampleProvider[] msps = new MixingSampleProvider[chordsAndInversions.Length]; for (int i = 0; i < chordsAndInversions.Length; i++) { string chordAndInversion; string movement; chordAndInversion = chordsAndInversions[i]; if (i == 0) { movement = null; } else { movement = movements[i - 1]; } msps[i] = CreateMajorTriad(pitchName, chordAndInversion, movement); } ISampleProvider phrase = msps[0]; for (int i = 1; i < msps.Length; i++) { phrase = phrase.FollowedBy(msps[i]); } var stwp = new SampleToWaveProvider(phrase); MemoryStream wavStream = new MemoryStream(); WaveFileWriter.WriteWavFileToStream(wavStream, stwp); wavStream.Position = 0; wavStream.WavToMp3File(out string fileName); var path = $"temp/{fileName}"; JsonResult jsonResult = Json(path, JsonRequestBehavior.AllowGet); return(jsonResult); }
public ActionResult GetPitchEx(string doNoteName, int type) { string doFileName = NAudioHelper.GetFileNameFromNoteName(doNoteName); doFileName = Path.GetFileName(doFileName); int doNoteNumber = int.Parse(doFileName.Split('.')[0]); int noteNumber = doNoteNumber + type; TimeSpan noteDuration = TimeSpan.FromSeconds(3); var note = NAudioHelper.GetSampleProvider(noteNumber, noteDuration); var stwp = new SampleToWaveProvider(note); MemoryStream wavStream = new MemoryStream(); WaveFileWriter.WriteWavFileToStream(wavStream, stwp); wavStream.Position = 0; wavStream.WavToMp3File(out string fileName); return(Redirect($"~/Temp/{fileName}")); }
private MemoryStream GetMelodicDrillEx(string doNoteName, L1C5MelodicDrillType drillType) { double bpm = double.Parse(ConfigurationManager.AppSettings["BPM"]); double quarterNoteMillis = (60 / bpm) * 1000; double eighthNoteMillis = quarterNoteMillis / 2; TimeSpan eighthNoteDuration = TimeSpan.FromMilliseconds(eighthNoteMillis); TimeSpan quarterNoteDuration = eighthNoteDuration.Add(eighthNoteDuration); TimeSpan wholeNoteDuration = quarterNoteDuration.Add(quarterNoteDuration).Add(quarterNoteDuration).Add(quarterNoteDuration); string doFileName = NAudioHelper.GetFileNameFromNoteName(doNoteName); doFileName = Path.GetFileName(doFileName); int doNoteNumber = int.Parse(doFileName.Split('.')[0]); ISampleProvider note1, note2, note3, note4, note5, note6; switch (drillType) { #region 4ths. case L1C5MelodicDrillType.DoDoDoFaFaMi4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber, eighthNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber, eighthNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, quarterNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, quarterNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, wholeNoteDuration); break; case L1C5MelodicDrillType.ReReSoSoSoSo4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor2nd, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor2nd, quarterNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, quarterNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, eighthNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, eighthNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, wholeNoteDuration); break; case L1C5MelodicDrillType.MiMiMiLaLaSo4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, eighthNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, eighthNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, quarterNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, quarterNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, wholeNoteDuration); break; case L1C5MelodicDrillType.FaFaTiTiTiDo4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, quarterNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, quarterNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, eighthNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, eighthNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, wholeNoteDuration); break; case L1C5MelodicDrillType.SoSoSoDoDoDo4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, eighthNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, eighthNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, quarterNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, quarterNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, wholeNoteDuration); break; case L1C5MelodicDrillType.LaLaReReReDo4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, quarterNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor9th, quarterNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor9th, eighthNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor9th, eighthNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, wholeNoteDuration); break; case L1C5MelodicDrillType.TiTiTiMiMiMi4: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, eighthNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, eighthNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, quarterNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, quarterNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, wholeNoteDuration); break; #endregion 4ths. #region 5ths. case L1C5MelodicDrillType.DoDoDoSoSoSo5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber, eighthNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber, eighthNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, quarterNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, quarterNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, wholeNoteDuration); break; case L1C5MelodicDrillType.ReReLaLaLaSo5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor2nd, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor2nd, quarterNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, quarterNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, eighthNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, eighthNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, wholeNoteDuration); break; case L1C5MelodicDrillType.MiMiMiTiTiDo5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, eighthNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, eighthNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, quarterNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, quarterNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, wholeNoteDuration); break; case L1C5MelodicDrillType.FaFaDoDoDoDo5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, quarterNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, quarterNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, eighthNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, eighthNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, wholeNoteDuration); break; case L1C5MelodicDrillType.SoSoSoReReDo5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, eighthNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, eighthNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor9th, quarterNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor9th, quarterNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, wholeNoteDuration); break; case L1C5MelodicDrillType.LaLaMiMiMiMi5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, quarterNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, quarterNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, eighthNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, eighthNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, wholeNoteDuration); break; case L1C5MelodicDrillType.FaFaFaTiTiDo5: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, quarterNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, eighthNoteDuration); note3 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, eighthNoteDuration); note4 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.DownMinor2nd, quarterNoteDuration); note5 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.DownMinor2nd, quarterNoteDuration); note6 = NAudioHelper.GetSampleProvider(doNoteNumber, wholeNoteDuration); break; #endregion 5ths. default: throw new NotSupportedException($"L1C5MelodicDrillType '{drillType}' is not supported."); } var phrase = note1 .FollowedBy(note2) .FollowedBy(note3) .FollowedBy(note4) .FollowedBy(note5) .FollowedBy(note6); var stwp = new SampleToWaveProvider(phrase); MemoryStream wavStream = new MemoryStream(); WaveFileWriter.WriteWavFileToStream(wavStream, stwp); wavStream.Position = 0; return(wavStream); }
public ActionResult Get3ChordProgressionEx(string doNoteName, int progressiontype) { var progressionType = (ProgressionType)progressiontype; TimeSpan noteDuration = TimeSpan.FromSeconds(2); string doFileName = NAudioHelper.GetFileNameFromNoteName(doNoteName); doFileName = Path.GetFileName(doFileName); int doNoteNumber = int.Parse(doFileName.Split('.')[0]); ISampleProvider[] samples1; ISampleProvider[] samples2; ISampleProvider[] samples3; switch (progressionType) { case ProgressionType.Four2ndFive1stOneRoot: samples1 = Inversion.CreateTriadInversionEx(InversionType.LowSecond, noteDuration, doNoteNumber + Interval.UpPerfect4th, doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, (doNoteNumber + Interval.UpPerfect4th).BassNoteNumber()); samples2 = Inversion.CreateTriadInversionEx(InversionType.LowFirst, noteDuration, doNoteNumber + Interval.UpPerfect5th, doNoteNumber + Interval.UpMajor7th, doNoteNumber + Interval.UpMajor9th, (doNoteNumber + Interval.UpPerfect5th).BassNoteNumber()); samples3 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration.Add(noteDuration), doNoteNumber, doNoteNumber + Interval.UpMajor3rd, doNoteNumber + Interval.UpPerfect5th, doNoteNumber.BassNoteNumber()); break; case ProgressionType.OneRootFour2ndFive1st: samples1 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration, doNoteNumber, doNoteNumber + Interval.UpMajor3rd, doNoteNumber + Interval.UpPerfect5th, doNoteNumber.BassNoteNumber()); samples2 = Inversion.CreateTriadInversionEx(InversionType.LowSecond, noteDuration, doNoteNumber + Interval.UpPerfect4th, doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, (doNoteNumber + Interval.UpPerfect4th).BassNoteNumber()); samples3 = Inversion.CreateTriadInversionEx(InversionType.LowFirst, noteDuration.Add(noteDuration), doNoteNumber + Interval.UpPerfect5th, doNoteNumber + Interval.UpMajor7th, doNoteNumber + Interval.UpMajor9th, (doNoteNumber + Interval.UpPerfect5th).BassNoteNumber()); break; case ProgressionType.Four2ndOneRootFive1st: samples1 = Inversion.CreateTriadInversionEx(InversionType.LowSecond, noteDuration, doNoteNumber + Interval.UpPerfect4th, doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, (doNoteNumber + Interval.UpPerfect4th).BassNoteNumber()); samples2 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration, doNoteNumber, doNoteNumber + Interval.UpMajor3rd, doNoteNumber + Interval.UpPerfect5th, doNoteNumber.BassNoteNumber()); samples3 = Inversion.CreateTriadInversionEx(InversionType.LowFirst, noteDuration.Add(noteDuration), doNoteNumber + Interval.UpPerfect5th, doNoteNumber + Interval.UpMajor7th, doNoteNumber + Interval.UpMajor9th, (doNoteNumber + Interval.UpPerfect5th).BassNoteNumber()); break; case ProgressionType.OneRootFive1stSixMin1st: samples1 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration, doNoteNumber, doNoteNumber + Interval.UpMajor3rd, doNoteNumber + Interval.UpPerfect5th, doNoteNumber.BassNoteNumber()); samples2 = Inversion.CreateTriadInversionEx(InversionType.LowFirst, noteDuration, doNoteNumber + Interval.UpPerfect5th, doNoteNumber + Interval.UpMajor7th, doNoteNumber + Interval.UpMajor9th, (doNoteNumber + Interval.UpPerfect5th).BassNoteNumber()); samples3 = Inversion.CreateTriadInversionEx(InversionType.LowFirst, noteDuration.Add(noteDuration), doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, doNoteNumber + Interval.UpMajor10th, (doNoteNumber + Interval.UpMajor6th).BassNoteNumber()); break; case ProgressionType.SixMin2ndFourRootOne1st: samples1 = Inversion.CreateTriadInversionEx(InversionType.LowSecond, noteDuration, doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, doNoteNumber + Interval.UpMajor10th, (doNoteNumber + Interval.UpMajor6th).BassNoteNumber()); samples2 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration, doNoteNumber + Interval.UpPerfect4th, doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, (doNoteNumber + Interval.UpPerfect4th).BassNoteNumber()); samples3 = Inversion.CreateTriadInversionEx(InversionType.HighFirst, noteDuration.Add(noteDuration), doNoteNumber, doNoteNumber + Interval.UpMajor3rd, doNoteNumber + Interval.UpPerfect5th, doNoteNumber.BassNoteNumber()); break; case ProgressionType.OneRootSixMin1stFive1st: samples1 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration, doNoteNumber, doNoteNumber + Interval.UpMajor3rd, doNoteNumber + Interval.UpPerfect5th, doNoteNumber.BassNoteNumber()); samples2 = Inversion.CreateTriadInversionEx(InversionType.LowFirst, noteDuration, doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, doNoteNumber + Interval.UpMajor10th, (doNoteNumber + Interval.UpMajor6th).BassNoteNumber()); samples3 = Inversion.CreateTriadInversionEx(InversionType.LowFirst, noteDuration.Add(noteDuration), doNoteNumber + Interval.UpPerfect5th, doNoteNumber + Interval.UpMajor7th, doNoteNumber + Interval.UpMajor9th, (doNoteNumber + Interval.UpPerfect5th).BassNoteNumber()); break; case ProgressionType.FiveRootFourRootSixMin2nd: samples1 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration, doNoteNumber + Interval.UpPerfect5th, doNoteNumber + Interval.UpMajor7th, doNoteNumber + Interval.UpMajor9th, (doNoteNumber + Interval.UpPerfect5th).BassNoteNumber()); samples2 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration, doNoteNumber + Interval.UpPerfect4th, doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, (doNoteNumber + Interval.UpPerfect4th).BassNoteNumber()); samples3 = Inversion.CreateTriadInversionEx(InversionType.LowSecond, noteDuration.Add(noteDuration), doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, doNoteNumber + Interval.UpMajor10th, (doNoteNumber + Interval.UpMajor6th).BassNoteNumber()); break; case ProgressionType.FourRootFiveRootSixMinRoot: samples1 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration, doNoteNumber + Interval.UpPerfect4th, doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, (doNoteNumber + Interval.UpPerfect4th).BassNoteNumber()); samples2 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration, doNoteNumber + Interval.UpPerfect5th, doNoteNumber + Interval.UpMajor7th, doNoteNumber + Interval.UpMajor9th, (doNoteNumber + Interval.UpPerfect5th).BassNoteNumber()); samples3 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration.Add(noteDuration), doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, doNoteNumber + Interval.UpMajor10th, (doNoteNumber + Interval.UpMajor6th).BassNoteNumber()); break; case ProgressionType.SixMin1stOne2ndFour1st: samples1 = Inversion.CreateTriadInversionEx(InversionType.LowFirst, noteDuration, doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, doNoteNumber + Interval.UpMajor10th, (doNoteNumber + Interval.UpMajor6th).BassNoteNumber()); samples2 = Inversion.CreateTriadInversionEx(InversionType.LowSecond, noteDuration, doNoteNumber, doNoteNumber + Interval.UpMajor3rd, doNoteNumber + Interval.UpPerfect5th, doNoteNumber.BassNoteNumber()); samples3 = Inversion.CreateTriadInversionEx(InversionType.LowFirst, noteDuration.Add(noteDuration), doNoteNumber + Interval.UpPerfect4th, doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, (doNoteNumber + Interval.UpPerfect4th).BassNoteNumber()); break; case ProgressionType.Five2ndSixMin2ndOneRoot: samples1 = Inversion.CreateTriadInversionEx(InversionType.LowSecond, noteDuration, doNoteNumber + Interval.UpPerfect5th, doNoteNumber + Interval.UpMajor7th, doNoteNumber + Interval.UpMajor9th, (doNoteNumber + Interval.UpPerfect5th).BassNoteNumber()); samples2 = Inversion.CreateTriadInversionEx(InversionType.LowSecond, noteDuration, doNoteNumber + Interval.UpMajor6th, doNoteNumber + Interval.UpPerfectOctave, doNoteNumber + Interval.UpMajor10th, (doNoteNumber + Interval.UpMajor6th).BassNoteNumber()); samples3 = Inversion.CreateTriadInversionEx(InversionType.Root, noteDuration.Add(noteDuration), doNoteNumber, doNoteNumber + Interval.UpMajor3rd, doNoteNumber + Interval.UpPerfect5th, doNoteNumber.BassNoteNumber()); break; default: throw new NotSupportedException($"ProgressionType {progressionType} is not supported."); } // First chord. MixingSampleProvider msp1 = new MixingSampleProvider(samples1[0].WaveFormat); msp1.AddMixerInput(samples1[0]); msp1.AddMixerInput(samples1[1]); msp1.AddMixerInput(samples1[2]); if (samples1[3] != null) // Bass note. { msp1.AddMixerInput(samples1[3]); } // Second chord. MixingSampleProvider msp2 = new MixingSampleProvider(samples2[0].WaveFormat); msp2.AddMixerInput(samples2[0]); msp2.AddMixerInput(samples2[1]); msp2.AddMixerInput(samples2[2]); if (samples2[3] != null) // Bass note. { msp2.AddMixerInput(samples2[3]); } // Third chord. MixingSampleProvider msp3 = new MixingSampleProvider(samples3[0].WaveFormat); msp3.AddMixerInput(samples3[0]); msp3.AddMixerInput(samples3[1]); msp3.AddMixerInput(samples3[2]); if (samples3[3] != null) // Bass note. { msp3.AddMixerInput(samples3[3]); } var phrase = msp1 .FollowedBy(msp2) .FollowedBy(msp3); var stwp = new SampleToWaveProvider(phrase); MemoryStream wavStream = new MemoryStream(); WaveFileWriter.WriteWavFileToStream(wavStream, stwp); wavStream.Position = 0; wavStream.WavToMp3File(out string fileName); return(Redirect($"~/Temp/{fileName}")); }
private MemoryStream GetMelodicInterval(string doNoteName, L1C5MelodicDrillType drillType) { double bpm = double.Parse(ConfigurationManager.AppSettings["BPM"]); double quarterNoteMillis = (60 / bpm) * 1000; TimeSpan halfNoteDuration = TimeSpan.FromMilliseconds(quarterNoteMillis * 2); string doFileName = NAudioHelper.GetFileNameFromNoteName(doNoteName); doFileName = Path.GetFileName(doFileName); int doNoteNumber = int.Parse(doFileName.Split('.')[0]); ISampleProvider note1, note2; switch (drillType) { #region 4ths. case L1C5MelodicDrillType.DoFa4Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, halfNoteDuration); break; case L1C5MelodicDrillType.ReSo4Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor2nd, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, halfNoteDuration); break; case L1C5MelodicDrillType.MiLa4Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, halfNoteDuration); break; case L1C5MelodicDrillType.FaTi4Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, halfNoteDuration); break; case L1C5MelodicDrillType.SoDo4Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, halfNoteDuration); break; case L1C5MelodicDrillType.LaRe4Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor9th, halfNoteDuration); break; case L1C5MelodicDrillType.TiMi4Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, halfNoteDuration); break; case L1C5MelodicDrillType.FaDo4Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber, halfNoteDuration); break; case L1C5MelodicDrillType.SoRe4Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor2nd, halfNoteDuration); break; case L1C5MelodicDrillType.LaMi4Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, halfNoteDuration); break; case L1C5MelodicDrillType.TiFa4Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, halfNoteDuration); break; case L1C5MelodicDrillType.DoSo4Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, halfNoteDuration); break; case L1C5MelodicDrillType.ReLa4Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor9th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, halfNoteDuration); break; case L1C5MelodicDrillType.MiTi4Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, halfNoteDuration); break; #endregion 4ths. #region 5ths. case L1C5MelodicDrillType.DoSo5Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, halfNoteDuration); break; case L1C5MelodicDrillType.ReLa5Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor2nd, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, halfNoteDuration); break; case L1C5MelodicDrillType.MiTi5Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, halfNoteDuration); break; case L1C5MelodicDrillType.FaDo5Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, halfNoteDuration); break; case L1C5MelodicDrillType.SoRe5Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor9th, halfNoteDuration); break; case L1C5MelodicDrillType.LaMi5Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, halfNoteDuration); break; case L1C5MelodicDrillType.TiFa5Asc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect11th, halfNoteDuration); break; case L1C5MelodicDrillType.SoDo5Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber, halfNoteDuration); break; case L1C5MelodicDrillType.LaRe5Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor2nd, halfNoteDuration); break; case L1C5MelodicDrillType.TiMi5Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor3rd, halfNoteDuration); break; case L1C5MelodicDrillType.DoFa5Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfectOctave, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect4th, halfNoteDuration); break; case L1C5MelodicDrillType.ReSo5Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor9th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect5th, halfNoteDuration); break; case L1C5MelodicDrillType.MiLa5Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor10th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor6th, halfNoteDuration); break; case L1C5MelodicDrillType.FaTi5Desc: note1 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpPerfect11th, halfNoteDuration); note2 = NAudioHelper.GetSampleProvider(doNoteNumber + Interval.UpMajor7th, halfNoteDuration); break; #endregion 5ths. default: throw new NotSupportedException($"L1C5MelodicDrillType '{drillType}' is not supported."); } var phrase = note1 .FollowedBy(note2); var stwp = new SampleToWaveProvider(phrase); MemoryStream wavStream = new MemoryStream(); WaveFileWriter.WriteWavFileToStream(wavStream, stwp); wavStream.Position = 0; return(wavStream); }
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); }