УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

Звуковая карта


Автор Сообщение
Сообщение создано: 22. 06. 2013 [23:07]
coderator
vitaly koubarev
Создатель темы
Зарегистрирован(а) с: 20.03.2013
Сообщения: 3
Стоит версия 0.8.0.6-1 для ubuntu. Создал в чистом проекте контроллер звуковой карты как по мануалу.
Данные идут. Но также растет количество Потерянных_кадров. Подключаю архивацию значений с канала - график строится, но постоянно идут периодические разрывы в нем, это и есть потерянные_кадры, как я понимаю.
Хотя по мануалу на скриншотах идет всё гладенько (но там явно более старая версия скады).

Пробовал на двух разных машинах - результат тот же.
Шестым чувством понимаю, что где-то что-то с приоритетами, но для меня это лес густой.
Хотя бы скажите, это не только у меня? Или может так и должно теперь? Спасибо!
Сообщение создано: 24. 06. 2013 [09:58]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"coderator" wrote:

Стоит версия 0.8.0.6-1 для ubuntu. Создал в чистом проекте контроллер звуковой карты как по мануалу.
Данные идут. Но также растет количество Потерянных_кадров. Подключаю архивацию значений с канала - график строится, но постоянно идут периодические разрывы в нем, это и есть потерянные_кадры, как я понимаю.

Это проблема библиотеки portaudio и/или ALSA, поскольку API предусматривает вызов callback функции из потока этих библиотек и уже просто уведомление меня о факте потери. Т.е. этот поток не успевает вызываться достаточно, что-бы все кадры захватывать. В самой библиотеке это определяется параметром iParam.suggestedLatency, что фактически период этой задачи проверки данных в буфере звуковой карты, и который поставить более 0.2 секунд нельзя.

У меня заметная потеря кадров начинается с частот 96000, а на 44100 очень редко.

Поднятием приоритета через /etc/security/limits.conf решить эту проблему мне не удавалось, может конечно потому-что он берёт приоритет из вызывающего потока, который у меня всегда низкоприоритетен. В самом API возможности указать приоритет я не увидел.

Learn, learn and learn better than work, work and work.
Сообщение создано: 25. 06. 2013 [08:32]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"roman" wrote:

Это проблема библиотеки portaudio и/или ALSA, поскольку API предусматривает вызов callback функции из потока этих библиотек и уже просто уведомление меня о факте потери. Т.е. этот поток не успевает вызываться достаточно, что-бы все кадры захватывать. В самой библиотеке это определяется параметром iParam.suggestedLatency, что фактически период этой задачи проверки данных в буфере звуковой карты, и который поставить более 0.2 секунд нельзя.

Точнее вообще 20мс. Из-за чего шанс выхода за этот цикл при записи в буфер увеличиваются.
Собственно поднять приоритет для потока библиотеки, через функцию callback удалось. Теперь потери стали очень редкими.
Планирую ещё оптимизировать процедуру записи в буфер до записи целыми блоками, что позволит ресурс захватывать только на блок и в целом, при правильных условиях, копировать блок целиком. Делаю это сейчас для DiamondBoards.

P.S. Если до конца месяца сделаю то попадёт в 0.8.0.7 LTS

Learn, learn and learn better than work, work and work.
Сообщение создано: 27. 06. 2013 [12:22]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"roman" wrote:

P.S. Если до конца месяца сделаю то попадёт в 0.8.0.7 LTS

В рабочей версии устанавливать приоритет уже можно и у меня на 96000 потерь кадров нет.

Learn, learn and learn better than work, work and work.



10749