Russian Qt Forum
Май 06, 2024, 02:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Синхронизация проигрывания звука между компом и устройсвом  (Прочитано 3012 раз)
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« : Январь 26, 2016, 10:20 »

Доброго времени суток.

Есть устройство со своей внутренней звуковой шиной на 24000Гц, которое, ко всему прочему, эту шину по UDP транслирует наружу.
Задача проиграть звук с этой шины на компе. На первый взгляд всё просто, настраиваем какую-либо библиотеку, которая умеет играть звук, на 24кГц (в моём случае это portaudio), принимаем пакеты, кешируем и играем их. Изи. Но проблема в том, что устройство тактируется от внутреннего кварца на микроконтроллере, соответственно 24кГц очень не точные,и за 5-10 секунд звук убегает или отстаёт на 2-3 мс. Интересует есть ли какое более менее стандартное решение, что бы это дело всё синхронизировать? Пока сделан костыль - добавлены команды, которые уменьшают / увеличивают скорость шины, и этими командами приложение на компе подстраивает скорость шины под себя. Работает, но как по мне не очень красивое решение.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Bepec
Гость
« Ответ #1 : Январь 26, 2016, 11:59 »

На мой неискушенный контроллерами взгляд - только увеличить точность. Компьютер в этом деле может лишь только подстраиваться постфактум, у программ на нём тоже не особо точное время.

PS а можно привести пример такой системы, задача интересная, но практического применения не вижу Улыбающийся
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #2 : Январь 26, 2016, 15:34 »

На мой неискушенный контроллерами взгляд - только увеличить точность. Компьютер в этом деле может лишь только подстраиваться постфактум, у программ на нём тоже не особо точное время.
Оно понятно, что подстраиваться постфактум, вопрос как это правильно делать, и, желательно, без дополнительного управления устройством, как это сделано сейчас.
PS а можно привести пример такой системы, задача интересная, но практического применения не вижу Улыбающийся
Есть "мастер" плата, в которую подключаются через общую шину произвольные устройства, которые могут работать в том числе и со звуком. Устройства в том числе и управляющие, через декодирование звукового сигнала могут делать разные вещи, включать оповещение, вызывать милицию, транслировать тот звук, что в  шине на громкоговорители  и т.п. А вот эта задача просто для удобной отладки, что же в данный момент в шине твориться ).
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Bepec
Гость
« Ответ #3 : Январь 26, 2016, 15:46 »

Моё мнение - не париться, пусть отставание и есть, но пара мс это фигня. Тем более что только для тестовых целей, тогда тем более париться не стоит.

Точнее просто не вижу вариантов улучшить ваш результат без смены аппаратной части, да и даже сменив, не факт что результат не будет тем же.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.066 секунд. Запросов: 23.