все!
Я новичок 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
С наилучшими пожеланиями!
Людвиг