Чт авг 31, 2023 18:31:22
Чт авг 31, 2023 18:56:24
Пт сен 01, 2023 00:43:07
Для установки тайм-аута для socket.receive(packet), вы можете использовать метод setSoTimeout(int timeout) на вашем сокете DatagramSocket. Этот метод указывает, сколько времени сокет будет ожидать получение данных перед тем, как выбросит исключение SocketTimeoutException, если данные не были получены за указанный период времени.
socket.receive(reply); // UDP: MIN=18; MAX=1472.
System.out.println("UDP-поток начался2.");
long endTime = System.currentTimeMillis();
UdpStoped = 0;
long elapsedTime = endTime - startTime;
////////////////////////////////////////////////////// RX: IP, port, len:
TX_IP = "" + reply.getAddress(); // IP String
RX_port = reply.getPort(); // port int
RX_len = reply.getLength(); // len int
}catch(Exception e)
{
System.out.println("Поток остановился по таймауту " );
UdpStoped = 1;
}
while (true){
while (true){
try
{
DatagramPacket reply = new DatagramPacket(RX_byte, RX_byte.length);
System.out.println("Ожидание UDP-потока...");
socket.receive(reply);
///здесь остальная
///логика программы
}// while(true)
} //try
catch(SocketTimeoutException e)
{
//Нарисовалась проблема. Если включить плейер раньше чем источник Udp пакетов, то это тоже ислкючение!
System.out.println("поток не начался...." );
break;
}
} // while
} // while
if (UdpStoped==1){
timeStamp = new SimpleDateFormat("yyyyMMdd_HHmm").format(Calendar.getInstance().getTime());
}
Пт сен 01, 2023 13:15:13
Пт сен 01, 2023 13:15:56
Пт сен 01, 2023 14:11:02
Пт сен 01, 2023 17:01:57
Пт сен 01, 2023 19:16:33
olegue писал(а):1. Дополнить сырые данные до полноценного wav файла
Пт сен 01, 2023 21:44:48
RandomAccessFile E_raf = new RandomAccessFile("d:/JAVA/Jv"+ timeStamp +".wav", "rw");
if (E_raf.length()==0){
E_raf.writeByte(0x52);E_raf.writeByte(0x49);E_raf.writeByte(0x46);E_raf.writeByte(0x46);// > write() // HEX
E_raf.writeByte(0x24);E_raf.writeByte(0xED);E_raf.writeByte(0x01);E_raf.writeByte(0x00);
E_raf.writeByte(0x57);E_raf.writeByte(0x41);E_raf.writeByte(0x56);E_raf.writeByte(0x45);
E_raf.writeByte(0x66);E_raf.writeByte(0x6D);E_raf.writeByte(0x74);E_raf.writeByte(0x20);
E_raf.writeByte(0x10);E_raf.writeByte(0x00);E_raf.writeByte(0x00);E_raf.writeByte(0x00);// > write() // HEX
E_raf.writeByte(0x01);E_raf.writeByte(0x00);E_raf.writeByte(0x01);E_raf.writeByte(0x00);
E_raf.writeByte(0x40);E_raf.writeByte(0x1f);E_raf.writeByte(0x00);E_raf.writeByte(0x00);
E_raf.writeByte(0x40);E_raf.writeByte(0x1f);E_raf.writeByte(0x00);E_raf.writeByte(0x00);
E_raf.writeByte(0x01);E_raf.writeByte(0x00);E_raf.writeByte(0x08);E_raf.writeByte(0x00);
E_raf.writeByte(0x64);E_raf.writeByte(0x61);E_raf.writeByte(0x74);E_raf.writeByte(0x61);
E_raf.writeByte(0x00);E_raf.writeByte(0xED);E_raf.writeByte(0x01);E_raf.writeByte(0x00);
};
Пт сен 01, 2023 22:34:37
Пт сен 01, 2023 23:39:49
Сб сен 02, 2023 00:36:53
/////////////////////////////////////////////////////////////// Data = 126.252 -8
///////////////////////// RIFF (4 байт)
wav_int[0] = 0x52; // R
wav_int[1] = 0x49; // I
wav_int[2] = 0x46; // F
wav_int[3] = 0x46; // F
///////////////////////// Data Size (4 байт) 00 01 ED 24 = 126.244
wav_int[4] = 0x24; //
wav_int[5] = 0xED; //
wav_int[6] = 0x01; //
wav_int[7] = 0x00; //
/////////////////////////////////////////////////////////////// Data = 126.244 -32
///////////////////////// WAVE (4 байт)
wav_int[8] = 0x57; // W
wav_int[9] = 0x41; // A
wav_int[10] = 0x56; // V
wav_int[11] = 0x45; // E
///////////////////////// секция формата ("fmt") (4 байт)
wav_int[12] = 0x66; // f
wav_int[13] = 0x6D; // m
wav_int[14] = 0x74; // t
wav_int[15] = 0x20; //
///////////////////////// Data Size (4 байт)
wav_int[16] = 0x10; //
wav_int[17] = 0x00; //
wav_int[18] = 0x00; //
wav_int[19] = 0x00; //
///////////////////////// Код сжатия (Compression Code) 1 - 65,535 (2 байт) 1 = PCM/uncompressed
wav_int[20] = 0x01; // PCM/uncompressed
wav_int[21] = 0x00; //
///////////////////////// Количество каналов (Number of Channels) 1 - 65,535 (2 байт) 1 моно, 2 стерео
wav_int[22] = 0x01; // 1 mono // 2 стерео
wav_int[23] = 0x00; //
///////////////////////// Скорость выборок (Sample Rate) 1 - 0xFFFFFFFF (4 байт) 1F 40 = 8000
wav_int[24] = 0x40; //0x40 8000 семпл в секунду
wav_int[25] = 0x1F; //0x1F 8000 семпл в секунду
wav_int[26] = 0x00; //
wav_int[27] = 0x00; //
///////////////////////// Среднее количество байт в секунду (Average Bytes Per Second) 1 - 0xFFFFFFFF (4 байт) 3E 80 = 16000
wav_int[28] = 0x40; //0x40 8000 //0x80 16000 байт в секунду
wav_int[29] = 0x1F; //0x1F 8000 //0x3E 16000 байт в секунду
wav_int[30] = 0x00; //
wav_int[31] = 0x00; //
///////////////////////// Количество байт на одну выборку (Block Align) 1 - 65,535 (2 байт)
wav_int[32] = 0x01; //0x01 1 bytes/frame //0x02 2 bytes/frame
wav_int[33] = 0x00; //
///////////////////////// Количество бит на выборку (Significant Bits Per Sample) 1 - 65,535 (2 байт)
wav_int[34] = 0x08; //0x08 8 бит на выборку //0x10 16 бит на выборку
wav_int[35] = 0x00; //
///////////////////////// Секция данных ("data")
wav_int[36] = 0x64; // d
wav_int[37] = 0x61; // a
wav_int[38] = 0x74; // t
wav_int[39] = 0x61; // a
///////////////////////// dword 01 ED 00 = 126.208
wav_int[40] = 0x00; //
wav_int[41] = 0xED; //
wav_int[42] = 0x01; //
wav_int[43] = 0x00; //
/////////////////////////////////////////////////////////////// Data = 126.208
///////////////////////// Data...
Сб сен 02, 2023 14:48:08
E_raf.writeByte(0x00);E_raf.writeByte(0xED);E_raf.writeByte(0x01);E_raf.writeByte(0x00);
Вс сен 03, 2023 12:34:47
///////////////////////////////////////// запись файла EEPROM:
//курсор
E_raf.seek(EEPROM_len); //
long startTime = System.currentTimeMillis(); // Засекаем начало записи
for (xE=0; xE<RX_len; xE++) {
E_raf.writeByte(RX_int[xE]);// > write() // HEX
};
// преобразуем в заголовок первый 44 байта
E_raf.seek(0);
E_raf.writeByte(0x52);E_raf.writeByte(0x49);E_raf.writeByte(0x46);E_raf.writeByte(0x46);// > write() // HEX
E_raf.writeByte(0x00);E_raf.writeByte(0x00);E_raf.writeByte(0x00);E_raf.writeByte(0x00);
E_raf.writeByte(0x57);E_raf.writeByte(0x41);E_raf.writeByte(0x56);E_raf.writeByte(0x45);
E_raf.writeByte(0x66);E_raf.writeByte(0x6D);E_raf.writeByte(0x74);E_raf.writeByte(0x20);
E_raf.writeByte(0x10);E_raf.writeByte(0x00);E_raf.writeByte(0x00);E_raf.writeByte(0x00);// > write() // HEX
E_raf.writeByte(0x01);E_raf.writeByte(0x00);E_raf.writeByte(0x01);E_raf.writeByte(0x00);
E_raf.writeByte(0x40);E_raf.writeByte(0x1f);E_raf.writeByte(0x00);E_raf.writeByte(0x00);
E_raf.writeByte(0x40);E_raf.writeByte(0x1f);E_raf.writeByte(0x00);E_raf.writeByte(0x00);
E_raf.writeByte(0x01);E_raf.writeByte(0x00);E_raf.writeByte(0x08);E_raf.writeByte(0x00);
E_raf.writeByte(0x64);E_raf.writeByte(0x61);E_raf.writeByte(0x74);E_raf.writeByte(0x61);
E_raf.writeByte(0x00);E_raf.writeByte(0x00);E_raf.writeByte(0x00);E_raf.writeByte(0x00);
long endTime = System.currentTimeMillis(); // Засекаем конец записи
///////////////////////////////////////// закрываем файл EEPROM:
//закрываем файл
/// close
long fileSize = E_raf.length();
System.out.println("Файл " + fileSize + ": " + E_raf.length() + " CLOSED");
// Переместитесь к 4-му байту в файле, где начинается поле размера файла
E_raf.seek(4);
// Запишите размер файла в формате little-endian
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.order(ByteOrder.LITTLE_ENDIAN);
buffer.putInt((int) fileSize);
//Получите массив байтов из ByteBuffer
byte[] byteArray = buffer.array();
//Преобразуйте массив байтов в строку в шестнадцатеричном формате
StringBuilder hexString = new StringBuilder();
for (byte b : byteArray) {
hexString.append(String.format("%02X ", b));
}
// Выведите строку в шестнадцатеричном формате
System.out.println(hexString.toString().trim());
E_raf.write(buffer.array());
E_raf.seek(40);
//Запишите размер файла в формате little-endian
ByteBuffer buffer40 = ByteBuffer.allocate(4);
buffer40.order(ByteOrder.LITTLE_ENDIAN);
buffer40.putInt((int) fileSize-44);
E_raf.write(buffer40.array());
E_raf.close();
long elapsedTime = endTime - startTime;
//System.out.println("startTime: " + startTime + " //.");
//System.out.println("endTime: " + endTime + " //.");
//System.out.println("elapsedTime: " + elapsedTime + " //.");
///System.out.println("EEPROM_len: " + EEPROM_len + " //.");
//double writeSpeed = (double) EEPROM_len / (elapsedTime / 1000.0);
//System.out.println("Запись " + EEPROM_len + " байт в файл заняла " + elapsedTime + " мс.");
//System.out.println("Скорость записи: " + writeSpeed + " байт/сек.");
}catch(IOException e){
}
}
/////////////////////////////////////////// TX EEPROM END
} // TX_EEPROM
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////// RX_EEPROM:
public static void RX_EEPROM() {
EEPROM_len = 0; //сброс EEPROM_len
////////////////////////////////////////////////////////RX: EEPROM:
// ASCII UTF-8 !!! HEX
try
{
//"rw" -файл открыт для чтения и записи (если файла нет, то файл будет создан "w").
//"r" -файл открыт для чтения (если файла нет, error).
RandomAccessFile E_raf = new RandomAccessFile("d:/Java.txt", "r");//w
///////////////////////////////////////////проверка файла EEPROM:
//EEPROM_len = E_raf.length(); //Возвращает длину файла EEPROM long
/////////////////////////////////////////курсор EEPROM:
E_raf.seek(0);
/////////////////////////////////////////читаем файл EEPROM:
for (xE=0; xE<RX_len; xE++) {
RX_int[xE] = E_raf.read(); //raf.read() > E_int //возвращает HEX или -1
};
/////////////////////////////////////////// закрываем файл EEPROM
//закрываем файл
Вс сен 03, 2023 13:50:13
// преобразуем в заголовок первый 44 байта
E_raf.seek(0);
E_raf.writeByte(0x52);E_raf.writeByte(0x49);E_raf.writeByte(0x46);E_raf.writeByte(0x46);// > write() // HEX
E_raf.writeByte(0x00);E_raf.writeByte(0x00);E_raf.writeByte(0x00);E_raf.writeByte(0x00);
E_raf.writeByte(0x57);E_raf.writeByte(0x41);E_raf.writeByte(0x56);E_raf.writeByte(0x45);
E_raf.writeByte(0x66);E_raf.writeByte(0x6D);E_raf.writeByte(0x74);E_raf.writeByte(0x20);
E_raf.writeByte(0x10);E_raf.writeByte(0x00);E_raf.writeByte(0x00);E_raf.writeByte(0x00);// > write() // HEX
E_raf.writeByte(0x01);E_raf.writeByte(0x00);E_raf.writeByte(0x01);E_raf.writeByte(0x00);
E_raf.writeByte(0x40);E_raf.writeByte(0x1f);E_raf.writeByte(0x00);E_raf.writeByte(0x00);
E_raf.writeByte(0x40);E_raf.writeByte(0x1f);E_raf.writeByte(0x00);E_raf.writeByte(0x00);
// массив "заголовок"
static int [] wav_int = {
/////////////////////////////////////////////////////////////// Data = 126.252 -8
///////////////////////// RIFF (4 байт)
0x52; // R
0x49; // I
0x46; // F
0x46; // F
///////////////////////// Data Size (4 байт) 00 01 ED 24 = 126.244
0x24; //
0xED; //
0x01; //
0x00; //
/////////////////////////////////////////////////////////////// Data = 126.244 -32
///////////////////////// WAVE (4 байт)
0x57; // W
0x41; // A
0x56; // V
0x45; // E
///////////////////////// секция формата ("fmt") (4 байт)
0x66; // f
0x6D; // m
0x74; // t
0x20; //
///////////////////////// Data Size (4 байт)
0x10; //
0x00; //
0x00; //
0x00; //
///////////////////////// Код сжатия (Compression Code) 1 - 65,535 (2 байт) 1 = PCM/uncompressed
0x01; // PCM/uncompressed
0x00; //
///////////////////////// Количество каналов (Number of Channels) 1 - 65,535 (2 байт) 1 моно, 2 стерео
0x01; // 1 mono // 2 стерео
0x00; //
///////////////////////// Скорость выборок (Sample Rate) 1 - 0xFFFFFFFF (4 байт) 1F 40 = 8000
0x40; //0x40 8000 семпл в секунду
0x1F; //0x1F 8000 семпл в секунду
0x00; //
0x00; //
///////////////////////// Среднее количество байт в секунду (Average Bytes Per Second) 1 - 0xFFFFFFFF (4 байт) 3E 80 = 16000
0x40; //0x40 8000 //0x80 16000 байт в секунду
0x1F; //0x1F 8000 //0x3E 16000 байт в секунду
0x00; //
0x00; //
///////////////////////// Количество байт на одну выборку (Block Align) 1 - 65,535 (2 байт)
0x01; //0x01 1 bytes/frame //0x02 2 bytes/frame
0x00; //
///////////////////////// Количество бит на выборку (Significant Bits Per Sample) 1 - 65,535 (2 байт)
0x08; //0x08 8 бит на выборку //0x10 16 бит на выборку
0x00; //
///////////////////////// Секция данных ("data")
0x64; // d
0x61; // a
0x74; // t
0x61; // a
///////////////////////// dword 01 ED 00 = 126.208
0x00; //
0xED; //
0x01; //
0x00; //
/////////////////////////////////////////////////////////////// Data = 126.208
///////////////////////// Data...
};
wav_int[40] = 0x00; //
wav_int[41] = 0xED; //
wav_int[42] = 0x01; //
wav_int[43] = 0x00; //
///////////////////////////////////////// запись файла EEPROM:
//курсор
E_raf.seek(0);
for (xE=0; xE<44; xE++) {
E_raf.writeByte(wav_int[xE]); //E_int > write() // HEX
};
Вс сен 03, 2023 13:56:03
Вс сен 03, 2023 14:20:33
roman.com писал(а):16 бит * 16000 семплов = 256000 бит/c... по Wi-Fi... полный дуплекс )) и это ещё не предел))
Вс сен 03, 2023 17:33:30
Вс сен 03, 2023 20:55:18
Пн сен 04, 2023 07:45:25