繁体   English   中英

如何使用js加载我页面上的所有音频文件

[英]How to load all audio files on my page with js

我正在尝试使用 js 生成所有音频文件的文件路径,但我的脚本没有按预期工作。 这是我的文件结构:

- audio/
   - 36/
      - 3/
         - maj/
            - c.mp3
            - cis.mp3
            - d.mp3
            - dis.mp3
            - e.mp3
            - f.mp3
            - fis.mp3
            - g.mp3
            - gis.mp3
            - a.mp3
            - b.mp3
            - h.mp3
         - min/
            - c.mp3
            - cis.mp3
            - d.mp3
            - dis.mp3
            - e.mp3
            - f.mp3
            - fis.mp3
            - g.mp3
            - gis.mp3
            - a.mp3
            - b.mp3
            - h.mp3
      - 6/
         - maj/
            - c.mp3
            - cis.mp3
            - d.mp3
            - dis.mp3
            - e.mp3
            - f.mp3
            - fis.mp3
            - g.mp3
            - gis.mp3
            - a.mp3
            - b.mp3
            - h.mp3
         - min/
            - c.mp3
            - cis.mp3
            - d.mp3
            - dis.mp3
            - e.mp3
            - f.mp3
            - fis.mp3
            - g.mp3
            - gis.mp3
            - a.mp3
            - b.mp3
            - h.mp3

https://github.com/TonnyHawk/solfege/tree/main/%23src/audio/36

如您所见,只有 12 个文件名重复,只有文件夹名称发生变化。 我在这个 object 中收集了所有可能的文件和文件夹名称

   let pth = {
      audioFolder: 'audio',
      section: ['36'],
      interval: ['3','6'],
      type: ['maj','min'],
      bassNote: [
         'c',
         'cis',
         'd',
         'dis',
         'e',
         'f',
         'fis',
         'g',
         'gis',
         'a',
         'b',
         'h',
      ],
      octave: [1],
      ext: '.mp3'
   }

并且应该生成这样的路径audio / 36 / 3 / maj / octaves / 1 / a.mp3

     let paths = [];
     let it = 0;

     sections(audioFolder + '/');

     function sections(path){// should recieve audio/
        let str;
        for(i = 0; i < pth.section.length; i++){
           str = path;
           str += pth.section[i];
           str += '/';
           console.log('sections')
           intervals(str);
        }
     }

     function intervals(path){// should recieve audio/36
        let str;
        for(i = 0; i < pth.interval.length; i++){
           str = path;
           str += pth.interval[i];
           str += '/';
           console.log('intervals')
           types(str);
        }
     }

     function types(path){// should recieve audio/36/3/
        let str;
        for(i = 0; i < pth.type.length; i++){
           str = path;
           str += pth.type[i];
           str += '/';
           console.log('types')
           octaves(str)
        }
     }
     

     function octaves(path=path+'octaves/'){// should recieve audio/36/3/maj/
        let str;
        for(i = 0; i < pth.octave.length; i++){
           str = path;
           str += pth.octave[i];
           str += '/';
           console.log('octaves')
           notes(str);
        }
     }

     function notes(path){// should recieve audio/36/3/maj/octaves/1/
        let str;
        for(i = 0; i < bassNote.length; i++){
           str = path;
           str += pth.bassNote[i];
           str += ext;

           console.log('notes')

           paths[it] = str;
           it = it + 1;
        }  
     }

     for(i = 0; i < paths.length; i++){
        console.log(paths[i])
     }

但我收到的只是一个文件夹的文件名

audio/36/3/maj/1/c.mp3
audio/36/3/maj/1/cis.mp3
audio/36/3/maj/1/d.mp3
audio/36/3/maj/1/dis.mp3
audio/36/3/maj/1/e.mp3
audio/36/3/maj/1/f.mp3
audio/36/3/maj/1/fis.mp3
audio/36/3/maj/1/g.mp3
audio/36/3/maj/1/gis.mp3
audio/36/3/maj/1/a.mp3
audio/36/3/maj/1/b.mp3

似乎所有for循环只执行一次,并且只有notes() function 遍历所有 pth.notes 数组。 有人可以向我解释这种行为吗? 我愿意听取您的解决方案

您需要分别假设或让每个 function 中的i变量,因为它被先前的值覆盖。 请检查以下代码或检查js fiddle

 let pth = { audioFolder: 'audio', section: ['36'], interval: ['3','6'], type: ['maj','min'], bassNote: [ 'c','cis','d','dis','e','f','fis', 'g','gis','a','b','h', ], octave: [1,2], ext: '.mp3' } let paths = []; sections(pth.audioFolder + '/'); function sections(path){// should recieve audio/ let str, i; for(i = 0; i < pth.section.length; i++){ str = path; str += pth.section[i]; str += '/'; intervals(str); } } function intervals(path){// should recieve audio/36 let str, i; for(i = 0; i < pth.interval.length; i++){ str = path; str += pth.interval[i]; str += '/'; types(str); } } function types(path){// should recieve audio/36/3/ let str, i; for(i = 0; i < pth.type.length; i++){ str = path; str += pth.type[i]; str += '/'; octaves(str) } } function octaves(path){// should recieve audio/36/3/maj/ let str, i; for(i = 0; i < pth.octave.length; i++){ str = path; str += 'octaves/'; str += pth.octave[i]+'/'; notes(str); } } function notes(path){// should recieve audio/36/3/maj/octaves/1/ let str, i; for(i = 0; i < pth.bassNote.length; i++){ str = path; str += pth.bassNote[i]; str += pth.ext; paths.push(str); } } for(i = 0; i < paths.length; i++){ console.log(paths[i]) } console.log('Total Path: ' + paths.length);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM