|
3 / 3 / 0
Регистрация: 02.01.2016
Сообщений: 160
|
|
Ввод/вывод звука по I2S, используя ESP3203.06.2021, 19:53. Показов 30325. Ответов 40
Добрый день друзья!
Подскажите пожалуйста ответ на такую задачу. Есть необходимость сделать следующее. Перечислю устройства последовательно, по мере прохождения звукового сигнала. 1. Всенаправленный MEMS-микрофон интерфейса I2S - INMP441 INMP441. 2. ESP32. 3. Плата DAC декодера интерфейса I2S - PCM5102A. Далее. Звук с микрофона по шине I2S заворачиваем на ESP32 (благо есть такой интерфейс), обрабатываем как нам необходимо и также по шине I2S передаем на ЦАП PCM5102A. Под обработкой, как нам необходимо, в идеале, следует понимать применение шифрования. Т.е. ESP32 предполагается использовать для шифрования и соответственно расшифровки. Но для начала шифрование вообще не будем затрагивать. На данном этапе задача - это с микрофона ввести звук по шине I2S в ESP32 и вывести этот же звук по I2S на ЦАП. Сразу честно скажу, что прям такого большого опыта с обработкой звука у меня нет. Были различные другие проекты с датчиками температуры, модулями Lora и т.д. Со звуком не работал и также с шиной I2S. В интернете много различной информации, но вот как сделать одновременно - вводить и тут же выводить звук на/с ESP32 я не нашел... Если возможно, подскажите пожалуйста или направьте! Буду очень признателен. Если у кого был также опыт с шифрованием звука, то подскажите если можно (посоветуйте какую библиотеку или подобные проекты...). СПАСИБО!
0
|
|
| 03.06.2021, 19:53 | |
|
Ответы с готовыми решениями:
40
Ввод звука и его последующий вывод в записывающее устройство Ввод-вывод звука черезмикрофон/динамики - кто делал? |
|
3 / 3 / 0
Регистрация: 02.01.2016
Сообщений: 160
|
|
| 23.06.2021, 13:48 [ТС] | |
|
Добрый день!
Объясните пожалуйста по простому и как можно подробней следующее. Почему, если я вставляю что-либо, что требует время на обработку, между функцией i2s_read_bytes и функцией i2s_write_bytes, то на выходе шипение и бульканье? Как я рассуждаю: 1. Считали buf (определенное количество сэмплов) с микрофона. 2. Ждем (некоторое время, в мс). Эта пауза нужна для обработки сэмплов. 3. Записываем обработанный buf на ЦАП. 4. Цикл повторяется. Да, получается что после того, как мы считали с микрофона, далее мы ничего не считываем, а обрабатываем и потом отправляем buf на ЦАП. Только после этого мы опять считываем с микрофона. Т.е. для шины I2S микрофона есть пауза между концом считывания и началом считывания. Тоже самое и для шины I2S для ЦАПа. Как решить это? Посоветуйте! Мне важно понять как это работает и почему из-за небольшой паузы между i2s_read_bytes и функцией i2s_write_bytes возникает ерунда...
0
|
|
|
|
|||||
| 24.06.2021, 22:45 | |||||
|
1
|
|||||
|
3 / 3 / 0
Регистрация: 02.01.2016
Сообщений: 160
|
|
| 24.06.2021, 23:34 [ТС] | |
|
locm, большое спасибо за подробное объяснение!!!
Принцип я понял. Начал прикидывать как это реализовать и возник такой вопрос. Исходя из Вашего объяснения нужно делать вот так: Примем, что buf_1 - это буфер считывания, buf_2 - буфер обработки, buf_3 - буфер отправки. Тогда работа должна идти следующим образом. В каждый такт мы должны одновременно выполнять все три операции: считывание, обработку и отправку. Но для того, чтобы начать первый такт, нам нужны пустые (случайные) buf_2 и buf_3, чтобы было что обрабатывать и отправлять. На втором такте уже все будет. Но как это организовать одновременно? Что я имею ввиду?... Опишу, например, такт 2: loop{ 1. Считываем, получаем buf_1. 2. Обрабатываем buf_1 (предыдущего такта), получаем buf_2. 3. Отправляем buf_3 - (обработанный buf_2 предыдущего такта). } В loop все равно происходит последовательная работа 1 --> 2 --> 3. И между функциями i2s_read_bytes (операция 1) и i2s_write_bytes (операция 3) есть операция 2, которая тоже занимает какое-то время. Получается, что считывание из I2S и отправка в I2S как таково не будет происходить одно за другим. Т.е. (для проверки этого) операцию 2 можно заменить delay(x), и то, что прочитали, потом отправлять (как я сделал в последнем своем коде). Или я в чем-то не прав? Пожалуйста поправьте.
0
|
|
|
3 / 3 / 0
Регистрация: 02.01.2016
Сообщений: 160
|
|
| 25.06.2021, 08:29 [ТС] | |
|
Возможно нужно к тому что сказано выше применить функции i2s_start() и i2s_stop() ?
Как сделать, чтобы именно в один и тот же момент времени происходило считывание, обработка и отправка?
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|
| 25.06.2021, 08:39 | |
|
0
|
|
|
3 / 3 / 0
Регистрация: 02.01.2016
Сообщений: 160
|
||
| 25.06.2021, 10:39 [ТС] | ||
|
locm, если возможно, ответьте пожалуйста на мои последние сообщения.
0
|
||
|
|
||
| 25.06.2021, 11:54 | ||
|
0
|
||
|
3 / 3 / 0
Регистрация: 02.01.2016
Сообщений: 160
|
||||||||||||||||
| 29.06.2021, 09:55 [ТС] | ||||||||||||||||
|
Привет Друзья!
Сразу говорю, что в отношении аудиоконвейера ничего не сделал. Я работаю в Arduino IDE, и под неё не нашел подходящих библиотек. Зато нашел другую библиотеку шифрования, при помощи которой можно шифровать примерно в сотни раз быстрей и думаю все должно получиться. Если прошлая библиотека шифровала 16 значений примерно за 3,5 мс, то эта библиотека за 50 мкс. Это я проверял лично. Вот код со сравнением:
У меня большие подозрения, что это связано в выделением памяти и объявлением массивов. Проверял шифрование отдельно - все работает хорошо (и шифрует и расшифровывает). Посмотрите пожалуйста в этом отношении, может где-то не в том месте объявил массив или не должным образом. Добавлено через 22 минуты Если закомментировать строку 59 ->
0
|
||||||||||||||||
|
|
|||
| 29.06.2021, 12:27 | |||
|
1
|
|||
|
3 / 3 / 0
Регистрация: 02.01.2016
Сообщений: 160
|
||||||||
| 29.06.2021, 14:54 [ТС] | ||||||||
|
Ура! Спасибо! Все получилось!!! Вот код:
BlockC - зашифрованный буфер; BlockD - расшифрованный буфер, который отправляем по I2S на ЦАП. Если сделать как написано, то расшифрованный звук отлично слышен на ЦАПе. А вот если на ЦАП послать зашифрованный звук, т.е. буфер BlockC , то в динамике слышен равномерный шум, который не влияет от "говорения" в микрофон. Т.е. если buf (отсчеты звука с микрофона) или BlockD (расшифрованные отсчеты звука) направить по I2S на ЦАП, то звук отличный. Если по I2S на ЦАП направить зашифрованный буфер - BlockC, то в динамике сплошной равномерный шум, который не зависит от звуковых волн, направляемых на микрофон. Вопрос: почему я в динамике ЦАПа слышу сплошной равномерный шум? почему он пропорционально не изменяется с тем, как я говорю в микрофон? Или отсчеты после шифрования принимают какие-то значения, что вызывают в ЦАПе этот шум?
0
|
||||||||
|
4094 / 2699 / 590
Регистрация: 11.09.2009
Сообщений: 9,623
|
||
| 29.06.2021, 17:28 | ||
|
Или вы совсем не понимаете, что вы делаете?
0
|
||
|
3 / 3 / 0
Регистрация: 02.01.2016
Сообщений: 160
|
||
| 29.06.2021, 17:31 [ТС] | ||
|
0
|
||
|
4094 / 2699 / 590
Регистрация: 11.09.2009
Сообщений: 9,623
|
|||||
| 29.06.2021, 21:04 | |||||
|
Ответ был строго по сути вопроса
0
|
|||||
|
3 / 3 / 0
Регистрация: 02.01.2016
Сообщений: 160
|
||||
| 29.06.2021, 21:35 [ТС] | ||||
|
На такие подобные смешные комментарии я всегда говорю: "Напишите лучше, тогда и поговорим!" Конечно Вы скажите: "Да зачем мне это нужно еще что-то писать?". А я Вам отвечу: "Тогда не зачем писать подобную Вашу ерунду!". На самом деле вопрос был конкретный, а именно в отношении равномерного шума, не изменяющегося по мере вещания в микрофон. А Вы выхватили Пример_1 и Пример_2. Возьмите эти два онлайн примера и Вы поймете, что то, что Вы писали в отношении одинакового сигнала на выходе - некорректно... Как тогда по Вашему по одинаковому сигналу будет проходить расшифрование? В приведенных примерах четко показано что это не так. Можно ввести самостоятельно и сам исходный текст и ключ, зашифровать и расшифровать. Ничего подобного, о чем Вы пишите, там и близко нет.
0
|
||||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||||
| 30.06.2021, 14:25 | |||||
. Хамская беседа так и подталкивает людей заниматься вашими вопросами
0
|
|||||
|
4094 / 2699 / 590
Регистрация: 11.09.2009
Сообщений: 9,623
|
|||
| 30.06.2021, 15:46 | |||
![]() Соображение очень простое. Алгоритм шифрования никак не зависит от содержимого входного потока данных. Ему всё равно, что отсчёты звука, что нули... А если алгоритм при потоке нулей на входе выдаёт на выходе поток нулей, то это очень плохой алгоритм шифрования.
1
|
|||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||
| 30.06.2021, 16:21 | |||
А идея ваша вполне годная
0
|
|||
| 30.06.2021, 23:56 | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 07.11.2023
Сообщений: 2
|
|
| 07.11.2023, 21:02 | |
|
Осмелюсь заметить, что из того обстоятельства что, зашифрованный звуковой сигнал воспринимается нашим слухом как шум отнюдь не следует что зашифрованная "тишина" то же шумит. В данном конкретном случае если на вход шифратора AES подавать массив состоящий из "0", на выходе получается некоторая периодическая последовательность, периодичность которой видимо зависит от длинны ключа и других параметров шифрования. Именно на это пытался видимо обратить внимание miki86 ссылаясь на Пример1 и 2. На слух такая последовательность воспринимается как однородный тон. Причиной же шума который miki86 слышал в закодированном канале вместо тона, являются закодированные собственные шумы I2S микрофона, поскольку микрофон он не отсоединял от шины i2s, а просто в него не говорил.
1
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|
| 07.11.2023, 22:19 | |
|
0
|
|
| 07.11.2023, 22:19 | |
|
Ввод и вывод структуры используя файлы Ввод и вывод структуры используя файлы Ввод/вывод данных организовать, используя книгу Excel Ввод и вывод строк осуществлять, используя функции gets и puts Расчет по формуле. Ввод и вывод, используя текстовые поля Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|