/// <summary> /// Creates wave of given pitch with the right transformation /// </summary> /// <param name="pitch">Pitch</param> /// <param name="length">Length in milliseconds</param> /// <param name="shift">Interval shift from base pitch</param> /// <param name="waveForm">Wave transformation</param> /// <param name="sampleRate">Sample rate</param> /// <returns></returns> public static short[] SampleWaveForm(Pitch pitch, int length, Shift shift, WaveFormEquation waveForm, int sampleRate) { double baseFrequency = Frequency.GetFrequency(pitch); double frequency = shift(baseFrequency); short[] wave = waveForm(frequency, length, sampleRate); return(wave); }
/// <summary> /// Change the shape of wave /// </summary> /// <param name="waveForm">Method to generate a wave</param> public void ChangeWaveForm(WaveFormEquation waveForm) { WaveForm = waveForm; ResetOutput(); if (Beat != null) { SoundMixer.AddInputStream(Beat.Channel); } }
/// <summary> /// Writes a .wav file containing one pitch. /// </summary> /// <param name="filename">Filename</param> /// <param name="pitch">Pitch</param> /// <param name="waveForm">Wave transformation</param> /// <param name="sampleRate">Sample rate</param> public static void CreatePitchWaveFile(string filename, Pitch pitch, WaveFormEquation waveForm, int sampleRate) { short[] shortWave = SampleWaveForm(pitch, sampleRate, Shifts.Unison, waveForm, sampleRate); byte[] binaryWave = ConvertShortWaveToBytes(shortWave); using (FileStream fs = File.Create(filename)) { WriteToStream(fs, binaryWave, sampleRate, sampleRate, 16, 1); } }
/// <summary> /// Converts to a corresponding sound wave /// </summary> /// <param name="sampleRate">Sample rate</param> /// <param name="shift">Pitch shift, if any</param> /// <param name="waveForm">Wave form</param> /// <returns></returns> public short[] ConvertToWave(int sampleRate, Shift shift, WaveFormEquation waveForm) { int length = ConvertDurationToLength(sampleRate); List <short[]> waves = new List <short[]> { }; foreach (Pitch frequency in Frequencies) { waves.Add(Wave.SampleWaveForm(frequency, length, shift, waveForm, sampleRate)); } short[] mixed = Mixing.MixListOfWaves(waves); return(mixed); }
/// <summary> /// Returns WavePlayer corresponding to key and wave form. /// </summary> public static WavePlayer GetWavePlayerFromKey(Keys key, WaveFormEquation waveForm) => PitchSelector.GetWavePlayer(GetPitchFromKey(key), waveForm);