/// /////////////////////////////////////////////////////// public static void audioReadNode() { Console.WriteLine("Audio Read Thread Started."); tcpARTest = new TcpListener(IPAddress.Any, 9999); tcpARTest.Start(); while (_continue) { Socket client = tcpARTest.AcceptSocket(); Console.WriteLine("Connection to node for reading audio established."); var childSocketThread = new Thread(() => { NetworkStream netStream = new NetworkStream(client); StreamReader streamReader = new StreamReader(netStream); string line; string[] split; string name; int bytes; int frequency; byte[] audioBytes; List<string> sentMessages = new List<string>(); try { while (true) { //bytestream? convert (1, 44100) to wave, save, add to dictionary to send to interfaces //send the stream of the sensor that triggered an event most recently //transfer, save, add to files dictionary - rest is automatic //files.Add(key, DateTime.Now); line = streamReader.ReadLine(); split = line.Split(' '); if (split[0] == "Audio") { name = split[1]; bytes = Convert.ToInt32(split[2]); frequency = Convert.ToInt32(split[3]); audioBytes = new byte[bytes + 1]; Console.WriteLine("Receiving audio: " + name + " Bytes: " + bytes + " Frequency: " + frequency); if (bytes > 0) { Console.WriteLine("Converting to wave audio file."); netStream.Read(audioBytes, 0, bytes); short[] sampleBufShort = new short[bytes / 2 + 1]; byte a, b; for (int i = 0; i < bytes; i += 2) { a = audioBytes[i]; b = audioBytes[i + 1]; sampleBufShort[i / 2] = returnShort(a, b); } byte[] byteArray = new byte[bytes + 1]; Buffer.BlockCopy(sampleBufShort, 0, byteArray, 0, byteArray.Length); DateTime dt = DateTime.ParseExact(name, "yyyy-MM-dd_HH-mm-ss.ffff", CultureInfo.InvariantCulture); //string file = dt.ToString("hh:mm:ss:ffff");//Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".wav"); WaveFormat waveFormat = new WaveFormat(frequency, 16, 1); Stream memStream = new MemoryStream(byteArray); WaveStream waveStream = new WaveStreamDer(memStream, waveFormat); //var desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); string file = "audio/" + dt.ToString("yyyy-MM-dd_HH-mm-ss_ffff") + ".wav"; Console.WriteLine("Resampling audio."); WaveFormat waveForm44100 = new WaveFormat(44100, 16, 1); WaveFormatConversionStream resampler = new WaveFormatConversionStream(waveForm44100, waveStream); WaveFileWriter.CreateWaveFile(file, resampler); files.Add(dt.ToString("yyyy-MM-dd_HH-mm-ss_ffff"), dt); Console.WriteLine("Audio downloadeded and converted."); } else { Console.WriteLine("Audio download cancelled due to zero length."); } } Thread.Sleep(1); } } catch (Exception ex) { Console.WriteLine("Audio Thread: " + ex.Message); } client.Close(); }); childSocketThread.Start(); }//end while }
} //end function /// /////////////////////////////////////////////////////// public static void audioReadNode() { Console.WriteLine("Audio Read Thread Started."); tcpARTest = new TcpListener(IPAddress.Any, 9999); tcpARTest.Start(); while (_continue) { Socket client = tcpARTest.AcceptSocket(); Console.WriteLine("Connection to node for reading audio established."); var childSocketThread = new Thread(() => { NetworkStream netStream = new NetworkStream(client); StreamReader streamReader = new StreamReader(netStream); string line; string[] split; string name; int bytes; int frequency; byte[] audioBytes; List <string> sentMessages = new List <string>(); try { while (true) { //bytestream? convert (1, 44100) to wave, save, add to dictionary to send to interfaces //send the stream of the sensor that triggered an event most recently //transfer, save, add to files dictionary - rest is automatic //files.Add(key, DateTime.Now); line = streamReader.ReadLine(); split = line.Split(' '); if (split[0] == "Audio") { name = split[1]; bytes = Convert.ToInt32(split[2]); frequency = Convert.ToInt32(split[3]); audioBytes = new byte[bytes + 1]; Console.WriteLine("Receiving audio: " + name + " Bytes: " + bytes + " Frequency: " + frequency); if (bytes > 0) { Console.WriteLine("Converting to wave audio file."); netStream.Read(audioBytes, 0, bytes); short[] sampleBufShort = new short[bytes / 2 + 1]; byte a, b; for (int i = 0; i < bytes; i += 2) { a = audioBytes[i]; b = audioBytes[i + 1]; sampleBufShort[i / 2] = returnShort(a, b); } byte[] byteArray = new byte[bytes + 1]; Buffer.BlockCopy(sampleBufShort, 0, byteArray, 0, byteArray.Length); DateTime dt = DateTime.ParseExact(name, "yyyy-MM-dd_HH-mm-ss.ffff", CultureInfo.InvariantCulture); //string file = dt.ToString("hh:mm:ss:ffff");//Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".wav"); WaveFormat waveFormat = new WaveFormat(frequency, 16, 1); Stream memStream = new MemoryStream(byteArray); WaveStream waveStream = new WaveStreamDer(memStream, waveFormat); //var desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); string file = "audio/" + dt.ToString("yyyy-MM-dd_HH-mm-ss_ffff") + ".wav"; Console.WriteLine("Resampling audio."); WaveFormat waveForm44100 = new WaveFormat(44100, 16, 1); WaveFormatConversionStream resampler = new WaveFormatConversionStream(waveForm44100, waveStream); WaveFileWriter.CreateWaveFile(file, resampler); files.Add(dt.ToString("yyyy-MM-dd_HH-mm-ss_ffff"), dt); Console.WriteLine("Audio downloadeded and converted."); } else { Console.WriteLine("Audio download cancelled due to zero length."); } } Thread.Sleep(1); } } catch (Exception ex) { Console.WriteLine("Audio Thread: " + ex.Message); } client.Close(); }); childSocketThread.Start(); } //end while } //end function