Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix midi generator cli #11

Merged
merged 7 commits into from
Nov 1, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
new mp3 upload functions passed
  • Loading branch information
SleepyLGod committed Nov 1, 2022
commit 4cecce75b089a5ef02af3aba29ace56477a8f1a8
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.pianotranscriptioncli.common.api.CommonResult;
import com.pianotranscriptioncli.dto.Mp3ImportDTO;
import com.pianotranscriptioncli.dto.Mp3ImportWithFileDTO;
import com.pianotranscriptioncli.service.TranscriptionService;
import com.pianotranscriptioncli.service.impl.TranscriptionServiceImpl;
import com.pianotranscriptioncli.vo.Mp3ImportVO;
Expand Down Expand Up @@ -42,32 +43,21 @@ public Mp3ImportVO Mp3ToMidi(@RequestBody Mp3ImportDTO mp3ImportDTO) throws Exce


@ResponseBody
@RequestMapping(value = "/mp3ToMidiWithFile", produces = {"text/html;charset=UTF-8;"})
public void uploadLog(@RequestParam("Mp3FileName") MultipartFile file, HttpServletRequest request) {
if (!file.isEmpty()) {
// 获取文件名
String fileName = file.getOriginalFilename();
// 获取文件的后缀名
assert fileName != null;
String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 文件上传后的路径
String filePath = "";
File dest = new File(filePath + fileName);
// 检测是否存在目录
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
file.transferTo(dest);
System.out.println("日志文件上传成功!");
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
System.out.println("日志文件上传失败!" + e);
@PostMapping(value = "/mp3ToMidiWithFile", consumes = {"multipart/form-data"})
public Mp3ImportVO Mp3ToMidiWithFile(@RequestParam("file")MultipartFile file,
@RequestParam("outPath")String outPath,
@RequestParam("songName")String songName) throws Exception {
Mp3ImportWithFileDTO mp3ImportWithFileDTO = new Mp3ImportWithFileDTO(file, outPath, songName);
try {
CommonResult commonResult = transcriptionService.Mp3TOMidiUploadWithFile(mp3ImportWithFileDTO);
if (commonResult.getCode() == 1) {
return new Mp3ImportVO(true, commonResult.getData().toString(), null);
} else {
return new Mp3ImportVO(false, null, commonResult.getMessage());
}
} else {
System.out.println("日志文件上传失败!");
} catch (NullPointerException e) {
return new Mp3ImportVO(false, null, "请检查是否传入了正确的参数");
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import lombok.Data;
import lombok.NonNull;
import org.springframework.stereotype.Component;

@Data
public class Mp3ImportDTO {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.pianotranscriptioncli.dto;

import lombok.Data;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import org.springframework.web.multipart.MultipartFile;

@Data
public class Mp3ImportWithFileDTO {
@NonNull
private MultipartFile file;
@NonNull
private String outPath;
@NonNull
private String songName;
@NonNull
private String inputPath = "D:\\gitrepositories\\omg-score\\OmgPianoTranscription\\pianotranscriptioncli\\src\\main\\resources\\";

public Mp3ImportWithFileDTO(MultipartFile file, String outPath, String songName) {
this.file = file;
this.outPath = outPath;
this.songName = songName;
}

}

Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@

import com.pianotranscriptioncli.common.api.CommonResult;
import com.pianotranscriptioncli.dto.Mp3ImportDTO;
import com.pianotranscriptioncli.dto.Mp3ImportWithFileDTO;

public interface TranscriptionService {
CommonResult Mp3TOMidiUpload(Mp3ImportDTO mp3ImportDTO) throws Exception;

CommonResult Mp3TOMidiUploadWithFile(Mp3ImportWithFileDTO mp3ImportWithFileDTO) throws Exception;

String WavToMidiUpload();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,14 @@

import com.pianotranscriptioncli.common.api.CommonResult;
import com.pianotranscriptioncli.dto.Mp3ImportDTO;
import com.pianotranscriptioncli.dto.Mp3ImportWithFileDTO;
import com.pianotranscriptioncli.service.TranscriptionService;
import com.pianotranscriptioncli.utils.Utils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Service
public class TranscriptionServiceImpl implements TranscriptionService {
Expand All @@ -27,9 +32,49 @@ public CommonResult Mp3TOMidiUpload(Mp3ImportDTO mp3ImportDTO) throws Exception
}
}

@Override
public CommonResult Mp3TOMidiUploadWithFile(Mp3ImportWithFileDTO mp3ImportWithFileDTO) throws Exception {
MultipartFile file = mp3ImportWithFileDTO.getFile();
String inputFilePath;
if (!file.isEmpty()) {
/*
String fileName = file.getOriginalFilename(); // 获取文件名
assert fileName != null;
String suffixName = fileName.substring(fileName.lastIndexOf(".")); // 获取文件的后缀名
*/
inputFilePath = mp3ImportWithFileDTO.getInputPath() + "input\\" + mp3ImportWithFileDTO.getSongName() + ".mp3";
File dest = new File(inputFilePath);
if (!dest.getParentFile().exists()) { // 检测是否存在目录
dest.getParentFile().mkdirs();
}
try {
file.transferTo(dest);
System.out.println("mp3文件存入成功!");
} catch (IllegalStateException e) {
e.printStackTrace();
return CommonResult.failed("mp3文件存入失败!" + e.getMessage());
} catch (IOException e) {
e.printStackTrace();
System.out.println("mp3文件上传失败!" + e);
return CommonResult.failed("mp3文件存入失败!" + e.getMessage());
}
} else {
System.out.println("无mp3文件!");
return CommonResult.failed("失败!无mp3文件!");
}

String outPath = mp3ImportWithFileDTO.getOutPath() + mp3ImportWithFileDTO.getSongName() + ".mid";
String output = Utils.ConvertorRedirect(mp3ImportWithFileDTO.getInputPath(), mp3ImportWithFileDTO.getSongName(), outPath);
if (output != null) {
return CommonResult.success(output, "mp3转换成功");
} else {
return CommonResult.failed("mp3转换失败");
}
}

@Override
public String WavToMidiUpload() {
return null;
return "null";
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,30 @@ public static String Convertor(String resourcePath, String songName) throws Exce
return null;
}

public static String ConvertorRedirect(String resourcePath, String songName, String outputPath) throws Exception {

preProcessFile(resourcePath + "input\\" + songName + ".mp3");
byte[] a = Files.readAllBytes(new File("test.pcm").toPath());
var b = Utils.normalizeShort(Utils.toShortLE(a));
try {
var ans = new File("test.pcm").delete();
} catch (Exception e) {
e.printStackTrace();
}

var transcriptor = new Transcriptor(resourcePath + "transcription.onnx");
var out = transcriptor.transcript(b);
try(var file = new FileOutputStream(outputPath)) {
file.write(out);
System.out.println("OK");
// System.exit(0);
return outputPath;
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
return null;
}

private static void preProcessFile(String fileName) throws Exception {
String[] cmd = {"ffmpeg", "-i", fileName, "-ac", "1", "-ar", "16000", "-f", "s16le", "test.pcm", "-y"};
var process = Runtime.getRuntime().exec(cmd); // 调用命令行
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,25 @@
POST {{host}}/fuck
###
POST {{host}}/mp3ToMidiWithFile
Content-Type: multipart/form-data; boundary=WebAppBoundary

--WebAppBoundary
Content-Disposition: form-data; name="file"; filename="雨的印记.mp3"

< ./input/雨的印记.mp3
--WebAppBoundary--
Content-Disposition: form-data; name="outPath"

D:\\gitrepositories\\omg-score\\OmgPianoTranscription\\pianotranscriptioncli\\src\\main\\resources\\output\\
--WebAppBoundary--
Content-Disposition: form-data; name="songName"

雨的印记
--WebAppBoundary--

###
POST {{host}}/fuck

###
POST {{host}}/mp3ToMidi
Content-Type: application/json

Expand All @@ -11,3 +29,5 @@ Content-Type: application/json
"songName": "雨的印记"
}

###