private void BtnWaveForm_Click(object sender, EventArgs e) { if (sender is Button btn) { //Disable the button we clicked on btn.Enabled = false; //The tag should look like this: 1S -> Oscillator 1, sine waveform string tag = btn.Tag.ToString(); //The first char of the tag is the oscillator id int oscillatorId = (int)Char.GetNumericValue(tag[0]); //The second char of the tag is the type of waveform SignalGeneratorType signalGeneratorType = GetSignalGeneratorType(tag[1]); if (oscillatorId == OSCILLATOR_1) { ChangeWaveType(ref o1, Oscillator1Buttons, signalGeneratorType); } else if (oscillatorId == OSCILLATOR_2) { ChangeWaveType(ref o2, Oscillator2Buttons, signalGeneratorType); } else if (oscillatorId == OSCILLATOR_3) { ChangeWaveType(ref o3, Oscillator3Buttons, signalGeneratorType); } } }
public void PlaySound(MusicalNote note, float gain, float time, SignalGeneratorType signalType) { PlaySound( new MusicalNote[] { note }, gain, time, signalType ); }
public WaveFormPlayerViewModel(string displayName, string groupName, int initialFrequency, SignalGeneratorType signalType, int duration) : base(displayName, groupName) { _frequency = initialFrequency; _signalType = signalType; _streamGenerator = new StreamGenerator(); Duration = duration; }
private void ManageButtonsActivation(List <Button> buttons, Oscillator oscillator) { foreach (Button button in buttons) { //The tag should look like this: 1S -> Oscillator 1, sine waveform string tag = button.Tag.ToString(); //The second char of the tag is the type of waveform SignalGeneratorType signalGeneratorType = GetSignalGeneratorType(tag[1]); button.Enabled = signalGeneratorType != oscillator.WaveType; } }
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 StartWave(SignalGeneratorType type) { SignalGeneratorType t = wave.Type; wave.Type = type; if (t != SignalGeneratorType.Pink) { driverOut.Stop(); driverOut.Dispose(); driverOut = new WaveOut(); driverOut.Init(wave); driverOut.Play(); } }
public Oscillator(double pGain, int pFrequency, SignalGeneratorType pType, bool isEnabled) { Gain = pGain; Frequency = pFrequency; WaveType = pType; IsEnabled = isEnabled; _disposed = false; _waveOuts = new WaveOut[MIDIPlayer.MAX_MIDI_NOTES]; for (int i = 0; i < _waveOuts.Length; i++) { _waveOuts[i] = new WaveOut(); } }
public void SetWaveType(SignalGeneratorType type, OscillatorIndex oscillator) { if (oscillator == OscillatorIndex.Primary) { currentPrimaryWaveType = type; } else if (oscillator == OscillatorIndex.Secondary) { currentSecondaryWaveType = type; } //else if (oscillator == OscillatorIndex.LFO) //{ // LFOWaveType = type; //} }
private void FillTable(SignalGeneratorType signalGeneratorType) { waveTable = new float[(int)sampleRate]; var sigGen = new SignalGenerator(44100, 1) { Frequency = 1, Gain = 1, Type = signalGeneratorType }; sigGen.Read(waveTable, 0, (int)sampleRate); // debug System.Diagnostics.Debug.WriteLine(String.Format("start: {0}, mid: {1}, end: {2}", waveTable[0], waveTable[(int)((sampleRate / 2))], waveTable[(int)sampleRate - 1])); readPosition = 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); }
public void SetSignalGeneratorType(SignalGeneratorType signalGeneratorType) { if (SignalGeneratorType == signalGeneratorType) { return; } if (signalGeneratorType == SignalGeneratorType.Sin || signalGeneratorType == SignalGeneratorType.Square || signalGeneratorType == SignalGeneratorType.SawTooth || signalGeneratorType == SignalGeneratorType.Triangle) { SignalGeneratorType = signalGeneratorType; FillTable(signalGeneratorType); } else { throw new NotSupportedException("Unsupported SignalGeneratorType"); } }
private void SetInstrument(InstrumentType instrument) { signalType = SignalGeneratorType.Sin; switch (instrument) { case InstrumentType.Horn: signalType = SignalGeneratorType.SawTooth; break; case InstrumentType.Flute: signalType = SignalGeneratorType.Triangle; break; case InstrumentType.Clarinet: signalType = SignalGeneratorType.Square; break; case InstrumentType.Recorder: signalType = SignalGeneratorType.Sin; break; } }
public static void PlaySingleNote(Object n) { Note note = (Note)n; int msduration = getDuration(note); SignalGeneratorType t = SignalGeneratorType.Triangle; if (note.waveform == Waveforms.Triangle) { t = SignalGeneratorType.Triangle; } else if (note.waveform == Waveforms.Sawtooth) { t = SignalGeneratorType.SawTooth; } else if (note.waveform == Waveforms.Pulse) { t = SignalGeneratorType.Square; } var signal = new NAudio.Wave.SampleProviders.SignalGenerator() { Gain = 0.8, Frequency = note.frequency, Type = t }.Take(TimeSpan.FromMilliseconds(msduration)); using (var wo = new WaveOutEvent()) { wo.Init(signal); wo.Play(); while (wo.PlaybackState == PlaybackState.Playing) { //Thread.Sleep(1); } } }
private SignalGeneratorType GetSignalGeneratorType(char waveCode) { SignalGeneratorType signalGeneratorType = SignalGeneratorType.Sin; if (waveCode == SQUARE_CODE) { signalGeneratorType = SignalGeneratorType.Square; } else if (waveCode == SAWTOOTH_CODE) { signalGeneratorType = SignalGeneratorType.SawTooth; } else if (waveCode == TRIANGLE_CODE) { signalGeneratorType = SignalGeneratorType.Triangle; } else if (waveCode == WHITE_CODE) { signalGeneratorType = SignalGeneratorType.White; } return(signalGeneratorType); }
public StreamGenerationResult GenerateStream(SignalGeneratorType signalType, int frequency, int durationInSeconds) { _signalGenerator.Frequency = frequency; _signalGenerator.Gain = 1; _signalGenerator.Type = signalType; var bufferSize = _signalGenerator.WaveFormat.AverageBytesPerSecond * durationInSeconds; var sampleCount = _signalGenerator.WaveFormat.SampleRate * durationInSeconds; var waveShortData = new short[bufferSize]; _signalGenerator.Read(waveShortData, bufferSize); var waveByteData = waveShortData.ToByteArray(); var waveStream = new WaveMemoryStream(_signalGenerator.WaveFormat); waveStream.SetData(waveByteData, sampleCount); return(new StreamGenerationResult { Amplitudes = waveShortData, WaveStream = waveStream.CreateStream() }); }
private void WaveTypeSimple_SelectionChanged(object sender, SelectionChangedEventArgs e) { SignalGeneratorType WaveType = new SignalGeneratorType(); switch (WaveTypeSimple.SelectedIndex) { case 0: WaveType = SignalGeneratorType.Sin; break; case 1: WaveType = SignalGeneratorType.Square; break; case 2: WaveType = SignalGeneratorType.Triangle; break; case 3: WaveType = SignalGeneratorType.SawTooth; break; case 4: WaveType = SignalGeneratorType.White; break; case 5: WaveType = SignalGeneratorType.Pink; break; case 6: WaveType = SignalGeneratorType.Sweep; break; } SimpleGenerator.Type = WaveType; }
private void Play_Click(object sender, RoutedEventArgs e) { switch (Generato_type.SelectedIndex) { case 0: SignalGeneratorType WaveType = new SignalGeneratorType(); switch (WaveTypeSimple.SelectedIndex) { case 0: WaveType = SignalGeneratorType.Sin; break; case 1: WaveType = SignalGeneratorType.Square; break; case 2: WaveType = SignalGeneratorType.Triangle; break; case 3: WaveType = SignalGeneratorType.SawTooth; break; case 4: WaveType = SignalGeneratorType.White; break; case 5: WaveType = SignalGeneratorType.Pink; break; case 6: WaveType = SignalGeneratorType.Sweep; break; } double Testtime = Convert.ToDouble(SimpleTime.Text.Trim()); double TestFrequency = Convert.ToDouble(SimpleFrequency.Text.Trim()); SimpleGenerator.Gain = SimpleGainSlider.Value; MainParam InputParams = new MainParam(WaveType, TestFrequency, Testtime); Thread myThread = new Thread(new ThreadStart(() => PlaySimpleMusic(InputParams))); myThread.Start(); double a; double d; double s; double r; if (Main_Gain_ADSR_Box.IsChecked == true) { Thread SimpleGainADSRThread = new Thread(new ThreadStart(() => SimpleGainADSR_Work(5, 3, 0.5, 2))); SimpleGainADSRThread.Start(); } if (Main_Frequency_ADSR_Box.IsChecked == true) { Thread SimpleFrequencyADSRThread = new Thread(new ThreadStart(() => PlaySimpleMusic(InputParams))); SimpleFrequencyADSRThread.Start(); } break; case 1: double[] notearr = new double[80]; int timequant = 5; notearr[0] = 440; notearr[1] = 320; notearr[2] = 200; notearr[3] = 150; notearr[4] = 240; notearr[5] = 370; NotetableGeneretor.Type = SignalGeneratorType.Sin; Thread myThread2 = new Thread(new ThreadStart(() => PlayTableMusic(notearr, timequant))); myThread2.Start(); break; case 2: break; } }
public async void PlaySound(MusicalNote[] musicalNotes, float gain, float time, SignalGeneratorType signalType) { var waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(44100, 2); var mix = new MixingSampleProvider(waveFormat); foreach (var I in musicalNotes) { var Signal = new SignalGenerator { Gain = gain, Frequency = I.Frequency, Type = signalType } .Take(TimeSpan.FromSeconds(time)); mix.AddMixerInput(Signal); } AudioOut.Stop(); AudioOut.Init(mix); AudioOut.Play(); while (AudioOut.PlaybackState == PlaybackState.Playing) { await Task.Delay((int)time * 1000); } }
private void ChangeWaveType(ref Oscillator oscillator, List <Button> buttons, SignalGeneratorType signalGeneratorType) { oscillator.WaveType = signalGeneratorType; ManageButtonsActivation(buttons, oscillator); }
public MainParam(SignalGeneratorType wave, double freq, double time) { WaveForm = wave; Frequency = freq; Time = time; }
public WaveTable(float frequency, float amplitude, SignalGeneratorType signalGeneratorType) { SetFrequency(frequency); SetAmplitude(amplitude); SetSignalGeneratorType(signalGeneratorType); // setting this will fill the table }