예제 #1
0
파일: Wave.cs 프로젝트: kszabova/cnthesizer
        /// <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);
        }
예제 #2
0
 /// <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);
     }
 }
예제 #3
0
파일: Wave.cs 프로젝트: kszabova/cnthesizer
        /// <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);
            }
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
 /// <summary>
 /// Returns WavePlayer corresponding to key and wave form.
 /// </summary>
 public static WavePlayer GetWavePlayerFromKey(Keys key, WaveFormEquation waveForm)
 => PitchSelector.GetWavePlayer(GetPitchFromKey(key), waveForm);