olegue писал(а):
необошльшая пауза в начале, сбор пакетов в массив1, потом воспроизвдение массива1 и одновременный сбор массива2, что-то подобии того как сделао в ардуино для сброса на флэшку.
возьми код из ардуины...
ISR(TIMER2_COMPA_vect) {
sbi(ADCSRA, ADSC); // start ADC sample
while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready
if (bufWrite == 0) { // флаг выбор буфера 0
//buf00[bufByteCount] = ADCH;
buf00[bufByteCount] = bufByteCount;
}
if (bufWrite == 1) { // флаг выбор буфера 1
//buf01[bufByteCount] = ADCH;
buf01[bufByteCount] = bufByteCount;
}
bufByteCount++; // счёт буфер
if (bufByteCount == 256 && bufWrite == 0) { // если 256 и флаг выбор буфера 0
bufByteCount = 0;
bufWrite = 1; // флаг выбор буфера 1
myGsm.write(buf00, 256); // буфер 0 полный. Передача буфера 0.
}
if (bufByteCount == 256 && bufWrite == 1) { // если 256 и флаг выбор буфера 1
bufByteCount = 0;
bufWrite = 0; // флаг выбор буфера 0
myGsm.write(buf01, 256); // буфер 1 полный. Передача буфера 1.
}
}
и вставь его в яву...
if (bufWrite == 0) { // флаг выбор буфера 0
//buf00[bufByteCount] = ADCH;
//buf00[bufByteCount] = bufByteCount;
for (xRX=0; xRX<RX_len; xRX++) {
buf00[xRX + st_buf00] = (byte) RX_int[xRX];//int > din(динамик)
};
st_buf00 = RX_len; // счёт буфер
}
if (bufWrite == 1) { // флаг выбор буфера 1
//buf01[bufByteCount] = ADCH;
//buf01[bufByteCount] = bufByteCount;
for (xRX=0; xRX<RX_len; xRX++) {
buf01[xRX + st_buf01] = (byte) RX_int[xRX];//int > din(динамик)
};
st_buf01 = RX_len; // счёт буфер
}
bufByteCount++; // счёт буфер
if (bufByteCount == 2 && bufWrite == 0) { // если 256 и флаг выбор буфера 0
bufByteCount = 0;
bufWrite = 1; // флаг выбор буфера 1
st_buf00 = 0; // счёт буфер
//myGsm.write(buf00, 256); // буфер 0 полный. Передача буфера 0 в модуль.
RX_line.write(buf00, 0, 2048);// буфер 0 полный. Передача буфера 0 в плеер ява.
}
if (bufByteCount == 2 && bufWrite == 1) { // если 256 и флаг выбор буфера 1
bufByteCount = 0;
bufWrite = 0; // флаг выбор буфера 0
st_buf01 = 0; // счёт буфер
//myGsm.write(buf01, 256); // буфер 1 полный. Передача буфера 1 в модуль.
RX_line.write(buf01, 0, 2048);// буфер 1 полный. Передача буфера 1 в плеер ява.
}
Вложение:
Udp.txt [20.07 KiB]
Скачиваний: 55
вместо таймера - сокет...
вместо модуля - плеер...
када прилетает пакет срабатывает прерывание сокета (точнее срабатывает прерывание процессора компа... который запихивает все входящие пакеты в буфер сокета)
все входящие пакеты по 1024 байт накапливаются в буфере...
када буфер заполнится передаём буфер плееру...
можно передавать UDP пакеты по 1024 байт...
можно передавать UDP пакеты по 1 байту...
только никто по одному байту не передаёт))
минимальный размер UDP пакета 18 байт...
если размер UDP пакета меньше 18 байт то роутер выдаст ошибку.
если передавать по 1 байту
1 байт.
то модуль допишет 17 байт за тебя автоматом ))
00000000000000000
на выходе модуля получим те же 18 байт
100000000000000000
только нафига всё это надо... мне например вообще не понятно...
у тебя модуль теряет байты и пакеты...
при таких условиях ни о какой нормальной передачи звука даже речи быть не может...
вместо того что бы заниматься всякой ерундой... уже который день)) со всякими буферами... лучше бы настроил свой модуль... чтоб он не терял пакеты и байты... тогда всё будет хорошо))