Например TDA7294

Форум РадиоКот • Просмотр темы - Ардуино - запись звука
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 03:48:40

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 696 ]     ... , , , 28, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Пн ноя 21, 2022 16:16:52 
Собутыльник Кота
Аватар пользователя

Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 2957
Откуда: Беларусь
Рейтинг сообщения: 0
Цитата:


for (xRX=0; xRX<RX_len; xRX++) {
din_byte_wavr[xRX] = (byte) RX_int[xRX];//int > din(динамик)
};

//Запись аудиоданных в выходной буфер линии передачи данных.
RX_line.write(din_byte_wavr, 0, RX_len);//RX_len

Роман можете ли сделать буферизованый вывод, а не по 1 пакету?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Пн ноя 21, 2022 21:56:03 
Друг Кота

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

поставь задержку и жди пока пакеты накопятся в сокете... сколько надо столько и сделай...

допустим надо 1 секунду...

останавливаем поток и ждём 1 секунду....

if (flag_bufer == 0) {
// флаг буфер
flag_bufer = 1;
//останавливаем поток на 1 с.
//ждём пока накопятся пакеты в буфере сокета...
try {Thread.sleep(1000);} catch (Exception e){}
};
Вложение:
Udp.txt [18.01 KiB]
Скачиваний: 44

а тем временем... наша ардуина уже во всю передаёт пакеты... по Интернету)) 10 Мбит/с
Вложение:
схема.jpg [91.86 KiB]
Скачиваний: 45

Вложение:
схема_тест.jpg [123.74 KiB]
Скачиваний: 44

скорость ардуины до 10 Мбит/с ! Карл ! )))
это тебе не смешные 115200 сериала ))
:))
вот что могучий Ассемблер с ардуиной делает ))
:idea:
надо ещё добавить в ардуину MII интерфейс... скорость увеличится ещё почти в два раза))
:tea:

правда всё это без учёта контрольный сумм...
-IP заголовка
-UDP пакета
-Ethernet пакета
-про шифрование я вообще молчу))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Вт ноя 22, 2022 12:28:45 
Собутыльник Кота
Аватар пользователя

Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 2957
Откуда: Беларусь
Рейтинг сообщения: 0
ясно , но у меня нету 10мбит

Добавлено after 13 minutes 29 seconds:
не , такой буфер не прокатит, это лишь отрочка воспроизвдения

Я бы хотело буфер который бы работал в два потока,
необошльшая пауза в начале, сбор пакетов в массив1, потом воспроизвдение массива1 и одновременный сбор массива2, что-то подобии того как сделао в ардуино для сброса на флэшку.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Вт ноя 22, 2022 15:57:40 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6867
Откуда: .ru
Рейтинг сообщения: 2
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]
Скачиваний: 54

вместо таймера - сокет...
вместо модуля - плеер...

када прилетает пакет срабатывает прерывание сокета (точнее срабатывает прерывание процессора компа... который запихивает все входящие пакеты в буфер сокета)

все входящие пакеты по 1024 байт накапливаются в буфере...
када буфер заполнится передаём буфер плееру...

можно передавать UDP пакеты по 1024 байт...
можно передавать UDP пакеты по 1 байту...

только никто по одному байту не передаёт))
минимальный размер UDP пакета 18 байт...
если размер UDP пакета меньше 18 байт то роутер выдаст ошибку.

если передавать по 1 байту
1 байт.
то модуль допишет 17 байт за тебя автоматом ))
00000000000000000
на выходе модуля получим те же 18 байт
100000000000000000

только нафига всё это надо... мне например вообще не понятно...

у тебя модуль теряет байты и пакеты...
при таких условиях ни о какой нормальной передачи звука даже речи быть не может...

вместо того что бы заниматься всякой ерундой... уже который день)) со всякими буферами... лучше бы настроил свой модуль... чтоб он не терял пакеты и байты... тогда всё будет хорошо))
:tea:


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Вт ноя 22, 2022 17:08:17 
Собутыльник Кота
Аватар пользователя

Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 2957
Откуда: Беларусь
Рейтинг сообщения: 0
Код:
   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, 10240);//
      }
      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, 10240);//
      }


