библиотека gyronorm: как правильно передать значение датчика в функцию? - PullRequest
0 голосов
/ 24 января 2020

все!

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

Я пытаюсь создать управляемый жестами синтезатор, который работает в браузере на мобильном устройстве, используя данные гироскопа и акселерометра. Я использую библиотеку p5. js и p5.sound. js вместе с библиотекой gyronorm. js.

на данный момент мне удалось заставить вещь работать как моносинтез, который воспроизводит одну ноту, и я пытаюсь смодулировать амплитуду с помощью сенсорданных из гироскопа. он работает до сих пор, поворачивая телефон вокруг оси Z (лежа на столе лицом вверх), но издает странные потрескивающие звуки. Я думаю, что это может быть связано с частотой кадров функции рисования, но я понятия не имею, что не так, если честно, и я не могу найти ответы в Google, потому что я действительно не совсем точно знаю, что я ищу XD.

так вот мой код:

let gn; // global variable for the Gyronorm Constructor
let movZ, movX, movY; //global variables for the accelerometer values

var alpha = 0,
  beta = 0,
  gamma = 0; //global variables for the gyroscope values

let vol; //global variable for the value calculation of the z-axis (alpha) value
let osc1;

function setup() {
  createCanvas(windowWidth, windowHeight);
  frameRate(120);

  osc1 = new p5.Oscillator();
  osc1.freq(300);

  osc1.start();
  //constructor for gyroscope
  gn = new GyroNorm();

  let args = {
    decimalCount: 2,
    frequency: 10
  }

  gn.init(args).then(function() {
    gn.start(function(data) {
      // Process:
      alpha = data.do.alpha; //( deviceorientation event alpha value 0- 360 degrees)
      beta = data.do.beta; //( deviceorientation event beta value )
      gamma = data.do.gamma; //( deviceorientation event gamma value )


      movZ = data.dm.z; //( devicemotion event acceleration z value )
      movX = data.dm.x; //( devicemotion event acceleration x value )
      movY = data.dm.y; //( devicemotion event acceleration y value )
      vol = abs(sin(radians(alpha))); //trigonometric calculation of the alpha value to a value between 1 and 0

    });
  }).catch(function() {
    notAvailable()
  });
}


function draw() {
  background(0);
  fill(255);

  osc1.amp(vol);

  text("rotationZ (computed): " + vol, 200, 300);
  text("rotationX: " + beta, 200, 350);
  text("rotationY: " + gamma, 200, 400);

  text("accZ: " + movZ, 50, 300);
  text("accX: " + movX, 50, 350);
  text("accY: " + movY, 50, 400);

}

function notAvailable() {
  text("Gyroscope not supported!Sorry...", 300, 300);
}

и вот ссылка на localtunnel, так что вы можете попробовать его на своем телефоне (я думаю, это должно работать?)

http://4892fdea.ngrok.io

у кого-нибудь есть объяснение или намек или что-нибудь ??? Я был бы очень признателен! Пожалуйста, помогите мне, потому что я действительно застрял здесь! THX

С наилучшими пожеланиями!

Людвиг

...