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

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

Сообщение olegue »

Роман, Вы ,вероятно меня неправильно понимаете

Есть такое понятие, к примеру, радимикрофон. Он передает звук посредством эфира на определенной частоте

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

я нагуглил что это технология называется VoIP, voice over IP. Но как эта технология работает я пока не в курсе. Вот и хочу разобраться. Для начала мне нужно передать оцифрованный звук в виде потока в интернет. Затем сделать так ,что бы прослушивать этот поток в интернете.
Реклама
Друг Кота
Сообщения: 9595
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

olegue писал(а):мне нужно передать оцифрованный звук в виде потока в интернет.
что значит "передать оцифрованный звук в виде потока в интернет" ... ???
в пустоту что ли ? ))
:dont_know:
что такое интернет ?

https://ru.wikipedia.org/wiki/Интернет

Интерне́т[1] (англ. Internet, МФА: [ˈɪn.tə.net]) — информационно-коммуникационная сеть и всемирная система объединённых компьютерных сетей для хранения и передачи информации[2].

по простому - Интерне́т это просто сеть состоящая из разных устройств...

так ты сначала определись... к какого и на какое устройство ты собрался передавать поток...
:dont_know:

можно передавать с ПК на ПК (ПК << >> ПК)...
можно передавать с ардуино на ПК (ардуино << >> ПК)...
можно передавать с ардуино на ардуино (ардуино << >> ардуино)...
можно передавать с ардуино на роутер (ардуино << >> роутер)...
можно передавать с ардуино на сервер (ардуино << >> сервер)...
...
можно передавать с ардуино на прокси сервер (ардуино << >> прокси сервер)...
https://www.radiokot.ru/forum/viewtopic ... &start=161
...
и т.д. и т.п.

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

с ардуино на ПК (ардуино << >> ПК)...
ардуино_ПК.jpg
(49.87 КБ) 56 скачиваний
Добавлено after 51 minute 49 seconds:
[uquote="olegue",url="/forum/viewtopic.php?p=4307843#p4307843"]я нагуглил что это технология называется VoIP, voice over IP. Но как эта технология работает я пока не в курсе.[/uquote]
эта технология работает точно так же как по радио))

по радио...
передача по радио:
1. цифруем звук с микрофона... аналог > цифра поток (0101010101011000101010101...)
2. разбираем поток на пакеты (01010101 - 010110001 - 01010101...)
3. передаём по радио пакеты (01010101 - 010110001 - 01010101...)
приём по радио:
1. принимаем по радио пакеты (01010101 - 010110001 - 01010101...)
2. собираем пакеты в поток (0101010101011000101010101...)
3. цифра поток (0101010101011000101010101...) > аналог выводим в динамик.

по интернету (VoIP)...
передача по интернету (VoIP):
1. цифруем звук с микрофона... аналог > цифра поток (0101010101011000101010101...)
2. разбираем поток на пакеты (01010101 - 010110001 - 01010101...)
3. передаём по интернету (VoIP) пакеты (01010101 - 010110001 - 01010101...)
приём по интернету (VoIP):
1. принимаем по интернету (VoIP) пакеты (01010101 - 010110001 - 01010101...)
2. собираем пакеты в поток (0101010101011000101010101...)
3. цифра поток (0101010101011000101010101...) > аналог выводим в динамик.

А в чём разница ? А нит никакой разницы !))

https://radiokot.ru/forum/viewtopic.php ... start=2078

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

Сообщение olegue »

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

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

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

Сообщение olegue »

Роман, вот финальная часть моего (нашего) рекордера из этой темы

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

ISR(TIMER2_COMPA_vect) {

ADMUX = 0x61; // set ADC to read pin A1, 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
  recByteCount++; // increment sample counter
  bufByteCount++;
  if (bufByteCount == 128 && bufWrite == 0) {
    bufByteCount = 0;
    bufWrite = 1;
  } else if (bufByteCount == 128 & bufWrite == 1) {
    bufByteCount = 0;
    bufWrite = 0;
  }

  if (bufWrite == 0) {
    buf00[bufByteCount] = ADCH;
  }
  if (bufWrite == 1) {
    buf01[bufByteCount] = ADCH;
  }
Здесь ADCH пишется в буфер потому что на флэшку закидываем

Как передать ADCH на комп? По UART?

таймер лопатит же на частоте 16кгц задавая битрейт

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

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кгц

}
мне с этой же частотой в сериал гнать результат преобразования АЦП?

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

Serial.println(ADCH);
Или отправлять в сериал по 512 байт и тогда думать как их правильно складывать на стороне ПК?
Реклама
Друг Кота
Сообщения: 9595
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

olegue писал(а):мне с этой же частотой в сериал гнать результат преобразования АЦП?
да.
olegue писал(а):Или отправлять в сериал по 512 байт и тогда думать как их правильно складывать на стороне ПК?
лучше отправлять по 1 байту.




ISR(TIMER2_COMPA_vect) {

ADMUX = 0x61; // set ADC to read pin A1, 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


Serial.println(ADCH);


recByteCount++; // increment sample counter
bufByteCount++;
if (bufByteCount == 128 && bufWrite == 0) {
bufByteCount = 0;
bufWrite = 1;
} else if (bufByteCount == 128 & bufWrite == 1) {
bufByteCount = 0;
bufWrite = 0;
}

if (bufWrite == 0) {
buf00[bufByteCount] = ADCH;
}
if (bufWrite == 1) {
buf01[bufByteCount] = ADCH;
}


порядок такой:

1-настройка АЦП.
ADMUX = 0x61; // set ADC to read pin A1, ADLAR to 1 (left adjust)
2-запуск преобразования АЦП.
sbi(ADCSRA, ADSC); // start ADC sample
3-ждём окончания преобразования АЦП.
while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready
4-как только преобразование закончится сразу отправляем 1 байт в сериал.
Serial.println(ADCH);

*вместо Serial.println(ADCH); можно написать просто UDR = ADCH;
UDR - это регистр сериал. Как только мы записываем в регистр UDR данные, то сериал автоматически переходит в режим передачи 1 байта.

Но прежде чем гнать данные по сериалу надо сначала настроить скорость сериала.

А какая нам нужна скорость ?
Считаем:
16кгц это частота семплов. Или 16.000 байт/c.
сериал - это один байт: 1 стартовый бит + 8 бит данных + 1 стоповый бит = 10 бит.
сериал.jpg
(13.22 КБ) 49 скачиваний
а нам надо гнать 16.000 байт/c.
значит минимальная скорость сериала должна быть 16.000 х 10 = 160.000 бит/с. (или 160 кбит/c)

что бы сериал нормально работал (без ошибок) скорость сериала должна быть в полтора раза (а лучше в 2 раза) больше...
т.е. нам нужна скорость 250.000 бит/c. (или 250 кбит/c)

Ардуина поддерживает скорость 250 кбит/c ?

Максимальная скорость сериала зависит от кварца...
В Ардуино стоит кварц 16 МГц...

Открываем даташит...
скорость сериала.jpg
(81.42 КБ) 50 скачиваний
да, с кварцем 16 МГц максимальная скорость сериала 1 Мбит/с. (а в режиме удвоенной скорости 2 Mбит/с).

значит на 250 кбит/c должно работать нормально))
:)
правда... с такой высокой скоростью по сериалу мы ещё не передавали )) надо проверить на практике...
:roll:
када делали радиоуправление...
https://www.radiokot.ru/forum/viewtopic ... 8&t=185219
мы гнали по сериалу со скоростью в несколько раз меньше))
https://www.radiokot.ru/forum/download/ ... ?id=356834
это потому что у нас не было кварца 16 МГц... приходилось снижать скорость))
:dont_know:

а теперь самый главный вопрос... подключение к ПК... ))
на ПК мы можем запустить программу "терминал" и посмотреть наши байты... 16.000 байт/c.
правда в терминале почему то нет скорости 250 кбит/c...
терминал.jpg
(61.15 КБ) 64 скачивания
странно... :dont_know:

а теперь самый главный вопрос... мы хотим просто посмотреть данные на ПК ?
8)
или послушать звук на ПК ?
:music:

если мы хотим послушать звук на ПК... то у меня нет программ для ПК которые воспроизводят звук по сериалу ))

у меня все программы на ПК работают по Ethernet (или Wi-Fi)... короче только по Интернету...
по сериалу они не работают))
:tea:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

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

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

чтоб послушать звук на компьютере... надо найти/купить/собрать/украсть (нужное подчеркнуть :))) ) Ethernet модуль...
для него программы есть.
:tea:
или найти/купить/собрать/украсть Wi-Fi модуль...
правда для Wi-Fi модуля у меня программ нет... но там всё просто... Wi-Fi модуль по умолчанию работает через обычный сериал))
:tea:
я купил на Али Ethernet модуль W5500... 250 руб/штука ))
через него можно гнать на ПК всё что угодно... аудио... видео... данные... модуль работает стабильно...))
:roll:
ещё собираю самодельный модуль для Ардуино...
https://www.radiokot.ru/forum/viewtopic ... 1#p4312241
но процесс этот не быстрый))
потому что мне никто не помогает...
:dont_know:
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

нельзя ли использвоать в качестве wifi модуля esp-01?

Добавлено after 1 minute 44 seconds:
но как я пониммаю что если скорость сериала маленькая , а wifi esp-01 будет подключено через сериал то опять те же грабли с недостаточной пропускной способностью сериала. Правильно понимаю?

Добавлено after 9 minutes 38 seconds:
здесь человек решает как принять и озвучить по UART звук 8кгц 16бит . Меня кстати, 8 кгц тоже устраивает, вполне разборчиво.

Добавлено after 18 seconds:
https://www.cyberforum.ru/csharp-net/thread2377310.html
Друг Кота
Сообщения: 9595
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

olegue писал(а):нельзя ли использвоать в качестве wifi модуля esp-01?
теоретически... можно))
:roll:
olegue писал(а):но как я пониммаю что если скорость сериала маленькая , а wifi esp-01 будет подключено через сериал то опять те же грабли с недостаточной пропускной способностью сериала. Правильно понимаю?
правильно))

esp-01 собран на базе ESP8266..

в инете много статей по esp-01
https://3d-diy.ru/wiki/arduino-moduli/w ... ul-esp-01/

по умолчанию esp-01 работает по сериал 9600
но в настройках (через АТ-команды) можно менять скорость... плоть до 115200... кажись... не помню)) надо смотреть инструкцию...
в инете много инструкций к esp-01...
:roll:

https://www.cyberforum.ru/csharp-net/thread2377310.html
да... можно передавать звук по сериалу на ПК... через COM...
но для этого надо написать программу на ПК...
например для Windows (пакет .NET) есть есть класс SerialPort.
проблема в том что я не пишу в .NET )) я пишу в Java.
в Java тоже есть класс... но не с завода... а самодельный )) кем то написанная библиотека...
проблема в том что я не пользуюсь сериалом)) у меня всё заточено под Интернет.
:roll:
Последний раз редактировалось roman.com Вт ноя 01, 2022 18:44:31, всего редактировалось 1 раз.
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

только вот что-то я не догоняю где я компе приму данные переданные через wifi?

Добавлено after 1 minute 36 seconds:
там же , в сериале, так что ли?
Друг Кота
Сообщения: 9595
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

1.
подключаем Wi-Fi модуль к Ардуино по сериал.
Wi-Fi.jpg
(65.09 КБ) 49 скачиваний
всё управление Wi-Fi модулем и передача данных (звука) идёт по сериал.

2.
Wi-Fi модуль подключается к ПК...
-если в ПК есть встроенный Wi-Fi (в любом ноутбуке есть Wi-Fi) то подключаемся напрямую к ПК...
-если в ПК нет встроенный Wi-Fi (ПК) то подключаемся к ПК через Wi-Fi роутер...

3.
olegue писал(а):где я компе приму данные переданные через wifi?
принимать данные на компе можно с помощью любой программы...
https://www.radiokot.ru/forum/viewtopic ... 7&start=42

-например в обычном браузере...
https://www.radiokot.ru/forum/download/ ... ?id=386448
-или в обычном плеере...
https://www.radiokot.ru/forum/download/ ... ?id=386473
-или самодельной программе...
https://radiokot.ru/forum/download/file.php?id=376916
...
и т.д.
:tea:
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

ничего не понимаю
допустим связка Атмега(Ардуина)+esp01 по UART.
на еsp01 по UART данные я отпавил допустим, не раз это делал. А как эти данные теперь отправить на комп.
С датчиков , например температуры, я отправлял данные посредством http запросов например на сервер, там же их и принимал.

А теперь когда у меня поток байт идет как его отправить на сервер. http уже не годится. Значит надо как-то сразу напрямую в порт
Друг Кота
Сообщения: 9595
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

во-первых скорость...
olegue писал(а):wifi esp-01 будет подключено через сериал то опять те же грабли с недостаточной пропускной способностью сериала. Правильно понимаю?
обычно Ардуино работает по сериалу максимум 115200... что явно мало))
поэтому я давно уже отказался от сериала и перешёл на SPI !!!
у меня всё работает по SPI... радио... интернет... экраны... и т.д.

https://www.radiokot.ru/forum/download/ ... ?id=356834

поэтому у меня нет никаких проблем со скоростью))

в ардуино SPI работает на скорости 4 Мбит/с (при удвоенной скорости 8 Мбит/с) !!!
советую тебе тоже переходить на SPI ))
:tea:

во-вторых...
olegue писал(а):допустим связка Атмега(Ардуина)+esp01 по UART.
на еsp01 по UART данные я отпавил допустим, не раз это делал. А как эти данные теперь отправить на комп.
тут вариантов много...))

например так:
1- делаем свой сервер Атмега(Ардуина)+esp01 по UART.
2- подключаемся к своему серверу обычным браузером... или плеером... и слушаем музыку))
:music:
наш самодельный сервер Атмега(Ардуина)+esp01 по UART... будет работать точно так же как обычный сервер в интернете.
:tea:

другой вариант (как думаю я):
1- Атмега(Ардуина)+W5500 по SPI... просто передаёт данные на комп...
2- комп просто принимает данные и воспроизводит звук))
:music:
для этого у меня есть самодельная программа.))

только с Ардуино принимать звук я не пробовал... принимал только разные данные...
надо будет попробовать принимать и звук с Ардуины))
думаю это сделать не сложно... Главное что скорость SPI это позволяет))
:tea:

нормальные Wi-Fi модули тоже работают по SPI...
например ESP32 работают по SPI... до 80 Мбит/с !!! ... кажись)) точно не помню... надо уточнить))
знаю что к ESP32 по SPI можно подключить всё что угодно))

экран... по SPI... до 10 Мбит/с
lcd.jpg
(49.79 КБ) 49 скачиваний
экраны.jpg
(51.33 КБ) 43 скачивания
флешки по SPI... до 10 Мбит/с
флешка.jpg
(66.1 КБ) 45 скачиваний
радио... по SPI... до 10 Мбит/с
радио.jpg
(61.83 КБ) 60 скачиваний
и даже камеры))
камеры.jpg
(72.02 КБ) 47 скачиваний
...
короче всё что угодно... по SPI... работает намного быстрее))
:tea:
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

roman.com писал(а):2- комп просто принимает данные и воспроизводит звук))
я к сожалению , не знаком с этим способом приема данных
давайте поподробнее.
Друг Кота
Сообщения: 9595
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

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

Сообщение olegue »

Ок. Разбираюсь.

Хотел бы вернутся к старому Uart. что если меня устроит, скажем даже не 8 кгц, а 6 или даже 5кгц. Реально ли что бы передать такой звук на скорости 115200?
Друг Кота
Сообщения: 9595
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

поподробнее.))

1. берём комп.
комп.jpg
(22.34 КБ) 53 скачивания
2. качаем программу "Server"
Server_TCP.rar
(6.92 КБ) 69 скачиваний
3. запускаем файл Server_TCP.jar... на экране компа появляется вот такое окно...
окно.jpg
(37.42 КБ) 49 скачиваний
4. берём Атмега(Ардуина)+esp01
Ардуино_ESP_01.jpg
(50.39 КБ) 46 скачиваний
5. с помощью Атмега(Ардуина)+esp01 по UART подключаемся к компу...
точно так же как ты подключался и отправлял данные посредством http запросов на сервер.
Только теперь в роли сервера будет твой комп))
в настройках своей Атмега(Ардуина)+esp01 не забудь измень IP адрес сервера (куда ты раньше отправлял данные) на IP адрес своего компа ))
комп_Ардуино_ESP_01.jpg
(39.64 КБ) 48 скачиваний
6. Теперь все данные что ты отправляешь с помощью Атмега(Ардуина)+esp01 по UART... теперь будут отображаться в окне твоего компа ))
всё)) вот так вот просто всё работает.
точно так же можно передавать и звук...
:tea:

Программа "Server" это аналог программы "терминал" ))
Только программа "терминал" работает по сериалу...
А программа "Server" работает по Интернету...
Вот и вся разница))

Надеюсь очень подробно объяснил))
olegue писал(а):Хотел бы вернутся к старому Uart. что если меня устроит, скажем даже не 8 кгц, а 6 или даже 5кгц. Реально ли что бы передать такой звук на скорости 115200?
считаем...

8 кгц это частота семплов. Или 8.000 байт/c.
сериал - это один байт: 1 стартовый бит + 8 бит данных + 1 стоповый бит = 10 бит.

значит минимальная скорость сериала должна быть 8.000 х 10 = 80.000 бит/с. (или 80 кбит/c)

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

Сообщение olegue »

можно начать с небольших битрейтов, а потом повышать. я записал несколько образцов 5, 6, 7, 8 и даже 4. До 5 кгц вполне нормально речь разбирается, только вот это речь диктора. Где то читал , что применив специальное кодирование можно даже 2кгц разборчивый звук получить.
Друг Кота
Сообщения: 9595
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

olegue писал(а):применив специальное кодирование можно даже 2кгц разборчивый звук получить.
Например в телефонной связи обычно используется частота семплов 8 кГц.
Поток соответственно 8 бит ч 8 семплов = 64 кбит/c.
Голос слышно хорошо.

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

В цифровых рациях есть сжатие... с помощью разных кодеков.
https://www.youtube.com/watch?v=nOYVoR3B2hY
В сотовых телефонах тоже есть сжатие... с помощью разных кодеков.
https://www.youtube.com/watch?v=nOYVoR3B2hY
Везде есть сжатие... с помощью разных кодеков.))

Но это всё только чтобы уменьшить объём флешки или уменьшить скорость передачи... бит/c.

А в студиях звукозаписи сжатие не используют)) Там качество наивысшее... )) но это уже отдельный вопрос...
:roll:
Ответить

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