Такой буфер я тоже сделал, только у Вас получилось более компактно и красиво.
Только вот пока RX-line не проиграет один буфер второй не начнет наполнятся.

я говорил про фоновое наполнение буфера2 в момент проигрыша буфера1
в данном коде такое не происходит. В итоге я , конечно запустил этот код и он ожидаемо отработал равнопериодными затыками с частой формирования буферов

roman.com писал(а):
только нафига всё это надо... мне например вообще не понятно...

у тебя модуль теряет байты и пакеты...
при таких условиях ни о какой нормальной передачи звука даже речи быть не может...


я с этим не спорю, целостность пакет в моем случае через GSM, ну скажем ,так себе. Я провел опыт, буферизовав до 10кб данных, проиграв их, и получил хороший результат.
Но я веду борьбу не за идеализацию передачи пакетов, которой в итоге может и не случится, а с низкой скоростью канал, не способного передать (принять) на этой скорости без нормльаной буферизации

на 10мбит канале такой проблемы и в помине не будет.

Короче, вопрос такой. Как сделать нормальную буферизацию? Я немного почитал по яву, и в ней можно создавать независимые потоки thread. но как это сделать пока не разобрался.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Вт ноя 22, 2022 18:13:08 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6867
Откуда: .ru
Рейтинг сообщения: 2
olegue писал(а):
пока RX-line не проиграет один буфер второй не начнет наполнятся.

возможно...
для меня это не критично))
olegue писал(а):
я веду борьбу не за идеализацию передачи пакетов, которой в итоге может и не случится, а с низкой скоростью канал, не способного передать (принять) на этой скорости без нормльаной буферизации

на 10мбит канале такой проблемы и в помине не будет.

ещё раз... повторим пройденое))

1.
скорость канала нас не волнует.
115200 или 10 мбит... главное чтоб звук успевал передаваться))
8 бит х 8 кгц = 64 кбит - достаточно.

буферизация нужна из-за джиттера.

https://ru.wikipedia.org/wiki/Джиттер

к примеру скайп.
пакеты идут с разной задержкой... несколько миллисекунд...
Вложение:
Skype_ (1).jpg [203.43 KiB]
Скачиваний: 32

для устранения джиттера достаточно одного буфера (в нашем случае буфера сокета)...
можно добавить задержку... несколько миллисекунд...
а можно ничего не добавлять)) джиттер сам выровняется... в процессе воспроизведения...
делать кучу буферов нет никакого смысла...

а сколько у тебя задержка ? пол часа ? )) ну тогда добавь задержку на пол часа...
:)))

Добавлено after 10 minutes 19 seconds:
Я немного почитал по яву, и в ней можно создавать независимые потоки thread. но как это сделать пока не разобрался.

очень просто))

в любом месте программы (после main) добавь поток...

в самодельном скайпе куча потоков)) звук... видео... текст... данные... всё в отдельных потоках... чтоб не пересекались))
особенно звук с микрофона и звук на динамик не должны пересекаться...


создадим да потока в яве... в дополнение к главному потоку (main):

////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////поток 1 TX_wav:
Thread Thready_1 = new Thread(new Runnable()
{
public void run() // поток 1
{


// сюда пишем свой код...


} //run()
});//Thread(new Runnable()
Thready_1.start(); // start поток 1
////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////поток 2 RX_wav:
Thread Thready_2 = new Thread(new Runnable()
{
public void run() // поток 2
{


// сюда пишем свой код...


} //run()
});//Thread(new Runnable()
Thready_2.start(); // start поток 2
////////////////////////////////////////////////////////////////////////////////

итого: у нас 3 потока в яве...
-(main)
-поток 1
-поток 2
:tea:

а теперь у тебя будет головная боль... как эти потоки синхронизировать ))
все потоки работают как попало... в разнобой... нужен флаг синхронизации потоков... а добавление любых флагов и их опрос приведёт к задержкам выполнения кода программы...
:o

ура !!! )) у нас появилась ещё одна головная боль !
:)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Вт ноя 22, 2022 22:11:43 
Собутыльник Кота
Аватар пользователя

Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 2957
Откуда: Беларусь
Рейтинг сообщения: 0
roman.com писал(а):
115200 или 10 мбит... главное чтоб звук успевал передаваться))
8 бит х 8 кгц = 64 кбит - достаточно.


