Exemple #1
0
        public MainWindow()
        {
            _inputFile = new WavFile($"../../../../Samples/{InputSample}");

            InitializeComponent();

            _soundMesh = new SoundMesh(MeshRows, MeshCols, 6);

            _speaker = new Speaker(new FrequencyGenerator(220), _soundMesh, 1);
            //_speaker = new Speaker(new WavGenerator(_inputFile), _soundMesh, 1);

            _soundMesh.AddSpeaker(_speaker);

            _microphone = new Microphone(_soundMesh, MeshRows / 2, MeshCols / 4);
            _soundMesh.AddMicrophone(_microphone);

            _imageBitmap = new Bitmap(ScreenWidth, ScreenHeight, PixelFormat.Format32bppArgb);
            _backBuffer  = new WriteableBitmap(ScreenWidth, ScreenHeight, 96, 96, PixelFormats.Bgra32, null);

            BackBuffer.Source = _backBuffer;

            _isActive     = true;
            _updateThread = new Thread(GameLoop);
            _updateThread.Start();
        }
Exemple #2
0
        public void SaveRecording(string outputPath, uint sampleRate)
        {
            double maxAmplitude = 0;

            // Find the max amplitude
            foreach (double amplitude in _amplitudes)
            {
                if (Math.Abs(amplitude) > maxAmplitude)
                {
                    maxAmplitude = Math.Abs(amplitude);
                }
            }

            // Normalize all amplitudes and generate samples
            var normalizedAmplitudes = new List <float>();

            foreach (double amplitude in _amplitudes)
            {
                float normalizedAmplitude = (float)(amplitude / maxAmplitude);

                normalizedAmplitudes.Add(normalizedAmplitude);
            }

            var waveFile = new WavFile
            {
                SampleRate    = sampleRate,
                ChannelCount  = 1,
                BitsPerSample = 32,
                Samples       = normalizedAmplitudes.ToArray()
            };

            waveFile.Save(outputPath);
        }