Сам по себе порт не освободиться, нужно комп перезагружать?
Ардуино - запись звука
код я конечно, запустил, но как этот сервис остановить?
Сам по себе порт не освободиться, нужно комп перезагружать?
Сам по себе порт не освободиться, нужно комп перезагружать?
- Реклама
как этот сервис остановить?
вверху кнопочка RUN
внизу кнопочка STOP
не понял... зачем порт освобождать ?
запустили Java... Java слушает порт... всё что прилетает в порт - Java выводит в консоль... или в окно... или отправляет обратно... или ещё миллион вариантов))
зачем порт освобождать ?))
1- можно остановить Java...
2- можно отправить на порт команду "порт закройся !" ))
3- можно включить таймер...
...
ещё миллион вариантов))
добавим окно... фишка недели - автоответчик ))
вверху кнопочка RUN
внизу кнопочка STOP
не понял... зачем порт освобождать ?
запустили Java... Java слушает порт... всё что прилетает в порт - Java выводит в консоль... или в окно... или отправляет обратно... или ещё миллион вариантов))
зачем порт освобождать ?))
1- можно остановить Java...
2- можно отправить на порт команду "порт закройся !" ))
3- можно включить таймер...
...
ещё миллион вариантов))
добавим окно... фишка недели - автоответчик ))
а что за ошибка, что не так происхходит.
первый раз кое как запустил, а сегодня вот это, хотя кресты были и в начале тоже.
Код: Выделить всё
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The type javax.swing.JComponent cannot be resolved. It is indirectly referenced from required .class files
The method setBackground(Color) is undefined for the type JTextArea
The method setForeground(Color) is undefined for the type JTextArea
The constructor JScrollPane(JTextArea) is undefined
The method setBounds(int, int, int, int) is undefined for the type JScrollPane
The method add(Component) in the type Container is not applicable for the arguments (JScrollPane)Добавлено after 4 minutes:
заходил я в building path, но так и не разорбрался че там надо.
пишет что проблемы с окном... javax.swing - это окно.
показывай кресты...
а вообще первым делом закомментируй кресты... на которые он ругается))
если и дальше ругается... тогда закомментируй всё окно )) будет работать без окна... потом нарисуем... делов то))
программа блочная... можно включить/отключить любой блок))
у тебя Java 1.8... у меня Java 1.7... хотя должно быть без разницы))
показывай кресты...
а вообще первым делом закомментируй кресты... на которые он ругается))
если и дальше ругается... тогда закомментируй всё окно )) будет работать без окна... потом нарисуем... делов то))
программа блочная... можно включить/отключить любой блок))
у тебя Java 1.8... у меня Java 1.7... хотя должно быть без разницы))
Ничерта не выходит. В интернете до фига issue по этому поводу,но четкого рецепта нету как ээто заставить работаь , думаю может новый эклипс скачать.
Добавлено after 1 hour 7 minutes 18 seconds:

Поставил абсолютно новый Эклипс с офсайта, но поначала все равно что бы шло все не так. Потом почитал issue На stackoverflow и в итого все заработало.
Добавлено after 3 minutes 46 seconds:
пришли чистые данные в Хексе
Я посылал строку "Hello from Android" - 18 байт
Так и пришло 18 байт
Добавлено after 1 minute 27 seconds:
Все понятно, фигова что в яве я ни бум-бум , еще один Иде на мою слабую голову.
Добавлено after 17 minutes 23 seconds:
вот этого не хватало что бы все заработало

