Android-микрофон для улавливания определенного тона

Здравствуйте, мне было интересно, можно ли с помощью класса генератора тона Android создать тон на одном устройстве и прослушать этот же тон на другом устройстве. Если это возможно, у меня есть еще несколько вопросов.

Принимая во внимание фоновый шум, можно ли слушать только этот конкретный тон?

Будет ли этот процесс ресурсоемким?

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

Наконец, могу ли я использовать тон, который можно было бы услышать только в паре футов от передающего устройства?

Большое спасибо за ваше время, ребята и девушки :)

Редактировать> Спасибо за добавление тега обработки звука sabastian. Гораздо лучше описание.


person Keith    schedule 30.01.2011    source источник


Ответы (2)


Это будет интенсивно использовать процессор, да. Путь к этому довольно прост: вам нужен постоянный регистратор, который переводит полученные данные в БПФ (быстрое преобразование Фурье). FFT в основном делает одну вещь: разбивает звук на шкалу частоты/мощности. С помощью этого результата «очистка фонового шума» вы можете проверить такие вещи, как «был ли звук с частотой 1000 Гц, воспроизводимый в течение как минимум 2 секунд», — и действовать соответствующим образом. Здесь приведена реализация БПФ с разумной скоростью: http://www.badlogicgames.com/wordpress/?p=449 FFT также может использоваться (на самом деле, используется IS) для обнаружения двухтонального набора (DTMF) - 2 частоты одновременно намного лучше, чем просто использование одной (так как частота ошибок значительно снижается, и вы можете на более короткую продолжительность для отправки/обнаружения тона).

«Неразборчиво» будет невозможно, поскольку (а) динамик не может воспроизводить такие звуки (б) вы ограничены в частоте дискретизации, а значит, ограничены как в воспроизведении, так и в записи таких высоких частот.

"пару ног" естественно наложат (не очень громкий динамик, не очень хороший микрофон).

person Oliver    schedule 30.01.2011
comment
Если вы работаете с Android 2.3, в системе уже есть БПФ, проверьте заголовок stackoverflow.com/questions/4720512/ - person Oliver; 30.01.2011
comment
ребята большое спасибо за ваши ответы. Я теперь по крайней мере теперь, что это можно сделать. Я все еще очень запутался в порядке операций. Может быть, если кто-то знает, как это делается, он может написать пару строк псевдокода, показывающих порядок шагов. Спасибо за помощь - person Keith; 30.01.2011
comment
Это не будет парой строк псевдокода, извините. То, что вы хотите, является совершенно особенной вещью (честно говоря, очень сложной) с особыми потребностями, и поэтому какой-то псевдокод вам не поможет. Если у вас есть проблемы с упорядочением того, когда что делать (упорядочение), вы, в конце концов, еще не готовы писать такой код. - person Oliver; 30.01.2011
comment
спасибо Оливер. Все, что я действительно хочу, это знать, что устройство находится в паре футов от другого. Iv смотрел на использование bluetooth rssi, но это тоже не сработало. Не могли бы вы предложить более простой способ? - person Keith; 30.01.2011
comment
GPS? По крайней мере, не метод тона, который вы описываете, который на самом деле не будет работать для того, что вы хотите сделать (батарея будет разряжена менее чем за 30 минут, так как запись должна работать всегда) . Но также GPS потребляет довольно много батареи ... Bluetooth может быть выходом. Точности в итоге не хватает на пару футов у обоих. - person Oliver; 30.01.2011
comment
Что касается вашей проблемы, предположим, вам нужно дождаться реализации NFC в каждом телефоне, а также не в режиме только для получателя (2.3 не позволяет отправлять). Следующий год? ;) - person Oliver; 30.01.2011

Взгляните на этот другой вопрос: "Android: необходимо записать микрофонный ввод". Я думаю, вы можете изменить это для своей задачи, тогда со звуковыми байтами у вас может быть фильтрация или БПФ.

Надеюсь, поможет

person Filippo Mazza    schedule 24.06.2012