реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> USB Audio, как проще сделать?
Atlantis-
сообщение Jun 27 2018, 14:34
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Здравствуйте!
Нужно передавать речь с микрофона компьютера на устройство по USB, в устройстве STM32F429. Как я понимаю, основная проблема в несовпадении частоты дискретизации на компьютере и в устройстве. Как обычно решается эта проблема? Какие должны быть размеры буфера в устройстве?
Добавлю, что нужно использовать Bulk передачи, поэтому прямо взять готовое решение не могу.

Сообщение отредактировал Atlantis- - Jun 27 2018, 14:49
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Jun 27 2018, 15:07
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(Atlantis- @ Jun 27 2018, 17:34) *
Здравствуйте!
Нужно передавать речь с микрофона компьютера на устройство по USB, в устройстве STM32F429. Как я понимаю, основная проблема в несовпадении частоты дискретизации на компьютере и в устройстве. Как обычно решается эта проблема? Какие должны быть размеры буфера в устройстве?
Добавлю, что нужно использовать Bulk передачи, поэтому прямо взять готовое решение не могу.

Isochoronous Endpoint
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Jun 27 2018, 15:09
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(DmitryM @ Jun 27 2018, 18:07) *
Isochoronous Endpoint

Я же говорю, у меня Bulk и поменять не могу
Go to the top of the page
 
+Quote Post
uriy
сообщение Jun 27 2018, 16:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
Я же говорю, у меня Bulk и поменять не могу
Тогда причем тут несовпадение частоты дискретизации?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 27 2018, 19:19
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Atlantis- @ Jun 27 2018, 18:09) *
Я же говорю, у меня Bulk и поменять не могу

Тогда и передавать поток реального времени не можете.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jun 27 2018, 20:06
Сообщение #6


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
Тогда и передавать поток реального времени не можете.


Кто ж Вам такое сказал?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 27 2018, 20:32
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Rst7 @ Jun 27 2018, 23:06) *
Кто ж Вам такое сказал?

Спецификация USB.
Go to the top of the page
 
+Quote Post
uriy
сообщение Jun 28 2018, 04:22
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
Тогда и передавать поток реального времени не можете.
RTP можно накинуть
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 28 2018, 04:41
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(uriy @ Jun 28 2018, 07:22) *
RTP можно накинуть

На что накинуть?
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Jun 28 2018, 06:55
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(uriy @ Jun 27 2018, 19:35) *
Тогда причем тут несовпадение частоты дискретизации?

При любом типе передачи эту проблему надо как то разруливать, вопрос как.

Цитата(jcxz @ Jun 27 2018, 22:19) *
Тогда и передавать поток реального времени не можете.

Почему? Поток данных небольшой, теоретически могу позволить себе буфер хоть на две секунды

Цитата(uriy @ Jun 28 2018, 07:22) *
RTP можно накинуть

Это что, протокол реального времени?
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 28 2018, 07:01
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Простой алгоритм ресэмплинга (по размер очереди буферов) вставкой - выкидыванием выборок есть тут - https://188.134.5.254/browser/hfreceiver/trunk/buffers.c функция buffers_resample

https://188.134.5.254/browser/hfreceiver/tr...buffers.c#L1005
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 28 2018, 07:35
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Atlantis- @ Jun 28 2018, 09:55) *
Почему? Поток данных небольшой, теоретически могу позволить себе буфер хоть на две секунды

Потому что bulk не гарантирует полосы передачи. В данный момент может всю полосу отдать, а через секунду, рядом, на этом же USB-хабе, другое устройство начало данные гнать - и полоса bulk делится между всеми устройствами на хабе. А ещё хуже если в этот же хаб воткнули устройство с изохронной точкой с рамером кадра близким к максимальному - оно займёт почти всю полосу передачи и все bulk-и будут делить оставшиеся крохи (или несколько устройств с активными изохронными точками в сумме забирающими почти всю полосу).
Как выше уже сказали: только изохронная точка гарантирует полосу передачи. Потому как уже при активации профиля, системный USB-драйвер сразу проверяет "есть ли достаточная полоса для работы изохронной точки?" и если есть - резервирует эту полосу, не давая её занять другим точкам, а если нет - сразу даёт отлуп о невозможности активации профиля.
Ну может ещё interrupt, не знаю - надо смотреть. Всё остальное будет работать от случая к случаю - как повезёт, а значит - нельзя использовать для реал-тайм потоков.
Go to the top of the page
 
+Quote Post
mantech
сообщение Jun 28 2018, 07:40
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Atlantis- @ Jun 28 2018, 09:55) *
При любом типе передачи эту проблему надо как то разруливать, вопрос как.


Предварительное заполнение буферов, переключение буферов и выборка из них с соотв. частотой. Нужно будет выбрать необходимый размер буфера (чем больше, тем дольше время заполнения, но меньше вероятность "квакания" и прочих артефактов). Но не забывайте, что звук на выходе будет отставать на время заполнения буферов.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 28 2018, 08:00
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(mantech @ Jun 28 2018, 10:40) *
(чем больше, тем дольше время заполнения, но меньше вероятность "квакания" и прочих артефактов).

С соответствующим транспортом (изохронной точкой) вероятность "квакания" == 0. И буфера достаточно на пару мс.
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Jun 28 2018, 08:13
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(jcxz @ Jun 28 2018, 10:35) *
Потому что bulk не гарантирует полосы передачи. В данный момент может всю полосу отдать, а через секунду, рядом, на этом же USB-хабе, другое устройство начало данные гнать - и полоса bulk делится между всеми устройствами на хабе. А ещё хуже если в этот же хаб воткнули устройство с изохронной точкой с рамером кадра близким к максимальному - оно займёт почти всю полосу передачи и все bulk-и будут делить оставшиеся крохи (или несколько устройств с активными изохронными точками в сумме забирающими почти всю полосу).
Как выше уже сказали: только изохронная точка гарантирует полосу передачи. Потому как уже при активации профиля, системный USB-драйвер сразу проверяет "есть ли достаточная полоса для работы изохронной точки?" и если есть - резервирует эту полосу, не давая её занять другим точкам, а если нет - сразу даёт отлуп о невозможности активации профиля.
Ну может ещё interrupt, не знаю - надо смотреть. Всё остальное будет работать от случая к случаю - как повезёт, а значит - нельзя использовать для реал-тайм потоков.

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

Цитата(mantech @ Jun 28 2018, 10:40) *
Предварительное заполнение буферов, переключение буферов и выборка из них с соотв. частотой. Нужно будет выбрать необходимый размер буфера (чем больше, тем дольше время заполнения, но меньше вероятность "квакания" и прочих артефактов). Но не забывайте, что звук на выходе будет отставать на время заполнения буферов.

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

Цитата(Genadi Zawidowski @ Jun 28 2018, 10:01) *
Простой алгоритм ресэмплинга (по размер очереди буферов) вставкой - выкидыванием выборок есть тут - https://188.134.5.254/browser/hfreceiver/trunk/buffers.c функция buffers_resample

https://188.134.5.254/browser/hfreceiver/tr...buffers.c#L1005

Спасибо, а можете словами объяснить как это работает?

Сообщение отредактировал Atlantis- - Jun 28 2018, 08:08
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 10:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01478 секунд с 7
ELECTRONIX ©2004-2016