взято отсюда:
https://stackoverflow.com/questions/571 ... d-how-do-i
Добавлено after 3 minutes 54 seconds:
Теперь эти байты можно сложить в буфер секунды на 2 и заряжать в плейер какой-то самописный?
Добавлено after 1 hour 7 minutes 18 seconds:
Поставил абсолютно новый Эклипс с офсайта, но поначала все равно что бы шло все не так. Потом почитал issue На stackoverflow и в итого все заработало.
Добавлено after 3 minutes 46 seconds:
пришли чистые данные в Хексе
Я посылал строку "Hello from Android" - 18 байт
Так и пришло 18 байт
Добавлено after 1 minute 27 seconds:
Все понятно, фигова что в яве я ни бум-бум , еще один Иде на мою слабую голову.
Добавлено after 17 minutes 23 seconds:
вот этого не хватало что бы все заработало
взято отсюда:
https://stackoverflow.com/questions/571 ... d-how-do-i
Добавлено after 3 minutes 54 seconds:
Теперь эти байты можно сложить в буфер секунды на 2 и заряжать в плейер какой-то самописный?
- Реклама
первый раз такое слышу...))olegue писал(а):вот этого не хватало что бы все заработало
я давал ссылки на свой Java
https://disk.yandex.ru/d/gT4Vn7Y_Xo5e4w
и Эклипс
https://disk.yandex.ru/d/sI0Aa-SjNqjRzA
всё рабочее.
а ты полез по сайтам... в поисках приключений))
ну добавь тогда ещё и ASCII )) будет переводить автоматом)) а компилирует нормально ?olegue писал(а):Я посылал строку "Hello from Android" - 18 байт
[uquote="olegue",url="/forum/viewtopic.php?p=4319058#p4319058"]Теперь эти байты можно сложить в буфер секунды на 2 и заряжать в плейер какой-то самописный?[/uquote]
можно
ок, теперь можно подумать как отправить данные с ардуино через sim800. Думаю использовать тот же скеч что здесь делали, только вот уже sdfat, eeprom, rtc1307 - все эти библиотеки можно отключить и освободить место. А значит буфер можно будет увеличить и минимум будет 2 по 512 или даже больше. Попробую испльзовать ту же схему что и при сбросе данных на sd карту. Только по данным из буфера буду формировать пакеты и отправлять в сеть. Тут бы мне пригодился модуль Ethernet для отладки, надо заказать на всякий случай.
в java есть плеер_wav...
сам плеер_wav особенностей не имеет)) принцип простой
1. пакеты прилетают в буфер socket // UDP: MIN=18; MAX=1472.
2. после фильтрации пакеты попадают в буфер плеер_wav
3. всё что попадает в буфер плеер_wav мы слышим в динамике)) основная сложность работы со звуком - это синхронизация приёмника и передатчика.
надо понимать что звук это не просто данные а поток.
для синхронизации потока в заводском и самодельном скайпе используется заголовок.
вначале каждого пакета добавляется заголовок... типа... частота битрейт... частота семплирование... скорость воспроизведения... и т.д.
плеер_wav должен читать заголовок и подстраиваться под передатчик...
тогда всё работает чётко))
всё это реализовано в самодельном скайпе))

Добавлено after 17 minutes 13 seconds:
[uquote="olegue",url="/forum/viewtopic.php?p=4319390#p4319390"]Ethernet для отладки, надо заказать на всякий случай.[/uquote]
надо
потому что самодельный Ethernet всё ещё находится в разработке)) Добавлено after 1 hour 22 minutes 31 second:
звук так же можно записать на комп... например в файл "D:/Java.txt"
и прослушать позже)) а можно записать на комп... например в файл "D:/Java.wav"...
и добавить wav заголовок...
тогда можно слушать на компе в любом проигрывателе))
и т.д. и т.п.

