Формирование звукового файла 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();