2013-07-26 3 views
4

Я использую OpenSL для записи и воспроизведения звука на Android. Не могли бы вы посоветовать мне, как измерить задержку, чтобы найти оптимальную конфигурацию звука (буферы, частоту дискретизации).Как измерить задержку звука с помощью OpenSL на Android?

Спасибо заранее!

ответ

7

Вот как я использовал для измерения выходного звукового сигнала задержки:

  • Создать простой интерфейс для вашего приложения с одной или несколькими кнопками, которые играют звуки при нажатии клавиш. Я бы предложил использовать звуки с почти мгновенной атакой (то есть те, которые очень быстро достигают полной амплитуды).
  • Включите громкость на устройстве Android и удерживайте его возле микрофона другого устройства (например, вашего ПК или другого телефона).
  • Используйте свое приложение, чтобы воспроизвести некоторые звуки, нажав на кнопки. Нажмите их достаточно сильно, чтобы сам диск был слышен.
  • Запишите все это на втором устройстве.
  • Как только вы закончите, откройте запись в звуковом редакторе (например, Audacity) и измерьте расстояние (то есть время) между звуками нажатия и результирующим воспроизведением. Вы можете захотеть взять среднее или среднее из нескольких таких расстояний.

Этот способ измерения имеет то, что его очень легко выполнить. Недостатком является то, что ваш результат также будет включать латентность прикосновений. При появлении сенсорных событий на частоте 60 Гц это будет означать, что в дополнение к задержке аудиовыхода вы можете получить до 16 мс дополнительной задержки. Это делает невозможным измерение очень малых различий в задержках с помощью этого метода.


Update: В сообщении доски сообщению Glenn Kasten от Google он связан с несколькими страницами, которые описывают более точные способы измерения звука задержки. Я решил, что могу добавить их сюда для справки. Here's the page, который описывает измерение задержки в обоих направлениях и here's another page, который описывает измерение только выходного латентного времени.

+0

Спасибо! Это отличная идея! (по некоторым причинам я могу присудить награду всего за 19 часов. Я не забуду об этом :)) – Taras

1

Другим очень хорошим способом тестирования этого является также использование светодиодного интерфейса, доступного через OpenSL | ES. Используя это (и с помощью LDR), вы можете записать время между светодиодом и испускаемым звуком.

Это один из способов, которым люди Google использовали, когда делали это для своих устройств. Они идут на это, и многое другое на тему низкого латентного звука в android, in this video.

4

Вы пробовали это приложение, чтобы измерить его? https://play.google.com/store/apps/details?id=com.levien.audiobuffersize Приложение было создано Рафом Левиеном из Google, и он создает базу данных с результатами в http://audiobuffersize.appspot.com/ (как вы можете видеть, там уже много результатов) Это довольно быстрый тест, который вычисляет лучший размер буфера и частота дискретизации для вашего устройства и минимальная латентность. С того места, где я думаю, что если многие пользователи загружают свои результаты, мы сможем рассказать, сколько/какие устройства готовы для записи с низкой задержкой ...

+1

Но где вы видите латентность? – Givi

1

Добавление к методу Майкла или обнаружение задержки на выходе, Если вас интересует задержка в оба конца, то есть запись в игру. Затем

1) просто запустите простое приложение loop loopback (убедитесь, что буферизация и queing выполнены правильно).

2) сохранить объем предпочтительно низкий, чтобы избежать эха обратной связи, но eccho все равно должна быть там и звуковой

3) в настоящее время записи выходных данных через другой микрофон (PC) и сделать нажав звук, как щелкающие ваши пальцы

4) импортировать аудио из второго микрофона (ПК) для GoldWave или дерзости и измерить задержку между оснасткой и оснасткой разыгрывается из устройства

это будет ваша двусторонний задержка

Хотя им ответить поздно, надеюсь, что это помогает

приветом, Shrish

 Смежные вопросы

  • Нет связанных вопросов^_^