public static Stream Convert(Stream inputStream) { using (var fileReader = new WaveFileReader(inputStream)) { Pcm8BitToSampleProvider sampleProvider = new Pcm8BitToSampleProvider(fileReader); SampleToWaveProvider waveProvider = new SampleToWaveProvider(sampleProvider); var outStream = new MemoryStream(); using (var fileWriter = new LameMP3FileWriter(outStream, waveProvider.WaveFormat, 24)) { int buff_length = 1024 * 1024; var buff = new byte[buff_length]; int position = 0; int length = waveProvider.Read(buff, position, buff_length); while (length > 0) { position += length; fileWriter.Write(buff, (int)fileWriter.Position, length); length = waveProvider.Read(buff, position, buff_length); } fileWriter.Flush(); return(outStream); } } }
public void CanDownsampleAnMp3File() { string testFile = @"D:\Audio\Music\Coldplay\Mylo Xyloto\03 - Paradise.mp3"; if (!File.Exists(testFile)) { Assert.Ignore(testFile); } string outFile = @"d:\test22.wav"; using (var reader = new AudioFileReader(testFile)) { // downsample to 22kHz var resampler = new WdlResamplingSampleProvider(reader, 22050); var wp = new SampleToWaveProvider(resampler); using (var writer = new WaveFileWriter(outFile, wp.WaveFormat)) { byte[] b = new byte[wp.WaveFormat.AverageBytesPerSecond]; while (true) { int read = wp.Read(b, 0, b.Length); if (read > 0) { writer.Write(b, 0, read); } else { break; } } } //WaveFileWriter.CreateWaveFile(outFile, ); } }
/// <summary> /// 使用指定的音频流绘制波形图 /// </summary> /// <param name="stream"></param> /// <returns></returns> public OptReturn Draw(WaveStream stream) { OptReturn optReturn = new OptReturn(); optReturn.Result = true; optReturn.Code = Defines.RET_SUCCESS; try { WaveStream reader = stream; reader.Position = 0; if (reader.WaveFormat.Encoding != WaveFormatEncoding.Pcm && reader.WaveFormat.Encoding != WaveFormatEncoding.IeeeFloat) { reader = WaveFormatConversionStream.CreatePcmStream(reader); reader = new BlockAlignReductionStream(reader); } InitDraw(); var waveChannel = new SampleChannel(reader, true); int samples = (int)(reader.TotalTime.TotalSeconds) * reader.WaveFormat.SampleRate / mPngWidth; var postVolumeMeter = new MeteringSampleProvider(waveChannel, samples); postVolumeMeter.StreamVolume += postVolumeMeter_StreamVolume; var waveProvider = new SampleToWaveProvider(postVolumeMeter); while (true) { byte[] buffer = new byte[waveProvider.WaveFormat.AverageBytesPerSecond]; int readcount = waveProvider.Read(buffer, 0, waveProvider.WaveFormat.AverageBytesPerSecond); if (readcount <= 0) { break; } } stream.Position = 0; if (mIsSaveFile) { return(GenerateImageFile()); } Bitmap[] bitmaps = new Bitmap[2]; bitmaps[0] = mBitmap; bitmaps[1] = mBitmap1; optReturn.Data = bitmaps; return(optReturn); } catch (Exception ex) { optReturn.Result = false; optReturn.Code = Defines.RET_FAIL; optReturn.Message = ex.Message; return(optReturn); } }
public static byte[] Generate(this WaveFormat waveFormat, TimeSpan interval, SignalGeneratorType type = SignalGeneratorType.Sin, double frequency = 1.0) { var sampleProvider = new SignalGenerator(waveFormat.SampleRate, waveFormat.Channels) { Frequency = frequency, Type = type }; var waveProvider = new SampleToWaveProvider(sampleProvider); var numBytes = (int)(interval.TotalSeconds * waveFormat.AverageBytesPerSecond); var data = new byte[numBytes]; waveProvider.Read(data, 0, data.Length); return(data); }
public static byte[] Generate(this TimeSpan interval, int rate = 8000, int channels = 1, SignalGeneratorType type = SignalGeneratorType.Sin, double frequency = 1.0) { var waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(rate, channels); var sampleProvider = new SignalGenerator(rate, channels) { Frequency = frequency, Type = type }; var waveProvider = new SampleToWaveProvider(sampleProvider); var numBytes = (int)(interval.TotalSeconds * waveFormat.AverageBytesPerSecond); var data = new byte[numBytes]; waveProvider.Read(data, 0, data.Length); return(data); }
public override int Read(byte[] buffer, int offset, int count) { return(sampler.Read(buffer, offset, count)); }