Частота вибрации Android

Я работаю над приложением для Android, которое обнаруживает дрожание рук (через акселерометр) и модулирует частоту вибрации в зависимости от интенсивности тряски.

Я могу получить интенсивность тремора через стандартное отклонение (код ниже):

public void regressionCalc() {
    //Calculating sum values
    double sumZ;
    double meanZ;
    sumZ = 0;

    final TextView accZText = (TextView) findViewById(R.id.accelText);
    accZText.setText("");

    for (int r = 0; r < recArray.length; r++) {
        sumZ = sumZ + recArray[r];
    }
    meanZ = sumZ/recArray.length;

    //Calculating standard deviation
    double sumXu2; //this represents E((x-xbar)^2)
    sumXu2 = 0;
    for (int x = 0; x < recArray.length; x++) {
        sumXu2 += ((recArray[x]-meanZ)*(recArray[x]-meanZ));
    }
    double SD;
    SD = Math.sqrt(sumXu2/(recArray.length-1));
    tremorIntensity = SD;

    accZText.setText(String.format("%.2f", tremorIntensity) + "");
    accZText.setTextSize(80);
}

но я не умею работать с вибрацией. Я имею в виду, я хотел бы, чтобы интенсивность вибрации телефона уменьшалась или увеличивалась в зависимости от значения регрессии.

Может ли кто-нибудь обратиться ко мне правильно? Заранее спасибо.


person Paride Letizia    schedule 04.09.2016    source источник
comment
Возможный дубликат Как заставить устройство Android вибрировать?   -  person x-code    schedule 04.09.2016
comment
Нет, это другое, потому что я говорю о модуляции частоты в зависимости от интенсивности вибрации. Не могли бы вы помочь мне?   -  person Paride Letizia    schedule 05.09.2016


Ответы (1)


Ответ В моем комментарии* показано, как заставить устройство гудеть по шаблону:

Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
long[] pattern = {0, 100, 1000, 300, 200, 100, 500, 200, 100};
v.vibrate(pattern, -1);

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

На аппаратном уровне зуммер просто включен или выключен, поэтому решение о том, какие изменения в pattern лучше всего имитируют изменение интенсивности, — это вопрос проб и ошибок. Это может быть так же просто, как сделать каждое значение on пропорциональным tremorIntensity:

long[] pattern = {0, tremorItensity * factor, 100}

*Вот оно.

person x-code    schedule 05.09.2016
comment
Прежде всего, спасибо за ваш ответ. Дело в том, что у меня один вал (2 или 5 или 12) и исходя из этого значения я должен заставить телефон вибрировать. Представьте, что рука дрожит сильно, а затем медленнее, вибрация должна постепенно уменьшать свою частоту с интенсивностью дрожания руки. Имеет ли это смысл? - person Paride Letizia; 05.09.2016
comment
Это имеет определенный смысл, но я не собираюсь знать, какой паттерн создает желаемый эффект, который в вопросе описывается по-разному как интенсивность или частота. Так что экспериментируйте с разными узорами. - person x-code; 05.09.2016
comment
Точно, я хотел бы знать точную схему и надеялся на вашу помощь. - person Paride Letizia; 06.09.2016
comment
С какими узорами вы экспериментировали? Покажите некоторую работу и опишите конкретную проблему с тем, что вы пробовали до сих пор. - person x-code; 06.09.2016