示例#1
0
        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, );
            }
        }
示例#3
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);
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
 public override int Read(byte[] buffer, int offset, int count)
 {
     return(sampler.Read(buffer, offset, count));
 }