Формирование звукового файла 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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д