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(); }
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); }