Формирование звукового файла wav из данных полученных по UDP - C#
Формулировка задачи:
Добрый день!
Помогите начинающему, объясните как формируется wav файл из полученных данных
задача следующая есть устройство (ардуино с ethernet shildom) по протоколу UDP отправляется данные(звук с микрофона) на определенный адрес
Необходимо сформировать данные в wav файл
Код написанный на ардуино ide
Данные передаются в виде
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 файл или другой звуковой формат
#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); } }
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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д