Ардуино - запись звука

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

это типа шутка такая ?))
https://www.radiokot.ru/forum/viewtopic ... 8&t=185219

https://www.radiokot.ru/forum/download/ ... ?id=314658
https://www.radiokot.ru/forum/download/ ... ?id=315796
https://www.radiokot.ru/forum/download/ ... ?id=315797
https://www.radiokot.ru/forum/download/ ... ?id=314856
... и т.д.

W5500 во всех режимах...
macraw_W5500.c
(13.96 КБ) 80 скачиваний
udp_W5500.c
(17.1 КБ) 75 скачиваний
tcp_W5500.c
(16.77 КБ) 71 скачивание
... и т.д.

тебе надо или macraw_W5500 или udp_W5500.
я использую macraw_W5500 (он работает медленней... но мне большая скорость пока не нужна).
для записи звука лучше udp_W5500 (будет быстрей).

Добавлено after 3 hours 54 minutes 38 seconds:
схему рисуй)) как ты будешь подключать к ардуине...
у тебя же вроде ардуина ? или нет ? у меня нет))
схема.jpg
(35.4 КБ) 90 скачиваний
W5500 работает по SPI... это хорошо)) SPI быстрый ))
ещё можно прогнать всё в Протеусе.
:tea:
Реклама
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

и где наш звук ?))
:tea:
немного подкрутили скайп)) улучшили защиту... и т.д.
чето мой W5500 начал глючить... надо разбираться.
ты со своими модулями уже разобрался ?
:tea:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

с модулями не разобрался, вот сегодня пришел второй модуль в который Нана Вставляется

Но у меня есть очень важная Инфа. Я домучил передачу UDP c VLC на VLC

Что бы на постоянке гнать сигнал с компа по UDP через VLC установил Virtual Audio Cable и на передающем компе запустил код:
vlc.exe dshow:// :dshow-vdev="none" :dshow-adev="CABLE Output (VB-Audio Virtual Cable)" --sout=#transcode{acodec="u8 ",channels=1,samplerate=8000,ab=128}:duplicate{dst=std{access=udp,mux=raw,dst=192.168.0.64:4210}}

на приемном компе настроил прием этим кодом:
vlc --demux=rawaud --rawaud-channels=1 --rawaud-samplerate=8000 --rawaud-fourcc "u8 " udp://@:4210

Интересен вывод:
Если гоняю пакеты по LAN и по wifi все отлично - никаких прерыванний
в кодах настройки никаких кэширований не предусматривал.

Добавлено after 8 minutes 53 seconds:
Ваш ява-приемник тоже прекрасно принимает поток безо всяких дефектов, ровно , чисто

Мой андроид приемник принимает вроде как ровно, но идет какой-то периодический артефакт в виде щелчков каждый 0.3-0.5 сек
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

так и не понял зачем нужен VLC... ну да ладно))
мне нужен самодельный мессенджер.
:tea:

Добавлено after 9 minutes 51 second:
olegue писал(а):Мой андроид приемник принимает вроде как ровно, но идет какой-то периодический артефакт в виде щелчков каждый 0.3-0.5 сек
ява-приемник прекрасно принимает поток безо всяких дефектов, ровно , чисто... потому что:
1. есть буфер сокета
2. после команды RX_line.start(); ява-приемник воспроизводит из буфера непрерывно...
до тех пор пока не отправишь команду RX_line.stop(); и RX_line.close();

похоже твой андроид приемник... тормозит))
а может сокет тормозит...

говорю же... надо отдельно проверить работу андроид плеера и сокета.
:tea:

Код: Выделить всё

int buffersize = AudioRecord.getMinBufferSize(11025,
                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
                    AudioFormat.ENCODING_PCM_16BIT);

           AudioRecord arec = new AudioRecord(
                    MediaRecorder.AudioSource.MIC, 11025,
                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
                    AudioFormat.ENCODING_PCM_16BIT, buffersize);

            byte[] buffer = new byte[buffersize];
            arec.startRecording();
         //arec.read(buffer, 0, buffersize);
что то мне ту не нравится...
:roll:
а где полный код ?

Код: Выделить всё

public void RecvAudio()

{
    Thread thrd = new Thread(new Runnable() {
      @Override
        public void run()
        {
            Log.e(LOG_TAG, "start2 recv thread, thread id: "
                + Thread.currentThread().getId());
   
            AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,
                    SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO,
                    AudioFormat.ENCODING_PCM_8BIT, BUF_SIZE,
                    AudioTrack.MODE_STREAM);
            track.play();
            DatagramSocket sock = null;
   

            try
            {
                sock = new DatagramSocket(AUDIO_PORT);
                byte[] buf = new byte[BUF_SIZE];
   
                while(Server_aktiv)
                {
                    DatagramPacket pack = new DatagramPacket(buf, BUF_SIZE);
                    sock.receive(pack);
                    Log.d(LOG_TAG, "recv pack: " + pack.getLength());
                    buf=pack.getData();
                    //track.write(pack.getData(), 0, pack.getLength());
                  track.write(buf, 0, buf.length);
                }
            }
            catch (SocketException se)
            {
                Log.e(LOG_TAG, "SocketException: " + se.toString());
            }
            catch (IOException ie)
            {
                Log.e(LOG_TAG, "IOException" + ie.toString());
            }
           
            finally
            {
              if (sock != null)
              {
                 sock.close();
                   Toast toast = Toast.makeText(getApplicationContext(),
                       "Сервер UDP остановлен. Пора покормить кота!", Toast.LENGTH_SHORT);
                    toast.show();
              }
            }
        } // end run
    });
    thrd.start();
}
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

обнаружен новый эффект))
W5500 + ATmega328... работает... работает... потом бац ! и программа ATmega328 зависла в одном месте... когда ATmega328 передаёт длинные последовательности байт по SPI :shock:
всё указывает на глюк аппаратного SPI...
:o
вообще подобное уже наблюдалось с W5100 + ATmega128 которые мы запускали в другой теме...
там было ещё хуже))
SPI в ATmega128 глючило вообще со страшной силой)) при этом W5100 даже не успевала инициализироваться как SPI зависал...
причём SPI глючил только после подключения W5100...
:dont_know:
со всякими радио модулями и экранами и т.д. SPI работала нормально ))
что мы только не подключали к бедной ATmega128 по SPI... SPI работала нормально ))
пульт.jpg
(150.91 КБ) 75 скачиваний
а вот с W5100 SPI работать отказывается))
там нас спасал сторожевой таймер))
но постоянно перезагружать МК... это не выход...
:?
в чём причина... уже не помню.. так и не разобрались))
просто заменили ATmega128 на ATmega328 и вроде всё заработало...
но не долго)) глюки никуда не ушли...
короче... надо искать причину.
:tea:

Добавлено after 4 hours 13 minutes 46 seconds:
что-то странное происходит с моей ATmega328... при подключении W5500 зависает...
:shock:
Реклама
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

ошибка программы... исправил))
:tea:
где наш звук ?))
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

Все оборудование пришло, осталось сделать над собой усилие что бы начать. Но пока не получается.
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

:)))
начни с простого... нарисуй схему))
ATmega328-Server.rar
(38.59 КБ) 87 скачиваний
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

udp over tcp. У кого есть опыт. Хочется прокинуть пакеты на любой ip, а не только на белый
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

udp over tcp - что это значит ?))

а как прокинуть пакеты на любой ip ?
:roll:
я знаю только один способ это сделать - нужен сервер с белым ip
и тогда куча клиентов могут перекидываться пакетами через сервер...
Screenshot_1.jpg
(57.91 КБ) 71 скачивание
именно так работают все мессенджеры.

udp VS tcp - это уже вопрос десятый))
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

ну ок, есть сервер с белым Ip, например скейчас я на нем и экспериментирую. Как будет выглядеть перегидывавание пакетов на клиентов?
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

перекидывавание пакетов на клиентов... везде одинаковое))

