//Обычная генерация

        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;
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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();
         }
     }
 }
Exemplo n.º 7
0
        /// <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);
                }
            }
        }
Exemplo n.º 8
0
        /// <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();
        }
Exemplo n.º 9
0
        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);
        }