示例#1
0
        /// <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);
            }
        }
示例#2
0
 /// <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);
     }
 }