public WaveFormView2(Stream stream) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } InitializeComponent(); _Reader = new WaveReader(stream); for (short i = 0; i < _Reader.Format.Channels; ++i) { switch (_Reader.Format.BitsPerSample) { case 8: this.wavePlot.plt.PlotSignalConst(_Reader.GetChannelInt8(i).Select(x => (float)x).ToArray()); break; case 16: this.wavePlot.plt.PlotSignalConst(_Reader.GetChannelInt16(i).Select(x => (float)x).ToArray()); break; case 32: this.wavePlot.plt.PlotSignalConst(_Reader.GetChannelFloat(i).ToArray()); break; default: throw new NotSupportedException($"Invalid sample size: {_Reader.Format.BitsPerSample}."); } ; } this.wavePlot.MouseWheel += WavePlot_MouseWheel; this.wavePlot.plt.AxisAuto(horizontalMargin: 0, verticalMargin: 0); }
void ShowSynthCommandExecuted(object sender, ExecutedRoutedEventArgs args) { const int sampleRate = 44100; var func = _Parser.Compile(this.ExpressionText); var sample = Generate(sampleRate, 1.0, func); var delta = 1.0 / sampleRate; var reader = new WaveReader(sample); var fmt = reader.Format; var xSeries = Enumerable.Range(0, (int)reader.NumberOfSamples).Select(i => i * delta); var ySeries = reader.GetChannelFloat(0).Select(x => (double)x); channel1.Plot(xSeries, ySeries); }
public WAVSampler(Stream stream, short channel = 0) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } _waveReader = new WaveReader(stream); if (channel >= _waveReader.Format.Channels) { throw new ArgumentOutOfRangeException(nameof(channel), channel, $"Channel must be in range [0, {_waveReader.Format.Channels})."); } _channel = channel; _data = _waveReader.GetChannelFloat(channel).Select(f => (double)f).ToArray(); this.Length = _data.LongLength; }
public void Test32BitSingleChannelRoundTrip() { const int samplesPerSecond = 44_100; const double delta = 1.0 / samplesPerSecond; Func <double, double> func = (double t) => Math.Cos(2.0 * Math.PI * t); float[] data = new float[samplesPerSecond]; for (int i = 0; i < samplesPerSecond; ++i) { data[i] = (float)func(i * delta); } using var ms = new MemoryStream(); var writer = new WaveWriter(ms, samplesPerSecond); writer.Write(data.Length, data); ms.Position = 0; var reader = new WaveReader(ms); Assert.AreEqual(reader.Format.FormatTag, FormatTag.WAVE_FORMAT_IEEE_FLOAT); Assert.AreEqual(reader.Format.Channels, 1); Assert.AreEqual(reader.Format.SamplesPerSecond, samplesPerSecond); Assert.AreEqual(reader.Format.BitsPerSample, 32); var channel = reader.GetChannelFloat(0); int h = 0; var e = channel.GetEnumerator(); while (e.MoveNext()) { Assert.AreEqual(data[h++], e.Current); } }