|  | @@ -47,119 +47,119 @@ let ncmAPIUrl = "http://localhost:5999";
 | 
	
		
			
				|  |  |  let res_o = null;
 | 
	
		
			
				|  |  |  let req_o = null;
 | 
	
		
			
				|  |  |  let currentTask = [];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  function Submit() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      let reqLocal = req_o;
 | 
	
		
			
				|  |  |      let resLocal = res_o;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        let uuid = crypto.randomUUID()
 | 
	
		
			
				|  |  | -        db.connect(function (err) {
 | 
	
		
			
				|  |  | -            if (err) {
 | 
	
		
			
				|  |  | -                console.log(err)
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        })
 | 
	
		
			
				|  |  | +    let uuid = crypto.randomUUID()
 | 
	
		
			
				|  |  | +    db.connect(function (err) {
 | 
	
		
			
				|  |  | +        if (err) {
 | 
	
		
			
				|  |  | +            console.log(err)
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        let albumCover = null;
 | 
	
		
			
				|  |  | -        try {
 | 
	
		
			
				|  |  | -            fetch(reqLocal.body.file).then(res => {
 | 
	
		
			
				|  |  | -                res.arrayBuffer().then(r => fs.writeFileSync("./" + uuid, Buffer.from(r)));
 | 
	
		
			
				|  |  | -            })
 | 
	
		
			
				|  |  | -            fetch(reqLocal.body.albumCover).then(res => {
 | 
	
		
			
				|  |  | -                res.arrayBuffer().then(r => {
 | 
	
		
			
				|  |  | -                    albumCover = r
 | 
	
		
			
				|  |  | -                })
 | 
	
		
			
				|  |  | +    let albumCover = null;
 | 
	
		
			
				|  |  | +    try {
 | 
	
		
			
				|  |  | +        fetch(reqLocal.body.file).then(res => {
 | 
	
		
			
				|  |  | +            res.arrayBuffer().then(r => fs.writeFileSync("./" + uuid, Buffer.from(r)));
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        fetch(reqLocal.body.albumCover).then(res => {
 | 
	
		
			
				|  |  | +            res.arrayBuffer().then(r => {
 | 
	
		
			
				|  |  | +                albumCover = r
 | 
	
		
			
				|  |  |              })
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    } catch (err) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        } catch (err) {
 | 
	
		
			
				|  |  | +        console.log(err)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                console.log(err)
 | 
	
		
			
				|  |  | +        return
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            return
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +    const callback = function (d) {
 | 
	
		
			
				|  |  | +        console.log(d.toString());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    const errcb = function (d) {
 | 
	
		
			
				|  |  | +        console.log(d.toString());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    let kind_of = [];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    switch (reqLocal.body.kind) {
 | 
	
		
			
				|  |  | +        case 0:
 | 
	
		
			
				|  |  | +            kind_of[0] = `audio-separator ./${uuid} --model_filename UVR-MDX-NET-Inst_HQ_5.onnx --mdx_enable_denoise  --mdx_segment_size 4000 --mdx_overlap 0.75  --output_format mp3 --mdx_batch_size 300 --output_dir output`
 | 
	
		
			
				|  |  | +            kind_of[1] = `./output/${uuid}_(Instrumental)_UVR-MDX-NET-Inst_HQ_5.mp3`
 | 
	
		
			
				|  |  | +            kind_of[2] = `${uuid}_(Instrumental)_UVR-MDX-NET-Inst_HQ_5.mp3`
 | 
	
		
			
				|  |  | +            kind_of[3] = `./output/${uuid}_(Vocals)_UVR-MDX-NET-Inst_HQ_5.mp3`
 | 
	
		
			
				|  |  | +            break;
 | 
	
		
			
				|  |  | +        case 1:
 | 
	
		
			
				|  |  | +            kind_of[0] = `audio-separator ./${uuid} --model_filename UVR_MDXNET_KARA.onnx --mdx_enable_denoise  --mdx_segment_size 4000 --mdx_overlap 0.75 --output_format mp3 --mdx_batch_size 300 --output_dir output`
 | 
	
		
			
				|  |  | +            kind_of[1] = `./output/${uuid}_(Instrumental)_UVR_MDXNET_KARA.mp3`
 | 
	
		
			
				|  |  | +            kind_of[2] = `${uuid}_(Instrumental)_UVR_MDXNET_KARA.mp3`
 | 
	
		
			
				|  |  | +            kind_of[3] = `./output/${uuid}_(Vocals)_UVR_MDXNET_KARA.mp3`
 | 
	
		
			
				|  |  | +            break;
 | 
	
		
			
				|  |  | +        case 3:
 | 
	
		
			
				|  |  | +            kind_of[0] = `audio-separator ./${uuid} --model_filename kuielab_a_bass.onnx --mdx_enable_denoise  --mdx_segment_size 4000 --mdx_overlap 0.75 --output_format mp3 --mdx_batch_size 300 --output_dir output`
 | 
	
		
			
				|  |  | +            kind_of[1] = `./output/${uuid}_(Bass)_kuielab_a_bass.mp3`
 | 
	
		
			
				|  |  | +            kind_of[2] = `${uuid}_(Bass)_kuielab_a_bass.mp3`
 | 
	
		
			
				|  |  | +            kind_of[3] = `./output/${uuid}_(No Bass)_kuielab_a_bass.mp3`
 | 
	
		
			
				|  |  | +            break;
 | 
	
		
			
				|  |  | +        case 4:
 | 
	
		
			
				|  |  | +            kind_of[0] = `audio-separator ./${uuid} --model_filename kuielab_a_drums.onnx --mdx_enable_denoise  --mdx_segment_size 4000 --mdx_overlap 0.75 --output_format mp3 --mdx_batch_size 300 --output_dir output`
 | 
	
		
			
				|  |  | +            kind_of[1] = `./output/${uuid}_(Drums)_kuielab_a_drums.mp3`
 | 
	
		
			
				|  |  | +            kind_of[2] = `${uuid}_(Drums)_kuielab_a_drums.mp3`
 | 
	
		
			
				|  |  | +            kind_of[3] = `./output/${uuid}_(No Drums)_kuielab_a_drums.mp3`
 | 
	
		
			
				|  |  | +            break;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        const callback = function (d) {
 | 
	
		
			
				|  |  | -            console.log(d.toString());
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        const errcb = function (d) {
 | 
	
		
			
				|  |  | -            console.log(d.toString());
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        let kind_of = [];
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        switch (reqLocal.body.kind) {
 | 
	
		
			
				|  |  | -            case 0:
 | 
	
		
			
				|  |  | -                kind_of[0] = `audio-separator ./${uuid} --model_filename UVR-MDX-NET-Inst_HQ_5.onnx --mdx_enable_denoise  --mdx_segment_size 4000 --mdx_overlap 0.75  --output_format mp3 --mdx_batch_size 300 --output_dir output`
 | 
	
		
			
				|  |  | -                kind_of[1] = `./output/${uuid}_(Instrumental)_UVR-MDX-NET-Inst_HQ_5.mp3`
 | 
	
		
			
				|  |  | -                kind_of[2] = `${uuid}_(Instrumental)_UVR-MDX-NET-Inst_HQ_5.mp3`
 | 
	
		
			
				|  |  | -                kind_of[3] = `./output/${uuid}_(Vocals)_UVR-MDX-NET-Inst_HQ_5.mp3`
 | 
	
		
			
				|  |  | -                break;
 | 
	
		
			
				|  |  | -            case 1:
 | 
	
		
			
				|  |  | -                kind_of[0] = `audio-separator ./${uuid} --model_filename UVR_MDXNET_KARA.onnx --mdx_enable_denoise  --mdx_segment_size 4000 --mdx_overlap 0.75 --output_format mp3 --mdx_batch_size 300 --output_dir output`
 | 
	
		
			
				|  |  | -                kind_of[1] = `./output/${uuid}_(Instrumental)_UVR_MDXNET_KARA.mp3`
 | 
	
		
			
				|  |  | -                kind_of[2] = `${uuid}_(Instrumental)_UVR_MDXNET_KARA.mp3`
 | 
	
		
			
				|  |  | -                kind_of[3] = `./output/${uuid}_(Vocals)_UVR_MDXNET_KARA.mp3`
 | 
	
		
			
				|  |  | -                break;
 | 
	
		
			
				|  |  | -            case 3:
 | 
	
		
			
				|  |  | -                kind_of[0] = `audio-separator ./${uuid} --model_filename kuielab_a_bass.onnx --mdx_enable_denoise  --mdx_segment_size 4000 --mdx_overlap 0.75 --output_format mp3 --mdx_batch_size 300 --output_dir output`
 | 
	
		
			
				|  |  | -                kind_of[1] = `./output/${uuid}_(Bass)_kuielab_a_bass.mp3`
 | 
	
		
			
				|  |  | -                kind_of[2] = `${uuid}_(Bass)_kuielab_a_bass.mp3`
 | 
	
		
			
				|  |  | -                kind_of[3] = `./output/${uuid}_(No Bass)_kuielab_a_bass.mp3`
 | 
	
		
			
				|  |  | -                break;
 | 
	
		
			
				|  |  | -            case 4:
 | 
	
		
			
				|  |  | -                kind_of[0] = `audio-separator ./${uuid} --model_filename kuielab_a_drums.onnx --mdx_enable_denoise  --mdx_segment_size 4000 --mdx_overlap 0.75 --output_format mp3 --mdx_batch_size 300 --output_dir output`
 | 
	
		
			
				|  |  | -                kind_of[1] = `./output/${uuid}_(Drums)_kuielab_a_drums.mp3`
 | 
	
		
			
				|  |  | -                kind_of[2] = `${uuid}_(Drums)_kuielab_a_drums.mp3`
 | 
	
		
			
				|  |  | -                kind_of[3] = `./output/${uuid}_(No Drums)_kuielab_a_drums.mp3`
 | 
	
		
			
				|  |  | -                break;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    nrc.run([kind_of[0]], {
 | 
	
		
			
				|  |  | +        onData: callback, onError: errcb
 | 
	
		
			
				|  |  | +    }).then(() => {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        nrc.run([kind_of[0]], {
 | 
	
		
			
				|  |  | -            onData: callback, onError: errcb
 | 
	
		
			
				|  |  | -        }).then(() => {
 | 
	
		
			
				|  |  | +        db.execute(("INSERT INTO instrunet_entry (uuid, song_name, album_name, link_to, databinary, artist,kind, albumcover) VALUES (?,?,?,?,?,?,?,?)"), [uuid, reqLocal.body.name, reqLocal.body.albumName, reqLocal.body.link, fs.readFileSync(kind_of[1]), reqLocal.body.artist, reqLocal.body.kind, albumCover])
 | 
	
		
			
				|  |  | +        db.unprepare(() => {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            db.execute(("INSERT INTO instrunet_entry (uuid, song_name, album_name, link_to, databinary, artist,kind, albumcover) VALUES (?,?,?,?,?,?,?,?)"), [uuid, reqLocal.body.name, reqLocal.body.albumName, reqLocal.body.link, fs.readFileSync(kind_of[1]), reqLocal.body.artist, reqLocal.body.kind, albumCover])
 | 
	
		
			
				|  |  | -            db.unprepare(() => {
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        fs.rm(kind_of[1], (err) => {
 | 
	
		
			
				|  |  | +            if (err) {
 | 
	
		
			
				|  |  | +                console.log(err);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            })
 | 
	
		
			
				|  |  | -            fs.rm(kind_of[1], (err) => {
 | 
	
		
			
				|  |  | -                if (err) {
 | 
	
		
			
				|  |  | -                    console.log(err);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        fs.rm(kind_of[3], (err) => {
 | 
	
		
			
				|  |  | +            if (err) {
 | 
	
		
			
				|  |  | +                console.log(err);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            })
 | 
	
		
			
				|  |  | -            fs.rm(kind_of[3], (err) => {
 | 
	
		
			
				|  |  | -                if (err) {
 | 
	
		
			
				|  |  | -                    console.log(err);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        fs.rm(uuid, (err) => {
 | 
	
		
			
				|  |  | +            if (err) {
 | 
	
		
			
				|  |  | +                console.log(err);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            })
 | 
	
		
			
				|  |  | -            fs.rm(uuid, (err) => {
 | 
	
		
			
				|  |  | -                if (err) {
 | 
	
		
			
				|  |  | -                    console.log(err);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        if (reqLocal.body.email !== undefined) {
 | 
	
		
			
				|  |  | +            console.log(reqLocal.body.email)
 | 
	
		
			
				|  |  | +            transporter.sendMail({
 | 
	
		
			
				|  |  | +                from: '"xiey0" <xiey0@qq.com>',
 | 
	
		
			
				|  |  | +                to: reqLocal.body.email,
 | 
	
		
			
				|  |  | +                subject: "你的音频已处理完成。",
 | 
	
		
			
				|  |  | +                text: "你的音频已处理完成。",
 | 
	
		
			
				|  |  | +                html: fs.readFileSync("./Template.html", "utf8").toString().replace("{song_name}", reqLocal.body.name).replace("{href_link}", "https://andyxie.cn:4000/player?play=" + uuid)
 | 
	
		
			
				|  |  | +            }).then((result) => {
 | 
	
		
			
				|  |  | +                console.log("Message sent: %s", result.messageId)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              })
 | 
	
		
			
				|  |  | -            if (reqLocal.body.email !== undefined) {
 | 
	
		
			
				|  |  | -                console.log(reqLocal.body.email)
 | 
	
		
			
				|  |  | -                transporter.sendMail({
 | 
	
		
			
				|  |  | -                    from: '"xiey0" <xiey0@qq.com>',
 | 
	
		
			
				|  |  | -                    to: reqLocal.body.email,
 | 
	
		
			
				|  |  | -                    subject: "你的音频已处理完成。",
 | 
	
		
			
				|  |  | -                    text: "你的音频已处理完成。",
 | 
	
		
			
				|  |  | -                    html: fs.readFileSync("./Template.html", "utf8").toString().replace("{song_name}", reqLocal.body.name).replace("{href_link}", "https://andyxie.cn:4000/player?play=" + uuid)
 | 
	
		
			
				|  |  | -                }).then((result) => {
 | 
	
		
			
				|  |  | -                    console.log("Message sent: %s", result.messageId)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                })
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            currentTask.shift();
 | 
	
		
			
				|  |  | -            queue.next()
 | 
	
		
			
				|  |  | -        })
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        currentTask.shift();
 | 
	
		
			
				|  |  | +        queue.next()
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -168,22 +168,39 @@ function Submit() {
 | 
	
		
			
				|  |  |  app.post('/submit', SubmitWrapper)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  function SubmitWrapper(req, res) {
 | 
	
		
			
				|  |  | -    req_o = req;
 | 
	
		
			
				|  |  | -    res_o = res;
 | 
	
		
			
				|  |  | -    if (req.body.file !== undefined) {
 | 
	
		
			
				|  |  | -        queue.add(Submit)
 | 
	
		
			
				|  |  | -        currentTask.push({
 | 
	
		
			
				|  |  | -            name: req.body.name,
 | 
	
		
			
				|  |  | -            kind: req.body.kind,
 | 
	
		
			
				|  |  | -        })
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    console.log(queue.contents)
 | 
	
		
			
				|  |  | -    console.log(currentTask)
 | 
	
		
			
				|  |  | -    if (currentTask.length === 1) {
 | 
	
		
			
				|  |  | -        queue.next()
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    res.header("Access-Control-Allow-Origin", "*");
 | 
	
		
			
				|  |  | -    res.end("api_success")
 | 
	
		
			
				|  |  | +    db.execute(`SELECT uuid, song_name, album_name, link_to, artist, kind
 | 
	
		
			
				|  |  | +                from instrunet_entry
 | 
	
		
			
				|  |  | +                where song_name = "${req.body.name}"
 | 
	
		
			
				|  |  | +                  and artist = "${req.body.artist}"
 | 
	
		
			
				|  |  | +                  and kind = ${req.body.kind} `, (err, result) => {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (result.length === 0) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            req_o = req;
 | 
	
		
			
				|  |  | +            res_o = res;
 | 
	
		
			
				|  |  | +            if (req.body.file !== undefined) {
 | 
	
		
			
				|  |  | +                queue.add(Submit)
 | 
	
		
			
				|  |  | +                currentTask.push({
 | 
	
		
			
				|  |  | +                    name: req.body.name,
 | 
	
		
			
				|  |  | +                    albumName: req.body.albumName,
 | 
	
		
			
				|  |  | +                    kind: req.body.kind,
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            console.log(queue.contents)
 | 
	
		
			
				|  |  | +            console.log(currentTask)
 | 
	
		
			
				|  |  | +            if (currentTask.length === 1) {
 | 
	
		
			
				|  |  | +                queue.next()
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            res.header("Access-Control-Allow-Origin", "*");
 | 
	
		
			
				|  |  | +            res.end("api_success")
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            res.header("Access-Control-Allow-Origin", "*");
 | 
	
		
			
				|  |  | +            res.statusCode=500
 | 
	
		
			
				|  |  | +            res.end("傻逼,重复了。请在盲目上传之前看看库里有没有好么傻逼?")
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -194,7 +211,7 @@ app.post('/lyric', async (req, res) => {
 | 
	
		
			
				|  |  |      let id = (await (await fetch(ncmAPIUrl + `/cloudsearch?keywords=${name}%20${artist}`)).json()).result.songs[0].id
 | 
	
		
			
				|  |  |      let lyric = await (await fetch(ncmAPIUrl + `/lyric?id=${id}`)).json()
 | 
	
		
			
				|  |  |      let ifTrans = false;
 | 
	
		
			
				|  |  | -    if(lyric.tlyric.lyric !== ''){
 | 
	
		
			
				|  |  | +    if (lyric.tlyric.lyric !== '') {
 | 
	
		
			
				|  |  |          ifTrans = true;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      let response = {
 | 
	
	
		
			
				|  | @@ -212,7 +229,6 @@ app.options('/lyric', async (req, res) => {
 | 
	
		
			
				|  |  |  })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  app.options('/submit', function (req, res) {
 | 
	
		
			
				|  |  |      res.header("Access-Control-Allow-Origin", "*");
 | 
	
		
			
				|  |  |      res.header("Access-Control-Allow-Headers", "Content-Type");
 |