сам плеер_wav особенностей не имеет)) принцип простой
1. пакеты прилетают в буфер socket // UDP: MIN=18; MAX=1472.
2. после фильтрации пакеты попадают в буфер плеер_wav
3. всё что попадает в буфер плеер_wav мы слышим в динамике)) основная сложность работы со звуком - это синхронизация приёмника и передатчика.
надо понимать что звук это не просто данные а поток.
для синхронизации потока в заводском и самодельном скайпе используется заголовок.
вначале каждого пакета добавляется заголовок... типа... частота битрейт... частота семплирование... скорость воспроизведения... и т.д.
плеер_wav должен читать заголовок и подстраиваться под передатчик...
тогда всё работает чётко))
всё это реализовано в самодельном скайпе))
Добавлено after 17 minutes 13 seconds:
[uquote="olegue",url="/forum/viewtopic.php?p=4319390#p4319390"]Ethernet для отладки, надо заказать на всякий случай.[/uquote]
надо
потому что самодельный Ethernet всё ещё находится в разработке)) Добавлено after 1 hour 22 minutes 31 second:
звук так же можно записать на комп... например в файл "D:/Java.txt"
и прослушать позже)) а можно записать на комп... например в файл "D:/Java.wav"...
и добавить wav заголовок...
тогда можно слушать на компе в любом проигрывателе))
и т.д. и т.п.
Скидывал буфер на сериал 115200 , вот такая шляпа получилась . Там файлик приложил. Это сырец из программы CoolTerm. Я его распознал с помощью Sound Forge и сохранил. Сэмплрейт -8000кгц. Но прослушитьвать пришлось на 10000кгц. Почему так я не знаю.
Код: Выделить всё
if (recByteCount % 256 == 128 ) //&& recPressed == 1)
{
//rec.write(buf00, 128); // save buf01 to card
Serial.write(buf00, 128);
recByteSaved += 128;
}
if (recByteCount % 256 == 0)// && recPressed == 1)
{
//rec.write(buf01, 128); // save buf02 to card
Serial.write(buf01, 128);
recByteSaved += 128;
}
// }- Вложения
-
- CoolTerm Capture 2022-11-14 01-17-51.rar
- (669.68 КБ) 74 скачивания
Итак, Роман, установил яву, которыую выложили и эклипс. Все завелось с 1 раз. поставил последний код, где запись в файл возможно.
Запустил sim800 в прозрачном режиме и настроил на прием в Яве. Отправляю по одному байту. Код прерывания таймера ниже привел. Таймер -8кгц
настойка таймера и АдС
Так вот когда только запускаешь программа, первые 1-1.5 сек вроде как хороший звук,а дальеш пошли затыки и ничего не разобрать. Если бы в программе на яве где то был буфер секунда 5, тогда наверно вы бы было хорошо
пробовал отправялть сразу буфером, менял размеры буфера 128,256, 512 - существенно улучшений нет
myGsm.write(buf00, 512);
Добавлено after 8 minutes 45 seconds:
вот прикладываю сырой файл 8кгц, 8бит беззнаковый. В самой начале все хорошо видно.
Запустил sim800 в прозрачном режиме и настроил на прием в Яве. Отправляю по одному байту. Код прерывания таймера ниже привел. Таймер -8кгц
настойка таймера и АдС
Код: Выделить всё
void Setup_timer2() {
TCCR2B = _BV(CS21); // Timer2 Clock Prescaler to : 8
TCCR2A = _BV(WGM21); // Interupt frequency = 16MHz / (8 x 125 + 1) = 16000Hz
//OCR2A = 125; // Compare Match register set to 125 (было 90) Перешл на 16кгц
OCR2A = 250; // Compare Match register set to 250 (было 90) Перешл на 8кгц
}
void Setup_ADC() {
ADMUX = 0x60; // set ADC to read pin A0, ADLAR to 1 (left adjust)
cbi(ADCSRA, ADPS2); // set prescaler to 8 / ADC clock = 2MHz
sbi(ADCSRA, ADPS1);
sbi(ADCSRA, ADPS0);
}Код: Выделить всё
ISR(TIMER2_COMPA_vect) {
//ADMUX = 0x60; // set ADC to read pin A0, ADLAR to 1 (left adjust)
sbi(ADCSRA, ADSC); // start ADC sample
while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready
myGsm.write(ADCH);
}
myGsm.write(buf00, 512);
Добавлено after 8 minutes 45 seconds:
вот прикладываю сырой файл 8кгц, 8бит беззнаковый. В самой начале все хорошо видно.
- Вложения
-
- Java.txt
- (135.47 КБ) 112 скачиваний
-
- Java.txt
- это сырой файл 8кгц, 8бит , бесзнаковый
- (135.47 КБ) 60 скачиваний
olegue писал(а):Отправляю по одному байту.
Отправляю по одному байту... нифига не разобрать )) плеер в ява не успевает обрабатывать по одному байту...
а по два ? нифига не разобрать ))
а по 10 ? несколько секунд играет нормально)) потом бульканье...
а по 100 ? по 100 уже нормально.
вывод: надо отправлять не меньше 100 байт в одном пакете...
Добавлено after 3 minutes 8 seconds:
а по 512 ? совсем хорошо))
а по 1472 ? максимальный размер пакета... совсем замечательно))
вывод: надо отправлять нормальные пакеты... не меньше 100 байт в одном пакете...
в заводском скайпе 100...200 байт в одном пакете...
а вообще... чем больше тем лучше))
Добавлено after 33 minutes 43 seconds:
далее... самое главное))olegue писал(а):Так вот когда только запускаешь программа, первые 1-1.5 сек вроде как хороший звук,а дальеш пошли затыки и ничего не разобрать.
ключевое слово - поток)) нужен непрерывный поток.roman.com писал(а):основная сложность работы со звуком - это синхронизация приёмника и передатчика.
надо понимать что звук это не просто данные а поток.
вот моя запись... видно непрерывный поток....
фон с микрофона 50 герц... но в данном случае это не важно... главное что на записи видим непрерывный поток. и далее... и далее... и далее...
а у тебя что ?
вот твоя запись... видно что поток прерывается.... и далее... и далее... и далее...olegue писал(а):вот прикладываю сырой файл 8кгц, 8бит беззнаковый.
такое ощущение... что в момент отправки данных...
myGsm.write(ADCH);
таймер не работает)) и ничего не цифрует))
ISR(TIMER2_COMPA_vect) {
//ADMUX = 0x60; // set ADC to read pin A0, ADLAR to 1 (left adjust)
sbi(ADCSRA, ADSC); // start ADC sample
while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready
}
в итоге: получаем рваный поток ))
разорванный в клочья))
ты все данные получаешь ? ощущения что не все... ))
дело в том что когда Sim800 работает в прозрачном режиме, т.е в режиме без подтверждение отправки, то байты отправляются как бы в буфер и на приемной стороне они выглядят в виде пакетов по 1024 байт
TX_IP X.XXX.XXX.82 | len 1024 | port 9666 |
7A 7A 7A 7A 7A 7A 7B 7B 7A 7A 7A 7B 7A 7A 7A 7B 7A 7A 7A 7B 7A 7A 7B 7B 79 79 7A 7A 79 79 7A 7B 7A 79 79 7A 7A 79 79 7A 7A 79 7A 7A 7A 79 7A 7A 7B 79 7A 7A 7A 7A 7A 7A 7B 7A 79 7A 7A 79 7B 7B 7A 79 79 7A 7B 79 79 79 7A 7A 79 7A 7A 7B 7A 79 7B 79 79 79 7A 7B 7A 7A 7B 7A 7A 7A 7B 7B 7A 7A 7B 7B 79 79 7B 7B 79 79 79 7B 7A 79 7A 7A 7A 79 7A 7B 7A 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 79 7A 7B 7B 79 79 7B 7B 79 7A 7A 7B 7A 79 7A 7B 7A 7A 7B 7B 7A 7A 7A 7B 7B 7A 7B 7B 7B 7A 7A 7B 7A 7A 7A 7B 7B 79 79 7B 7B 79 79 7A 7B 79 79 7A 7A 7A 79 7A 7A 7A 7A 7A 7B 7A 79 7A 7B 7A 7A 7A 7A 7A 7A 7A 7B 7A 79 7A 7B 7B 7A 79 7B 79 79 79 79 79 79 79 7A 7A 79 79 7A 7A 7A 7A 7A 7B 7A 79 7A 7B 7A 7A 7B 7B 7A 7A 7A 7B 7A 7A 7A 7B 7A 79 79 7B 7B 79 7B 7B 79 79 7A 7A 7A 7A 7B 7A 7B 7A 7A 7A 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7A 7B 7A 7A 7B 7B 7A 7A 7A 7B 7B 79 7B 7B 7B 79 7A 7A 7A 79 7A 7A 7B 7A 7B 7B 7B 7A 7B 7B 7A 7A 7A 7B 7A 7A 7A 7B 7B 7A 7B 7B 7A 7A 79 7B 7B 79 79 7A 7B 7B 79 7A 7A 7A 79 7A 7A 7A 79 7A 7A 7A 7A 7A 7A 7A 7A 7A 7A 7B 7A 7A 7A 7B 7A 7A 7A 7B 79 7B 7B 79 7A 79 7A 7A 79 79 79 7A 7A 79 79 7A 7A 7A 7A 7B 7A 79 7A 7B 7A 7A 79 7A 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7B 7B 7B 7A 79 7B 7B 79 79 7A 7A 7A 79 7A 7B 7A 7A 7A 7B 7A 7A 7A 7B 7B 7A 7A 7B 7B 7A 7B 7B 7B 7A 7A 7B 7B 79 7A 79 7B 79 79 7B 7B 79 79 7A 7A 7A 7A 7A 7B 7A 7A 7B 7B 7A 7A 7A 7B 7A 7A 7A 7B 7A 79 7A 7B 7A 79 7A 7B 7A 79 7B 7B 7A 79 7A 7B 7A 79 79 7A 7A 79 7A 7A 7A 79 7A 7A 7A 79 7A 7A 7B 7A 7A 7A 7B 79 7A 7B 7B 7A 7A 7A 7A 7A 79 7B 7B 79 7A 79 7B 79 7A 7A 7A 7A 7A 7A 7A 7A 7A 7A 7B 7A 79 7A 7B 7A 79 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7B 79 7B 79 79 7B 7B 79 79 7A 7A 7A 7A 7A 7B 7A 7A 7B 7B 7A 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 79 7B 79 79 79 7B 7A 79 79 7A 7B 7A 7A 7A 7B 7A 7A 7A 7B 7A 7A 7A 7B 7B 7A 7A 7B 7B 7B 7A 7A 7B 7A 7A 7B 7B 79 7A 7B 7B 7A 7B 7A 7B 79 79 7A 7A 7A 79 7A 7B 7A 7A 7A 7A 7A 79 7A 7B 7A 7A 7A 7A 7A 7A 7A 7B 7A 7A 7A 7A 7B 79 7A 7B 7B 79 7A 7B 7B 79 79 79 7A 79 79 7A 7A 7A 79 7A 7B 79 79 7A 7B 7A 79 7A 7B 7A 7A 7A 7B 7A 79 7A 7B 7A 7B 7A 7B 79 79 79 7A 7B 79 7A 7A 7B 7A 79 7A 7B 7A 7A 7A 7B 7A 79 7A 7B 7A 7A 7A 7B 7B 7A 7B 7B 7B 7A 7B 7B 7B 79 7A 7B 7B 79 7B 7B 79 79 7A 7A 7B 7A 79 7A 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7B 7A 7A 7B 7B 7A 7B 7B 7B 79 79 7B 7B 79 79 79 7B 79 79 7A 7A 7A 79 7A 7A 7A 7A 7B 7A 7A 79 7A 7B 79 79 7A 7B 79 7A 7B 7B 7A 79 7A 7B 7B 79 7B 7B 7B 79 79 7B 79 7A 79 7A 7A 79 79 7A 7A 7A 7A 7A 7A 79 79 7A 7A 79 79 7A 7A 7A 7A 7A 7A 7A 79 7A 7B 7A 7A 7A 7B 7A 7A 7A 7B 7A 79 7A 7B 7A 7A 7A 7B 7B 7A 7B 7A 7B 7A 7A 7B 7B 7B 7A 7B 7B 7B 7A 7B 7B 7A 7A 7B 7B 79 7A 7B 7B 79 79 7A 7B 79 7A 7A 79 7A 7A 7A 7B 7A 7A 7A 7B 7A 7A 7A 7B 7A 7A 7A 7B 7B 7A 7B 7B 7B 7A 7B 7B 7A 7A 79 7B 79 7A 7A 79 7B 79 7A 7B 7B 7A 7A 7B 7B 7A 7A 7B 7B 7A 79 7A 7B 79 7A 7A 7B 7A 79 7A 7B 79 79 7A 7B 7A 79 7B 7B 7A 79 7A 7B 7A 79 7A 7A 7A 79 79 7A 7A 79 7A 7A 79 79 79 7A 7B 79 7A 7A 7B 7A 7A 7A 7A 7A 7A 7A 7A 7A 79 7A 7A 79 79
Последний раз редактировалось olegue Пн ноя 14, 2022 19:15:06, всего редактировалось 1 раз.
не важно в каком режиме работает Sim800...
важно что таймер цифрует со скоростью 8к и всё что нацифрует таймер должно быть доставлено в яву))
таймер выдаёт 8000 байт в секунду.
и все 8000 байт (не важно по частям или все сразу) должны быть доставлены яве.
и все байты (8000 байт в секунду) ява записывает в файл.
а у тебя такое впечатление что не все 8000 байт доставляются в яву...
твой таймер цифрует то 7998 байт в секунду... то 7999 байт в секунду... то 8000 байт в секунду...
иначе откуда в записанном файле пробелы ? если бы таймер чётко цифровал 8000 байт в секунду... то на записи было бы видно один сплошной непрерывный поток байт !
а мы такого не видим...
для проверки непрерывности потока можешь пронумеровать все байты в своей ардуине... ))
0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9...
в такой же последовательности ты их увидишь в записи...
0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9...
если будут пропущенные байты в потоке...
0,1,2,3,6,7,8,9,0,1,2,3,4,5,7,8,9,0,2,3,4,5,6,0,1,2,3,4,5,6,7,8,9...
значит... выкинь свою ардуину)) или Sim800... ))
Добавлено after 1 hour 59 seconds:
для проверки звукозаписывающей аппаратуры обычно используют генераторы стандартных сигналов (ГСС). но под рукой ГСС у меня нет...
поэтому сделаем по другому... вместо ГСС используем таймер ардуины...
вот я для проверки вместо звука передаю просто пронумерованные батый...
0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9...
по 100 байт в пакете чётко видно что каждый пакет заканчивается 9... а начинается 0...
ни одного пропущенного байта у меня нет))
в записи тоже самое... у меня непрерывный поток 8000 байт в секунду.

