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); } }
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); } }
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; }
private void AudioSourceDataAvailable(object sender, DataAvailableEventArgs e) { try { lock (_obj) { if (_bTalking && _avstream != null) { byte[] bSrc = e.RawData; int totBytes = bSrc.Length; if (!_audioSource.RecordingFormat.Equals(_waveFormat)) { var ws = new TalkHelperStream(bSrc, totBytes, _audioSource.RecordingFormat); var helpStm = new WaveFormatConversionStream(_waveFormat, ws); totBytes = helpStm.Read(bSrc, 0, 25000); ws.Close(); ws.Dispose(); helpStm.Close(); helpStm.Dispose(); } var enc = new byte[totBytes / 2]; ALawEncoder.ALawEncode(bSrc, totBytes, enc); try { _avstream.Write(enc, 0, enc.Length); _avstream.Flush(); } catch (SocketException) { StopTalk(); } } } } catch (Exception ex) { Log.Error("",ex);//MainForm.LogExceptionToFile(ex); StopTalk(); } }
private void AudioSourceDataAvailable(object sender, DataAvailableEventArgs e) { try { lock (_obj) { if (_bTalking && _avstream != null) { byte[] bSrc = e.RawData; int totBytes = bSrc.Length; if (!_audioSource.RecordingFormat.Equals(_waveFormat)) { var ws = new TalkHelperStream(bSrc, totBytes, _audioSource.RecordingFormat); var helpStm = new WaveFormatConversionStream(_waveFormat, ws); totBytes = helpStm.Read(bSrc, 0, 25000); ws.Close(); ws.Dispose(); helpStm.Close(); helpStm.Dispose(); } if (_needsencodeinit) { _enc.EncodeInit(BitConverter.ToInt16(e.RawData, 0), BitConverter.ToInt16(e.RawData, 2)); _needsencodeinit = false; } var buff = new byte[25000]; int c; unsafe { fixed (byte* src = bSrc) { fixed (byte* dst = buff) { c = (int)_enc.EncodeFoscam(src, totBytes, dst); } } } Buffer.BlockCopy(buff,0,_talkBuffer,_talkDatalen,c); _talkDatalen += c; var dtms = (int) (Helper.Now - _dt).TotalMilliseconds; int i = 0; int j = 0; try { while (j + 160 < _talkDatalen) { //need to write out in 160 byte packets for 40ms byte[] cmd = SInit(TalkData, MoIPAvFlag); cmd = AddNext(cmd, dtms + (i*40)); cmd = AddNext(cmd, _seq); cmd = AddNext(cmd, (int) (Helper.Now - _dt).TotalSeconds); cmd = AddNext(cmd, (byte) 0x0); cmd = AddNext(cmd, 160); var pkt = new byte[160]; Buffer.BlockCopy(_talkBuffer, j, pkt, 0, 160); cmd = AddNext(cmd, pkt, 160); Encode(ref cmd); _avstream.Write(cmd, 0, cmd.Length); j += 160; _seq++; i++; } if (j < _talkDatalen) { Buffer.BlockCopy(_talkBuffer, j, _talkBuffer, 0, _talkDatalen-j); _talkDatalen = _talkDatalen - j; } } catch (SocketException) { StopTalk(true); } } } } catch (Exception ex) { MainForm.LogExceptionToFile(ex); StopTalk(true); } }
private void wAVsCWAVsToolStripMenuItem_Click(object sender, EventArgs e) { if (!File.Exists("CTR_WaveConverter32.exe")) { MessageBox.Show(messages[11],"Please understand",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } try { OpenFileDialog opn = new OpenFileDialog(); opn.Filter = "WAV file|*.wav|Every file|*.*"; opn.Title = "Select a WAV file"; opn.Multiselect = true; if (opn.ShowDialog() == System.Windows.Forms.DialogResult.OK) { if (opn.FileNames.Length == 1) { Wav2CWAV(opn.FileName); } else { for (int i = 0; i < opn.FileNames.Length; i++) { if (!APP_not_Optimize_Cwavs) { Debug.Print("Optimizing CWAV: " + Path.GetTempPath() + Path.GetFileName(opn.FileNames[i]) + ".tmp.wav"); WaveFormat New = new WaveFormat(APP_opt_samples, 8, 1); WaveStream Original = new WaveFileReader(opn.FileNames[i]); WaveFormatConversionStream stream = new WaveFormatConversionStream(New, Original); if (System.IO.File.Exists(Path.GetTempPath() + Path.GetFileName(opn.FileNames[i]) + ".tmp.wav")) File.Delete(Path.GetTempPath() + Path.GetFileName(opn.FileNames[i]) + ".tmp.wav"); WaveFileWriter.CreateWaveFile(Path.GetTempPath() + Path.GetFileName(opn.FileNames[i]) + ".tmp.wav", stream); stream.Dispose(); Original.Dispose(); } Process prc = new Process(); prc.StartInfo.FileName = "CTR_WaveConverter32.exe"; if (!APP_not_Optimize_Cwavs) prc.StartInfo.Arguments = "-o \"" + opn.FileNames[i] + ".bcwav\" \"" + Path.GetTempPath() + Path.GetFileName(opn.FileNames[i]) + ".tmp.wav\""; else prc.StartInfo.Arguments = "-o \"" + opn.FileNames[i] + ".bcwav\" \"" + opn.FileNames[i] + "\""; Debug.Print("Converting CWAV: " + Path.GetTempPath() + Path.GetFileName(opn.FileNames[i]) + ".tmp.wav"); prc.Start(); prc.WaitForExit(); if (System.IO.File.Exists(Path.GetTempPath() + Path.GetFileName(opn.FileNames[i]) + ".tmp.wav")) File.Delete(Path.GetTempPath() + Path.GetFileName(opn.FileNames[i]) + ".tmp.wav"); } MessageBox.Show("Done !"); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); } }
void Wav2CWAV(string input) { SaveFileDialog sv = new SaveFileDialog(); sv.Filter = "CWAVs|*.bcwav|Every file|*.*"; sv.Title = "Save the CWAV file"; if (sv.ShowDialog() == System.Windows.Forms.DialogResult.OK) { if (!APP_not_Optimize_Cwavs) { Debug.Print("Optimizing CWAV: " + Path.GetTempPath() + Path.GetFileName(input) + ".tmp.wav"); WaveFormat New = new WaveFormat(APP_opt_samples, 8, 1); WaveStream Original = new WaveFileReader(input); WaveFormatConversionStream stream = new WaveFormatConversionStream(New, Original); if (System.IO.File.Exists(Path.GetTempPath() + Path.GetFileName(input) + ".tmp.wav")) File.Delete(Path.GetTempPath() + Path.GetFileName(input) + ".tmp.wav"); WaveFileWriter.CreateWaveFile(Path.GetTempPath() + Path.GetFileName(input) + ".tmp.wav", stream); stream.Dispose(); Original.Dispose(); } Process prc = new Process(); prc.StartInfo.FileName = "CTR_WaveConverter32.exe"; if (!APP_not_Optimize_Cwavs) prc.StartInfo.Arguments = "-o \"" + sv.FileName + "\" \"" + Path.GetTempPath() + Path.GetFileName(input) + ".tmp.wav\""; else prc.StartInfo.Arguments = "-o \"" + sv.FileName + "\" \"" +input+ "\""; prc.Start(); prc.WaitForExit(); if (System.IO.File.Exists(Path.GetTempPath() + Path.GetFileName(input) + ".tmp.wav")) File.Delete(Path.GetTempPath() + Path.GetFileName(input) + ".tmp.wav"); if (File.Exists(sv.FileName)) MessageBox.Show("Done !"); else MessageBox.Show("Error while converting the file, run the command in the cmd to check the output"); } }