Exemple #1
0
/*
 *      private byte[] convertIEEE32bitFloatTo8bitPCMAndEncodeToMP3(WaveInEventArgs e)
 *      {
 *          byte[] recorded_buf = e.Buffer;
 *          int recorded_length = e.BytesRecorded;
 *          if(recorded_length == 0)
 *          {
 *              return null;
 *          }
 *
 *          //byte[] depthConv_buf = null;
 *          //int depthConvBytes = -1;
 *
 *          byte[] pcm16_buf = null;
 *          int pcm16_len = -1;
 *
 *          //byte[] pcm8_buf = null;
 *
 *          byte[] mp3_buf = null;
 *          try
 *          {
 *              //// 生データを再生可能なデータに変換
 *              var waveBufferResample = new BufferedWaveProvider(this._WaveIn.WaveFormat);
 *              waveBufferResample.DiscardOnBufferOverflow = true;
 *              waveBufferResample.ReadFully = false;  // leave a buffer?
 *              waveBufferResample.BufferLength = recorded_length;
 *              var sampleStream = new WaveToSampleProvider(waveBufferResample);
 *
 *              // Downsample to 8000
 *              var resamplingProvider = new WdlResamplingSampleProvider(sampleStream, RTPConfiguration.SamplesPerSecond);
 *
 *              // Stereo to mono
 *              var monoProvider = new StereoToMonoSampleProvider(resamplingProvider)
 *              {
 *                  LeftVolume = 1f,
 *                  RightVolume = 1f
 *              };
 *
 *              // Convert to 32bit float to 16bit PCM
 *              var ieeeToPcm = new SampleToWaveProvider16(monoProvider);
 *
 *              waveBufferResample.AddSamples(recorded_buf, 0, recorded_length);
 *
 *              mp3_buf = SoundEncodeUtil.encodePCMtoMP3(ieeeToPcm);
 *
 *              ////Convert 16bit PCM to 8bit PCM
 *              //var depthConvertProvider = new WaveFormatConversionProvider(new WaveFormat(rtp_config.SamplesPerSecond, 8, 1), ieeeToPcm);
 *
 *              //pcm16_len = recorded_length / (2 * 6 * 2);
 *              //pcm16_buf = new byte[pcm16_len];
 *              //ieeeToPcm.Read(pcm16_buf, 0, pcm16_len);
 *              //var depthConvertStream = new WaveFormatConversionStream(new WaveFormat(rtp_config.SamplesPerSecond, 8, 1), new RawSourceWaveStream(pcm16_buf, 0, pcm16_len, new WaveFormat(rtp_config.SamplesPerSecond, 16, 1)));
 *
 *              //// データを源流から流す
 *              //waveBufferResample.AddSamples(recorded_buf, 0, recorded_length);
 *
 *              //int pcm8_len = pcm16_len / 2;
 *              //pcm8_buf = new byte[pcm8_len];
 *              //depthConvertStream.Read(pcm8_buf, 0, pcm8_len);
 *
 *              //mp3_buf = SoundEncodeUtil.encodePCMtoMP3(depthConvertProvider);
 *
 *
 *              //var waveBufferResample = new BufferedWaveProvider(this._WaveIn.WaveFormat);
 *              //waveBufferResample.AddSamples(recorded_buf, 0, recorded_length);
 *              //mp3_buf = SoundEncodeUtil.encodePCMtoMP3(waveBufferResample);
 *
 *              Console.WriteLine(Utils.getFormatedCurrentTime() + " converted 32bit float 64KHz stereo " + recorded_length.ToString()  + " bytes to 16bit PCM 8KHz mono and encode it to mp3 compressed data " + mp3_buf.Length.ToString() + " bytes");
 *          } catch (Exception ex)
 *          {
 *              Console.WriteLine(ex);
 *              Console.WriteLine("exit...");
 *              System.Windows.Forms.Application.Exit();
 *          }
 *
 *          return mp3_buf;
 *      }
 */
        public void handleDataWithTCP(byte[] sdata_buf)
        {
            Console.WriteLine("call handleDataWithTcp");
            if (!sdsock.IsConnected())
            {
                return;
            }
            // こういうケースがあるようだ
            if (sdata_buf.Length == 0)
            {
                return;
            }
            Console.WriteLine("call SoundUtils.ToRTPPacket");
            RTPPacket rtp = SoundUtils.ToRTPPacket(sdata_buf, config);

            Console.WriteLine("call sdsock.SendRTPPacket");
            sdsock.SendRTPPacket(rtp, config.compress, GlobalConfiguration.SamplesPerSecond, config.BitsPerSample, config.Channels, config.isConvertMulaw);
        }