/// <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); } }
/// <summary> /// Creates the reader stream, supporting all filetypes in the core NAudio library, /// and ensuring we are in PCM format /// </summary> /// <param name="fileName">File Name</param> private void CreateReaderStream(string fileName) { if (fileName.EndsWith(".wav", StringComparison.OrdinalIgnoreCase)) { readerStream = new WaveFileReader(fileName); if (readerStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm && readerStream.WaveFormat.Encoding != WaveFormatEncoding.IeeeFloat) { readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream); readerStream = new BlockAlignReductionStream(readerStream); } } else if (fileName.EndsWith(".mp3", StringComparison.OrdinalIgnoreCase)) { readerStream = new Mp3FileReader(fileName); } else if (fileName.EndsWith(".aiff")) { readerStream = new AiffFileReader(fileName); } }