согласен, но что-то идет не так. Вероятно придется вернуться о исследованию модуля и канала.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Вт ноя 22, 2022 23:59:11 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6867
Откуда: .ru
Рейтинг сообщения: 2
первая умная мысль)) все нормальные люди начинают с настройки радиоканала... а потом уже передают...
Вложение:
мой_1.jpg [233.59 KiB]
Скачиваний: 37

Вложение:

потеря байт происходит потому что ты не дождавшись окончания передачи пакета записываешь следующий пакет...
в итоге происходит наложение пакетов... потеря байт и т.д.

например в изернет модуле перед записью нового пакета надо дождаться отправки предыдущего пакета...

1.
загружаем в изернет модуль пакет... команда 0x24
2.
загружаем команду передачи SEND... команда 0x01
3.
читаем статус... ответ 0x01
читаем статус... ответ 0x01
читаем статус... ответ 0x01
читаем статус... ответ 0x00 (по окончании передачи статус меняется на 0х00)
после этого можно загружать в изернет модуль следующий пакет.
4.
переходим к пункту 1.

примерно вот так работает изернет модуль))

у тебя должно быть примерно так же... только у тебя другие команды...
:tea:

можно проверить скорость модуля...
передаём 1 пакет/c - смотрим анализатор - нормально))
передаём 10 пакет/c - смотрим анализатор - нормально))
передаём 100 пакет/c - смотрим анализатор - потеря байт...
всё ясно))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Ср ноя 23, 2022 10:51:49 
Собутыльник Кота
Аватар пользователя

Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 2957
Откуда: Беларусь
Рейтинг сообщения: 0
немного офтоп

https://github.com/tabatsky/NetworkingA ... /Main.java

перебираю тут в учебных целях код
вот этот код компилируется нормально, но не "видит" микрофон
Посмотрите пож у себя.
Спойлер
Код:
package jAudioTransmitter;

import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;

public class Main {
   static List<Sender> senderList = new ArrayList<Sender>();
   static MicrophoneReader mr;
   static volatile Integer sendersCreated = 0;
   static volatile Integer numBytesRead;
   static volatile Integer senderNotReady = 0;
   static volatile byte[] data;
   static final Object monitor = new Object();
   
   public static void main(String[] args) {
      try {
         mr = new MicrophoneReader();
         mr.start();
         
         ServerSocket ss = new ServerSocket(7373);
         
         Scanner sc = new Scanner(System.in);
         
         //while (!sc.next().equals("quit")) {
         while (true) {
            Socket s = ss.accept();
            
            Sender sndr = new Sender(s);
            senderList.add(sndr);
            sndr.start();
         }
         
      } catch (Exception e) {
         e.printStackTrace();
      } finally {
         mr.setFinishFlag();
         for (Sender sndr: senderList) {
            sndr.setFinishFlag();
         }
      }
   }

   static class Sender extends Thread {
      Socket s;
      volatile boolean finishFlag;
      int position;
      int senderNumber;
   
      public Sender(Socket s) {
         this.s = s;
         finishFlag = false;
         System.out.print("Sender started: #");
         senderNumber = ++sendersCreated;
         System.out.println(senderNumber);
      }
      
      public void setFinishFlag() {
         finishFlag = true;
      }
      
      public void run() {
         try {
            OutputStream os = s.getOutputStream();
            
            while (!finishFlag) {
               synchronized (monitor) {
                  senderNotReady++;
               
                  monitor.wait();
                  
                  os.write(data, 0, numBytesRead);
                  os.flush();
            
                  senderNotReady--;
               }
               System.out.print("Sender #");
               System.out.print(senderNumber);
               System.out.print(": ");
               System.out.print(numBytesRead);
               System.out.println(" bytes sent");
            }
         } catch (Exception e) {
            e.printStackTrace();
         }
      }
   }
   
   static class MicrophoneReader extends Thread {
      volatile boolean finishFlag;
      
      AudioFormat format = new AudioFormat(16000.0f, 16, 2, true, false);
      //AudioFormat format = new AudioFormat(8000.0f, 8, 1, true, false);
      int CHUNK_SIZE = 10240;
       TargetDataLine microphone;
      
      public MicrophoneReader() {
         finishFlag = false;
         System.out.println("Microphone reader started");
      }

      public void setFinishFlag() {
         finishFlag = true;
      }
      
      public void run() {
         try {
            microphone = AudioSystem.getTargetDataLine(format);
            
            DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
              microphone = (TargetDataLine) AudioSystem.getLine(info);
              microphone.open(format);
            
             
              data = new byte[CHUNK_SIZE];
              microphone.start();
                           
              while (!finishFlag) {
                 synchronized (monitor) {
                    if (senderNotReady==sendersCreated) {
                       monitor.notifyAll();
                       continue;
                    }
                    
                    numBytesRead = microphone.read(data, 0, CHUNK_SIZE);   
                 }

                 System.out.print("Microphone reader: ");
                 System.out.print(numBytesRead);
                 System.out.println(" bytes read");
              }
         } catch (LineUnavailableException e) {
            e.printStackTrace();
         }
      }
   }
}



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Ср ноя 23, 2022 14:23:35 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6867
Откуда: .ru
Рейтинг сообщения: 2
import java.io.OutputStream;
import java.net.ServerSocket;
это для TCP...

нормальные люди передают звук по UDP...))

import java.net.DatagramPacket;
import java.net.DatagramSocket;
это для UDP...

долго ковыряться... проще по новой написать))

микрофон...

Спойлер
Код:

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.TargetDataLine;


static int TX_flag_AudioFormat = 0;   //

static byte[] mic_byte_wavt = new byte[1024];//(микрофон)
static int [] TX_int_wavt = new int[1024];   //UDP

////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////поток 1 TX_wav:
Thread Thready_1 = new Thread(new Runnable()
{
  public void run() // поток 1
  {
    while(true)   
    {
      //////////////////////////////////////////////////////// TX_wav:
       //8000,11025,16000,22050,44100
       int TX_sampleRate = 8000;    //8000
     //int TX_sampleRate = 11025;   //11025
     //int TX_sampleRate = 16000;   //16000
       //int TX_sampleRate = 22050;   //22050
       //int TX_sampleRate = 44100;   //44100
     //////////////////////////////////////////////////////// TX_wav:
       int TX_sampleSizeInBits = 8; //8 бит
          //int TX_sampleSizeInBits = 16;//16 бит
     //////////////////////////////////////////////////////// TX_wav:
          int TX_channels = 1;           //1 моно, 2 стерео
          //true-знак(-127...+127/-32768...+32767)(8 бит/16 бит-PCM_SIGNED)
          //boolean TX_signed = true;       
          boolean TX_signed = false;   //false-без знака(0...255)(только 8бит-PCM_UNSIGNED) 
     //////////////////////////////////////////////////////// TX_wav:
          //boolean TX_bigEndian = false;//false little-endian//порядок байт
          boolean TX_bigEndian = true;   //true big-endian;//порядок байт
          AudioFormat TX_format =
          new AudioFormat(TX_sampleRate, TX_sampleSizeInBits, TX_channels, TX_signed, TX_bigEndian);
     //////////////////////////////////////////////////////// TX_wav:
          //строка данных - для чтения захваченных данные из буфера целевой строки данных.
          TargetDataLine TX_line = null;
          DataLine.Info TX_info = new DataLine.Info(TargetDataLine.class, TX_format); 
          //////////////////////////////////////////////////////// TX_wav:
     try {
      TX_line = (TargetDataLine)AudioSystem.getLine(TX_info);
     } catch (LineUnavailableException e) {
      e.printStackTrace();
     }
     //////////////////////////////////////////////////////// TX_wav:
     try {
       TX_line.open(TX_format);
     } catch (LineUnavailableException e) {
      e.printStackTrace();
     }
     //////////////////////////////////////////////////////// TX_wav: start:
          TX_line.start();   
         //TX_line.stop();
         //TX_line.close();
         //////////////////////////////////////////////////////// TX_wav: run:
         while(TX_flag_AudioFormat == 1) 
     {
         //////////////////////////////////////////////////// TX_wav: TX_line:
              //Считывает аудиоданные из входного буфера линии передачи данных.// ждём...
         TX_line.read(mic_byte_wavt, 0, TX_len_wavt);//(микрофон)
         //////////////////////////////////////////////////// TX_wavt: mic(микрофон) > int:
         for (xTX_wavt=0; xTX_wavt<1024; xTX_wavt++) {         
             TX_int_wavt[xTX_wavt] = mic_byte_wavt[xTX_wavt];    //byte 0...127|-127...0 > int 0...255     
         if (TX_int_wavt[xTX_wavt] < 0){TX_int_wavt[xTX_wavt] += 256;}
         };
         //////////////////////////////////////////////////// TX_wavt: Ethernet
//         TX_Ethernet_wavt(socket_wav);   // > TX_Ethernet_wavt
              ////////////////////////////////////////////////////
     }//while(TX_flag_AudioFormat == 1) 
      //////////////////////////////////////////////////////// stop, close:
      TX_line.stop();
      TX_line.close();
      }//while(TX_flag_AudioFormat)
      //////////////////////////////////////////////////////// control_wavt: run END
     
    //////////////////////////////////////////////////////////
    }//while(true)
  } //run()
});//Thread(new Runnable()
Thready_1.start();   // start поток 1
////////////////////////////////////////////////////////////////////////////////


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Сб ноя 26, 2022 00:19:36 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6867
Откуда: .ru
Рейтинг сообщения: 2
где наш звук ?))
Вложение:
схема_тест.jpg [117.29 KiB]
Скачиваний: 55