1. первый клиент подключается к серверу и удерживает соединение открытым постоянно.
2. второй клиент тоже подключается к серверу и удерживает соединение открытым постоянно.
3. если первый клиент хочет передать пакет второму клиенту то он просто инкапсулирует пакет с указанием IP второго клиента и передаёт серверу.
4. сервер смотрит какой IP внутри пакета и передаёт второму клиенту.
Всё))

в данном случае сервер работает как обычный ретранслятор пакетов))

точно так же например работает VPN...

Например мне тут стало интересно как работает мой умный дом по VPN. Скачал оперу... В опере есть бесплатный встроенный VPN.
1-Мой комп 192.168.0.101 установил защищённый канал связи с сервером VPN 77.111.244.26 по протоколу TLS версии 1.2.
2-Оправляю пакеты... на IP сервер VPN 77.111.244.26
3-сервер VPN 77.111.244.26 преобразует IP в 77.111.244.101 и отправляет моему дому W5500.
4-мой дом W5500 определяет с какого IP пришёл запрос... проверяет корректность запроса (формат пакета, контрольные суммы, ключи шифрования и т.д.) и все эти данные возвращает серверу VPN 77.111.244.101
5-сервер VPN 77.111.244.101 возвращает данные моему компу.
Screenshot_2.jpg
(186.04 КБ) 58 скачиваний
:roll:
))
точно так же работают другие сервера...
:tea:
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

Изображение

Роман, как сделат автопрокрутку в окне когда пакеты идут?
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

х.з. сам думаю...
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

[uquote="roman.com",url="/forum/viewtopic.php?p=4456487#p4456487"]х.з. сам думаю...[/uquote]
добавил
ta1.setCaretPosition(ta1.getDocument().getLength());

Код: Выделить всё


  //////////////////////////////////////////////////// RX: > ta1 
      ta1.append(UDP_RX);                    // > TextArea 
    ta1.setCaretPosition(ta1.getDocument().getLength());
	  //////////////////////////////////////////////////// RX: > Console  
      //System.out.println(UDP_RX);
Роман, подскажите как писать в случайный файл какждый раз новый

попробовал добавить /изменить
File uniqueFile = File.createTempFile("udp", ".raw", new File("E:/JAVA/"));
RandomAccessFile E_raf = new RandomAccessFile(uniqueFile, "rw");

но теперь пишет файлы по 1кб. Т.е с пониманием логики вашего кода пока проблемы
Мне в перспективе нужно что бы если появились udp пакеты начинался новый файл, если закончились закрывался файл и так по кругу.

Код: Выделить всё

public static void TX_EEPROM() {
//EEPROM_len = 0;               //сброс EEPROM_len           
//////////////////////////////////////////////////////// 
//////////////////////////////////////////////////////// TX: EEPROM:   
// ASCII UTF-8 !!! HEX
	
try  
{
//"rw" -файл открыт для чтения и записи (если файла нет, то файл будет создан "w").
//"r" -файл открыт для чтения (если файла нет, error).
	File uniqueFile = File.createTempFile("udp", ".raw", new File("E:/JAVA/"));
	RandomAccessFile E_raf = new RandomAccessFile(uniqueFile, "rw");

//RandomAccessFile E_raf = new RandomAccessFile("E:/JAVA/Java2.txt", "rw");
///////////////////////////////////////////проверка файла EEPROM:
EEPROM_len = E_raf.length();     //Возвращает длину файла EEPROM long
if (EEPROM_len > 1000000) {EEPROM_len = 0;}//MAX 
///////////////////////////////////////// запись файла EEPROM:
//курсор 
E_raf.seek(EEPROM_len); //  
for (xE=0; xE<RX_len; xE++) {        
  E_raf.writeByte(RX_int[xE]);// > write() // HEX      
};
///////////////////////////////////////// закрываем файл EEPROM:
//закрываем файл
E_raf.close();        
}catch(IOException e){

}       
/////////////////////////////////////////// TX EEPROM END
}
Добавлено after 4 minutes 43 seconds:
походу TX_EEPROM() пишет лишь 1кб
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

