Beispiel #1
0
        public byte[] Encode()
        {
            int ms = 20;
            int channels = 2;
            int sampleRate = 48000;

            int blockSize = 48 * 2 * channels * ms; //the size per each frame to encode
            byte[] buffer = new byte[blockSize]; //a nicely sized pcm buffer to work with.
            var outFormat = new WaveFormat(sampleRate, 16, channels);
            
            if(__filename.EndsWith(".mp3"))
            {
                using (var mp3Reader = new Mp3FileReader(__filename))
                {
                    using (var resampler = new WaveFormatConversionStream(outFormat, mp3Reader))
                    {
                        int byteCount;
                        using (BinaryWriter bw = new BinaryWriter(new MemoryStream()))
                        {
                            while ((byteCount = resampler.Read(buffer, 0, blockSize)) > 0)
                            {
                                //now to encode
                                byte[] opusOutput = new byte[buffer.Length]; //extra bytes but that's okay
                                int opusEncoded = encoder.EncodeFrame(buffer, 0, opusOutput);
                                bw.Write((ushort)opusEncoded);
                                bw.Write(opusOutput, 0, opusEncoded);
                            }
                            MemoryStream baseStream = bw.BaseStream as MemoryStream;
                            return baseStream.ToArray();
                        }
                    }
                }
            }
            return null;
        }
Beispiel #2
0
        public TestMix()
        {
            //WaveStream str1 = new Mp3FileReader("C:\\Users\\mtemkine\\Desktop\\snd\\guitar1.mp3");
            //WaveStream str2 = new Mp3FileReader("C:\\Users\\mtemkine\\Desktop\\snd\\molecules.mp3");
            //WaveMixerStream32 mix = new WaveMixerStream32(new [] {str1, str2}, false);

            var background = new Mp3FileReader("C:\\Users\\mtemkine\\Desktop\\snd\\ferriss.mp3");
            var message = new Mp3FileReader("C:\\Users\\mtemkine\\Desktop\\snd\\guitar1.mp3");

            var mixer = new WaveMixerStream32();
            mixer.AutoStop = true;

            var messageOffset = background.TotalTime;
            var messageOffsetted = new WaveOffsetStream(message, TimeSpan.FromSeconds(1.5), TimeSpan.Zero, message.TotalTime.Subtract(TimeSpan.FromSeconds(1)));

            var background32 = new WaveChannel32(background);
            background32.PadWithZeroes = false;
            background32.Volume = 0.9f;

            var message32 = new WaveChannel32(messageOffsetted);
            message32.PadWithZeroes = false;
            message32.Volume = 0.7f;

            var s1 = new RawSourceWaveStream(background32, new WaveFormat(8000, 16, 1));
            var s2 = new RawSourceWaveStream(message32, new WaveFormat(8000, 16, 1));
            WaveFormat targetFormat = WaveFormat.CreateIeeeFloatWaveFormat(128, 2);
            var ss1 = new WaveFormatConversionStream(targetFormat, background32);
            //var c = new WaveFormatConversionStream(WaveFormat.CreateALawFormat(8000, 1), background32);
            //var stream_background32 = new WaveFormatConversionStream(new WaveFormat(256, 32, 2), background32);
            //var stream_message32 = new WaveFormatConversionStream(new WaveFormat(256, 32, 2), message32);
            mixer.AddInputStream(s1);
            mixer.AddInputStream(s2);

            WaveFileWriter.CreateWaveFile("mycomposed.wav", new Wave32To16Stream(mixer));
        }
Beispiel #3
0
        public TestSpeed()
        {
            //WaveStream str1 = new Mp3FileReader("C:\\Users\\mtemkine\\Desktop\\snd\\guitar1.mp3");
            //WaveStream str2 = new Mp3FileReader("C:\\Users\\mtemkine\\Desktop\\snd\\molecules.mp3");
            //WaveMixerStream32 mix = new WaveMixerStream32(new [] {str1, str2}, false);

            var mp3Filename = @"C:\WS\jmerde\trunk\_VisualStudio\AudioBooker\IlyaFranker\Content\snd\ilyafrank_open.mp3";

            WavComposite writer = new WavComposite("../../wawa.wav");

            writer.AppendAllOfFile(mp3Filename, null);
            writer.AppendAllOfFile(mp3Filename, 2);
            writer.AppendAllOfFile(mp3Filename, 0.5);
            writer.Close();

            //format = readerWave.WaveFormat;
            //writer = new WaveFileWriter(destFilename, format);
            //var wave = new Mp3FileReader(mp3Filename);

            using (var reader = new Mp3FileReader(mp3Filename))
            using (var pcmStream = WaveFormatConversionStream.CreatePcmStream(reader))
            using (var downsampledStream = new WaveFormatConversionStream(new WaveFormat(
                (int)(pcmStream.WaveFormat.SampleRate * 1.5),
                reader.WaveFormat.BitsPerSample,
                reader.WaveFormat.Channels), pcmStream))
            {

                WaveFileWriter.CreateWaveFile("../../xello.wav", downsampledStream);
            }
        }
Beispiel #4
0
 public void CanEncodeGsm()
 {            
     using (var reader = CreatePcmTestStream())
     {
         using (var gsm = new WaveFormatConversionStream(new Gsm610WaveFormat(), reader))
         {
             WaveFileWriter.CreateWaveFile(@"C:\Users\Mark\Code\CodePlex\gsm.wav", gsm);
         }
     }
 }
Beispiel #5
0
 private void changeSampleRate(String fileName)
 {
     float sampleRateMultiplier;
     using (var reader = new WaveFileReader(fileName))
     {
         var newFormat = new WaveFormat(Convert.ToInt32(8000*getSampleRateMultiplier()), 16, 1); //ex, 8000 is the base sample rate
         using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
         {
             WaveFileWriter.CreateWaveFile("output.wav", conversionStream);
         }
     }
 }
Beispiel #6
0
		public PlaywavAction(String file)
		{
			_file = file;
						
			using (var reader = CreateWavStream(_file))
			{
				var newFormat = new WaveFormat(48000, 16, 1);
				using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
				{
					WaveFileWriter.CreateWaveFile(_file + ".sampled", conversionStream);
				}
			}
		}
Beispiel #7
0
        private static WaveStream CreateInputStream(string fileName)
        {
            WaveChannel32 inputStream;
            WaveStream readerStream = null;

            if (fileName.EndsWith(".wav"))
            {
                readerStream = new WaveFileReader(fileName);
            }
            //else if (fileName.EndsWith(".wma"))
            //{
            //    //                readerStream = new WMAFileReader2(fileName);

            //    MemoryStream memoryStream = new MemoryStream();
            //    using (FileStream infile = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            //    {
            //        while (infile.Position < infile.Length)
            //        {
            //            byte data = (byte)infile.ReadByte();
            //            memoryStream.WriteByte(data);
            //        }
            //    }
            //    memoryStream.Position = 0;
            //    readerStream = new WMAFileReader2(memoryStream);
            //}
            else
            {
                throw new InvalidOperationException("Unsupported extension");
            }

            // Provide PCM conversion if needed
            if (readerStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
            {
                readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream);
                readerStream = new BlockAlignReductionStream(readerStream);
            }

            // Provide conversion to 16 bits if needed
            if (readerStream.WaveFormat.BitsPerSample != 16)
            {
                var format = new WaveFormat(readerStream.WaveFormat.SampleRate,
                16, readerStream.WaveFormat.Channels);
                readerStream = new WaveFormatConversionStream(format, readerStream);
            }

            inputStream = new WaveChannel32(readerStream);

            return inputStream;
        }
Beispiel #8
0
        private static void SynthToCam(string fileName, CameraWindow cw)
        {
            using (var waveStream = new MemoryStream())
            {

                //write some silence to the stream to allow camera to initialise properly
                var silence = new byte[1 * 22050];
                waveStream.Write(silence, 0, silence.Count());

                //read in and convert the wave stream into our format
                using (var reader = new WaveFileReader(fileName))
                {
                    var newFormat = new WaveFormat(11025, 16, 1);
                    byte[] buff = new byte[22050];

                    using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
                    {
                        do
                        {
                            int i = conversionStream.Read(buff, 0, 22050);
                            waveStream.Write(buff, 0, i);
                            if (i < 22050)
                                break;
                        } while (true);
                    }
                }

                //write some silence to the stream to allow camera to end properly
                waveStream.Write(silence, 0, silence.Count());

                waveStream.Seek(0, SeekOrigin.Begin);

                var ds = new DirectStream(waveStream) { RecordingFormat = new WaveFormat(11025, 16, 1) };
                var talkTarget = TalkHelper.GetTalkTarget(cw.Camobject, ds);

                ds.Start();
                talkTarget.Start();
                while (ds.IsRunning)
                {
                    Thread.Sleep(100);
                }
                ds.Stop();
                talkTarget.Stop();
                talkTarget = null;
                ds = null;

                waveStream.Close();
            }
        }
