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

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

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

Добрый день! Помогите начинающему, объясните как формируется wav файл из полученных данных задача следующая есть устройство (ардуино с ethernet shildom) по протоколу UDP отправляется данные(звук с микрофона) на определенный адрес Необходимо сформировать данные в wav файл Код написанный на ардуино ide
Листинг программы
  1. #include <SPI.h>
  2. #include <Ethernet.h>
  3. #include <EthernetUdp.h>
  4. //переменные
  5. int microphonePin = A0; // выбор пина для входа от микрофона
  6. int microphoneValue = 0; // переменная для хранения значения от микрофона
  7. int i = 0; // для счетчика считывания аналоговых покозаний
  8. String str = "";
  9. unsigned int localPort = 8; // локальный порт, который будем прослушивать
  10. // буферы для отправки данных
  11. char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // буфер, в котором будет храниться входящий пакет
  12. char ReplyBuffer[200]; // строка, которая будет отсылаться обратно
  13. // Создаем экземпляр класса EthernetUDP, чтобы отправлять пакеты через UDP:
  14. EthernetUDP Udp;
  15.  
  16. // MAC address для controller .
  17. byte mac[] = {
  18. 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
  19. };
  20. // Initialize the Ethernet client library
  21. // with the IP address and port of the server
  22. EthernetClient client;
  23. void setup() {
  24. // Open serial
  25. Serial.begin(9600);
  26. // Ethernet соединение DHCP:
  27. if (Ethernet.begin(mac) == 0) {
  28. Serial.println("Failed to configure Ethernet using DHCP");
  29. // прекращаем подкл
  30. for (;;)
  31. ;
  32. }
  33. // выводим IP address:
  34. Serial.print("My IP address: ");
  35. for (byte thisByte = 0; thisByte < 4; thisByte++) {
  36. // выводим byte отправляемые по UDP IP address:
  37. Serial.print(Ethernet.localIP()[thisByte], DEC);
  38. Serial.print(".");
  39. Udp.begin(localPort); // открываем порт UDP
  40. }
  41. Serial.println();
  42. }
  43. void loop() {
  44. // Если есть какие-либо доступные данные, считываем пакет:
  45. int packetSize = Udp.parsePacket();
  46. byte packetBuffer[packetSize];
  47. if(packetSize)
  48. {
  49. IPAddress remote = Udp.remoteIP();
  50. // Serial.println(packetBuffer);
  51. Serial.println (Udp.remoteIP());
  52. Serial.println (Udp.remotePort());
  53. Serial.println (ReplyBuffer);
  54. Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
  55. // отправляем значение
  56. Udp.write(ReplyBuffer);
  57. Udp.endPacket();
  58. str="";
  59. }
  60. delay(10);
  61. mic();
  62. }
  63. // записываем данные в буфер(массив)
  64. void mic(){
  65. str= str+String(analogRead(microphonePin), HEX)+":";
  66. if(str.length()==200){
  67. str.toCharArray(ReplyBuffer,200);
  68. }
  69. }
Данные передаются в виде 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 файл или другой звуковой формат
Листинг программы
  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Text;
  5. using NAudio;
  6. using NAudio.Wave;
  7. using NAudio.CoreAudioApi;
  8. using System.IO;
  9.  
  10. namespace udp
  11. {
  12. public class Udp_Client
  13. {
  14. public static void Main()
  15. {
  16. //****************для приема данных
  17. byte[] data = new byte[1024];
  18. string input, stringData;
  19. //Ввод IP-адреса сервера
  20. Console.Write("Укажите IP-адрес для приема данных: ");
  21. string addr = Console.ReadLine();
  22. //Если адрес пустой - принимаем за локал хост
  23. if (addr == "") addr = "192.168.227.4";
  24. //Создание нового UDP-клиента и установка удаленного узла по умолчанию
  25. UdpClient server = new UdpClient(addr, 8);
  26. //создаем конечную точку по адресу сокета. Т.е. будем "слушать" порты
  27. //и контролировать все сетевые интерфейсы
  28. IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
  29. //Отправляем серверу сообщение о подключении
  30. string welcome = "Клиент успешно подключился!";
  31. data = Encoding.UTF8.GetBytes(welcome);
  32. server.Send(data, data.Length);
  33. //От сервера придут данные, типа "Подключение успешно"
  34. data = server.Receive(ref sender);
  35. //отображение на экране
  36. stringData = Encoding.UTF8.GetString(data, 0, data.Length);
  37. Console.WriteLine(stringData);
  38. int i = 0;
  39. //цикл.
  40. // while(false)
  41. while (true)
  42. // for(int i=0;i <=10000; i++)
  43. {
  44. // массив под пришедшие данные.
  45. data = new byte[1024];
  46. //Отсылаем серверу строку (переведенную в байты)
  47. data = Encoding.UTF8.GetBytes(welcome);
  48. server.Send(data, data.Length);
  49. //Получение данных...
  50. data = server.Receive(ref sender);
  51. //Перевод принятых байтов в строку
  52. stringData = Encoding.UTF8.GetString(data, 0, data.Length);
  53. //Отображение на экране принятой строки (размер файла)
  54. Console.WriteLine(stringData);
  55. // вывести длину строки
  56. // Console.WriteLine(stringData.Length);
  57. //записываем поток в файл
  58. string name = "D:\\WriteLines.txt";
  59. StreamWriter sw = new StreamWriter(name, true);
  60. sw.Write(stringData);
  61. sw.Close();
  62. }
  63. //После выхода из цикла...
  64. Console.WriteLine("Остановка клиента...");
  65. //Закрываем UDP-соединение
  66. server.Close();
  67. }
  68. }
  69. }

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

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

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


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

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

8   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы