Обсуждаем контроллеры компании Atmel.
Ответить

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

Сб янв 13, 2024 17:56:15

olegue писал(а):попробовал удалять паузы квадратичным методом. Если энергия буфера меньше Тресхолда, то не отправляют его.

:o :shock:
ну ты извращенец))
:)))

обычно измеряют средний уровень звука или пиковое значение звука...
когда говорим в микрофон и средний уровень звука выше некого значения - автоматически включается передача.
Screenshot_2.jpg
(94.11 KiB) Скачиваний: 30

хотя в рациях используется пиковое значение...

я использую пиковое значение в своих индикаторах...
Screenshot_1.jpg
(100.83 KiB) Скачиваний: 31

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

в простейшем случае будет так:
Код:
// Функция для определения пиковое значение в заданном буфере
int calculateEnergy(const uint8_t* buffer, int size) {
    int energy = 0;
    for (int i = 0; i < size; ++i) {
       if (buffer[i] > energy) {energy = buffer[i];}
   }
    return energy; // пиковое значение в заданном буфере
}

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

Вс янв 14, 2024 23:35:04

нашел вот такую тему, ужать в ADPCM, ужимает в половину
https://github.com/pschatzmann/arduino-adpcm-xq
Но надо разобраться как это зарядить под мои буферы, ну и затем придется раздекодить в яве, или может быть даже проще сишный udp сокет поднять.

Добавлено after 19 minutes 22 seconds:
а здесь описание простыми словами
https://zxpress.ru/article.php?id=1382& ... a433988151

Добавлено after 1 hour 7 minutes 51 second:
еще вот делали готовое решение для ADPCM на AVR для ATMEGA8 для проигрывание сжатого файла с CD карты
https://we.easyelectronics.ru/Soft/szha ... d278970235

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

Пн янв 15, 2024 15:49:46

да это я всё уже читал... но в железе не делал))
я пока не знаю где это использовать... у меня интернет 100 мбит безлимитка)) мне трафик экономить не требуется))
:tea:
у меня другая проблема - ардуина работает слишком медленно... шифрование для звука не работает...
а без шифрования передавать звук по интернету нельзя.
:tea:
единственный вариант - подключить ардуину к компу по локалке... предавать звук по локалке достаточно безопасно))
на коме запущена java которая может работать в режиме ретранслятора... с шифрованием.
:tea:
вторая java у меня запущена на телефоне... поэтому телефон тоже может работать в режиме ретранслятора...
программа для компа и телефона - одинаковые))
но передавать звук по wi-fi без шифрования запрещено)) поэтому этот вариант отпадает))
:tea:

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

Чт янв 18, 2024 15:00:01

я вот давно заметил что в моих аудио файлах, которые как известно 8бит unsigned при открытии в программах реадакторах имеется отклонение центра от 0. С чем это может быть связано? Это мне нужно делители напряжение и фильтра подстроить на входе в А0?

Изображение

Добавлено after 22 minutes 51 second:
получается что значения тишины у меня с учетом моего формата 8бит Unsigned должны быть в районе 127 (7f) в то время как у меня значения тишины где -то если в hex 51,52,53,54 что в привычном десятичном соответсвует 81. Т.е нужно как-то увеличить амплитуду тишины. Скорее всего нужно это поправить делитем напряжения на входе в А0?

Добавлено after 57 minutes 16 seconds:
Ну и вопрос из теории. Каким образом формируются сэмплы со значением ниже чем значение тишны?

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

Чт янв 18, 2024 15:11:59

на вход АЦП надо ставить делитель... и устанавливать рабочую точку АЦП...
схема.rar
(17.42 KiB) Скачиваний: 22

-если используем старшие 8 разрядов - подаём на вход АЦП половину питания...
-если используем младшие 8 разрядов - подаём на вход АЦП 1/8 питания...
я использую младшие 8 разрядов и подаю на вход АЦП 1/8 питания... (1024/8=128 или 5V / 8 = 0,625 V)
:tea:

Добавлено after 7 minutes 43 seconds:
в время тишины в АЦП присутствует шум...
Screenshot_1.jpg
(61.96 KiB) Скачиваний: 20

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

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

Чт янв 18, 2024 22:42:42

Спасибо за схему , ну можно сказать выставил, надо еще чуть крутнуть
Изображение

Добавлено after 11 minutes 22 seconds:
Выставил на А0 половину напряжения питания

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

Пт янв 19, 2024 15:51:20

уже лучше))
но лучше использовать младшие 8 разрядов и подавать на вход АЦП 1/8 питания...
так чувствительность АЦП выше.. .и соответственно требуется меньше уровень сигнала...
:tea:

ну и как там твой самодельный кодек ? качество звука проверил ?
:tea:

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

Пт янв 19, 2024 20:23:08

С кодеком тема такая. Начал я с того что переосмыслил свою миссию в этом мире и понял что новый кодек я не изобрету и нужно использовать опыт предшествующих поколений. Тут https://forum.arduino.ru/t/apnouta-avr3 ... -723/12895 мне помогли с поиском Апноутa AVR336, библиотеки обработки звука CCITT G.711, G.721, G.723.
Там в архиве была утилита кодирования и декодирования. Но на вход нужно подавать 16бит звук, а у меня 8 бит. Я преобразовал свои 8бит записи к 16 бит и попробовал закодировать их и раскодировать утилитами из Апоноут. Но , к сожалению, восстановление получилось не очень качественным, а скорее сказать совсем неприямлимым при данных обстоятельствах, - ожидалось что-то получше. Надо будет повторить эти эксперименты , может это я сделать что-то нет или не так. Мало того при преобразовании 8бит в 16 бит там как я понял еще 2 бита забиватся просто нулями. Может и в этом была какая то проблема.

Пока понял лишь что что бы звук нормально закодироват этими кодеками нужен звук 16 бит, а меня 8.
Поэтому счас думаю куда дальше двигать, вдумчиво пытаюсь читать тут:
https://www.programmersought.com/article/42647063309/
https://we.easyelectronics.ru/Soft/szha ... d278970235
https://zxpress.ru/article.php?id=1382& ... g682318261
https://github.com/Flitskikker/IMAADPCM ... 5772231009

что бы поняь суть алгоритма и попыться его повторить

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

Сб янв 20, 2024 11:31:39

Начал я с того что переосмыслил свою миссию в этом мире...

Сильно ! ))
:))
olegue писал(а):Я преобразовал свои 8 бит записи к 16 бит...

учитывая рабочую точку АЦП ?

8 бит (unsigned char)
11111111
16 бит (unsigned int)
00001111 11110000
:tea:
Код:
// Функция для преобразования 8 бит к 16 бит в заданном буфере
void calculateEnergy(int size) {
    for (int i = 0; i < size; ++i) {
        buffer[i] = (buffer[i] <<4);
    }
 }


00001111 11110000 - это всего лишь +/- 16 значений максимум... из +/- 256 значений возможных...
после такого преобразования звук будет очень тихий... в 16 раз тише... или в 256 раз тише... смотря как считать... по амплитуде или размаху))
в любом случае будет много шумов... поэтому так делать не рекомендуется))
:tea:

кодеки... кодеки...
:roll:
G.729 — обширно применяемый тип кодека, для скорости 8 Кбит/с. Согласно теории, речевой сигнал продолжительностью в секунду можно стопроцентно обрисовать (другими словами оцифровать, передать либо сохранить в цифровом виде и потом вернуть в начальный сигнал по цифровому представлению) цифровым потоком 60 б/сек. Мысль оцифровывать и передавать (либо сохранять) в цифровом виде не сам сигнал, а его параметр (количество переходов через ноль, спектральные свойства и др.), чтоб потом по этим характеристикам выбирать модель голосового тракта и синтезировать начальный сигнал, лежит в базе «вокодеров» (VOice CODER) либо «синтезирующих кодеков».
кодек.jpg
(107.09 KiB) Скачиваний: 19