[uquote="olegue",url="/forum/viewtopic.php?p=4470706#p4470706"]добавил
ta1.setCaretPosition(ta1.getDocument().getLength());

Код: Выделить всё


  //////////////////////////////////////////////////// RX: > ta1 
      ta1.append(UDP_RX);                    // > TextArea 
    ta1.setCaretPosition(ta1.getDocument().getLength());
	  //////////////////////////////////////////////////// RX: > Console  
      //System.out.println(UDP_RX);
[/uquote]
ta1.append(UDP_RX); // добавить >
ta1.setCaretPosition(ta1.getDocument().getLength()); // автопрокрутка

работает))
сам додумался ?

Добавлено after 30 minutes 29 seconds:
File uniqueFile = File.createTempFile("udp", ".raw", new File("E:/JAVA/"));
по моему это тут лишнее))

по моему достаточно этого ))
RandomAccessFile E_raf = new RandomAccessFile("D:/EEPROM.txt", "rw");

где "D:/EEPROM.txt" - имя файла, тип файла и путь к файлу.


при вызове этой функции
RandomAccessFile E_raf = new RandomAccessFile("D:/EEPROM.txt", "rw");
будет автоматически создан файл "D:/EEPROM.txt"
всё))


чтоб дописать новые данные в файл:

0- создаём массив например длиной 1500 байт (в моём случае это максимальный размер одного Ethernet пакета)
static int [] E_int = new int[1500]; //1500 Ethernet

1- потом открываем нужный файл. (если файла нет, он будет автоматически создан)
RandomAccessFile E_raf = new RandomAccessFile("D:/EEPROM.txt", "rw");

2- потом смотрим длину файла
EEPROM_len = E_raf.length(); //Возвращает длину файла EEPROM long

3- затем устанавливаем курсор в конец файла (или в то место куда мы хотим писать новые данные)
E_raf.seek(EEPROM_len);

4- далее производим запись (дописываем в конец файла новые данные)
for (xE=0; xE<1500; xE++) {
E_raf.writeByte(E_int[xE]); // запись массива E_int[xE] в файл "D:/EEPROM.txt"
};

5- затем производим верификацию файла (это по желанию)

E_raf.seek(EEPROM_len); // устанавливаем курсор в то место откуда мы последний раз писали
//E_raf.seek(0); // или устанавливаем курсор в начало файла "D:/EEPROM.txt" для сверки всего файла

for (xE=0; xE<1500; xE++) { // сверяем данные из файла с данными из массива
b_E = E_raf.read(); // читаем файл read() в буфер b_E int по одному байту //возвращает байт HEX или -1 (если байта нет)
if (b_E != E_int[xE]){ //r != w - сверяем данные файла с данными из массива по одному байту
EEPROM_error = 1; //EEPROM_error - данные не совпадают - устанавливаем флаг "ошибка"
};
};

6- и в конце закрываем файл
E_raf.close();

всё))


Добавлено after 5 minutes 19 seconds:
если надо каждый раз писать в новый файл... то тогда каждый раз создаём новый файл... например с новым номером... 1,2,3...

RandomAccessFile E_raf = new RandomAccessFile("D:/EEPROM_1.txt", "rw"); // создаём новый файл "D:/EEPROM_1.txt"
...

RandomAccessFile E_raf = new RandomAccessFile("D:/EEPROM_2.txt", "rw"); // создаём новый файл "D:/EEPROM_2.txt"
...

RandomAccessFile E_raf = new RandomAccessFile("D:/EEPROM_3.txt", "rw"); // создаём новый файл "D:/EEPROM_3.txt"
...

и т.д.

на диски D:/ получаем кучу файлов... ))
EEPROM_1...
EEPROM_2...
EEPROM_3...

и т.д.
[uquote="olegue",url="/forum/viewtopic.php?p=4470706#p4470706"]походу TX_EEPROM() пишет лишь 1кб[/uquote]
максимальный размер файла... я не проверял))
:dont_know:
в теории максимальный размер файла ограничен переменной long...
а это очень много байт ))

