2013-04-29 5 views
0

Я хотел бы написать веб-приложение, которое позволяет мне синхронизировать аудиовоспроизведение MP3 до ~ 50 мс или достаточно близко, чтобы человеческое ухо не могло обнаружить разницу.Как синхронизировать воспроизведение звука на двух или более устройствах iOS?

Идея состояла в том, чтобы с двумя или несколькими смартфонами можно было спариваться с громкоговорителем bluetooth, а два или более громкоговорителей воспроизводят один и тот же звук в одно и то же время.

Как бы вы посоветовали мне настроить это как на стороне клиента, так и на стороне сервера? Я планирую использовать Rails/Ruby для бэкэнд и iOS/obj c для мобильных устройств.

У меня была идея синхронизации с глобальными/атомными часами на сервере и предоставление сервером инструкций для клиентов о том, когда начать играть/прыгать на уже воспроизводимую дорожку. Я обеспокоен тем, что, если я хочу, чтобы поток аудио, что будет невозможно загрузить песню в память и начать воспроизведение точно на миллисекундном уровне.

Мысли?

+0

Пятьдесят миллисекунд будут заметны, если колонки не находятся в отдельных комнатах. –

+0

Конечно, давайте скажем 15 мс, или даже более точно. – professormeowingtons

ответ

0

Я собираюсь использовать решение, которое использует атомные часы для синхронизации, и внешнюю службу, которая позволяет отправлять команды сервера/сообщения всем устройствам в тесной синхронизации.

+1

не могли бы вы объяснить, что немного больше? Мы собираемся разработать для производительности очень похожее приложение с синхронизированной музыкой. Мне очень интересно, как вы собираетесь это развивать, и если бы это было полезно для вас. Заранее большое спасибо. – agapitocandemor

+0

Это очень углубленное решение, широта которого трудно объяснить за один проход, а также включает в себя некоторые IP-адреса в нашей компании. Если вы хотите поболтать на нем больше, свяжитесь со мной по адресу [email protected] – professormeowingtons

1

Дрожание в доставке пакетов в Интернете будет слишком большим, поэтому забудьте про синхронизацию через Интернет. Однако вы можете проверить точность NTP, которая по-прежнему используется (я думаю, я знаю, что ее использовали более старые UNIX) ОС при включении автоматической даты/времени в настройках, но я предполагаю, что это будет недостаточно или. Но, возможно, ОС также может использовать другие источники времени, такие как GPS; Я не знаю, как это работает iOS, но точность в пределах 20 мс не ожидается. Вы можете создать экспериментальное приложение, чтобы проверить его.

Итак, что осталось - это синхронизация ближе к дому, то есть между устройствами напрямую. Конечно, вы должны убедиться, что все устройства загрузили (достаточно) песню и предварительно загрузили ее в AVAudioPlayer или что бы вы ни использовали, чтобы начать игру сразу. (На самом деле не может быть лучшей идеей использовать API более высокого уровня «AVAudioPlayer», так как это может привести к большим задержкам и более важному джиттеру, чем API нижнего уровня.)

Вот три идеи (одному устройству необходимо быть ведущим, запускающим запуск, остальные - подчиненные устройства, ожидающие срабатывания):

  • Используйте импульс звукового пуска, как высокий тон определенной длины и частоты. Затем используйте FFT, чтобы распознать этот тон.
  • Подключите устройства через GameKit Bluetooth и передайте триггер на этих соединениях.
  • Используйте вспышку iPhone 4+ как триггер: вспышка в определенном шаблоне. Это потребует от вас отбора видеоданных, которые вполне выполнимы и могут быть очень быстрыми.
Смежные вопросы