в наушниках я слышу непрерывный тон 1 кгц. (8000/10=1 кгц)
это значит что таймер ардуины (на ATmega328) работает с частотой ровно 8 кгц (частота прерывания таймера).
ISR(TIMER2_COMPA_vect) {
//ADMUX = 0x60; // set ADC to read pin A0, ADLAR to 1 (left adjust)
sbi(ADCSRA, ADSC); // start ADC sample
while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready
}
вот такие занимательные эксперименты можно проводить со звуком... ардуиной... и явой))

а может у тебя просто пакеты теряются ? проверял ?
на такое наш плеер не рассчитан...
важно что таймер цифрует со скоростью 8к и всё что нацифрует таймер должно быть доставлено в яву))
таймер выдаёт 8000 байт в секунду.
и все 8000 байт (не важно по частям или все сразу) должны быть доставлены яве.
и все байты (8000 байт в секунду) ява записывает в файл.
а у тебя такое впечатление что не все 8000 байт доставляются в яву...
твой таймер цифрует то 7998 байт в секунду... то 7999 байт в секунду... то 8000 байт в секунду...
иначе откуда в записанном файле пробелы ? если бы таймер чётко цифровал 8000 байт в секунду... то на записи было бы видно один сплошной непрерывный поток байт !
а мы такого не видим...
для проверки непрерывности потока можешь пронумеровать все байты в своей ардуине... ))
0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9...
в такой же последовательности ты их увидишь в записи...
0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9...
если будут пропущенные байты в потоке...
0,1,2,3,6,7,8,9,0,1,2,3,4,5,7,8,9,0,2,3,4,5,6,0,1,2,3,4,5,6,7,8,9...
значит... выкинь свою ардуину)) или Sim800... ))
Добавлено after 1 hour 59 seconds:
для проверки звукозаписывающей аппаратуры обычно используют генераторы стандартных сигналов (ГСС). но под рукой ГСС у меня нет...
поэтому сделаем по другому... вместо ГСС используем таймер ардуины...
вот я для проверки вместо звука передаю просто пронумерованные батый...
0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,8,9,0,1,2,3,4,5,6,7,8,9...
по 100 байт в пакете чётко видно что каждый пакет заканчивается 9... а начинается 0...
ни одного пропущенного байта у меня нет))
в записи тоже самое... у меня непрерывный поток 8000 байт в секунду.
в наушниках я слышу непрерывный тон 1 кгц. (8000/10=1 кгц)
это значит что таймер ардуины (на ATmega328) работает с частотой ровно 8 кгц (частота прерывания таймера).
ISR(TIMER2_COMPA_vect) {
//ADMUX = 0x60; // set ADC to read pin A0, ADLAR to 1 (left adjust)
sbi(ADCSRA, ADSC); // start ADC sample
while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready
}
вот такие занимательные эксперименты можно проводить со звуком... ардуиной... и явой))
а может у тебя просто пакеты теряются ? проверял ?
на такое наш плеер не рассчитан...
[uquote="olegue",url="/forum/viewtopic.php?p=4320170#p4320170"]Так вот когда только запускаешь программа, первые 1-1.5 сек вроде как хороший звук,а дальеш пошли затыки и ничего не разобрать. Если бы в программе на яве где то был буфер секунда 5, тогда наверно вы бы было хорошо[/uquote]
ещё раз... разберём подробно))
пункт 1. - буфер.
в яве 2 буфера.
-первый буфер сокета.
DatagramSocket socket = new DatagramSocket(80);
по умолчанию размер буфера сокета 8 килобайт (или 8192 байт).
размер буфера сокета можно менять командой
//socket.setReceiveBufferSize(1); // размер буфера RX Ethernet
но мы этого пока делать не будем... оставим по умолчанию 8 килобайт (8192 байт).
-второй буфер плеера.
static byte[] din_byte_wavr = new byte[1472];
размер буфера плеера мы устанавливаем сами... какой захотим ))
Как это работает ?
1. все пакеты Ethernet прилетаю на комп и записываются в буфер сокета по умолчанию 8 килобайт (8192 байт).
2. плеер берёт пакеты из буфера сокета и переносит их в свой буфер.
RX_line.write(din_byte_wavr, 0, RX_len);//RX_len
при этом буфер плеера подстаивается под размер пакета Ethernet.
в итоге у нас в яве двойная буферизация)) что это даёт ?
а то что наш плеер в яве не чувствительный к задержкам (джиттер) передачи пакетов Ethernet.
вот анализатор пакетов заводского скайпа... обрати внимание что прилетело два пакета подряд... но благодаря двойной буферизации на работу скайпа это не влияет)) а вот анализатор пакетов самодельного скайпа... обрати внимание что прилетело два пакета подряд... но благодаря двойной буферизации на работу скайпа это не влияет)) благодаря двойной буферизации можно передавать пакеты по одному.
1024.........1024.........1024.........1024.........
а можно передавать пакеты по несколько штук за раз... пачками))
......1024.1024.1024.1024.........
на работу плеера это не влияет... потому что все пакеты сначала попадают в буфер сокета.
1024.1024.1024.1024.
а плеер забирает пакеты из буфера сокета и передаёт в свой буфер по одному пакету.
1024.........1024.........1024.........1024.........
в динамике мы слышим равномерный непрерывный поток)) никаких затыков нет !
добавление ещё одного буфера в программу на секунд 5... ничего не даст))
просто в динамике мы услышим звук с задержкой на 5 секунд.
Вывод:
в яве буфера и так хорошо работают. Их трогать не надо))