// диапазон значений long
// long 0...9.223.372.036.854.775.807|-9.223.372.036.854.775.808...-1
// long 0...7f ff ff ff ff ff ff ff | 80 00 00 00 00 00 00 00...ff ff ff ff ff ff ff ff
:))

ДА !!!
чтоб использовать переменные типа long в Java на полную катушку надо в конце писать буковку "L"
чтоб Java понимала... что это очень много байт ))
:)

static long EEPROM_len = 0; //объявили переменную (типа long)

например чтоб присвоить переменной EEPROM_len много байт 0xFFFFFFFF пишем так:
EEPROM_len = 0xFFFFFFFFL; // L(!)
...
EEPROM_len & 0x80000000L; // L(!)
EEPROM_len ^ 0x04C11DB7L; // L(!)
...
и т.д.

и везде в коде для переменных типа long надо писать с буковкой L в конце...
как-то так))
roman.com писал(а):максимальный размер файла... я не проверял))
щас проверим)) делов то))

создадим новый файл "D:/EEPROM.txt" размером более 4 гигабайт))

для этого пишем:

// создать новый файл "D:/EEPROM.txt"
RandomAccessFile E_raf = new RandomAccessFile("D:/EEPROM.txt", "rw");

затем устанавливаем курсор на позицию 0xFFFFFFFF

E_raf.seek(0xFFFFFFFFL); // с буковкой L в конце (!)

запускаем Java...

Java подумала немного...
и потом ещё немного...
для Java это большой файл...
:)))

в итоге Java создала новый файл на диске D:/ с именем "EEPROM.txt"...
в конец файла мы дописали ещё 16 байт... для проверки))
итого: на диске D:/ получился файл размером 4.294.967.295 + 16 байт в конце = 4.294.967.311 байт
Screenshot_1.jpg
(45.26 КБ) 53 скачивания
вывод: Java умеет создавать/читать/писать файлы размером 4.294.967.311 байт и более...
только при этом Java долго думает)) оно и понятно... это же надо прочитать все 4.294.967.311 байт... причём байт за байтом... а это процесс не быстрый))
:))
в остальном проблем нет.
:tea:

с помощь курсора E_raf.seek(x); можно писать звук в один файл (4 гигабайт и более) по кругу...
получится простой кольцевой буфер...
будет как в видеорегистраторе))
Screenshot_2.jpg
(42.92 КБ) 54 скачивания
с помощь курсора E_raf.seek(x); вообще можно много чего делать...

Добавлено after 1 hour 3 minutes 1 second:
PS ))
а я тут решил немного поиграться с телефончиком... ))
сделал радио управление...
Кораблик (1).jpg
(117.93 КБ) 52 скачивания
на своём стареньком телефончике ))
Android_4_4_2.jpg
(49.84 КБ) 49 скачиваний
сделал связь с компом...
комп-android.jpg
(150.69 КБ) 54 скачивания
теперь вот думаю... а как мне в мой телефончик добавить звук ? чтоб было как на компе...
:roll:
Android и комп написаны на Java... у них даже программа одинаковая))
но проблема в том что андроид не поддерживает те библиотеки что в компе...
на компе звук играет нормально... в андроид - нет...
для андроид нужно искать другую библиотеку...
или я чёто не понимаю)) видать ещё не до конца разобрался...
:dont_know:
для андроид не писал ещё ?
:tea:

Добавлено after 33 minutes 54 seconds:
можно сделать всё циклично... чтоб при каждом вызове функции создавался новый файл на диске D:/ с новым названием...

например вот так:

static String s = "D:/EEPROM_0.txt";
static int x = 0;

// создаём новый файл "D:/EEPROM_x.txt" с номером "x"
x ++;
s = "D:/EEPROM_" + x + ".txt";
RandomAccessFile E_raf = new RandomAccessFile(s, "rw");
...
Screenshot_1.jpg
(62.98 КБ) 56 скачиваний
теперь наша Java при каждом вызове функции TX_EEPROM() создаёт новый файл... с новым названием... и записывает туда новые данные))
:tea:
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

