//Обычная генерация public void PlaySimpleMusic(MainParam param) { SimpleGeneratorState = true; SimpleGenerator.Frequency = param.Frequency; SimpleGenerator.Type = param.WaveForm; if (param.Time != 0) { SimpleGenerator.Take(TimeSpan.FromSeconds(param.Time)); using (var wo = new WaveOutEvent()) { wo.Init(SimpleGenerator); wo.Play(); Thread.Sleep(Convert.ToInt32(param.Time) * 1000); wo.Stop(); } } else { using (var wo = new WaveOutEvent()) { wo.Init(SimpleGenerator); wo.Play(); while ((wo.PlaybackState == PlaybackState.Playing) || SimpleGeneratorState) { if (SimpleGeneratorState == false) { wo.Stop(); break; } } } } }
public override void Play(Note note, int length = 1000) { Thread thread = new Thread(() => { Debug.Log($"Playing {name}: {note} for {length}ms"); SignalGenerator signal = new SignalGenerator() { Gain = 0.2f, Frequency = note.Frequency, Type = SignalGeneratorType.Square, }; using (WaveOutEvent wo = new WaveOutEvent()) { wo.Init(signal.Take(TimeSpan.FromMilliseconds(length))); wo.Volume = 1.0f; wo.Play(); while (wo.PlaybackState == PlaybackState.Playing) { Thread.Sleep(50); } } }); thread.Start(); }
private static void Main(string[] args) { ISampleProvider provider1 = new SignalGenerator { Frequency = 1000.0f, Gain = 0.5f }; ISampleProvider provider2 = new SignalGenerator { Frequency = 1250.0f, Gain = 0.5f }; var takeDuration1 = TimeSpan.FromSeconds(5); // otherwise it would emit indefinitely var takeDuration2 = TimeSpan.FromSeconds(10); var sources = new[] { provider1.Take(takeDuration1), provider2.Take(takeDuration2) }; var mixingSampleProvider = new MixingSampleProvider(sources); var waveProvider = mixingSampleProvider.ToWaveProvider(); WaveFileWriter.CreateWaveFile("test.wav", waveProvider); }
private void PlayTonePairs(float[] frequencies) { float gain = 0.25f; try { ISampleProvider provider1 = new SignalGenerator { Frequency = frequencies[0], Gain = gain }; ISampleProvider provider2 = new SignalGenerator { Frequency = frequencies[1], Gain = gain }; ISampleProvider provider3 = new SignalGenerator { Frequency = frequencies[2], Gain = gain }; ISampleProvider provider4 = new SignalGenerator { Frequency = frequencies[3], Gain = gain }; ISampleProvider pause = new SilenceProvider(provider2.WaveFormat).ToSampleProvider().Take(TimeSpan.FromMilliseconds(200)); var duration = TimeSpan.FromMilliseconds(1000); var group1 = new[] { provider1.Take(duration), provider2.Take(duration) }; var group2 = new[] { provider3.Take(duration), provider4.Take(duration) }; var mixer1 = new MixingSampleProvider(group1); var mixer2 = new MixingSampleProvider(group2); mWaveOut = new WaveOut(); mWaveOut.Init(mixer1.FollowedBy(TimeSpan.FromMilliseconds(200), mixer2)); mWaveOut.Play(); } catch (Exception ex) { throw new ArgumentException(ex.Message); } }
public static async Task Main() { var generator = new SignalGenerator() { Gain = 0.05, Frequency = 1, Type = SignalGeneratorType.Sin }; var sineWave = generator.Take(TimeSpan.MaxValue); using var player = new WaveOutEvent(); player.Init(sineWave); player.Play(); await Task.Delay(-1); }
public void PlayTableMusic(double[] notecollection, int time) { NotetableGeneretor.Take(TimeSpan.FromSeconds(time * 5)); NotetableGeneretor.Gain = 0.05; { using (var wo = new WaveOutEvent()) { wo.Init(NotetableGeneretor); wo.Play(); for (int i = 0; i < 5; i++) { NotetableGeneretor.Frequency = notecollection[i]; Thread.Sleep(Convert.ToInt32(time) * 1000); } wo.Stop(); } } }
/// <summary> /// Plays sine wave sound with specified frequency and duration /// </summary> /// <param name="frequency">Sine wave frequency</param> /// <param name="duration">Sound play duration</param> public static void PlaySine(float frequency, float duration) { SignalGenerator generator = new SignalGenerator(44800, 2) { Frequency = frequency, Gain = 0.05, Type = SignalGeneratorType.Sin }; var samples = generator.Take(TimeSpan.FromSeconds(duration)); using (var wo = new WaveOutEvent()) { wo.Init(samples); wo.Play(); while (wo.PlaybackState == PlaybackState.Playing) { System.Threading.Thread.Sleep(10); } } }
/// <summary> /// Play a test tone for the given amount of time on the selected audio output devie. /// </summary> /// <param name="seconds">Test tone length in seconds.</param> /// <param name="PlaybackStopped">Event handler that will be called once the tone has stopped.</param> public void Play(int seconds, EventHandler <StoppedEventArgs> PlaybackStopped = null) { captureSamples.Clear(); capture = new WasapiCapture(inputAudioDevice); // define a low- & high pass filter to reduce background noise BiQuadFilter lowPassFilter = BiQuadFilter.LowPassFilter(capture.WaveFormat.SampleRate, 2100, 1); BiQuadFilter highPassFilter = BiQuadFilter.HighPassFilter(capture.WaveFormat.SampleRate, 1900, 1); // when data is recorded, apply the filters and store the sample capture.DataAvailable += new EventHandler <WaveInEventArgs>(delegate(object o, WaveInEventArgs e) { for (int i = 0; i < e.BytesRecorded; i += 4) { float sample = BitConverter.ToSingle(e.Buffer, i); sample = lowPassFilter.Transform(sample); sample = highPassFilter.Transform(sample); captureSamples.Add(sample); } }); // define output with a high latency (big buffer) of 250, since our camera detection uses so much CPU outWavePlayer = new WasapiOut(outputAudioDevice, AudioClientShareMode.Shared, false, 250); outWavePlayer.PlaybackStopped += new EventHandler <StoppedEventArgs>(delegate(object o, StoppedEventArgs e) { capture.Dispose(); outWavePlayer.Dispose(); }); if (PlaybackStopped != null) { outWavePlayer.PlaybackStopped += PlaybackStopped; } outWavePlayer.Init(sineSignalGenerator.Take(TimeSpan.FromSeconds(seconds))); outWavePlayer.Play(); capture.StartRecording(); }
private static void SaveAudioFile(List <Vec> points, string filename) { var width = points.Max(p => p.X) + 1; var height = points.Max(p => p.Y) + 1; var pixels = points.Select(p => p.Y * width + p.X).ToHashSet(); var sineZero = new SignalGenerator(44100, 1) { Gain = 0.2, Frequency = 500, Type = SignalGeneratorType.Sin }; var sineOne = new SignalGenerator(44100, 1) { Gain = 0.2, Frequency = 600, Type = SignalGeneratorType.Sin }; var tick = TimeSpan.FromSeconds(0.05); var messageSampleProviders = Enumerable.Range(0, width * height).Select(i => pixels.Contains(i) ? sineOne.Take(tick) : sineZero.Take(tick)); var combinedMessageSampleProvider = new ConcatenatingSampleProvider(messageSampleProviders); var backgroundNoiseSampleProvider = new SignalGenerator(44100, 1) { Gain = 0.1, Type = SignalGeneratorType.Pink }.Take(tick * width * height); var messageWithNoiseSampleProvider = new MixingSampleProvider(new List <ISampleProvider> { combinedMessageSampleProvider, backgroundNoiseSampleProvider }); var paddingSampleProvider = new SignalGenerator(44100, 1) { Gain = 0.1, Type = SignalGeneratorType.Pink }.Take(TimeSpan.FromSeconds(3)); var messageWithPaddingSampleProvider = new ConcatenatingSampleProvider(new List <ISampleProvider> { paddingSampleProvider, messageWithNoiseSampleProvider, paddingSampleProvider }); WaveFileWriter.CreateWaveFile16(filename, messageWithPaddingSampleProvider); }