/// ///////////////////////////////////////////////////////
        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
        }
Example #2
0
        }     //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