Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Appel à contributeurs pour la doc.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 21/12/2016, à 06:18

temps

[résolu] javascript instrument de musique virtuel

Bonjour,
Actuellement chaque son  des instruments de musique est généré par une brique acoustique. En exemple pour le piano, il y a 3 octave, donc 36 briques de la forme :

var e0 = [1, 220, 169, 1, 0, 1, 130, 0, 0, 30,
169, 2, 0, 1, 129, 0, 0, 0, 40, 159,
0, 0, -1, 129, 0, 0, 0, 130, 159, 0,
0, 0, 0, 0, 0, 0, 160, 80, 0, 0,
0, 0, 0, 0, 0, 90, 60, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 180, 0, 0, 216];//do octave 2

Contrairement à une composition musicale, chaque instrument musicale possède presque la même brique qui change légèrement selon les touches.
L'idée est d'écrire une seules brique, puis de dire que les 35 autres briques sont égales à cette brique, puis de modifier dans chaque brique que ce qui change.

En premier créons un tableau de briques acoustiques

var e = [];

var e[0] = [1, 220, 169, 1, 0, 1, 130, 0, 0, 30,
169, 2, 0, 1, 129, 0, 0, 0, 40, 159,
0, 0, -1, 129, 0, 0, 0, 130, 159, 0,
0, 0, 0, 0, 0, 0, 160, 80, 0, 0,
0, 0, 0, 0, 0, 90, 60, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 180, 0, 0, 216];//do octave 2

Ensuite nous créons une boucle qui assigne les mêmes valeurs au 35 autres briques

for(var bi= 1; bi < 37; bi++)
{
var e[bi] = e[0];
}

et je modifie les briques acoustique avec un splice

for(var bi= 1; bi < 36; bi++)
{
 e[bi] = e[0];
e[bi].splice(2, 1, val[bi]);
e[bi].splice(10, 1, val[bi]);
}

en ayant placé les valeurs dans un tableau

var val = [169, 159, 150, 142, 134, 126, 119, 113, 106, 100, 95, 89,
84, 80, 75, 71, 67, 63, 60, 56, 53, 50, 47, 45,
42, 40, 38, 35, 33, 32, 30, 28, 27, 25, 24, 22];

Mais je ne sais pas pourquoi j'obtiens partout la même note.
Cordialement

Dernière modification par temps (Le 21/12/2016, à 14:02)


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination

Hors ligne

#2 Le 21/12/2016, à 08:09

temps

Re : [résolu] javascript instrument de musique virtuel

Le code complet qui génère le piano est :

 e[0] = [1, 220, 169, 1, 0, 1, 130, 0, 0, 30,
169, 2, 0, 1, 129, 0, 0, 0, 40, 159,
0, 0, -1, 129, 0, 0, 0, 130, 159, 0,
0, 0, 0, 0, 0, 0, 160, 80, 0, 0,
0, 0, 0, 0, 0, 90, 60, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 180, 0, 0, 1];//do octave 2

var val = [169, 159, 150, 142, 134, 126, 119, 113, 106, 100, 95, 89,
84, 80, 75, 71, 67, 63, 60, 56, 53, 50, 47, 45,
42, 40, 38, 35, 33, 32, 30, 28, 27, 25, 24, 22];

for(var bi= 1; bi < 36; bi++)
{
 e[bi] = e[0];
e[bi].splice(2, 1, val[bi]);
e[bi].splice(10, 1, val[bi]);
}



var don = {
  1: e[0], 2: e[1], 3: e[2], 4: e[3], 5: e[4], 6: e[5], 7: e[6], 8: e[7], 9: e[8], 10: e[9], 11: e[10], 
12: e[11],13: e[12], 14: e[13], 15: e[14], 16: e[15], 17: e[16], 18: e[17], 19: e[18], 20: e[19], 21: e[20], 
22: e[21], 23: e[22], 24: e[23],25: e[24], 26: e[25], 27: e[26], 28: e[27], 29: e[28], 30: e[29], 31: e[30], 
32: e[31], 33: e[32], 34: e[33], 35: e[34], 36: e[35]
}

var total = [];
var total1 = [];
for(var uiu= 1; uiu < 37; uiu++)
{
total[uiu -1] = "dan"+[uiu]+"n";
total1[uiu -1]=don[uiu];
}

for(var ui= 0; ui < 36; ui++)
{
for(var i= 0; i < 75; i++)
{
var nouveauinput;
function ajouteElemen() {
var body   = document.body || document.getElementsByTagName('body')[0],
nouveauinput  =  document.createElement("input");
nouveauinput.setAttribute("type", "number");
nouveauinput.setAttribute("id", total[ui]+i);
nouveauinput.setAttribute("value", total1[ui][i]);
nouveauinput.setAttribute("style", "display: none;");
body.insertBefore(nouveauinput,body.childNodes[0]);
}  
ajouteElemen();
}
}

Mais j’obtiens toujours la même noté sur toutes les touches, est-ce que quelqu'un voit ou est l'erreur ?

La version bien lourde qui répète 36 fois les briques acoustiques est ici PianoBaul et elle est fonctionnelle

PS après analyses, je sais que ça vient du splice qui place à chaque fois la dernière valeur du tableau val,

Cordialement

Dernière modification par temps (Le 21/12/2016, à 10:05)


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination

Hors ligne

#3 Le 21/12/2016, à 13:21

kholo

Re : [résolu] javascript instrument de musique virtuel

salut,
c'est toujours bon d'avoir des infos comme ça mais il en faudrait un peu plus pour amener les lecteurs à tester...
on commence par où ?

Hors ligne

#4 Le 21/12/2016, à 13:53

temps

Re : [résolu] javascript instrument de musique virtuel

Bonjour,
Merci pour la réponse.
J'ai trouvé la solution, en fait quand j'utilise le terme égal entre deux tableaux, celui-ci colle comme un chewing-gum .
Je mets une solution possible à la fin du poste.
Concernant l'application, c'est toujours la même que j'ai créé début 2010, mais sous linux cela n'a pas vraiment accroché malgré tout le travail (je pense à des centaines d'heures) d'aide accordé par la communauté tux.  Aussi maintenant c'est sous firefox, trois addon, un pour faire des instruments de musique (ici le sujet), un qui génère et lit des fichiers audio, un idem mais sur de la vidéo. C'est du libre donc les sources sont pour les plus récentes en téléchargement sur firefox
https://addons.mozilla.org/en-US/firefox/addon/lecjo/  lecjo
https://addons.mozilla.org/en-US/firefox/addon/lecjoa/  lecjoa
https://addons.mozilla.org/en-US/firefo … /pianomoz/  pianomoz
mais aussi sous github, et dans le labyrinthe de mon site internet,

je vais mettre à jour sur firefox pianomoz avec cette solution, ou mieux car je pense qu'elle est à améliorer

la solution :

var m={0:[],1:[],2:[],3:[],4:[],5:[],6:[],7:[],8:[],9:[],10:[],11:[],12:[],13:[],14:[],15:[],16:[],17:[]
,18:[],19:[],20:[],21:[],22:[],23:[],24:[],25:[],26:[],27:[],28:[],29:[],30:[],31:[],32:[]
,33:[],34:[],35:[]};
var val1 = [1, 220, 169, 1, 0, 1, 130, 0, 0, 30,
169, 2, 0, 1, 129, 0, 0, 0, 40, 159,
0, 0, -1, 129, 0, 0, 0, 130, 159, 0,
0, 0, 0, 0, 0, 0, 160, 80, 0, 0,
0, 0, 0, 0, 0, 90, 60, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 180, 0, 0, 1];//do octave 2

var val = [169, 159, 150, 142, 134, 126, 119, 113, 106, 100, 95, 89,
84, 80, 75, 71, 67, 63, 60, 56, 53, 50, 47, 45,
42, 40, 38, 35, 33, 32, 30, 28, 27, 25, 24, 22];


for(var b1= 0; b1 < 36; b1++)
{
for(var b2= 0; b2 < 2; b2++)
{
m[b1][b2]=val1[b2];
}
for(var b3= 3; b3 < 10; b3++)
{
m[b1][b3]=val1[b3];
}
for(var b4= 11; b4 < 75; b4++)
{
m[b1][b4]=val1[b4];
}
m[b1][2]=val[b1];
m[b1][10]= val[b1];

}

console.log(m[1]);


console.log(m[2]);

var don = {
  1: m[0], 2: m[1], 3: m[2], 4: m[3], 5: m[4], 6: m[5], 7: m[6], 8: m[7], 9: m[8], 10: m[9], 11: m[10], 
12: m[11],13: m[12], 14: m[13], 15: m[14], 16: m[15], 17: m[16], 18: m[17], 19: m[18], 20: m[19], 21: m[20], 
22: m[21], 23: m[22], 24: m[23],25: m[24], 26: m[25], 27: m[26], 28: m[27], 29: m[28], 30: m[29], 31: m[30], 
32: m[31], 33: m[32], 34: m[33], 35: m[34], 36: m[35]
}

var total = [];
var total1 = [];
for(var uiu= 1; uiu < 37; uiu++)
{
total[uiu -1] = "dan"+[uiu]+"n";
total1[uiu -1]=don[uiu];
}

for(var ui= 0; ui < 36; ui++)
{
for(var i= 0; i < 75; i++)
{
var nouveauinput;
function ajouteElemen() {
var body   = document.body || document.getElementsByTagName('body')[0],
nouveauinput  =  document.createElement("input");
nouveauinput.setAttribute("type", "number");
nouveauinput.setAttribute("id", total[ui]+i);
nouveauinput.setAttribute("value", total1[ui][i]);
nouveauinput.setAttribute("style", "display: none;");
body.insertBefore(nouveauinput,body.childNodes[0]);
}  
ajouteElemen();
}
}

Dernière modification par temps (Le 21/12/2016, à 13:55)


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination

Hors ligne

#5 Le 22/12/2016, à 12:02

kholo

Re : [résolu] javascript instrument de musique virtuel

il ne manque plus qu'une musique !
au clair de la lune ? par exemple...
les notes vont suivre ?
ça pourra être audible ?

tout ça c'est un peu comme les midi files et les instruments virtuels
les ingés ont commencé par faire des sons à partir de synthèse sonore
puis les tables d'ondes (sampleurs), puis plusieurs samples par note déclenchés en fonction de la vélocité
et les joystics qui modifient des valeurs (lfo, release, sustain,...)
et tout réuni...

PS : bon boulot !
les plugs firefox installés sans problème à part pianomoz qui demande une signature numérique...
mais installé quand même sur un de mes profiles
wink

Hors ligne

#6 Le 22/12/2016, à 13:46

temps

Re : [résolu] javascript instrument de musique virtuel

Bonjour,
Merci pour le commentaire, ce n'est pas tout à fait du midi, même si ça y ressemble, il y a quelque chose en plus. Mais oui l'approche d'identifier les sons en fonction des mariages des lois physiques est toujours plus profitable que d'imiter. Donc l'approche midi est cohérente.
Oui, il est possible à l'artiste de créer son propre pad (ce son les outils utilisés aujourd'hui par les artistes, des claviers virtuels adaptés à leur style) pianomoz, oui il est possible de créer des interprétations de mélodie déjà existante comme au claire de la lune ou plus complexe lecjo, oui il est possible de faire des présentation multidirectionnel et expliquer les mécanismes du vivant en biologie avec lecjoa. Mais moi je ne suis qu'un luthier, pas un artiste, ou un chercheur, je passe mon temps à soliciter les tux et les AMO, pour qu'il m'aide à construire les outils afin d'agencer les codes comme je l'entends. A une époque j'ai même contacté tous les hommes politiques français pour qu'il m'aide à construire des systèmes hard adaptés à mes concepts, mais je n'ai obtenu que des refus. Pourtant ce ne serait qu'une puce avec quelques ampli-op qui ferait les fonctions que je code d'une manière prédéterminée, j'avais appelé ça carte audio linux.

En d'autres mots, il ne faut pas utiliser ces outils en l'état, il ne sont là que pour indiquer des chemins possibles. Chacun doit créer son propre addon selon ces besoins. Tel compositeur avec telle particularité, tel producteur de musique avec telle fonction, tel artiste avec tel pad ... Quelqu'un de bon en tout est bon à rien, je préfère rester dans mon rôle de luthier débutant car j'y trouve du plaisir. Pour conclure dans ces codes, il y a de nombreux tux, même issus de ce forum, et de nombreux AMO, je ne fais que lier le savoir d'une manière particulière.
Cordialement


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination

Hors ligne

#7 Le 22/12/2016, à 14:45

kholo

Re : [résolu] javascript instrument de musique virtuel

cool, un luthier !
j'ai parcouru ton travail (enfin tes travaux !)...
tu bosses plus sur l'acoustique que sur les utilisations
moi, je pense tout de suite à karaoké quand je vois pianomoz...
mais ya du taf avant d'arriver à créer une banque de 256 fonts et de gérer le multi-timbral
et, j'ai compris, c'est pas toi qui t'y collera wink
je vais me pencher un peu plus sur tes logiciels pour comprendre comment ça marche.

Hors ligne

#8 Le 22/12/2016, à 16:30

temps

Re : [résolu] javascript instrument de musique virtuel

Merci pour le retour.
Si une zone semble obscur, je peux aider. J'adore découvrir de nouvelles applications.
Mais effectivement, ce qui m’intéresse, c'est de pousser la multitude de portes que je vois autour de moi, de regarder, mais pas d'y entrer, car cela ne serait plus du travaille d'équipe. Et seul, nous sommes toujours mal accompagné.
Cordialement


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination

Hors ligne