пункт 2. - поток.
чтобы плеер играл без затыков надо чтоб ардуина цифровала и передавала ровно 8000 байт в секунду.
тогда передатчик (ардуина) и приёмник (ява) будут работать синхронно.
передатчик (ардуина) - цифрует и передавала ровно 8000 байт в секунду.
приёмник (ява) - принимает и играет ровно 8000 байт в секунду.
всё синхронизировано)) никаких затыков нет !
у тебя (судя по записям) теряются байты в пакетах... или теряются сами пакеты... до конца пока не ясно))

как проверить не теряются ли байты в пакетах ?
точнее нас интересуют не теряется ли порядок байт в пакетах...
проверить очень просто - достаточно их пронумеровать))
мы передаём 1024 байт это 00-FF... 00-FF... 00-FF... 00-FF... (или 256 + 256 + 256 +256)
смотрим... все байты пришли строго по порядку... 00-FF... 00-FF... 00-FF... 00-FF... (или 256 + 256 + 256 +256)
всё хорошо))

ещё бывает что скайп зависает... особенно часто если скайп работает по радио... и при слабом сигнале...))
это теряются пакеты.
как проверить не теряются ли пакеты ?
проверить очень просто - достаточно их пронумеровать))
00-FF... (или 256)
смотрим... все пакеты пришли без потерь)) строго по порядку... 00-FF... (или 256)
всё хорошо))

