sending ,.wav via network

hey, everyone, I’m working in a project and there’s a part in this project involves
sending .wav file or any voice format
from Arduino to any other Device ( for example other Arduino)

I’m using the Uno Arduino, so at the start, I tried to send text file (txt)
from SD card (that was included in the Ethernet shield)
and it’s worked i found the content of the text in the other Arduino SD card,
anyway when i tried to do it with .wav i had few problems

1 - when i send the text file the size only 10-50 byte
but a 5-second voice is 25686 byte or more and it takes like forever to send it

2- every time i want to send data i have to open the file and read it and then
store it in the array, is there a way i can send the whole file?

the Sender code

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SD.h>


const int push1 = 2;

File myFile;
char a[100];
int c= 0; 


// network parameters
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0x05, 0x02 };  // ethernet interface MAC address
IPAddress localIp(10,131,41,72);    // local ip address
IPAddress destIp(10,131,41,74);      // destination ip address
unsigned int port = 20;               // destination port

// EthernetUDP to send and receive messages.
EthernetUDP Udp;


// timing

// setup the arduino and shields
void setup() {

    pinMode(push1, INPUT); 
   
  
  //Initialize serial and wait for port to open:
  Serial.begin(9600); // 19200
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  Serial.print("Initializing SD card...");

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");


  // start ethernet and udp
  Ethernet.begin(mac, localIp);   // static ip version
  //if(Ethernet.begin(mac) == 0) {     // dhcp version
  // report failure to obtain network parameters
  // Serial.println("DHCP error");

  // no point in carrying on, loop indefinitely:
  // while(true)
  // ;
  //}

  // open UDP port
  Udp.begin(port);

  // show the local ip address (useful for dhcp)
  Serial.print("Local IP: ");
  Serial.println(Ethernet.localIP());

  // initialize previous millis variables
 


}

// do tasks
void loop() {

if(digitalRead(push1) == LOW){
  
   myFile = SD.open("TEST1.wav" , FILE_READ);

  if (myFile) {
    Serial.println("inside the file there's");
    // read from the file until there's nothing else in it:
    Serial.println("i will send now");
    while (myFile.available()) {
      Udp.beginPacket(destIp, port);
     Udp.write(myFile.read());
      Udp.endPacket();
      Serial.println("Sending UDP message");
      Serial.println(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
   // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }  } }

The receiver code

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SPI.h>
#include <SD.h>


int LED = 8;

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x06
};
IPAddress ip(10,131,41,74);
IPAddress remIp(10,131,41,72);

unsigned int localPort = 9631;      // local port to listen on // 123456

File myFile;
char y[100];
int c= 0; 

// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,

void setup()
{
  // start the Ethernet and UDP:
  Ethernet.begin(mac, ip);
  Udp.begin(localPort);
  pinMode(LED, OUTPUT);
  Serial.begin(9600);//change and try
  Serial.print("Local IP: ");
  Serial.println(Ethernet.localIP());


    if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");

  
}

void loop()
{
  
  int packetSize = Udp.parsePacket();
   Serial.println(packetSize);
  if (packetSize)
  {
    Serial.print("Received packet of size ");
    Serial.println(packetSize);
    Serial.print("From ");
    IPAddress remote = Udp.remoteIP();
    for (int i = 0; i < 4; i++)
    {
      Serial.print(remote[i], DEC);
      if (i < 3)
      {
        Serial.print(".");
      }
    }
    Serial.print(", port ");
    Serial.println(Udp.remotePort());


    // read the packet into packetBufffer
    Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
    Serial.println("Contents:");
    

    Serial.print("packetBuffer is ");
    Serial.println(packetBuffer); //to check the message
    Serial.println("******************");//to know the end of message
    RandS();
  }

}

void RandS(){

   myFile = SD.open("test1.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (myFile) {
    Serial.println("i'm Writing what i got from UDP");
    myFile.println(packetBuffer);
    // close the file:
    myFile.close();
    
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

What does the receiver say about packet size? Because it looks to me as though you're sending the data one character at a time.