Contenu | Rechercher | Menus

Annonce

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.

À propos de l'équipe du forum.

#1 Le 16/11/2016, à 22:25

temps

[résolu] Lire un nombre indéfini de formes en javascript

Bonjour,
Je voudrais pouvoir lire un nombre indéfinis de forme. Actuellement pour chaque forme je crée un tableau.
En exemple pour 7 formes, le fichier en javascript s'écrit :

var donne = [1, 220, 2, 5, 20, 1, 35, 100, 220, 30,
3, 6, 2, 1, 210, 100, 220, 0, 220, 20,
0, 0, 0, 0, 0, 0, 0, 219, 20, 0,
0, 0, 0, 0, 0, 0, 30, 20, 0, 0,
0, 0, 0, 0, 0, 31, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 7, 1, 1, 7];

var donna = [1, 220, 10, 10, 10, 1, 130, 0, 0, 30,
3, 6, 2, 1, 125, 0, 0, 0, 220, 10,
0, 0, 0, 0, 0, 0, 0, 219, 10, 0,
0, 0, 0, 0, 0, 0, 30, 10, 0, 0,
0, 0, 0, 0, 0, 31, 8, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 50, 1, 1, 7];

var donnb = [1, 220, 2, 5, 20, 1, 130, 0, 0, 30,
3, 6, 2, 1, 125, 0, 0, 0, 32, 20,
0, 0, 0, 0, 0, 0, 0, 31, 20, 0,
0, 0, 0, 0, 0, 0, 30, 20, 0, 0,
0, 0, 0, 0, 0, 31, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 50, 1, 1, 7];


var donnc = [1, 220, 10, 10, 10, 1, 130, 0, 0, 30,
3, 6, 2, 1, 125, 0, 0, 0, 32, 10,
0, 0, 0, 0, 0, 0, 0, 31, 10, 0,
0, 0, 0, 0, 0, 0, 30, 10, 0, 0,
0, 0, 0, 0, 0, 31, 10, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 50, 1, 1, 7];


var donnd = [1, 220, 2, 6, 20, 1, 130, 0, 0, 30,
3, 6, 2, 1, 125, 0, 0, 0, 32, 20,
0, 0, 0, 0, 0, 0, 0, 31, 20, 0,
0, 0, 0, 0, 0, 0, 30, 20, 0, 0,
0, 0, 0, 0, 0, 31, 11, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 50, 1, 1, 7];

var donnf = [1, 220, 7, 10, 10, 1, 130, 0, 0, 30,
3, 6, 2, 1, 125, 0, 0, 0, 32, 10,
0, 0, 0, 0, 0, 0, 0, 31, 10, 0,
0, 0, 0, 0, 0, 0, 30, 10, 0, 0,
0, 0, 0, 0, 0, 31, 12, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 50, 1, 1, 7];

var donng = [1, 220, 2, 6, 20, 1, 130, 0, 0, 30,
3, 6, 10, 1, 125, 0, 0, 0, 32, 20,
0, 0, 0, 0, 0, 0, 0, 31, 20, 0,
0, 0, 0, 0, 0, 0, 30, 20, 0, 0,
0, 0, 0, 0, 0, 31, 13, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 50, 1, 1, 7];


for(var i= 0; i < 75; i++)
{
var nouveauinput;
function ajouteElemen() {
// crée un nouvel élément input
var body   = document.body || document.getElementsByTagName('body')[0],
nouveauinput  =  document.createElement("input");
nouveauinput.setAttribute("type", "number");
nouveauinput.setAttribute("id", ("donne"+i));
nouveauinput.setAttribute("value", donne[i]);
nouveauinput.setAttribute("style", "display: none;");
// ajoute l'élément qui vient d'être créé et son contenu au DOM
body.insertBefore(nouveauinput,body.childNodes[0]);
}  
ajouteElemen();
}

for(var i= 0; i < 75; i++)
{
var nouveauinput;
function ajouteElemen1() {
// crée un nouvel élément input
var body   = document.body || document.getElementsByTagName('body')[0],
nouveauinput  =  document.createElement("input");
nouveauinput.setAttribute("type", "number");
nouveauinput.setAttribute("id", ("donna"+i));
nouveauinput.setAttribute("value", donna[i]);
nouveauinput.setAttribute("style", "display: none;");
// ajoute l'élément qui vient d'être créé et son contenu au DOM
body.insertBefore(nouveauinput,body.childNodes[0]);
console.log("donna"+i);
console.log(donna[i]);
}  
ajouteElemen1();
}



for(var i= 0; i < 75; i++)
{
var nouveauinput;
function ajouteElemen2() {
// crée un nouvel élément input
var body   = document.body || document.getElementsByTagName('body')[0],
nouveauinput  =  document.createElement("input");
nouveauinput.setAttribute("type", "number");
nouveauinput.setAttribute("id", ("donnb"+i));
nouveauinput.setAttribute("value", donnb[i]);
nouveauinput.setAttribute("style", "display: none;");
// ajoute l'élément qui vient d'être créé et son contenu au DOM
body.insertBefore(nouveauinput,body.childNodes[0]);
}  
ajouteElemen2();
}


for(var i= 0; i < 75; i++)
{
var nouveauinput;
function ajouteElemen3() {
// crée un nouvel élément input
var body   = document.body || document.getElementsByTagName('body')[0],
nouveauinput  =  document.createElement("input");
nouveauinput.setAttribute("type", "number");
nouveauinput.setAttribute("id", ("donnc"+i));
nouveauinput.setAttribute("value", donnc[i]);
nouveauinput.setAttribute("style", "display: none;");
// ajoute l'élément qui vient d'être créé et son contenu au DOM
body.insertBefore(nouveauinput,body.childNodes[0]);
}  
ajouteElemen3();
}

for(var i= 0; i < 75; i++)
{
var nouveauinput;
function ajouteElemen4() {
// crée un nouvel élément input
var body   = document.body || document.getElementsByTagName('body')[0],
nouveauinput  =  document.createElement("input");
nouveauinput.setAttribute("type", "number");
nouveauinput.setAttribute("id", ("donnd"+i));
nouveauinput.setAttribute("value", donnd[i]);
nouveauinput.setAttribute("style", "display: none;");
// ajoute l'élément qui vient d'être créé et son contenu au DOM
body.insertBefore(nouveauinput,body.childNodes[0]);
}  
ajouteElemen4();
}

for(var i= 0; i < 75; i++)
{
var nouveauinput;
function ajouteElemen5() {
// crée un nouvel élément input
var body   = document.body || document.getElementsByTagName('body')[0],
nouveauinput  =  document.createElement("input");
nouveauinput.setAttribute("type", "number");
nouveauinput.setAttribute("id", ("donnf"+i));
nouveauinput.setAttribute("value", donnf[i]);
nouveauinput.setAttribute("style", "display: none;");
// ajoute l'élément qui vient d'être créé et son contenu au DOM
body.insertBefore(nouveauinput,body.childNodes[0]);
}  
ajouteElemen5();
}

for(var i= 0; i < 75; i++)
{
var nouveauinput;
function ajouteElemen6() {
// crée un nouvel élément input
var body   = document.body || document.getElementsByTagName('body')[0],
nouveauinput  =  document.createElement("input");
nouveauinput.setAttribute("type", "number");
nouveauinput.setAttribute("id", ("donng"+i));
nouveauinput.setAttribute("value", donng[i]);
nouveauinput.setAttribute("style", "display: none;");
// ajoute l'élément qui vient d'être créé et son contenu au DOM
body.insertBefore(nouveauinput,body.childNodes[0]);
}  
ajouteElemen6();
}

La dernière valeur du tableau indique la forme.
L'idée serait d'incrémenter une valeur qui viendrait en indice au nom des fonctions et en même temps indiquerait à l'addon combien de parties musicales il faut générer.

c'est pour l'Addon firefox lecjo les codes de lecjo sont aussi sous github

Le but cherché ici est de pouvoir écrire des albums musicaux complet en utilisant juste le plugin audio lecjo. Les étapes suivantes, seront d'affiner le code, puis de chercher à simplifier (réduire) le poids du fichier javascript

Cordialement

Dernière modification par temps (Le 22/11/2016, à 06:41)


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
https://www.letime.net

Hors ligne

#2 Le 19/11/2016, à 02:37

temps

Re : [résolu] Lire un nombre indéfini de formes en javascript

Bonjour,
J'ai un début de solution pour les données entrées en utilisant deux tableaux. L'un pour les nom, l'autre pour le contenu.
Ce qui donne pour générer deux formes:

var don1n =new Array;
var don2n =new Array;

don1n = [1, 220, 100, 0, 0, 1, 130, 0, 0, 30,
100, 2, 0, 1, 220, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 100, 0, 0, 2];

don2n = [1, 220, 20, 0, 0, 1, 130, 0, 0, 30,
180, 2, 0, 1, 220, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 100, 0, 0, 2];

var total=new Array;
total[0]="don1n"; total[1]="don2n";
var total1=new Array;
total1[0]=don1n; total1[1]=don2n;

for(var ui= 0; ui < 2; ui++)
{
for(var i= 0; i < 75; i++)
{
var nouveauinput;
function ajouteElemen() {
// crée un nouvel élément input
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;");
// ajoute l'élément qui vient d'être créé et son contenu au DOM
body.insertBefore(nouveauinput,body.childNodes[0]);
console.log(total[ui]+i);
console.log(total1[ui][i]);
}  
ajouteElemen();
}
}

En compressant avec 7z, nos fichiers audio pèsent moins de 1 ko
Il me reste a améliorer le plugin audio pour qu'il puisse lire un nombre indéterminé de forme, indiqué par la valeur se trouvant dans la dernière position de chaque tableau. J'ai fait quelques essais avec Number mais je n'arrive pas à avoir une version qui me plait.
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
https://www.letime.net

Hors ligne

#3 Le 20/11/2016, à 00:03

temps

Re : [résolu] Lire un nombre indéfini de formes en javascript

Bonjour,
j'ai un début de solution, mais j'ai l'impression que celui-ci fait perdre en qualité, aussi je ne l'applique pas encore.
Actuellement j'ai dans le plugin audio pour chaque forme:

	var donne74 = document.getElementById("don1n74").value;

var pas;
for (pas = 0; pas < donne74; pas++) {


switch(pas) {
    case 0:
	var donne1 = document.getElementById("don1n1").value;
	var donne2 = document.getElementById("don1n2").value;
	var donne3 = document.getElementById("don1n3").value;
	var donne4 = document.getElementById("don1n4").value;
	var donne5 = document.getElementById("don1n5").value;
	var donne6 = document.getElementById("don1n6").value;
	var donne7 = document.getElementById("don1n7").value;
	var donne8 = document.getElementById("don1n8").value;
	var donne9 = document.getElementById("don1n9").value;
	var donne10 = document.getElementById("don1n10").value;
	var donne11 = document.getElementById("don1n11").value;
	var donne12 = document.getElementById("don1n12").value;
	var donne13 = document.getElementById("don1n13").value;
	var donne14 = document.getElementById("don1n14").value;
	var donne15 = document.getElementById("don1n15").value;
	var donne16 = document.getElementById("don1n16").value;
	var donne17 = document.getElementById("don1n17").value;
	var donne18 = document.getElementById("don1n18").value;
	var donne19 = document.getElementById("don1n19").value;
	var donne20 = document.getElementById("don1n20").value;
	var donne21 = document.getElementById("don1n21").value;
	var donne22 = document.getElementById("don1n22").value;
	var donne23 = document.getElementById("don1n23").value;
	var donne24 = document.getElementById("don1n24").value;
	var donne25 = document.getElementById("don1n25").value;
	var donne26 = document.getElementById("don1n26").value;
	var donne27 = document.getElementById("don1n27").value;
	var donne28 = document.getElementById("don1n28").value;
	var donne29 = document.getElementById("don1n29").value;
	var donne30 = document.getElementById("don1n30").value;
	var donne31 = document.getElementById("don1n31").value;
	var donne32 = document.getElementById("don1n32").value;
	var donne33 = document.getElementById("don1n33").value;
	var donne34 = document.getElementById("don1n34").value;
	var donne35 = document.getElementById("don1n35").value;
	var donne36 = document.getElementById("don1n36").value;
	var donne37 = document.getElementById("don1n37").value;
	var donne38 = document.getElementById("don1n38").value;
	var donne39 = document.getElementById("don1n39").value;
	var donne40 = document.getElementById("don1n40").value;
	var donne41 = document.getElementById("don1n41").value;
	var donne42 = document.getElementById("don1n42").value;
	var donne43 = document.getElementById("don1n43").value;
	var donne44 = document.getElementById("don1n44").value;
	var donne45 = document.getElementById("don1n45").value;
	var donne46 = document.getElementById("don1n46").value;
	var donne47 = document.getElementById("don1n47").value;
	var donne48 = document.getElementById("don1n48").value;
	var donne49 = document.getElementById("don1n49").value;
	var donne50 = document.getElementById("don1n50").value;
	var donne51 = document.getElementById("don1n51").value;
	var donne52 = document.getElementById("don1n52").value;
	var donne53 = document.getElementById("don1n53").value;
	var donne54 = document.getElementById("don1n54").value;
	var donne55 = document.getElementById("don1n55").value;
	var donne56 = document.getElementById("don1n56").value;
	var donne57 = document.getElementById("don1n57").value;
	var donne58 = document.getElementById("don1n58").value;
	var donne59 = document.getElementById("don1n59").value;
	var donne60 = document.getElementById("don1n60").value;
	var donne61 = document.getElementById("don1n61").value;
	var donne62 = document.getElementById("don1n62").value;
	var donne63 = document.getElementById("don1n63").value;
	var donne64 = document.getElementById("don1n64").value;
	var donne65 = document.getElementById("don1n65").value;
	var donne66 = document.getElementById("don1n66").value;
	var donne67 = document.getElementById("don1n67").value;
	var donne68 = document.getElementById("don1n68").value;
	var donne69 = document.getElementById("don1n69").value;
	var donne70 = document.getElementById("don1n70").value;
	var donne71 = document.getElementById("don1n71").value;
	var donne72 = document.getElementById("don1n72").value;
	var donne73 = document.getElementById("don1n73").value;
        break;

    case 1:

Cette technique d'écriture marche très bien mais ne permet pas d'adapter au nombre de formes et c'est lourd en poids.

En prévision de pouvoir lire un nombre de forme indéterminé, j'ai commencé à écrire le code ci-dessous, mais à l'oreille , j'ai l'impression de perdre en qualité

var donne = [];


	donne[74]  = document.getElementById("don1n74").value;
console.log(donne[74]);
var pas;
for (pas = 0; pas < donne[74] ; pas++) {


switch(pas) {
    case 0:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don1n"+pui).value;
}
        break;
    case 1:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don2n"+pui).value;
}
        break;
    case 2:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don3n"+pui).value;
}
        break;
    case 3:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don4n"+pui).value;
}
        break;
    case 4:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don5n"+pui).value;
}
        break;
    case 5:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don6n"+pui).value;
}
        break;
    case 6:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don7n"+pui).value;
}
        break;
    case 7:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don8n"+pui).value;
}
        break;
    case 8:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don9n"+pui).value;
}
        break;
    case 9:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don10n"+pui).value;
}
        break;
    case 10:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don11n"+pui).value;
}
        break;
    case 11:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don12n"+pui).value;
}
        break;
    case 12:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don13n"+pui).value;
}
        break;
    case 13:
for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById("don14n"+pui).value;
}
        break;
}//fin switch pas ; lecture des differents sons a generer

C'est bien plus léger, mais je pense que le son est très très légèrement déformé, je ne sais pas encore pourquoi. Je suppose que le fait de sortir la valeur d'un tableau, ne donne pas le même effet que de le sortir d'une variable en certains cas, que je n'ai pas encore identifié, ou peut être est-ce du à la génération qui est plus lourde qu'une simple lecture.

Cordialement

Dernière modification par temps (Le 20/11/2016, à 00: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
https://www.letime.net

Hors ligne

#4 Le 22/11/2016, à 06:38

temps

Re : [résolu] Lire un nombre indéfini de formes en javascript

Bonjour,
J'ai trouvé pourquoi les sons étaient légèrement déformés en utilisant number, je résous le problème.
Le code devient :

var donne = [];

	donne[74]  = document.getElementById("don1n74").value;

var pas;
for (pas = 0; pas < donne[74] ; pas++) {

var basedeconstruc = "don";
var lincremente = 0;
var pasop = pas + 1;

for(var pui= 1; pui < 74; pui++)
{
	donne[pui] = document.getElementById(basedeconstruc.concat(pasop,"n",pui )).value;
}

Et ainsi, il est maintenant possible de générer autant de formes acoustiques que l'on veut dans l'addon lecjo.
Je pourrais affiner le code et les formes, mais comme pour lecjoa ça ne m’intéresse pas de faire un outil le plus performant, ma démarche est de montrer comment s'associe les phénomènes qui nous entourent et ainsi transmettre comment associer les idées. Je viens de commencer la création d'un piano virtuel sans aucun fichier audio, juste en générant les notes avec abadie.adn. La première version de cet instrument de musique complet en HTML, pèse 10ko tout mouillé.
Il va falloir que je pense à trouver un nom, car j'ai l'intention de le présenter comme addon firefox

Je poste en résolu.
Cordialement

Dernière modification par temps (Le 22/11/2016, à 06:44)


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
https://www.letime.net

Hors ligne