Формирование звукового файла wav из данных полученных по UDP - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Помогите начинающему, объясните как формируется wav файл из полученных данных задача следующая есть устройство (ардуино с ethernet shildom) по протоколу UDP отправляется данные(звук с микрофона) на определенный адрес Необходимо сформировать данные в wav файл Код написанный на ардуино ide
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h> 
 
//переменные
int microphonePin = A0; // выбор пина для входа от микрофона
int microphoneValue = 0; // переменная для хранения значения от микрофона
int i = 0; // для счетчика считывания аналоговых покозаний
String str = "";
unsigned int localPort = 8;      // локальный порт, который будем прослушивать
// буферы для отправки данных
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // буфер, в котором будет храниться входящий пакет
char  ReplyBuffer[200];       // строка, которая будет отсылаться обратно
// Создаем экземпляр класса EthernetUDP, чтобы отправлять  пакеты через UDP:
EthernetUDP Udp; 

//  MAC address для controller .
 
byte mac[] = {
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};
 
// Initialize the Ethernet client library
// with the IP address and port of the server
EthernetClient client;
 
void setup() {
  // Open serial 
  Serial.begin(9600);
  
  //  Ethernet соединение DHCP:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // прекращаем подкл
    for (;;)
      ;
  }
  // выводим IP address:
  Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // выводим byte отправляемые по UDP IP address:
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print(".");
    Udp.begin(localPort); // открываем порт UDP
  }
  Serial.println();
  
}
 
void loop() {
  // Если есть какие-либо доступные данные, считываем пакет:
  int packetSize = Udp.parsePacket();
  byte packetBuffer[packetSize];
  if(packetSize)
  {
   IPAddress remote = Udp.remoteIP();
       
   // Serial.println(packetBuffer);
   Serial.println (Udp.remoteIP());
    Serial.println (Udp.remotePort());
    Serial.println (ReplyBuffer);
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
     // отправляем значение
    Udp.write(ReplyBuffer);
    Udp.endPacket();
    str="";
  }
  delay(10);
  mic();
}
// записываем данные в буфер(массив) 
void mic(){
  str= str+String(analogRead(microphonePin), HEX)+":";
    if(str.length()==200){
    str.toCharArray(ReplyBuffer,200);
  }
 }
Данные передаются в виде 116:115:119:115:119:114:119:114:119:114:118:114:117:114:116:114:115:115:114:115:113:115:112:115:112:115:111:115:110:115: 111:115:111:114:111:113:111:112:111:111:112:110:112:10f:113:1 На стороне компа необходимо принять данные и сформировать их в wav файл или другой звуковой формат
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using NAudio;
using NAudio.Wave;
using NAudio.CoreAudioApi;
using System.IO;

namespace udp
{
    public class Udp_Client
    {
        public static void Main()
        {
           //****************для приема данных
            byte[] data = new byte[1024];
            string input, stringData;
 
            //Ввод IP-адреса сервера
            Console.Write("Укажите IP-адрес для приема данных: ");
            string addr = Console.ReadLine();
            //Если адрес пустой - принимаем за локал хост
            if (addr == "") addr = "192.168.227.4";
 
            //Создание нового UDP-клиента и установка удаленного узла по умолчанию
            UdpClient server = new UdpClient(addr, 8);
            //создаем конечную точку по адресу сокета. Т.е. будем "слушать" порты 
            //и контролировать все сетевые интерфейсы
            IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
 
            //Отправляем серверу сообщение о подключении
            string welcome = "Клиент успешно подключился!";
            data = Encoding.UTF8.GetBytes(welcome);
            server.Send(data, data.Length);
 
            //От сервера придут данные, типа "Подключение успешно"
            data = server.Receive(ref sender);
 
            //отображение на экране
            stringData = Encoding.UTF8.GetString(data, 0, data.Length);
            Console.WriteLine(stringData);
 
            int i = 0;
            //цикл.
            //   while(false)
            while (true)
            // for(int i=0;i <=10000; i++)
            {
 
                // массив под пришедшие данные.
                data = new byte[1024];
          
                //Отсылаем серверу строку (переведенную в байты)
                data = Encoding.UTF8.GetBytes(welcome);
                server.Send(data, data.Length);
 
                 //Получение данных...
                data = server.Receive(ref sender);
                //Перевод принятых байтов в строку
                stringData = Encoding.UTF8.GetString(data, 0, data.Length);
                        
                //Отображение на экране принятой строки (размер файла)
                Console.WriteLine(stringData);
                // вывести длину строки
                //   Console.WriteLine(stringData.Length);
 
               //записываем поток в файл
                 string name = "D:\\WriteLines.txt";
                StreamWriter sw = new StreamWriter(name, true);
                 sw.Write(stringData);
                 sw.Close();
                
             }
 
            //После выхода из цикла...
            Console.WriteLine("Остановка клиента...");
 
            //Закрываем UDP-соединение
            server.Close();
        }
    }
}

Решение задачи: «Формирование звукового файла wav из данных полученных по UDP»

textual
Листинг программы
var bytes = stringData.Split(':').Select(b=>bool.Parse(b)).ToArray();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы