Как я могу воспроизвести звук с абсолютным минимальным или * количественным * лагом? - PullRequest
2 голосов
/ 14 августа 2011

Я пишу приложение для психологии в jQuery. Часть моего проекта требует измерения времени реакции пользователя на звук (пользователь нажимает клавишу). Таким образом, мне нужно воспроизвести звуковой файл с наименьшей возможной задержкой между тем, когда я вызываю (& timestamp) звуковой файл, и когда он фактически начинает воспроизводиться. Большинство звуковых плагинов не описывают, как они обрабатывают лаги. Посоветуйте, пожалуйста, лучший метод!

Мне полезны только ответы, основанные на сплошной CS (не "этот плагин звучит быстро"). По крайней мере, мне нужно знать, какова возможная задержка для метода, который я использую (для вычисления доверительного интервала).

Альтернативным и действительно предпочтительным решением будет метод количественного определения лага. В этом случае длина лага будет неважной, потому что я легко могу ее исправить.

Я не знаю, какие звуковые файлы я буду использовать, но я думаю, что они будут очень маленькими. Два WAV-файла по 100 КБ каждый, вероятно, является надежной оценкой.

Ответы [ 3 ]

1 голос
/ 14 августа 2011

После обсуждения комментариев я порекомендую вам использовать звуковой тег HTML5 для воспроизведения / управления звуком. [Плагин JQuery, на который вы ссылаетесь, использует тег «embed» для воспроизведения звука (это будет вызывать плагин на клиентском компьютере, который вы не будете контролировать).

С HTML5 вы потеряете некоторые старые / мобильные браузеры, но это всегда главное в веб-программировании.

Учебное пособие по управлению тегом "audio" см. здесь . Убедитесь, что вы предварительно загрузили аудио.

Я думаю, что кроме HTML5 есть еще один вариант - использовать звук для воспроизведения звука. Вы можете довольно легко взаимодействовать с flash и javascript.

0 голосов
/ 15 августа 2014

Я столкнулся с той же проблемой: я пытался буферизовать аудио-события, даже AnalyserNode, но, похоже, существует аппаратное отставание между анализируемыми звуковыми данными и моментом создания звука: в моем тестировании оно составляло 50-200 мс. .

Задержка может быть количественно определена путем захвата звука:

  1. воспроизвести звук (буферизованный или нет) и запустить таймер
  2. остановка таймера, когда захват звука что-то улавливает (наблюдайте за помехами возле микрофона)

Подробнее о захвате звука javascript здесь .

0 голосов
/ 14 августа 2011

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

var counter = 0;
var timer = setInterval(function(){counter++}, 1);

в ответе на звонок пользователя

clearInterval(timer);

и таймер будет миллисекундами для ответа (минус время, необходимое для начала воспроизведения).

...