159 пак/с * 20 байт = 3000 байт/с.

а для передачи звука надо 8000 байт/с.

надо немного подкрутить программу... поднять скорость в 3 раза... и можно уже передавать звук ))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Пн ноя 28, 2022 16:05:10 
Собутыльник Кота
Аватар пользователя

Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 2957
Откуда: Беларусь
Рейтинг сообщения: 0
нету звука!
Тема какая-то беспросветная!

может попытаться с esp по wifi передать звук попробовать, а потом уже к sim800 вернуться.

Добавлено after 55 minutes 15 seconds:
попробую тправить через Serial в Esp01 и принять по wifi. по крайней мере сериал справлвяется с потоком 64кбит.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Пн ноя 28, 2022 18:34:09 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6867
Откуда: .ru
Рейтинг сообщения: 0
olegue писал(а):
Тема какая-то беспросветная!

:))
это потому что ты всё делаешь не последовательно...
сначала надо настроить радио канал... измерить скорость... и добиться стабильной работы... а потом уже всё остальное...

а я сразу сказал что надо начинать с Ethernet... на худой конец WiFi...
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Вт ноя 29, 2022 12:00:41 
Собутыльник Кота
Аватар пользователя

Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 2957
Откуда: Беларусь
Рейтинг сообщения: 0
roman.com, у Вас есть программа чтения потокового аудио с ком порта компьюетра?

Добавлено after 39 seconds:
может быь на Яве что-то писали уже?

Добавлено after 1 minute 17 seconds:
цель- узнать нормально ли в через компорт течет поток 64кбс

Добавлено after 38 minutes 17 seconds:
olegue писал(а):
Тема какая-то беспросветная!

:))
это потому что ты всё делаешь не последовательно...


то что я делаю это все по своему и так как себе представляю, - это совершенно нормальное явление. иначе бы и не о чем было поговорить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Вт ноя 29, 2022 14:50:40 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6867
Откуда: .ru
Рейтинг сообщения: 0
с ком порта компьюетра... нету))
ява идет с завода без чтения сом порта...
хотя есть любители которые пишут библиотеки для com порта...
я что-то пробовал... но нифига не заработало)) больше не пытался ))
я н пользуюсь com портами ПК... мне изернет и заводских сокетов хватает.))
у тебя есть куча помощников... от протеусов до анализаторов и самой явы (которая всё записывает и показывает и воспроизводит)...
делать ещё анализатор com порта... это по моему уже перебор))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Вт ноя 29, 2022 15:05:00 
Собутыльник Кота
Аватар пользователя

Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 2957
Откуда: Беларусь
Рейтинг сообщения: 0
тут компорт как бы промежуточное звено.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Вт ноя 29, 2022 16:49:16 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6867
Откуда: .ru
Рейтинг сообщения: 0
у меня тоже есть промежуточное звено)) и не одно... ))

добавим в наш самодельный изернет модуль вывод INT... сделаем как в заводском модуле))
открываем протеус... смотрим...
1. загрузка байт в модуль... сработал вывод INT...
2. загрузка байт в модуль завершена... сработал вывод INT...
3. передача байт по интернету завершена... сработал вывод INT...
Вложение:
протеут_0.jpg [20.05 KiB]
Скачиваний: 30

тестируй свою ардуину в протеусе... очень удобно))
Вложение:
ардуина в протеусе)).jpg [96.96 KiB]
Скачиваний: 31

:tea:

Добавлено after 31 minute 55 seconds:
далее.. поднимаем скорость))
а как поднять скорость ?
самый простой вариант - увеличить UDP пакет...
в прошлый раз передавали по 18 байт...
в UDP пакете есть ещё заголовок 42 байт + преамбула 8 байт + межпакетный интервал 12 байт... выше писал))
по 18 байт
Вложение:
схема_тест.jpg [117.29 KiB]
Скачиваний: 28

получили скорость 150 пак/с * 20 байт = 3000 байт/с. (грубо)

увеличим пакет до 50 байт...
Вложение:
протеус_1.jpg [21.95 KiB]
Скачиваний: 28

проверяем...
Вложение:
схема.jpg [114.75 KiB]
Скачиваний: 37

получили скорость 102 пак/с * 50 байт = 5100 байт/с.

а для передачи звука надо 8000 байт/с.

аааа ! )) чуть-чуть не хватает))
:))

можно ещё увеличить пакет... до максимального 1472 байта...
но проблема в том что ОЗУ ATmega8 больше ~ 100 байт не помещается)) в нашей конкретной схеме...
значит надо или менять схему... и брать вместо ATmega8 например ATmega328
ОЗУ ATmega328 в два раза больше ))

Добавлено after 4 minutes 53 seconds:
а шо делать ?
:dont_know:
разбираем подробно... смотрим протеус...))
-оцифровка ADC - 70 микросекунд ))
-таймер ... ~ ... меньше 1 мс
-передача по SPI - 2 мс
-расчёт CRC32 - 8 мс

больше всего времени тратится на расчёт CRC32...
надо эту часть программы оптимизировать))
:tea:

Добавлено after 8 minutes 43 seconds:
далее...
CRC32 - это 4 байта...
для правильного расчёта CRC32 надо выровнять пакет UDP - сделать кратным 4... тогда всё нормально))
Вложение:
CRC32.jpg [104.76 KiB]
Скачиваний: 37

а как посчитать CRC32 если пакет UDP - не кратный 4 ?
ээээ... вот в этой части мы застряли... ))
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Пт дек 02, 2022 01:01:20 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6867
Откуда: .ru
Рейтинг сообщения: 0
немного подкрутили программку...
теперь быстрей считаем CRC32 - 7 мс вместо 8 мс ))
получили скорость 116 пак/с * 50 байт = 5800 байт/с.
Вложение:
схема_5800.jpg [138.4 KiB]
Скачиваний: 37

а для передачи звука надо 8000 байт/с.

аааа ! )) чуть-чуть не хватает))
:))
но главное мы сделали другое...
:roll:
roman.com писал(а):
а как посчитать CRC32 если пакет UDP - не кратный 4 ?
ээээ... вот в этой части мы застряли... ))

очень просто)) делать столько интераций буфера CRC32 сколько байт в пакете ))
Вложение:
буфер CRC32.jpg [19.13 KiB]
Скачиваний: 37

теперь мы передаём пакеты любой длины... и быстрее на 10 % ))
замечательно))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Ср дек 21, 2022 20:11:24 
Собутыльник Кота
Аватар пользователя

Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52
Сообщений: 2957
Откуда: Беларусь
Рейтинг сообщения: 0
да, я был почти у цели!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ардуино - запись звука
СообщениеДобавлено: Чт дек 22, 2022 10:17:51 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6867
Откуда: .ru
Рейтинг сообщения: 0
надо было начинать с Ethernet... там скорость стабильная и пакеты не теряются))
:tea:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 696 ]     ... , , , 28, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y