к слову... пакеты Ethernet изначально уже пронумерованы))
в заголовке IP пакета есть поле "Идентификатор"
https://ru.wikipedia.org/wiki/IP#Версия_4_(IPv4) если откроем анализатор то увидим что комп уже изначально пронумеровал все Ethernet пакеты))
ещё раз... разберём подробно))
пункт 1. - буфер.
в яве 2 буфера.
-первый буфер сокета.
DatagramSocket socket = new DatagramSocket(80);
по умолчанию размер буфера сокета 8 килобайт (или 8192 байт).
размер буфера сокета можно менять командой
//socket.setReceiveBufferSize(1); // размер буфера RX Ethernet
но мы этого пока делать не будем... оставим по умолчанию 8 килобайт (8192 байт).
-второй буфер плеера.
static byte[] din_byte_wavr = new byte[1472];
размер буфера плеера мы устанавливаем сами... какой захотим ))
Как это работает ?
1. все пакеты Ethernet прилетаю на комп и записываются в буфер сокета по умолчанию 8 килобайт (8192 байт).
2. плеер берёт пакеты из буфера сокета и переносит их в свой буфер.
RX_line.write(din_byte_wavr, 0, RX_len);//RX_len
при этом буфер плеера подстаивается под размер пакета Ethernet.
в итоге у нас в яве двойная буферизация)) что это даёт ?
а то что наш плеер в яве не чувствительный к задержкам (джиттер) передачи пакетов Ethernet.
вот анализатор пакетов заводского скайпа... обрати внимание что прилетело два пакета подряд... но благодаря двойной буферизации на работу скайпа это не влияет)) а вот анализатор пакетов самодельного скайпа... обрати внимание что прилетело два пакета подряд... но благодаря двойной буферизации на работу скайпа это не влияет)) благодаря двойной буферизации можно передавать пакеты по одному.
1024.........1024.........1024.........1024.........
а можно передавать пакеты по несколько штук за раз... пачками))
......1024.1024.1024.1024.........
на работу плеера это не влияет... потому что все пакеты сначала попадают в буфер сокета.
1024.1024.1024.1024.
а плеер забирает пакеты из буфера сокета и передаёт в свой буфер по одному пакету.
1024.........1024.........1024.........1024.........
в динамике мы слышим равномерный непрерывный поток)) никаких затыков нет !
добавление ещё одного буфера в программу на секунд 5... ничего не даст))
просто в динамике мы услышим звук с задержкой на 5 секунд.
Вывод:
в яве буфера и так хорошо работают. Их трогать не надо))
пункт 2. - поток.
чтобы плеер играл без затыков надо чтоб ардуина цифровала и передавала ровно 8000 байт в секунду.
тогда передатчик (ардуина) и приёмник (ява) будут работать синхронно.
передатчик (ардуина) - цифрует и передавала ровно 8000 байт в секунду.
приёмник (ява) - принимает и играет ровно 8000 байт в секунду.
всё синхронизировано)) никаких затыков нет !
у тебя (судя по записям) теряются байты в пакетах... или теряются сами пакеты... до конца пока не ясно))
как проверить не теряются ли байты в пакетах ?
точнее нас интересуют не теряется ли порядок байт в пакетах...
проверить очень просто - достаточно их пронумеровать))
мы передаём 1024 байт это 00-FF... 00-FF... 00-FF... 00-FF... (или 256 + 256 + 256 +256)
смотрим... все байты пришли строго по порядку... 00-FF... 00-FF... 00-FF... 00-FF... (или 256 + 256 + 256 +256)
всё хорошо))
ещё бывает что скайп зависает... особенно часто если скайп работает по радио... и при слабом сигнале...))
это теряются пакеты.
как проверить не теряются ли пакеты ?
проверить очень просто - достаточно их пронумеровать))
00-FF... (или 256)
смотрим... все пакеты пришли без потерь)) строго по порядку... 00-FF... (или 256)
всё хорошо))
к слову... пакеты Ethernet изначально уже пронумерованы))
в заголовке IP пакета есть поле "Идентификатор"
https://ru.wikipedia.org/wiki/IP#Версия_4_(IPv4) если откроем анализатор то увидим что комп уже изначально пронумеровал все Ethernet пакеты))
Код: Выделить всё
if ((micros()-timerHour)>125){ /// 8 КГЦ
myGsm.write(char(1));
myGsm.write(char(2));
myGsm.write(char(3));
myGsm.write(char(4));
myGsm.write(char(5));
myGsm.write(char(6));
myGsm.write(char(7));
myGsm.write(char(9));
myGsm.write(char(0));
timerHour=micros();
}зарядил таймер на 8кгц и отправил нумерованный данные
результат файле
Добавлено after 3 minutes 19 seconds:
счас тока увидел пропустил "8" при отправке - это нужно учесть при просмотре
- Вложения
-
- ПАКЕТЫ И БАЙТЫ ПО ПОРЯДКУ.txt
- (146.8 КБ) 74 скачивания
хорошо))
радио модуль передаёт нормально.
теперь передаём звук...
у меня при передачи звука непрерывный поток... у тебя при передачи звука поток прерывается... у тебя какие то проблемы в модуле оцифровки...