мда... заморочки))
:roll:

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

Пн янв 22, 2024 11:36:06

Здравствуйте

тема такая. Известно ,что udp пакет состоит из заголовка и данных.
Мне нужно передать 4 бита дополнительной информацаии. Вопрос в том как это сделать
Всадить 4 бита при отравки я думаю смогу. Как вашем плейере обработать этот момент.
Я собираюсь использвоать первый 4 бита данных под свою информацию



Пришлось вернуться к этой теме , раз уж у меня есть подвижки по передаче звука по sim800;

вкинул в chatGPT:
в этом коде я цифрую звук и отправляю его через sim800 в виде udp пакетов. Мне нужно изменить заголовок Udp пакета перед отправкой. Как это сделать:
вот мой код:

и вот что получил в ответ
Код:
void loop() {
  if (digitalRead(btnStart) == LOW) {
    digitalWrite(ledStart, HIGH);
    if (bufByteCount == 32 && bufWrite == 1) {
      // Assuming buf01 contains your audio data
      modifyUdpHeader(buf01, sizeof(buf01));

      // Send the modified UDP packet
      myGsm.write(buf01, sizeof(buf01));
    }

    // Rest of your code...
  } else {
    digitalWrite(ledStart, LOW);
  }
}

void modifyUdpHeader(byte* buffer, int bufferSize) {
  // Assuming the UDP header is 8 bytes long
  const int udpHeaderSize = 8;

  // Modify the UDP header fields as needed
  // Example: Set source port to 1234 (2 bytes)
  buffer[0] = 0x04;
  buffer[1] = 0xD2;

  // Example: Set destination port to 5678 (2 bytes)
  buffer[2] = 0x16;
  buffer[3] = 0xE6;

  // Add more modifications as needed...

  // Calculate new checksum if needed
  // Example: Set checksum to 0 (2 bytes)
  buffer[6] = 0x00;
  buffer[7] = 0x00;
}


т.е он поменял первый 8 байт моего буфера данных и выдал это мне за изменение заголовка. Ну просто красавчик.

Добавлено after 2 hours 37 minutes 9 seconds:
Ну вопрос снимаю, потому как в данной конфигурации отправвки UDP пакетов нет возможности получить доступ к заголовку.
Есть мысль отправлять эти биты вместе с данными, а потому уже в программе клиете выделять эти байты

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

Пн янв 22, 2024 16:28:11

const int udpHeaderSize = 8;
что это ?))

// Modify the UDP header fields as needed
// Example: Set source port to 1234 (2 bytes)
buffer[0] = 0x04;
buffer[1] = 0xD2;

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

// Calculate new checksum if needed
// Example: Set checksum to 0 (2 bytes)
buffer[6] = 0x00;
buffer[7] = 0x00;

checksum UDP для версии IPv4 - не обязательно)) можно менять по своему усмотрению... какой захочешь)) сюда можно запихнуть свои байты...
:tea:

там ещё есть поле "Identification"... туда тоже можно писать свои байты))
:tea:

на изернет переходи... там всё можно менять))
:tea:

Код:
////////////////////////////////////////////////////////////////////////////UDP:
//unsigned char UDP[]={        // 60   
//Destination MAC:             // 0...5
//0xff,0xff,0xff,0xff,0xff,0xff,             
//Source MAC:                  // 6...11
//0x00,0x08,0xdc,0x01,0x02,0x03,         
//Type: 
//0x08,0x00,                   // 12,13- Type: IP (0x0800)
/////////////////////////////////////////////// Protocol IP: 20 bytes
//0x45,                        // 14-    Version: 4, Header length: 20 bytes
//0x00,                        // 15-    Differentiated Services Field...
//(Total Length = Protocol IP(20) + Protocol UDP(8) + Data(18) = 46)
//0x00,0x2e,                   // 16,17- Total Length: 46
//0x00,0x00,                   // 18,19- Identification: 0
//0x00,0x00,                   // 20,21- Fragment offset: Don't fragment: 0
//0x40,                        // 22-    Time to live: 64
//0x11,                        // 23-    Protocol: UDP (17)
//0x00,0x00,                   // 24,25- Header checksum IP: // начальное =0
//192,168,0,3,                 // 26...29- Source IP:     
//192,168,0,101,               // 30...33- Destination IP: 
/////////////////////////////////////////////// Protocol UDP
//0x00,0x50,                   // 34,35-  Source port: 80
//0x00,0x50,                   // 36,37-  Destination port: 80
//(Length = Protocol UDP(8) + Data(18) = 26)
//0x00,0x1a,                   // 38,39-  Length: 26
//0x00,0x00,                   // 40,41-  checksum UDP: // начальное =0         
/////////////////////////// 42...59- Padding(18 bytes):
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00
//};     

:tea:

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

Пн янв 22, 2024 23:22:42

на изернет переходи... там всё можно менять))
:tea:


:tea:


про изернет я в курсе уже. Но пока я про gprs рацию мечтаю с возможностью передачи комманд и дополнительных данных.

Добавлено after 2 minutes 43 seconds:
Хотя.... есть у меня одна мыслишка. Роман, дайте схем и скетч для изернета. Счас я в деле ,может я тут быстренько спаяю все это дело.

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

Вт янв 23, 2024 22:19:48

gprs рация... :roll:

скетч для изернет... отдельно нет)) он уже интегрирован... в умный дом)) :o

открываем старые исходники...
исходники_1.rar
(221.09 KiB) Скачиваний: 23

тут нас интересует два файла...
macraw_W5500.c
(13.96 KiB) Скачиваний: 7

macraw универсальный режим...)) но чуть медленней работает... но мне нравится больше)) потому что универсальный ))
udp_W5500.c
(17.1 KiB) Скачиваний: 7

для звука лучше готовый UDP... он быстрей))
:tea:

Добавлено after 9 hours 3 minutes 5 seconds:
gprs рация... мне не нужна... у меня нет gprs))
тогда уж лучше DMR рацию сделать... сейчас востребовано... известно где))
1.jpg
(76.95 KiB) Скачиваний: 15

рация есть... а кодека нет...
:dont_know:

Добавлено after 17 minutes 54 seconds:
но сначала попробуем передать звук с ардуины на комп...
никада не передавал звук с ардуины на комп...))
схема спаяна... лежит на столе))
zvuk.rar
(14.67 KiB) Скачиваний: 27

осталось подключить микрофон и написать программу...
:roll:

Добавлено after 4 hours 34 minutes 3 seconds:
начинаем писать программу... ))
zvuk.rar
(62.79 KiB) Скачиваний: 20

:tea:

Добавлено after 47 minutes 9 seconds:
лучше так...
zvuk.rar
(61.15 KiB) Скачиваний: 15

:tea:

Добавлено after 6 hours 17 minutes 32 seconds:
допилили тестовую программу))
zvuk.rar
(63.89 KiB) Скачиваний: 16

:tea:
проверяем...
подключаем W5500 к компу...
нажимаем на ардуине кнопочку "тест"... побежали пакетики))
W5500.jpg
(145.04 KiB) Скачиваний: 11

нажимаем кнопочку на компе... отправляем запрос W5500...
W5500 нам отвечает))
Java.jpg
(146.99 KiB) Скачиваний: 12

для проверки изменим порт на компе... отправляем запрос W5500 на другой порт...
W5500 нам отвечает - ошибка порта ! ))
IMCP.jpg
(173.98 KiB) Скачиваний: 14

и т.д.
всё работает))
:tea:

посчитаем примерно скорость передачи по интернету:
по анализатору: ~680 пак/сек * 32 байт/пакет * 8 бит/байт = ~400 кбит/с... при частоте МК 8 мгц...
значит ардуина будет передавать по интернету со скоростью примерно до 1 Мбит/c.
нормально))
можно ещё чуть- чуть поднять скорость... но думаю для звука ~1 Мбит/c пока достаточно.
:tea:

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

Чт янв 25, 2024 01:45:32

далее...
закидываем всё в протеус... и смотрим))
zvuk.rar
(89.54 KiB) Скачиваний: 20

:tea:

Добавлено after 8 hours 43 minutes 29 seconds:
zvuk.rar
(99.43 KiB) Скачиваний: 17

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

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

Пт янв 26, 2024 00:46:57

roman.com писал(а):значит нужна буферизация...

воспользуемся предложением Олега... ))
Код:
void loop() {
    if (bufByteCount == 32 && bufWrite == 1)
  {
    myGsm.write(buf01, sizeof(buf01));
   }
   if (bufByteCount == 32 && bufWrite == 0)
  {
       myGsm.write(buf00,sizeof(buf00));
   }
   
} //loop

сделаем IP-телефон... ))
IP_телефон.jpg
(55.15 KiB) Скачиваний: 22

:tea:

Добавлено after 3 hours 24 minutes 54 seconds:
добавим буферизацию...
zvuk.rar
(109.13 KiB) Скачиваний: 18

переходим к тестам)) передаём тестовые байты... 0,1,2,3,4,5...
тест.jpg
(183.18 KiB) Скачиваний: 14

скорость передачи: 8000 (байт/с) / 512 (байт/пак) = 15,625 (пак/с)...
замечательно)) поток стабильный.
тест пройден.
:tea:

Добавлено after 5 hours 12 minutes 40 seconds:
далее... переключаемся в режим передачи звука...
zvuk.rar
(111.67 KiB) Скачиваний: 18

с помощью подстроечного резистора устанавливаем режим АЦП - Уст 0.
у нас 8 бит звук... это 0...255... среднее должно быть 128 или 0х80 в шестнадцатиричной... смотрим анализатор...
уст_0.jpg
(200.87 KiB) Скачиваний: 10

видим небольшой фон... ))
косаемся входа звука...
тест_фон.jpg
(185.94 KiB) Скачиваний: 11

видим сильный фон)) чувствительность АЦП высокая...
сам звук мы пока не слышим... зато но мы его видим ! ))
:))
теперь надо подкрутить программу на компе... и послушать.
можно просто записать звук в файл... и послушать в плеере...
но нам не надо в записи... мы же делаем IP-телефон... поэтому нам надо слышать поток ! ))
:tea:

Добавлено after 1 hour 39 minutes 8 seconds:
подкрутили программку))
качество_фу)).jpg
(179.35 KiB) Скачиваний: 15

1. из-за высокой чувствительности АЦП очень много шума...
2. из-за выбега частоты постоянный треск)) стабильность частоты RC-генератора МК оставляет желать лучшего)) что было ожидаемо...
:o
над качеством звука надо ещё поработать...
:tea:

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

Пт янв 26, 2024 11:36:10

с качеством звука проблема... много шума и помех...
:roll:
далее идёт аналоговая часть... надо всё фильтровать... по питанию... экранировать... нужен отдельный стабилизатор изернет модуля и отдельный стабилизатор ардуины... ещё надо стабилизировать всё кварцем... и т.д. и т.п.
:roll:
переключили АЦП на старшие 8 бит... добавили ФНЧ...
так меньше чувствительность... соответственно меньше шумов... качество чуть лучше...
ещё нужен нормальный микрофонный усилитель... с хорошей АЧХ... 300...3000 Гц...
zvuk.rar
(109.63 KiB) Скачиваний: 22

:roll:
в идеале бы лучше использовать 16 битный звук... ардуина может передавать 16 бит звук...
вот только ардуина имеет АЦП всего 10 бит... что для высокого качества звука явно мало.
но в целом схема рабочая))
:tea:

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

Чт фев 01, 2024 11:35:49

а где наш телефон ?))
надо ещё сделать приёмник...
:tea:

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

Пт фев 02, 2024 16:33:21

roman.com писал(а):надо ещё сделать приёмник...

сначала добавим выход звук...

можно простейший R-2R ЦАП прикрутить...
https://easyelectronics.ru/parallelnyj- ... -r-2r.html
но проще использовать простой ШИМ...

передатчик звука работает на таймере 1.
ШИМ можно сделать на том же таймере 1.
но лучше использовать отдельный таймер... например таймер 0.

в отдельном таймере можно менять частоту...
например сделать частоту не 8 кГц (как в таймере 1), а например сделать частоту 125 кгц.
принцип простой: чем выше частота - тем выше качество звука на выходе ФНЧ.))
:tea:
выход_звук.jpg
(134.53 KiB) Скачиваний: 18

zvuk.rar
(112.32 KiB) Скачиваний: 17

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

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

Чт фев 22, 2024 16:17:31

что у нас тут...
передаём звук на комп по локалке...
:roll:
а чтоб передавать звук по интернету нужно шифрование...
проблема в том что ардуина слишком медленно шифрует... всего 700 байт/с при 8 мгц... или 1400 байт/с при 16 мгц...
ATmega8_AES_256.jpg
(121.31 KiB) Скачиваний: 13

если использовать протокол по проще... то скорость шифрования чуть выше... всего 1000 байт/с при 8 мгц... или 2000 байт/с при 16 мгц...
ATmega8_AES_128.jpg
(161.1 KiB) Скачиваний: 7

другие протоколы шифрования работают ещё медленней...
GOST_vs_AES.jpg
(94.7 KiB) Скачиваний: 10

:roll:
а нам надо передавать поток как минимум 8000 байт/с... т.е. как минимум в 4 раза быстрей...
это только на передачу... и ещё столько же надо на приём...
итого: частота процессора "ардуины" должна быть как минимум в 8 раз больше)) или 128 мгц...
с учётом времени оцифровки и другие операции... надо ещё быстрей))
вывод: для передачи звука по нитернету нам нужна типа ESP-32 с частотой до 240 мгц...
:tea:

Добавлено after 12 minutes 14 seconds:
без шифрования можно передавать звук только в пределах офиса))
офис.jpg
(55.56 KiB) Скачиваний: 12

хотя есть ещё вариант - использовать для связи по интернету комп (он же шлюз).
схема.jpg
(55.55 KiB) Скачиваний: 15

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

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

Вт мар 05, 2024 20:12:06

Доброго времени суток!
Есть радиостанция с шумодавом, и стоит творческая задача записывать с нее звук (в качестве 16 бит 44.1 кГц) в момент открытия шумодава (когда горит светодиод, и 1-2 секунды спустя), при этом записывая каждый "сеанс" в отдельный файл на sd-карту. Также стоит задача №2 (творческая) - периодически вытаскивать эти файлы на смартфон через bluetoth.

Был выбор между маленьким смартфоном в качестве aio устройства, и ардуиной с необходимыми дополнениями. Захотелось повозиться с ардуиной, но ввиду отсутствия необходимого багажа знаний, я вынужден обратиться к уважаемым форумчанам за советом 8)

Я сам новичок в микроконтроллерах, но примерно понимаю суть первой задачи - необходимо каким-либо образом "нормировать" сигнал для максимально возможного качества преобразования в АЦП (если это нормирование не происходит в самом аудиомодуле), далее передать его кодеку(аудиомодулю), далее по I2S(?) шине передать байты ардуине, которая должна периодически проверять состояние шумодава, и в случае его открытия - скидывать данные на sd карту.

Возникают следующие вопросы:
1) Как часто можно создавать файлы на sd карте? Если делать это каждые 1-2 секунды, никакого затыка не будет?
2) Как расчитать, хватит ли аппаратных возможностей конкретного контроллера не только на запись звука по сигналу открытия шумодава, но еще и на передачу данных с sd карты через bluetoth модуль по запросу от смартфона? Собственно это самый главный вопрос, ибо не хочется ошибиться с покупкой ненужного для данного проекта железа.
Ответить