|
USB Audio, как проще сделать? |
|
|
|
 |
Ответов
|
Jun 28 2018, 06:55
|
Местный
  
Группа: Участник
Сообщений: 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 можно накинуть Это что, протокол реального времени?
|
|
|
|
|
Jun 28 2018, 07:35
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Atlantis- @ Jun 28 2018, 09:55)  Почему? Поток данных небольшой, теоретически могу позволить себе буфер хоть на две секунды Потому что bulk не гарантирует полосы передачи. В данный момент может всю полосу отдать, а через секунду, рядом, на этом же USB-хабе, другое устройство начало данные гнать - и полоса bulk делится между всеми устройствами на хабе. А ещё хуже если в этот же хаб воткнули устройство с изохронной точкой с рамером кадра близким к максимальному - оно займёт почти всю полосу передачи и все bulk-и будут делить оставшиеся крохи (или несколько устройств с активными изохронными точками в сумме забирающими почти всю полосу). Как выше уже сказали: только изохронная точка гарантирует полосу передачи. Потому как уже при активации профиля, системный USB-драйвер сразу проверяет "есть ли достаточная полоса для работы изохронной точки?" и если есть - резервирует эту полосу, не давая её занять другим точкам, а если нет - сразу даёт отлуп о невозможности активации профиля. Ну может ещё interrupt, не знаю - надо смотреть. Всё остальное будет работать от случая к случаю - как повезёт, а значит - нельзя использовать для реал-тайм потоков.
|
|
|
|
|
Jun 28 2018, 08:13
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 28 2018, 09:38
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Atlantis- @ Jun 28 2018, 11:13)  Ну это вопрос того, что подключено к хабу. Просто нужно предупредить пользователя о возможной некорректной работе в случае подключения устройств с потоковой передачей данных. А вообще, вероятность такого сбоя крайне мала, в большинстве случаев по USB подключена мышь да клавиатура. Ну не знаю как у Вас, а у многих подключены ещё и USB-микрофоны и USB-камеры (для скайпа). А это - потоковые устройства. Кстати внутри ноутов камеры тоже запросто могут быть на USB cидеть, для унификации. А ещё есть ТВ-тюнеры. Да ещё куча другой потоковой периферии. Уже не говоря про спец.устройства. Цитата(Atlantis- @ Jun 28 2018, 11:13)  А вот создавая изохронную точку создается потенциальная угроза для других подключенных приборов. В чём угроза-то? Что пользователя предупредят что ему надо отключить лишние устройства, что бы подключить требуемое? По Вашему лучше молча глючить? А если сделаете на bulk, то юзеру придётся ваш девайс выключать каждый раз как он захочет флешку воткнуть или USB-HDD. А с изохронной точкой просто скорость чтения/записи этой флешки будет немного ниже. Цитата(Atlantis- @ Jun 28 2018, 11:13)  А как это поможет? Ну создам я два буфера по секунде каждый, заполню один, начну проигрывать, стану заполнять другой. Все равно со временем возникнет ситуация либо переполнения либо недостатка данных и что тогда делать? Естественно - заранее заложить требуемый избыток по пропускной полосе. Если скажем поток == 10000 Б/сек, то делается изохронная точка размером (1+10000/1000+1)==12байт, где первый байт указывает кол-во байт в кадре, а последний байт задаёт 10% запас на случай ухода частоты до +10%. Возможно, что первый байт длины и не нужен, если API в устройстве позволяет принимать неполные изохронные-кадры - кол-во байт определять по принятой длине.
|
|
|
|
Сообщений в этой теме
Atlantis- USB Audio Jun 27 2018, 14:34 DmitryM Цитата(Atlantis- @ Jun 27 2018, 17:3... Jun 27 2018, 15:07 Atlantis- Цитата(DmitryM @ Jun 27 2018, 18:07) Isoc... Jun 27 2018, 15:09  jcxz Цитата(Atlantis- @ Jun 27 2018, 18:0... Jun 27 2018, 19:19     Atlantis- Цитата(jcxz @ Jun 28 2018, 12:38) Ну не з... Jun 28 2018, 11:39      jcxz Цитата(Atlantis- @ Jun 28 2018, 14:3... Jun 28 2018, 21:09       aaarrr Цитата(jcxz @ Jun 29 2018, 00:07) Видимо ... Jun 28 2018, 21:14        jcxz Цитата(aaarrr @ Jun 29 2018, 00:14) Напра... Jun 28 2018, 21:16         aaarrr Цитата(jcxz @ Jun 29 2018, 00:16) USB-COM... Jun 28 2018, 21:25          jcxz Цитата(aaarrr @ Jun 29 2018, 00:25) А есл... Jun 28 2018, 21:28           aaarrr Цитата(jcxz @ Jun 29 2018, 00:28) Так USB... Jun 28 2018, 21:31            jcxz Цитата(aaarrr @ Jun 29 2018, 00:31) Как э... Jun 28 2018, 21:36             aaarrr Цитата(jcxz @ Jun 29 2018, 00:36) Кто-ж г... Jun 28 2018, 21:44              jcxz Цитата(aaarrr @ Jun 29 2018, 00:44) вспом... Jun 28 2018, 22:03       Rst7 QUOTE (jcxz @ Jun 29 2018, 00:09) Видимо ... Jun 29 2018, 10:00  mantech Цитата(Atlantis- @ Jun 28 2018, 09:5... Jun 28 2018, 07:40   jcxz Цитата(mantech @ Jun 28 2018, 10:40) (чем... Jun 28 2018, 08:00    mantech Цитата(jcxz @ Jun 28 2018, 11:00) С соотв... Jun 28 2018, 10:46 Rst7 QUOTE Тогда и передавать поток реального времени н... Jun 27 2018, 20:06 jcxz Цитата(Rst7 @ Jun 27 2018, 23:06) Кто ж В... Jun 27 2018, 20:32  Rst7 QUOTE (jcxz @ Jun 27 2018, 23:32) Специфи... Jun 28 2018, 17:42 uriy ЦитатаТогда и передавать поток реального времени н... Jun 28 2018, 04:22 jcxz Цитата(uriy @ Jun 28 2018, 07:22) RTP мож... Jun 28 2018, 04:41 Genadi Zawidowski Простой алгоритм ресэмплинга (по размер очереди бу... Jun 28 2018, 07:01 uriy ЦитатаА если сделаете на bulk, то юзеру придётся в... Jun 28 2018, 10:16 jcxz Цитата(uriy @ Jun 28 2018, 13:16) Это еще... Jun 28 2018, 10:20 uriy ЦитатаЧтоб не "квакало" когда передача д... Jun 28 2018, 12:43 Atlantis- Почитал про варианты реализации класса Audio, там ... Jun 28 2018, 13:24 Genadi Zawidowski ЦитатаСпасибо, а можете словами объяснить как это ... Jun 28 2018, 14:32 Genadi Zawidowski Цитатакоторые именно Bulk-передачей аудио данные н... Jun 28 2018, 19:29 Rst7 QUOTE Дамп дескрипторов можно? Или хотя бы названи... Jun 28 2018, 20:00 aaarrr Не понимаю, к чему эта ода USB-хабу. Хотя, раз уж ... Jun 28 2018, 22:33 mantech Цитата(aaarrr @ Jun 29 2018, 01:33) Не по... Jun 29 2018, 10:45 jcxz Цитата(aaarrr @ Jun 29 2018, 01:33) Если ... Jun 29 2018, 10:49  aaarrr Цитата(jcxz @ Jun 29 2018, 13:49) Это вещ... Jun 29 2018, 10:56  mantech Цитата(jcxz @ Jun 29 2018, 13:49) Видимо ... Jun 29 2018, 12:56 uriy Тоже терпеть не могу эти хабы. И очень редко встре... Jun 29 2018, 11:40 aaarrr Цитата(uriy @ Jun 29 2018, 14:40) Их очен... Jun 29 2018, 11:45 jcxz Цитата(uriy @ Jun 29 2018, 14:40) Тоже те... Jun 29 2018, 12:10
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|