радио модуль передаёт нормально.
теперь передаём звук...
у меня при передачи звука непрерывный поток... у тебя при передачи звука поток прерывается... у тебя какие то проблемы в модуле оцифровки...
Последний раз редактировалось roman.com Ср ноя 16, 2022 16:43:31, всего редактировалось 1 раз.
второй файл поинтереснее, короче вывод такой что приходят байты в целом нормально
- Вложения
-
- ПАКЕТЫ И БАЙТЫ ПО ПОРЯДКУ2.txt
- (189.56 КБ) 82 скачивания
"в целом нормально" тут неуместно))olegue писал(а):приходят байты в целом нормально
мы делаем цифровую связь... а не пирожки лепим))
на второй записи видим потерю байт... из-за этого происходи прерывание потока...
пустил на вход сигнал 1000 гц. Записал поток. Вначале 1.5 секунды нормально. Потом пошли прерывы. Но в файле это не слышно если слушаь как сырой в SOUND FORGE
Добавлено after 4 minutes 22 seconds:
СПЕКТР JAVA.TXT
Добавлено after 4 minutes 22 seconds:
СПЕКТР JAVA.TXT
- Вложения
-
- Screenshot_1_SOUNDFORGE_1000ГЦ.png
- (38.51 КБ) 50 скачиваний
-
- Java.txt
- (85.94 КБ) 72 скачивания


