Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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;
                }
            }
        }
Exemplo n.º 3
0
        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, );
            }
        }
Exemplo n.º 5
0
        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);
                }
            }
        }
Exemplo n.º 6
0
        /// <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);
            }
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        /// <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;
                        }
                    }
                }
            }
        }
Exemplo n.º 9
0
 public SynthPlatform()
 {
     _audioProvider = new AudioProvider(sampleRate: SampleRate);
     _waveOutEvent  = new WaveOutEvent
     {
         NumberOfBuffers = 2,
         DesiredLatency  = 100
     };
     _player             = _waveOutEvent;
     _sampToWaveProvider = new SampleToWaveProvider(_audioProvider);
     _player.Init(_sampToWaveProvider);
 }
Exemplo n.º 10
0
        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);
            }
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        /// <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);
            }
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
        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();
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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}"));
        }
Exemplo n.º 18
0
        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}"));
        }
Exemplo n.º 19
0
        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();
            }
        }
Exemplo n.º 20
0
        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);
        }
Exemplo n.º 21
0
        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);
        }
Exemplo n.º 22
0
        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();
        }
Exemplo n.º 23
0
        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;
            }
        }
Exemplo n.º 24
0
        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);
        }
Exemplo n.º 25
0
        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}"));
        }
Exemplo n.º 27
0
        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);
        }
Exemplo n.º 28
0
        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}"));
        }
Exemplo n.º 29
0
        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);
        }
Exemplo n.º 30
0
        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);
        }