Beispiel #9
0
 public void CanEncodeGsm()
 {
     var testFile = @"C:\Users\Mark\Code\CodePlex\AudioTestFiles\WAV\PCM 16 bit\pcm mono 16 bit 8kHz.wav";
     if (!File.Exists(testFile))
     {
         Assert.Ignore("Missing test file");
     }
     using (var reader = new WaveFileReader(testFile))
     {
         using (var gsm = new WaveFormatConversionStream(new Gsm610WaveFormat(), reader))
         {
             WaveFileWriter.CreateWaveFile(@"C:\Users\Mark\Code\CodePlex\gsm.wav", gsm);
         }
     }
 }
        private void AudioSourceDataAvailable(object sender, DataAvailableEventArgs e)
        {
            try
            {
                lock (_obj)
                {
                    if (_bTalking && _avstream != null)
                    {
                        byte[] bSrc = e.RawData;
                        int totBytes = bSrc.Length;
                        int j = -1;
                        if (!_audioSource.RecordingFormat.Equals(_waveFormat))
                        {
                            var ws = new TalkHelperStream(bSrc, totBytes, _audioSource.RecordingFormat);

                            var bDst = new byte[44100];
                            totBytes = 0;
                            using (var helpStm = new WaveFormatConversionStream(_waveFormat, ws))
                            {
                                while (j != 0)
                                {
                                    j = helpStm.Read(bDst, totBytes, 10000);
                                    totBytes += j;
                                }
                            }
                            bSrc = bDst;

                        }
                        var enc = new byte[totBytes / 2];
                        ALawEncoder.ALawEncode(bSrc, totBytes, enc);

                        try
                        {
                            _avstream.Write(enc, 0, enc.Length);
                        }
                        catch (SocketException)
                        {
                            StopTalk();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MainForm.LogExceptionToFile(ex,"Talk (Android)");
                StopTalk();
            }
        }
Beispiel #11
0
        static Task DoVoice(DiscordVoiceClient vc, string file)
        {
            return Task.Run(() =>
            {
                try
                {
                    int ms = 20;
                    int channels = 2;
                    int sampleRate = 48000;

                    int blockSize = 48 * 2 * channels * ms; //sample rate * 2 * channels * milliseconds
                    byte[] buffer = new byte[blockSize];
                    var outFormat = new WaveFormat(sampleRate, 16, channels);

                    vc.SetSpeaking(true);
                    using (var mp3Reader = new Mp3FileReader(file))
                    {
                        using (var resampler = new WaveFormatConversionStream(outFormat, mp3Reader))
                        {
                            int byteCount;
                            while ((byteCount = resampler.Read(buffer, 0, blockSize)) > 0)
                            {
                                if (vc.Connected)
                                {
                                    //sequence = await vc.SendSmallOpusAudioPacket(buffer, sampleRate, byteCount, sequence).ConfigureAwait(false);
                                    vc.SendVoice(buffer);
                                    //sequence = vc.SendSmallOpusAudioPacket(buffer, 48000, buffer.Length, sequence);
                                    //Task.Delay(19).Wait();
                                }
                                else
                                    break;
                            }
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            Console.WriteLine("Voice finished enqueuing");
                            Console.ForegroundColor = ConsoleColor.White;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            });
        }
Beispiel #12
0
        /// <summary>
        /// Converts a WMA file to a WAV stream
        /// </summary>
        /// <param name="outputStream">Stream to store the converted wav.</param>
        /// <param name="filePath">Path to a .wma file to convert</param>
        /// <returns>The WaveFormat object of the converted wav</returns>
        private static WaveFormat wmaToWav(string pathToWma, Stream outputStream, int sampleRate, int bitDepth, int numChannels)
        {
            if (!Path.GetExtension(pathToWma).ToLowerInvariant().Contains("wma"))
                throw new ArgumentException("Must be a .wma file!");

            using (var reader = new WMAFileReader(pathToWma))
            {
                var targetFormat = new NAudio.Wave.WaveFormat(sampleRate, bitDepth, numChannels);
                var pcmStream = new WaveFormatConversionStream(targetFormat, reader);
                var buffer = new byte[pcmStream.Length];
                pcmStream.Read(buffer, 0, (int)pcmStream.Length);
                outputStream.Write(buffer, 0, buffer.Length);
                outputStream.Position = 0;

                pcmStream.Close();

                return targetFormat;
            }
        }
Beispiel #13
0
        public static void ComputeAllFeatures(string wavpath, string resultpath, System.Windows.Forms.TextBox progress)
        {
            int aa=0;
            StreamWriter writer = new StreamWriter("d:\\features.txt");
            for (int i = 1; i <= 674; i++)
            {

                WaveStream readerStream = new WaveFileReader(@"D:\Z projekti\Emocije\code\sustav(pun)\wavs\" + i.ToString()+ ".wav");
                WaveFormat format = new WaveFormat(readerStream.WaveFormat.SampleRate, 8, 1);
                readerStream = new WaveFormatConversionStream(format, readerStream);

                int length = (int)readerStream.Length;
                byte[] buffer = new byte[length];
                readerStream.Read(buffer, 0, length);

                Classifier = new Classifiers.GoodClassifier();
                Classifier.SamplingFrequency = 11025;
                Classifier.SubWindowLength = 256; // 44100 [samples per second] * 0.025 [25 milisecond interval]
                Classifier.SubWindowShift = 165; // 44100 [samples per second] * 0.015 [15 milisecond interval]

                Classifier.SuperWindowLength =  (int)Math.Floor((double)length / (Classifier.SubWindowShift))-10; // 44100 [samples per second] / 1102 [SubFeatures per second] * 2 [seconds]
                Classifier.SuperWindowShift = 5; // 44100 [samples per second] / 1102 [SubFeatures per second] * 1 [seconds]

                Classifier.ClassificationComplete += new AbstractClassifier.ClassifComplete(Classifier_ClassificationComplete);
                Classifier.SubFeaturesComputed += new AbstractClassifier.SubFeaturesComp(Classifier_SubFeaturesComputed);
                Classifier.SuperFeaturesComputed += new AbstractClassifier.SuperFeaturesComp(Classifier_SuperFeaturesComputed);
                Classifier.EnqueueData(buffer);

                System.Windows.Forms.Application.DoEvents();
                string line = "";
                foreach (double d in Classifier.AllFeatures.First())
                {
                    line += d.ToString(CultureInfo.InvariantCulture) + ",";
                }
                line = line.TrimEnd(',');
                line += "\r\n";
                writer.WriteLine(line);
                writer.Flush();
                progress.Text = i.ToString();
            }
            writer.Flush();
        }
Beispiel #14
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);
     }
 }
        public void AddSound(string FileName)
        {
            FileInfo file = new FileInfo (Path.Combine(Environment.CurrentDirectory,
                Path.Combine(this.context.Configuration[EngineConfigurationName.SoundsRoot], FileName)));

            if(!file.Exists)
                return;

            WaveStream readerstream = new WaveFileReader (file.FullName);

            readerstream = new BlockAlignReductionStream (readerstream);

            if(readerstream.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
            {
                readerstream = WaveFormatConversionStream.CreatePcmStream (readerstream);
            }

            if(readerstream.WaveFormat.BitsPerSample != 16)
            {
                var format = new WaveFormat (readerstream.WaveFormat.SampleRate, 16,
                    readerstream.WaveFormat.Channels);

                readerstream = new WaveFormatConversionStream (format, readerstream);
            }

            byte[] data = new byte[readerstream.Length];

            int position = 0;
            while(true)
            {
                int result = readerstream.ReadByte ();
                if(result == -1)
                    break;

                data[position] = Convert.ToByte (result);
                position++;
            }

            this.AddSound (file.Name, new AudioSource(data, (uint)readerstream.WaveFormat.SampleRate, 1.0f, readerstream.WaveFormat.Channels));
        }
Beispiel #16
0
        // TODO: make this shit more presice
        private void WritePieceOfSomeFile_stream(WaveStream readerWave, double secondIn, double secondOut, double? speedChange)
        {
            InitWriterIfNull(readerWave);
            speedChange = speedChange ?? 1;
            using (var pcmStream = WaveFormatConversionStream.CreatePcmStream(readerWave))
            using (var downsampledStream = new WaveFormatConversionStream(new WaveFormat(
                (int)(format.SampleRate / speedChange),
                format.BitsPerSample,
                format.Channels), pcmStream))
            {
                var sss = pcmStream;

                const int readThisManyBytes = 4000; // 16384;
                byte[] buffer = new byte[readThisManyBytes];
                int bufferL = 0;

                while (sss.Position < sss.Length) {
                    bufferL = sss.Read(buffer, 0, readThisManyBytes);
                    if (sss.CurrentTime.TotalSeconds >= secondIn) {
                        writer.Write(buffer, 0, bufferL);
                    }
                    if (sss.CurrentTime.TotalSeconds >= secondOut)
                        break;
                }
                //while (readerWave.Position < readerWave.Length) {
                //    bufferL = readerWave.Read(buffer, 0, readThisManyBytes);
                //    //TODO: volume chart trimming
                //    //for (int i = 0; i < read / 4; i++) {
                //    //    chart1.Series["wave"].Points.Add(BitConverter.ToSingle(buffer, i * 4));
                //    //}
                //    //Console.WriteLine("{0} {1}", readerWave.CurrentTime, (readerWave.CurrentTime.TotalSeconds >= secondIn) ? "xxxxxxxxxx" : "");
                //    if (readerWave.CurrentTime.TotalSeconds >= secondIn) {
                //        //writer.Write(frame.RawData, 0, frame.RawData.Length);
                //        writer.Write(buffer, 0, bufferL);
                //    }
                //    if (readerWave.CurrentTime.TotalSeconds >= secondOut)
                //        break;
                //}
            }
        }
        private static WaveStream CreateInputStream(string fileName)
        {
            WaveChannel32 inputStream;
            WaveStream readerStream = null;

            if (fileName.EndsWith(".wav"))
            {
                readerStream = new WaveFileReader(fileName);
            }
            else if (fileName.EndsWith(".flac"))
            {
                readerStream = new FLACFileReader(fileName);
            }
            else
            {
                throw new InvalidOperationException("Unsupported extension");
            }

            // Provide PCM conversion if needed
            if (readerStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
            {
                readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream);
                readerStream = new BlockAlignReductionStream(readerStream);
            }

            // Provide conversion to 16 bits if needed
            if (readerStream.WaveFormat.BitsPerSample != 16)
            {
                var format = new WaveFormat(readerStream.WaveFormat.SampleRate,
                16, readerStream.WaveFormat.Channels);
                readerStream = new WaveFormatConversionStream(format, readerStream);
            }

            inputStream = new WaveChannel32(readerStream);

            return inputStream;
        }
        public void StartTalk()
        {
            string sPost = "POST /axis-cgi/audio/transmit.cgi HTTP/1.0\r\n";
            //sPost += "Content-Type: multipart/x-mixed-replace; boundary=--myboundary\r\n";
            sPost += "Content-Type: audio/basic\r\n";
            sPost += "Content-Length: 9999999\r\n";
            sPost += "Connection: Keep-Alive\r\n";  // Have read about problems with .NET keep-alive but this seems to work ok
            sPost += "Cache-Control: no-cache\r\n";

            string usernamePassword = _username + ":" + _password;
            sPost += "Authorization: Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)) + "\r\n\r\n";

            _tcpClient = new TcpClient(_cameraIP, _cameraPort);
            _avStream = _tcpClient.GetStream();

            byte[] hdr = Encoding.ASCII.GetBytes(sPost);
            _avStream.Write(hdr, 0, hdr.Length);

            _waveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(_localAudioDevices.GetCurWaveInDeviceNumber()).Channels);
            _memStream = new MemoryStream();
            _waveStream = new RawSourceWaveInStream(_memStream, _waveFormat);

            // Downsampler converts from 44KHz to 8KHz
            _downsamplerStream = new WaveFormatConversionStream(new WaveFormat(8000, _waveFormat.BitsPerSample, 1), _waveStream);

            // MuLaw coder converts PCM to mulaw
            WaveFormat muLaw = WaveFormat.CreateMuLawFormat(8000, 1);
            _converterStream = new WaveFormatConversionStream(muLaw, _downsamplerStream);

            // Start microphone
            OpenWaveInDevice();

            logger.Info("Talk Starting");

            _localAudioDevices.StartingTalking();

            _bTalking = true;
        }
Beispiel #19
0
        private void AudioSourceDataAvailable(object sender, DataAvailableEventArgs e)
        {
            try
            {
                lock (_obj)
                {
                    if (_bTalking && _avstream != null)
                    {
                        byte[] bSrc = e.RawData;
                        int totBytes = bSrc.Length;
                        int j = -1;
                        if (!_audioSource.RecordingFormat.Equals(_waveFormat))
                        {
                            using (var ws = new TalkHelperStream(bSrc, totBytes, _audioSource.RecordingFormat))
                            {

                                var bDst = new byte[44100];
                                totBytes = 0;
                                using (var helpStm = new WaveFormatConversionStream(_waveFormat, ws))
                                {
                                    while (j != 0)
                                    {
                                        j = helpStm.Read(bDst, totBytes, 10000);
                                        totBytes += j;
                                    }
                                    helpStm.Close();
                                }
                                ws.Close();
                                bSrc = bDst;
                            }
                        }
                        var enc = _muLawCodec.Encode(bSrc, 0, totBytes);
                        //ALawEncoder.ALawEncode(bSrc, totBytes, enc);

                        Buffer.BlockCopy(enc, 0, _talkBuffer, _talkDatalen, enc.Length);
                        _talkDatalen += enc.Length;

                        j = 0;
                        try
                        {
                            while (j + 240 < _talkDatalen)
                            {
                                //need to write out in 240 byte packets
                                var pkt = new byte[240];
                                Buffer.BlockCopy(_talkBuffer, j, pkt, 0, 240);

                               // _avstream.Write(_hdr, 0, _hdr.Length);
                                _avstream.Write(pkt, 0, 240);
                                j += 240;
                            }
                            if (j < _talkDatalen)
                            {
                                Buffer.BlockCopy(_talkBuffer, j, _talkBuffer, 0, _talkDatalen - j);
                                _talkDatalen = _talkDatalen - j;
                            }
                        }
                        catch (SocketException)
                        {
                            StopTalk();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MainForm.LogExceptionToFile(ex);
                StopTalk();
            }
        }
Beispiel #20
0
        private void GetAudioSamples()
        {
            ////var pcmStream = WaveFormatConversionStream.CreatePcmStream(new Mp3FileReader("whitelight.mp3"));
            //var pcmStream = new WaveFileReader("whitelight-ulaw.wav");
            //byte[] sampleBuffer = new byte[160];
            //int bytesRead = pcmStream.Read(sampleBuffer, 0, 160);
            ////int bytesRead = m_rawRTPPayloadReader.BaseStream.Read(sampleBuffer, 0, 160);
            //while (bytesRead > 0)
            //{
            //    m_rtpChannel.AddSample(sampleBuffer);
            //    bytesRead = pcmStream.Read(sampleBuffer, 0, 160);
            //    //bytesRead = m_rawRTPPayloadReader.BaseStream.Read(sampleBuffer, 0, 160);
            //}

            var pcmFormat = new WaveFormat(8000, 16, 1);
            var ulawFormat = WaveFormat.CreateMuLawFormat(8000, 1);

            using (WaveFormatConversionStream pcmStm = new WaveFormatConversionStream(pcmFormat, new Mp3FileReader("whitelight.mp3")))
            {
                using (WaveFormatConversionStream ulawStm = new WaveFormatConversionStream(ulawFormat, pcmStm))
                {
                    byte[] buffer = new byte[160];
                    int bytesRead = ulawStm.Read(buffer, 0, 160);

                    while (bytesRead > 0)
                    {
                        byte[] sample = new byte[bytesRead];
                        Array.Copy(buffer, sample, bytesRead);
                        m_rtpChannel.Send(sample, 20);

                        bytesRead = ulawStm.Read(buffer, 0, 160);
                    }
                }
            }

            logger.Debug("Finished adding audio samples.");
        }
Beispiel #21
0
        private static byte[] ReadWavDataIntoMonoPcm(string audioInputFile, int samepleRate)
        {
            using (var reader = new WaveFileReader(audioInputFile))
            {
                var newFormat = new WaveFormat(samepleRate, 16, 1);
                using (var conversationStream = new WaveFormatConversionStream(newFormat, reader))
                using (var pcmStream = WaveFormatConversionStream.CreatePcmStream(conversationStream))
                {
                    var buffer = new byte[pcmStream.Length];
                    var bytesRead = pcmStream.Read(buffer, 0, buffer.Length);

                    if (bytesRead != buffer.Length)
                    {
                        var outputBuffer = new byte[bytesRead];
                        Buffer.BlockCopy(buffer, 0, outputBuffer, 0, bytesRead);
                        return outputBuffer;
                    }

                    return buffer;
                }
            }
        }
Beispiel #22
0
 private void EncodeFile()
 {
     string inputFileName = GetInputFileName("Select PCM WAV File to Encode");
     if (inputFileName == null)
         return;
     using (var reader = new WaveFileReader(inputFileName))
     {
         if (reader.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
         {
             MessageBox.Show("Please select a PCM WAV file to encode");
             return;
         }
         WaveFormat targetFormat = GetTargetFormat(reader.WaveFormat);
         if (targetFormat == null)
         {
             return;
         }
         string outputFileName = GetOutputFileName("Select Ouput File Name");
         if (outputFileName == null)
         {
             return;
         }
         using (WaveStream convertedStream = new WaveFormatConversionStream(targetFormat, reader))
         {
             WaveFileWriter.CreateWaveFile(outputFileName, convertedStream);
         }
         if (checkBoxAutoLaunchConvertedFile.Checked)
         {
             System.Diagnostics.Process.Start(outputFileName);
         }
     }
 }
Beispiel #23
0
 private void AppendAllOfFile_stream(WaveStream readerWave, double? speedChange)
 {
     InitWriterIfNull(readerWave);
     speedChange = speedChange ?? 1;
     using (var pcmStream = WaveFormatConversionStream.CreatePcmStream(readerWave))
     using (var downsampledStream = new WaveFormatConversionStream(new WaveFormat(
         (int)(format.SampleRate / speedChange),
         format.BitsPerSample,
         format.Channels), pcmStream)) 
     {
         const int readThisManyBytes = 16384;
         byte[] buffer = new byte[readThisManyBytes];
         int bufferL = 0;
         //ByteBufferCompressor bbbb = new ByteBufferCompressor(readThisManyBytes, speedChange);
         while (downsampledStream.Position < downsampledStream.Length) {
             bufferL = downsampledStream.Read(buffer, 0, readThisManyBytes);
             if (bufferL == 0)
                 break;
             writer.Write(buffer, 0, bufferL);
             //var buffer2L = bbbb.Transform(buffer, bufferL);
             //writer.Write(bbbb.GetNewBuffer(), 0, buffer2L);
         }
     }
 }
Beispiel #24
0
        public void AudioDeviceDataAvailable(object sender, DataAvailableEventArgs e)
        {
            if (Levels == null || IsReconnect)
                return;
            try
            {
                lock (_lockobject)
                {
                    Helper.FrameAction fa;
                    if (!Recording)
                    {
                        var dt = Helper.Now.AddSeconds(0 - Micobject.settings.buffer);
                        while (Buffer.Count > 0)
                        {
                            if (Buffer.TryPeek(out fa))
                            {
                                if (fa.TimeStamp < dt)
                                {
                                    if (Buffer.TryDequeue(out fa))
                                        fa.Nullify();
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }
                    fa = new Helper.FrameAction(e.RawData, e.BytesRecorded, Levels.Max(), Helper.Now);
                    Buffer.Enqueue(fa);

                }

                if (Micobject.settings.needsupdate)
                {
                    Micobject.settings.samples = AudioSource.RecordingFormat.SampleRate;
                    Micobject.settings.channels = AudioSource.RecordingFormat.Channels;
                    Micobject.settings.needsupdate = false;
                }

                OutSockets.RemoveAll(p => p.TcpClient.Client.Connected == false);
                if (OutSockets.Count>0)
                {
                    if (_mp3Writer == null)
                    {
                        _audioStreamFormat = new WaveFormat(22050, 16, Micobject.settings.channels);
                        var wf = new WaveFormat(_audioStreamFormat.SampleRate, _audioStreamFormat.BitsPerSample, _audioStreamFormat.Channels);
                        _mp3Writer = new LameMP3FileWriter(_outStream, wf, LAMEPreset.STANDARD);
                    }

                    byte[] bSrc = e.RawData;
                    int totBytes = bSrc.Length;

                    var ws = new TalkHelperStream(bSrc, totBytes, AudioSource.RecordingFormat);
                    var helpStm = new WaveFormatConversionStream(_audioStreamFormat, ws);
                    totBytes = helpStm.Read(_bResampled, 0, 22050);

                    ws.Close();
                    ws.Dispose();
                    helpStm.Close();
                    helpStm.Dispose();

                    _mp3Writer.Write(_bResampled, 0, totBytes);

                    var bterm = Encoding.ASCII.GetBytes("\r\n");

                    if (_outStream.Length > 0)
                    {
                        var bout = new byte[(int) _outStream.Length];

                        _outStream.Seek(0, SeekOrigin.Begin);
                        _outStream.Read(bout, 0, (int) _outStream.Length);

                        _outStream.SetLength(0);
                        _outStream.Seek(0, SeekOrigin.Begin);

                        foreach (var s in OutSockets)
                        {
                            var b = Encoding.ASCII.GetBytes(bout.Length.ToString("X") + "\r\n");
                            try
                            {
                                s.Stream.Write(b, 0, b.Length);
                                s.Stream.Write(bout, 0, bout.Length);
                                s.Stream.Write(bterm, 0, bterm.Length);
                            }
                            catch
                            {
                                OutSockets.Remove(s);
                                break;
                            }
                        }
                    }

                }
                else
                {
                    if (_mp3Writer != null)
                    {
                        _mp3Writer.Close();
                        _mp3Writer = null;
                    }
                }

                if (DataAvailable != null)
                {
                    DataAvailable(this, new NewDataAvailableArgs((byte[])e.RawData.Clone()));
                }

                if (_reconnectTime != DateTime.MinValue)
                {
                    Micobject.settings.active = true;
                    _errorTime = _reconnectTime = DateTime.MinValue;
                    DoAlert("reconnect");
                }
                _errorTime = DateTime.MinValue;

            }
            catch (Exception ex)
            {
                if (ErrorHandler != null)
                    ErrorHandler(ex.Message);
            }
        }
        public void StopTalk()
        {
            _localAudioDevices.StoppingTalking();

            if (_bTalking)
            {
                lock (_semaphore)
                {
                    logger.Info("Talk Stopping");
                    _bTalking = false;

                    if (_tcpClient != null)
                    {
                        _tcpClient.Close();
                        _tcpClient = null;
                    }

                    if (_avStream != null)
                    {
                        _avStream.Close();
                        _avStream.Dispose();
                        _avStream = null;
                    }

                    if (_waveStream != null)
                    {
                        _waveStream.Close();
                    }

                    if (_converterStream != null)
                    {
                        _converterStream.Close();
                        _converterStream = null;
                    }

                    if (_downsamplerStream != null)
                    {
                        _downsamplerStream.Close();
                        _downsamplerStream = null;
                    }

                    if (_waveInDevice != null)
                    {
                        _waveInDevice.StopRecording();
                        _waveInDevice = null;
                    }
                }
            }
        }
Beispiel #26
0
        private static WaveChannel32 OpenWavStream(Stream stream)
        {
            WaveStream readerStream = new WaveFileReader(stream);

            if (readerStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
            {
                readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream);
                readerStream = new BlockAlignReductionStream(readerStream);
            }

            if (readerStream.WaveFormat.BitsPerSample != 16)
            {
                var format = new WaveFormat(readerStream.WaveFormat.SampleRate, 16, readerStream.WaveFormat.Channels);
                readerStream = new WaveFormatConversionStream(format, readerStream);
            }

            return new WaveChannel32(readerStream);
        }
    /// <summary>
    /// Build all the temp files
    /// </summary>
    /// <remarks>
    /// One of the most hideous functions ever written.  Refactoring would be nice.
    /// </remarks>
    public void CreateTempFiles()
    {
        /* Dev links:
         *
         * http://localhost:82/player/epgcbha - clerks mp3 - id46
         *
         * http://localhost:82/player/dpccbha - beavis wav - id32
         *
         * http://localhost:82/player/dpbcbha - ace losers mp3 - id31
         *
         * http://192.168.1.117:82/player/fqavbha - borat wav - id50 - it is nice - won't convert to mp3
         *
         */


        dynamic theSound     = null;
        Stream  outputStream = new MemoryStream();

        if (_requestInfo.IsValid)   // Functions.IsNumeric(soundId))
        {
            int soundId = _requestInfo.SoundId;

            //
            // First, look in the cache and see if we have a converted mp3 there already
            //
            string targetMp3File = LocalMp3File;    //Functions.CombineElementsWithDelimiter("\\", _targetPath, string.Format("id{0}.mp3", soundId));
            string targetWavFile = LocalWavFile;    // Functions.CombineElementsWithDelimiter("\\", _targetPath, string.Format("id{0}.wav", soundId));

            //if (!NeedToCreateAtLeastOneFile(targetMp3File, targetWavFile))
            if (HaveAtLeastOneFile(targetMp3File, targetWavFile))
            {
                return;
            }
            else
            {
                //
                // OK, let's grab the sound data from the DB
                //
                theSound = GetSoundData(Functions.ConvertInt(soundId, -1));

                if (theSound != null && theSound.Id >= 0)
                {
                    //
                    // The DB returns HTML-ready bytes.  It would be more efficient to return the binary data.  Then we wouldn't have to do 2 conversions.
                    // Todo!
                    //
                    byte[] originalSourceByteArray = System.Convert.FromBase64String(theSound.Data);

                    if (Functions.IsWav(theSound.FileName))
                    {
                        bool successfulWavConversionToMp3 = false;

                        //
                        // It's an wav, convert to mp3
                        //
                        Mp3Writer outputMp3Writer = null;
                        // Mp3Writer outputFileMp3Writer = null;

                        //
                        // These are WaveLib.WaveStream objects that wrap the LAME thing
                        //
                        WaveStream waveDataToConvertToMp3    = null;
                        WaveStream convertedSourceWaveStream = null;
                        WaveStream originalSourceWaveStream  = new WaveStream(new MemoryStream(originalSourceByteArray));

                        try
                        {
                            outputMp3Writer        = new Mp3Writer(outputStream, originalSourceWaveStream.Format);
                            waveDataToConvertToMp3 = originalSourceWaveStream;
                        }
                        catch         // (Exception ex)
                        {
                            outputMp3Writer = null;

                            //
                            // The source WAV isn't compatible with the LAME thingy.  Let's try to convert it to something we know is usable with the NAudio thingy.
                            // Then we'll use the NAudio stuff to try to get the LAME stuff to work.
                            //
                            //MemoryStream tempMemStream = new MemoryStream();
                            int sampleRate = 16000;
                            int bitDepth   = 16;

                            //
                            // Note: there appears to be a bug in the LAME thing for files with 1 channel (mono).  The file plays at double speed.
                            //
                            int channels = 2;
                            NAudio.Wave.WaveFormat targetFormat = new NAudio.Wave.WaveFormat(sampleRate, bitDepth, channels);

                            NAudio.Wave.WaveStream stream = new NAudio.Wave.WaveFileReader(new MemoryStream(originalSourceByteArray));
                            NAudio.Wave.WaveFormatConversionStream str = null;

                            try
                            {
                                str = new NAudio.Wave.WaveFormatConversionStream(targetFormat, stream);
                            }
                            catch (Exception ex3)
                            {
                                //
                                // The borat "It is nice" WAV won't convert, has strange exception.  Todo: add logging and fix.
                                //
                                ErrorMsg = string.Format("Well, naudio can't convert the WAV to the target WAV format either: {0}", ex3.Message);
                            }

                            if (str != null)
                            {
                                //
                                // For lack of a better solution to get the bytes from the converted data into a "WaveStream" variable, use these
                                // available methods to write to a disk file and then open up the disk file.  The problem with directly converting
                                // with memory streams is that the required headers (like "RIFF") aren't written into the converted stream at this point.
                                //
                                NAudio.Wave.WaveFileWriter.CreateWaveFile(targetWavFile, str);
                                convertedSourceWaveStream = new WaveStream(targetWavFile);

                                //
                                // Now we have a correct WAV memory stream
                                //
                                try
                                {
                                    WaveFormat format = convertedSourceWaveStream.Format;
                                    outputMp3Writer        = new Mp3Writer(outputStream, format);
                                    waveDataToConvertToMp3 = convertedSourceWaveStream;
                                }
                                catch (Exception ex2)
                                {
                                    //
                                    // Crap, I think we're hosed
                                    //
                                    ErrorMsg = string.Format("Oops - second try - can't process this file: {0}", ex2.Message);
                                }
                            }
                        }


                        if (outputMp3Writer != null)
                        {
                            //
                            // If we're here, we've successfully created the MP3 converter from the WAV file, and our data stream
                            // is in the variable "waveDataToConvertToMp3"
                            //
                            try
                            {
                                byte[] buff = new byte[outputMp3Writer.OptimalBufferSize];
                                int    read = 0;
                                while ((read = waveDataToConvertToMp3.Read(buff, 0, buff.Length)) > 0)
                                {
                                    outputMp3Writer.Write(buff, 0, read);
                                }

                                //
                                // We have mp3 bytes, write 'em
                                //
                                // FileStream outputMp3File = new FileStream(targetMp3File, FileMode.CreateNew);
                                //outputMp3File.Write(originalSourceByteArray, 0, originalSourceByteArray.Length);
                                using (Stream outputMp3File = File.OpenWrite(targetMp3File))
                                {
                                    outputStream.Position = 0;
                                    Functions.CopyStream(outputStream, outputMp3File);
                                }

                                successfulWavConversionToMp3 = true;
                            }
                            catch (Exception ex)
                            {
                                ErrorMsg = string.Format("Oops, fatal error: {0}", ex.Message);
                            }
                            finally
                            {
                                outputMp3Writer.Close();
                                waveDataToConvertToMp3.Close();
                            }
                        }

                        if (!successfulWavConversionToMp3)
                        {
                            //
                            // Well, everthing failed.  We have a WAV at least, let's go ahead and write that.
                            //
                            File.WriteAllBytes(targetWavFile, originalSourceByteArray);
                        }

                        //
                        // Let's clean this stuff up
                        //
                        originalSourceWaveStream.Close();

                        if (convertedSourceWaveStream != null)
                        {
                            convertedSourceWaveStream.Close();
                        }
                    }
                    else
                    {
                        FileStream outputMp3File = null;
                        try
                        {
                            outputMp3File = new FileStream(targetMp3File, FileMode.CreateNew);
                            //
                            // We have mp3 bytes, write 'em
                            //
                            outputMp3File.Write(originalSourceByteArray, 0, originalSourceByteArray.Length);
                        }
                        catch
                        {
                            // Maybe we have the file already by another thread?
                            ErrorMsg = "Have mp3, can't write to disk.";
                        }
                        finally
                        {
                            if (outputMp3File != null)
                            {
                                outputMp3File.Close();
                            }
                        }

                        /*
                         * Huge todo: this code works fine on Windows 7, but doesn't work on Windows 2008 Server.  The problem is two fold:
                         *
                         *  a) The two mp3 encoders installed by Win7 (l3codeca.acm and l3codecp.acm) don't exist.  I see no way to "install" them.
                         *      This site comes closes to explaining, but these reg keys do NOT exist so the solution doesn't work:
                         *      http://blog.komeil.com/2008/06/enabling-fraunhofer-mp3-codec-vista.html
                         *
                         *  b) The alternate option explained here:
                         *      http://stackoverflow.com/questions/5652388/naudio-error-nodriver-calling-acmformatsuggest/5659266#5659266
                         *      Also doesn't work since the COM object for the DMO isn't registered on Win2K8.  The Windows SDK is supposed to have it,
                         *      but it doesn't install properly on the server.  Also Win Media Player won't install with a weird "There is no update to Windows Media Player".
                         *
                         *  I've googled for a long time, but this is a tricky one.  Maybe Microsoft needs to be contacted?
                         *
                         * This is required to create WAV files for Firefox to play.  Otherwise you have to click on a link. (alt solution: embed?)
                         *
                         *                      NAudio.Wave.Mp3FileReader reader = null;
                         *                      try
                         *                      {
                         *                              //
                         *                              // Let's write the WAV bytes
                         *                              // http://hintdesk.com/c-mp3wav-converter-with-lamenaudio/
                         *                              //
                         *                              using (reader = new NAudio.Wave.Mp3FileReader(targetMp3File))
                         *                              {
                         *                                      using (NAudio.Wave.WaveStream pcmStream = NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(reader))
                         *                                      {
                         *                                              NAudio.Wave.WaveFileWriter.CreateWaveFile(targetWavFile, pcmStream);
                         *                                      }
                         *                              }
                         *                      }
                         *                      catch
                         *                      {
                         *                              ErrorMsg = "Have mp3, can't convert to WAV";
                         *                      }
                         *                      finally
                         *                      {
                         *                              if (reader != null)
                         *                              {
                         *                                      reader.Close();
                         *                              }
                         *                      }
                         *
                         */
                    }
                }
                else
                {
                    ErrorMsg = "Cannot get sound id";
                }
            }
        }
        else
        {
            ErrorMsg = string.Format("Invalid request parameter: {0}", _encryptedPlayerRequest);
        }
    }
Beispiel #28
0
        private byte[] RealMix(ReceivedRtp item1, ReceivedRtp item2)
        {
            if (item1 == null || item2 == null) return null;

            if (item1.size == 0 || item2.size == 0) return null;

            byte[] wavSrc1 = new byte[item1.size - headersize];
            byte[] wavSrc2 = new byte[item2.size - headersize];

            Array.Copy(item1.buff, headersize, wavSrc1, 0, (item1.size - headersize));
            Array.Copy(item2.buff, headersize, wavSrc2, 0, (item2.size - headersize));

            WaveMixerStream32 mixer = new WaveMixerStream32();
            // mixer.AutoStop = true;
            MemoryStream memstrem = new MemoryStream(wavSrc1);
            RawSourceWaveStream rawsrcstream = new RawSourceWaveStream(memstrem, this.codec);
            WaveFormatConversionStream conversionstream = new WaveFormatConversionStream(pcmFormat16, rawsrcstream);
            WaveChannel32 channelstream = new WaveChannel32(conversionstream);
            mixer.AddInputStream(channelstream);

            memstrem = new MemoryStream(wavSrc2);
            rawsrcstream = new RawSourceWaveStream(memstrem, this.codec);
            conversionstream = new WaveFormatConversionStream(pcmFormat16, rawsrcstream);
            channelstream = new WaveChannel32(conversionstream);
            mixer.AddInputStream(channelstream);
            mixer.Position = 0;

            Wave32To16Stream to16 = new Wave32To16Stream(mixer);
            var convStm = new WaveFormatConversionStream(pcmFormat8, to16);
            byte[] mixedbytes = new byte[(int)convStm.Length];
            int chk = convStm.Read(mixedbytes, 0, (int)convStm.Length);
            //Buffer.BlockCopy(tobyte, 0, writingBuffer, 0, tobyte.Length);

            memstrem.Close();
            rawsrcstream.Close();
            conversionstream.Close();
            channelstream.Close();

            convStm.Close(); convStm.Dispose(); convStm = null;
            to16.Close(); to16.Dispose(); to16 = null;
            mixer.Close(); mixer.Dispose(); mixer = null;

            return mixedbytes;
        }
Beispiel #29
0
        void AudioDeviceDataAvailable(object sender, DataAvailableEventArgs e)
        {
            if (Levels == null)
                return;
            try
            {
                if (WriterBuffer == null)
                {
                    var dt = DateTime.Now.AddSeconds(0 - Micobject.settings.buffer);
                    AudioBuffer.RemoveAll(p => p.TimeStamp < dt);
                    AudioBuffer.Add(new AudioAction(e.RawData, Levels.Max(), DateTime.Now));
                }
                else
                {
                    WriterBuffer.Enqueue(new AudioAction(e.RawData, Levels.Max(), DateTime.Now));
                }

                if (Micobject.settings.needsupdate)
                {
                    Micobject.settings.samples = AudioSource.RecordingFormat.SampleRate;
                    Micobject.settings.channels = AudioSource.RecordingFormat.Channels;
                    Micobject.settings.needsupdate = false;
                }

                OutSockets.RemoveAll(p => p.Connected == false);
                if (OutSockets.Count>0)
                {
                    if (_mp3Writer == null)
                    {
                        //_as = new AudioStreamer();
                        //_as.Open(AudioCodec.AAC, AudioSource.RecordingFormat.BitsPerSample * AudioSource.RecordingFormat.SampleRate * AudioSource.RecordingFormat.Channels, AudioSource.RecordingFormat.SampleRate, AudioSource.RecordingFormat.Channels);

                        _audioStreamFormat = new WaveFormat(22050, 16, Micobject.settings.channels);
                        var wf = new MP3Stream.WaveFormat(_audioStreamFormat.SampleRate, _audioStreamFormat.BitsPerSample, _audioStreamFormat.Channels);
                        _mp3Writer = new Mp3Writer(_outStream, wf, false);
                    }
                    //unsafe
                    //{
                    //    fixed (byte* p = e.RawData)
                    //    {
                    //        int byteLength = 0;
                    //        int* l = &byteLength;
                    //        byte* outStream = _as.WriteAudio(p, e.RawData.Length,  l);
                    //        byteLength = *l;

                    //        if (byteLength > 0)
                    //        {
                    //            var toSend = new byte[byteLength];
                    //            for (var i = 0; i < byteLength;i++ )
                    //            {
                    //                if (i==0)
                    //                    Debug.Write(toSend[0]);
                    //                toSend[i] = *(outStream + i);

                    //            }

                    //            foreach (Socket s in OutSockets)
                    //            {
                    //                s.Send(Encoding.ASCII.GetBytes(byteLength.ToString("X") + "\r\n"));
                    //                s.Send(toSend);
                    //                s.Send(Encoding.ASCII.GetBytes("\r\n"));
                    //            }
                    //        }
                    //    }
                    //}
                    byte[] bSrc = e.RawData;
                    int totBytes = bSrc.Length;

                    var ws = new TalkHelperStream(bSrc, totBytes, AudioSource.RecordingFormat);
                    var helpStm = new WaveFormatConversionStream(_audioStreamFormat, ws);
                    totBytes = helpStm.Read(_bResampled, 0, 25000);

                    ws.Close();
                    ws.Dispose();
                    helpStm.Close();
                    helpStm.Dispose();

                    _mp3Writer.Write(_bResampled, 0, totBytes);

                    if (_outStream.Length > 0)
                    {
                        var bout = new byte[(int) _outStream.Length];

                        _outStream.Seek(0, SeekOrigin.Begin);
                        _outStream.Read(bout, 0, (int) _outStream.Length);

                        _outStream.SetLength(0);
                        _outStream.Seek(0, SeekOrigin.Begin);

                        foreach (Socket s in OutSockets)
                        {
                            s.Send(Encoding.ASCII.GetBytes(bout.Length.ToString("X") + "\r\n"));
                            s.Send(bout);
                            s.Send(Encoding.ASCII.GetBytes("\r\n"));
                        }
                    }

                }
                else
                {
                    if (_mp3Writer != null)
                    {
                        _mp3Writer.Close();
                        _mp3Writer = null;
                    }

                    //if (_as!=null)
                    //{
                    //    _as.Close();
                    //    _as.Dispose();
                    //    _as = null;
                    //}
                }

                if (DataAvailable != null)
                {
                    DataAvailable(this, new NewDataAvailableArgs((byte[])e.RawData.Clone()));
                }

            }
            catch (Exception ex)
            {
                Log.Error("",ex);//MainForm.LogExceptionToFile(ex);
            }
        }
 private void CanCreateConversionStream(WaveFormat inputFormat, WaveFormat outputFormat)
 {
     using (WaveFormatConversionStream stream = new WaveFormatConversionStream(
         inputFormat, new NullWaveStream(outputFormat, 10000)))
     {
     }
 }
Beispiel #31
0
        /// <summary>
        /// Creates a wave stream from the given file.
        /// </summary>
        /// <param name="fileName">A WAVE or MP3 file.</param>
        private WaveChannel32 CreateInputStream(string fileName)
        {
            WaveChannel32 inputStream;
            if (fileName.EndsWith(".wav"))
            {
                WaveStream readerStream = new WaveFileReader(fileName);
                if (readerStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
                {
                    readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream);
                    readerStream = new BlockAlignReductionStream(readerStream);
                }
                if (readerStream.WaveFormat.BitsPerSample != 16)
                {
                    var format = new WaveFormat(readerStream.WaveFormat.SampleRate, 16, readerStream.WaveFormat.Channels);
                    readerStream = new WaveFormatConversionStream(format, readerStream);
                }
                inputStream = new WaveChannel32(readerStream);
            }
            else if (fileName.EndsWith(".mp3"))
            {
                WaveStream mp3Reader = new Mp3FileReader(fileName);
                WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader);
                WaveStream blockAlignedStream = new BlockAlignReductionStream(pcmStream);
                inputStream = new WaveChannel32(blockAlignedStream);
            }
            else
            {
                throw new InvalidOperationException("Unsupported audio extension");
            }

            return inputStream;
        }
Beispiel #32
0
        /// <summary>
        /// 音楽ファイルの音声データへのストリームを生成します。
        /// </summary>
        /// <param name="fileName">音楽ファイルへのパス。</param>
        /// <exception cref="InvalidOperationException">ストリームの生成に失敗した。</exception>
        private void InitializeStream( string fileName )
        {
            _filePath = fileName;

            WaveChannel32 stream;
            if( fileName.EndsWith( ".wav" ) )
            {
                WaveStream reader = new WaveFileReader( fileName );
                if( reader.WaveFormat.Encoding != WaveFormatEncoding.Pcm )
                {
                    reader = WaveFormatConversionStream.CreatePcmStream( reader );
                    reader = new BlockAlignReductionStream( reader );
                }

                if( reader.WaveFormat.BitsPerSample != 16 )
                {
                    var format = new WaveFormat( reader.WaveFormat.SampleRate, 16, reader.WaveFormat.Channels );
                    reader = new WaveFormatConversionStream( format, reader );
                }

                stream = new WaveChannel32( reader );
            }
            else if( fileName.EndsWith( ".mp3" ) )
            {
                var reader             = new Mp3FileReader( fileName );
                var pcmStream          = WaveFormatConversionStream.CreatePcmStream( reader );
                var blockAlignedStream = new BlockAlignReductionStream( pcmStream );

                stream = new WaveChannel32( blockAlignedStream );
            }
            else
            {
                throw new InvalidOperationException( "Unsupported extension" );
            }

            this._volumeStream = stream;
            this._audioStream  = new MeteringStream( stream, stream.WaveFormat.SampleRate / 10 );

            this._waveOut = new WaveOut() { DesiredLatency = 200 };
            this._waveOut.Init( this._audioStream );
        }