[英]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.