да, ничерта у меня не вышло. Поэтому пришлось воспользоваться фичей записи в существующий файл, фактически это то о чем вы говорили в конце последнего поста:

Код: Выделить всё


static String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmm").format(Calendar.getInstance().getTime());
public static void TX_EEPROM() {
	//EEPROM_len = 0;               //сброс EEPROM_len           
	////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////// TX: EEPROM:   
	// ASCII UTF-8 !!! HEX
	   
	try 
	{
	//"rw" -файл открыт для чтения и записи (если файла нет, то файл будет создан "w").
	//"r" -файл открыт для чтения (если файла нет, error).
	 //  File uniqueFile = File.createTempFile("udp", ".raw", new File("E:/JAVA/"));
	   

	
	RandomAccessFile E_raf = new RandomAccessFile("E:/JAVA/Jv"+ timeStamp +".raw", "rw");
		//RandomAccessFile E_raf = new RandomAccessFile(uniqueFile, "rw");
	///////////////////////////////////////////проверка файла EEPROM:
	EEPROM_len = E_raf.length();     //Возвращает длину файла EEPROM long
	if (EEPROM_len > 1000000) {EEPROM_len = 0;x++;
	timeStamp = new SimpleDateFormat("yyyyMMdd_HHmm").format(Calendar.getInstance().getTime());
	}//MAX
	///////////////////////////////////////// запись файла EEPROM:
	//курсор
	E_raf.seek(EEPROM_len); // 
	for (xE=0; xE<RX_len; xE++) {       
	  E_raf.writeByte(RX_int[xE]);// > write() // HEX     
	};
	///////////////////////////////////////// закрываем файл EEPROM:
	//закрываем файл
	E_raf.close();       
	}catch(IOException e){

	}    
//////////////////////////////////////////////
}  //TX_EEPROM

Добавлено after 11 minutes 42 seconds:
я еще хочу что бы если поток прекращается, то текущий записываемый файла закрывался по таймауту, а при возобновлении потока писался уже новый файл и соответственно время в имени файла было правильное.

Теперь же при возобновлении потока запись продолжается в незкарытый файл,. что не айс
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

что не вышло ? не пойму...


RandomAccessFile E_raf = new RandomAccessFile("E:/JAVA/Jv"+ timeStamp +".raw", "rw");
эта функция сама записывает данные в существующий файл... ей "фичи" не нужны))


во первых...
в конце есть обработчик ошибок "IOException"...
напиши туда например System.out.println(e);

//закрываем файл
E_raf.close();
}catch(IOException e){
System.out.println(e); // > вывод ошибок в консоль
}

теперь при открытии файла в консоле будем видеть все ошибки... если что-то пошло не так))
:tea:
хотя что там вообще может пойти не так)) "файл не найден" или типа того))
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

Роман, как закрыть файл по таймауту, если поток юдп прекратился
Друг Кота
Сообщения: 9242
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

проверяем...
:roll:

// создаём новый файл...
RandomAccessFile E_raf = new RandomAccessFile("E:/JAVA/Jv"+ timeStamp +".raw", "rw");

ошибка )) путь не найден ! ))
Screenshot_2.jpg
(4.51 КБ) 51 скачивание
а что это значит ?))
а то что
RandomAccessFile E_raf = new RandomAccessFile("E:/JAVA/Jv"+ timeStamp +".raw", "rw");
не создаёт папок ! он создаёт только файлы в существующих папках !

значит, перед тем как писать что либо в папку... надо сначала создать эту самую папку ))
чтоб Java знала куда писать файл...

1- создаём папку JAVA на диске D:/
2- потом указываем Java что мы хотим писать файл с именем Jv в папку JAVA которая находится на диске D:/

и о чудо ! всё записалось !
Screenshot_4.jpg
(9.36 КБ) 50 скачиваний
:tea:
Ответить

Вернуться в «AVR»